diff --git a/Include/Protocol/DwUsb.h b/Include/Protocol/DwUsb.h
index 195ff55..868d956 100644
--- a/Include/Protocol/DwUsb.h
+++ b/Include/Protocol/DwUsb.h
@@ -28,6 +28,7 @@
 
 #define USB_HOST_MODE    0
 #define USB_DEVICE_MODE  1
+#define USB_CABLE_NOT_ATTACHED  2
 
 typedef
 EFI_STATUS
diff --git a/Platforms/Hisilicon/HiKey/HiKeyDxe/HiKeyDxeInternal.h b/Platforms/Hisilicon/HiKey/HiKeyDxe/HiKeyDxeInternal.h
index 564fc9f..1922a9c 100644
--- a/Platforms/Hisilicon/HiKey/HiKeyDxe/HiKeyDxeInternal.h
+++ b/Platforms/Hisilicon/HiKey/HiKeyDxe/HiKeyDxeInternal.h
@@ -45,4 +45,8 @@
   IN UINT8           Mode
   );
 
+UINTN
+HiKeyGetUsbMode (
+  IN VOID
+  );
 #endif // __HIKEY_DXE_INTERNAL_H__
diff --git a/Platforms/Hisilicon/HiKey/HiKeyDxe/InitPeripherals.c b/Platforms/Hisilicon/HiKey/HiKeyDxe/InitPeripherals.c
index 68f2ae7..d825c0b 100644
--- a/Platforms/Hisilicon/HiKey/HiKeyDxe/InitPeripherals.c
+++ b/Platforms/Hisilicon/HiKey/HiKeyDxe/InitPeripherals.c
@@ -34,28 +34,67 @@
 // Jumper on pin5-6 of J15 determines whether boot to fastboot
 #define DETECT_J15_FASTBOOT      24    // GPIO 3_0
 
-EFI_STATUS
-HiKeyUsbPhyInit (
-  IN UINT8        Mode
+STATIC EMBEDDED_GPIO *mGpio;
+
+STATIC
+VOID
+HiKeyDetectUsbModeInit (
+  IN VOID
   )
 {
-  EMBEDDED_GPIO *Gpio;
-  EFI_STATUS    Status;
-  UINTN         Value;
-  UINT32        Data;
-  UINTN         GpioId, GpioVbus;
+  EFI_STATUS     Status;
 
   /* set pullup on both GPIO2_5 & GPIO2_6. It's required for inupt. */
   MmioWrite32 (0xf8001864, 1);
   MmioWrite32 (0xf8001868, 1);
 
-  Status = gBS->LocateProtocol (&gEmbeddedGpioProtocolGuid, NULL, (VOID **)&Gpio);
+  Status = gBS->LocateProtocol (&gEmbeddedGpioProtocolGuid, NULL, (VOID **)&mGpio);
   ASSERT_EFI_ERROR (Status);
-  Status = Gpio->Set (Gpio, USB_SEL_GPIO0_3, GPIO_MODE_OUTPUT_0);
+  Status = mGpio->Set (mGpio, USB_SEL_GPIO0_3, GPIO_MODE_OUTPUT_0);
   ASSERT_EFI_ERROR (Status);
-  Status = Gpio->Set (Gpio, USB_5V_HUB_EN, GPIO_MODE_OUTPUT_0);
+  Status = mGpio->Set (mGpio, USB_5V_HUB_EN, GPIO_MODE_OUTPUT_0);
   ASSERT_EFI_ERROR (Status);
   MicroSecondDelay (1000);
+
+  Status = mGpio->Set (mGpio, USB_ID_DET_GPIO2_5, GPIO_MODE_INPUT);
+  ASSERT_EFI_ERROR (Status);
+  Status = mGpio->Set (mGpio, USB_VBUS_DET_GPIO2_6, GPIO_MODE_INPUT);
+  ASSERT_EFI_ERROR (Status);
+}
+
+UINTN
+HiKeyGetUsbMode (
+  IN VOID
+  )
+{
+  EFI_STATUS     Status;
+  UINTN          GpioId, GpioVbus;
+  UINTN          Value;
+
+  Status = mGpio->Get (mGpio, USB_ID_DET_GPIO2_5, &Value);
+  ASSERT_EFI_ERROR (Status);
+  GpioId = Value;
+  Status = mGpio->Get (mGpio, USB_VBUS_DET_GPIO2_6, &Value);
+  ASSERT_EFI_ERROR (Status);
+  GpioVbus = Value;
+
+  if ((GpioId == 1) && (GpioVbus == 0))
+    return USB_DEVICE_MODE;
+  else if ((GpioId == 0) && (GpioVbus == 1))
+    return USB_CABLE_NOT_ATTACHED;
+  return USB_HOST_MODE;
+}
+
+EFI_STATUS
+HiKeyUsbPhyInit (
+  IN UINT8        Mode
+  )
+{
+  UINTN         Value;
+  UINT32        Data;
+
+  HiKeyDetectUsbModeInit ();
+
   //setup clock
   MmioWrite32 (PERI_CTRL_BASE + SC_PERIPH_CLKEN0, BIT4);
   do {
@@ -78,21 +117,10 @@
   MmioWrite32 (PERI_CTRL_BASE + SC_PERIPH_CTRL4, Value);
   MicroSecondDelay (1000);
 
-  Status = Gpio->Set (Gpio, USB_ID_DET_GPIO2_5, GPIO_MODE_INPUT);
-  ASSERT_EFI_ERROR (Status);
-  Status = Gpio->Get (Gpio, USB_ID_DET_GPIO2_5, &Value);
-  ASSERT_EFI_ERROR (Status);
-  GpioId = Value;
-  Status = Gpio->Set (Gpio, USB_VBUS_DET_GPIO2_6, GPIO_MODE_INPUT);
-  ASSERT_EFI_ERROR (Status);
-  Status = Gpio->Get (Gpio, USB_VBUS_DET_GPIO2_6, &Value);
-  ASSERT_EFI_ERROR (Status);
-  GpioVbus = Value;
-
   //If Mode = 1, USB in Device Mode
   //If Mode = 0, USB in Host Mode
   if (Mode == USB_DEVICE_MODE) {
-    if ((GpioId == 1) && (GpioVbus == 0)) {
+    if (HiKeyGetUsbMode () == USB_DEVICE_MODE) {
       DEBUG ((EFI_D_ERROR, "usb work as device mode.\n"));
     } else {
       return EFI_INVALID_PARAMETER;
@@ -103,10 +131,10 @@
      MmioWrite32 (PERI_CTRL_BASE + SC_PERIPH_CTRL5, Value);
      MicroSecondDelay (20000);
   } else {
-    if ((GpioId == 1) && (GpioVbus == 0)) {
-      return EFI_INVALID_PARAMETER;
-    } else {
+    if (HiKeyGetUsbMode () == USB_HOST_MODE) {
       DEBUG ((EFI_D_ERROR, "usb work as host mode.\n"));
+    } else {
+      return EFI_INVALID_PARAMETER;
     }
 
     /*CTRL5*/
diff --git a/Platforms/Hisilicon/HiKey/HiKeyDxe/InstallBootMenu.c b/Platforms/Hisilicon/HiKey/HiKeyDxe/InstallBootMenu.c
index 25eb3dc..67d65dc 100644
--- a/Platforms/Hisilicon/HiKey/HiKeyDxe/InstallBootMenu.c
+++ b/Platforms/Hisilicon/HiKey/HiKeyDxe/InstallBootMenu.c
@@ -27,6 +27,7 @@
 #include <Protocol/BlockIo.h>
 #include <Protocol/DevicePathFromText.h>
 #include <Protocol/DevicePathToText.h>
+#include <Protocol/DwUsb.h>
 #include <Protocol/EmbeddedGpio.h>
 #include <Protocol/SimpleFileSystem.h>
 
@@ -776,16 +777,19 @@
     return;
   }
 
-  if (DtbType == HIKEY_DTB_SD)
+  if (DtbType == HIKEY_DTB_SD) {
     mBootIndex = HIKEY_BOOT_ENTRY_BOOT_SD;
-  else
+  } else {
     mBootIndex = HIKEY_BOOT_ENTRY_BOOT_EMMC;
+  }
 
-  if (HiKeyIsJumperConnected () == TRUE)
-    mBootIndex = HIKEY_BOOT_ENTRY_FASTBOOT;
-  /* Set mBootIndex as HIKEY_BOOT_ENTRY_FASTBOOT if adb reboot-bootloader is specified */
-  if (HiKeyDetectRebootReason () == TRUE)
-    mBootIndex = HIKEY_BOOT_ENTRY_FASTBOOT;
+  if (HiKeyGetUsbMode () == USB_DEVICE_MODE) {
+    if (HiKeyIsJumperConnected () == TRUE)
+      mBootIndex = HIKEY_BOOT_ENTRY_FASTBOOT;
+    /* Set mBootIndex as HIKEY_BOOT_ENTRY_FASTBOOT if adb reboot-bootloader is specified */
+    if (HiKeyDetectRebootReason () == TRUE)
+      mBootIndex = HIKEY_BOOT_ENTRY_FASTBOOT;
+  }
 
   Status = HiKeyCreateBootNext ();
   if (EFI_ERROR (Status)) {
diff --git a/Platforms/Hisilicon/HiKey/Library/HiKeyLib/HiKeyMem.c b/Platforms/Hisilicon/HiKey/Library/HiKeyLib/HiKeyMem.c
index a5ce05b..2d118e0 100644
--- a/Platforms/Hisilicon/HiKey/Library/HiKeyLib/HiKeyMem.c
+++ b/Platforms/Hisilicon/HiKey/Library/HiKeyLib/HiKeyMem.c
@@ -89,6 +89,24 @@
 
   MemorySize = HiKeyInitMemorySize ();
 
+  ResourceAttributes = (
+      EFI_RESOURCE_ATTRIBUTE_PRESENT |
+      EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
+      EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
+      EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
+      EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
+      EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |
+      EFI_RESOURCE_ATTRIBUTE_TESTED
+  );
+
+  // Create initial Base Hob for system memory.
+  BuildResourceDescriptorHob (
+      EFI_RESOURCE_SYSTEM_MEMORY,
+      ResourceAttributes,
+      PcdGet64 (PcdSystemMemoryBase),
+      PcdGet64 (PcdSystemMemorySize)
+  );
+
   NextHob.Raw = GetHobList ();
   Count = sizeof (HiKeyReservedMemoryBuffer) / sizeof (struct HiKeyReservedMemory);
   while ((NextHob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, NextHob.Raw)) != NULL)
