Index: Library/UefiShellCommandLib/ConsistMapping.c
===================================================================
--- Library/UefiShellCommandLib/ConsistMapping.c	(revision 16168)
+++ Library/UefiShellCommandLib/ConsistMapping.c	(working copy)
@@ -651,13 +651,6 @@
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem
   )
 {
-///@todo make this a PCD
-//
-// As Csd of ISCSI node is quite long, we comment
-// the code below to keep the consistent mapping
-// short. Uncomment if you really need it.
-//
-/*
   ISCSI_DEVICE_PATH  *IScsi;
   UINT8              *IScsiTargetName;
   CHAR16             *TargetName;
@@ -667,24 +660,25 @@
   ASSERT(DevicePathNode != NULL);
   ASSERT(MappingItem != NULL);
 
-  IScsi = (ISCSI_DEVICE_PATH  *) DevicePathNode;
-  AppendCSDNum (MappingItem, IScsi->NetworkProtocol);
-  AppendCSDNum (MappingItem, IScsi->LoginOption);
-  AppendCSDNum (MappingItem, IScsi->Lun);
-  AppendCSDNum (MappingItem, IScsi->TargetPortalGroupTag);
-  TargetNameLength = DevicePathNodeLength (DevicePathNode) - sizeof (ISCSI_DEVICE_PATH);
-  if (TargetNameLength > 0) {
-    TargetName = AllocateZeroPool ((TargetNameLength + 1) * sizeof (CHAR16));
-    if (TargetName != NULL) {
-      IScsiTargetName = (UINT8 *) (IScsi + 1);
-      for (Index = 0; Index < TargetNameLength; Index++) {
-        TargetName[Index] = (CHAR16) IScsiTargetName[Index];
+  if (PcdGetBool(PcdShellDecodeIScsiMapNames)) {
+    IScsi = (ISCSI_DEVICE_PATH  *) DevicePathNode;
+    AppendCSDNum (MappingItem, IScsi->NetworkProtocol);
+    AppendCSDNum (MappingItem, IScsi->LoginOption);
+    AppendCSDNum (MappingItem, IScsi->Lun);
+    AppendCSDNum (MappingItem, IScsi->TargetPortalGroupTag);
+    TargetNameLength = DevicePathNodeLength (DevicePathNode) - sizeof (ISCSI_DEVICE_PATH);
+    if (TargetNameLength > 0) {
+      TargetName = AllocateZeroPool ((TargetNameLength + 1) * sizeof (CHAR16));
+      if (TargetName != NULL) {
+        IScsiTargetName = (UINT8 *) (IScsi + 1);
+        for (Index = 0; Index < TargetNameLength; Index++) {
+          TargetName[Index] = (CHAR16) IScsiTargetName[Index];
+        }
+        AppendCSDStr (MappingItem, TargetName);
+        FreePool (TargetName);
       }
-      AppendCSDStr (MappingItem, TargetName);
-      FreePool (TargetName);
     }
   }
- */
 }
 
 /**
Index: Library/UefiShellCommandLib/UefiShellCommandLib.inf
===================================================================
--- Library/UefiShellCommandLib/UefiShellCommandLib.inf	(revision 16168)
+++ Library/UefiShellCommandLib/UefiShellCommandLib.inf	(working copy)
@@ -60,6 +60,7 @@
 [Pcd.common]
   gEfiShellPkgTokenSpaceGuid.PcdShellSupportLevel         ## ALWAYS_CONSUMED
   gEfiShellPkgTokenSpaceGuid.PcdShellMapNameLength        ## ALWAYS_CONSUMED
+  gEfiShellPkgTokenSpaceGuid.PcdShellDecodeIScsiMapNames  ## SOMETIMES_CONSUMED
 
 [Depex]
   gEfiUnicodeCollation2ProtocolGuid
Index: ShellPkg.dec
===================================================================
--- ShellPkg.dec	(revision 16168)
+++ ShellPkg.dec	(working copy)
@@ -128,3 +128,7 @@
 
   ## Unicode string of the shell supplier
   gEfiShellPkgTokenSpaceGuid.PcdShellSupplier|L"EDK II"|VOID*|0x00000010
+
+  ## Do iSCSI decode for map names.
+  # This is disabled by default due to the length of generated strings
+  gEfiShellPkgTokenSpaceGuid.PcdShellDecodeIScsiMapNames|FALSE|BOOLEAN|0x00000012
