]> git.proxmox.com Git - mirror_edk2.git/commitdiff
[Description]:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 24 Jun 2008 08:13:58 +0000 (08:13 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 24 Jun 2008 08:13:58 +0000 (08:13 +0000)
 The Usb1.1 flash disk will hang for Bootable Image Support Test -> Bloack IO protocol Test -> Reset_Func.
[Solution]:
 Add a stall 20ms after set address when port reset for Usb hub.
[Impaction]:
 UsbBusDxe.
[Reference Info]:
 EDK tracker 1120 - USB flash disk hang or fail in the new SCT blockIo test.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5365 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c

index 332871a6851d013a9857fa206e5ad629e63ea00d..5c4d4025eb40dd5eacd729215d2474184b660837 100644 (file)
@@ -840,7 +840,8 @@ UsbIoPortReset (
   Address       = Dev->Address;\r
   Dev->Address  = 0;\r
   Status        = UsbSetAddress (Dev, Address);\r
   Address       = Dev->Address;\r
   Dev->Address  = 0;\r
   Status        = UsbSetAddress (Dev, Address);\r
-\r
+  Dev->Address  = Address;\r
+  \r
   if (EFI_ERROR (Status)) {\r
     DEBUG (( EFI_D_ERROR, "UsbIoPortReset: failed to set address for device %d - %r\n",\r
                 Address, Status));\r
   if (EFI_ERROR (Status)) {\r
     DEBUG (( EFI_D_ERROR, "UsbIoPortReset: failed to set address for device %d - %r\n",\r
                 Address, Status));\r
@@ -848,8 +849,10 @@ UsbIoPortReset (
     goto ON_EXIT;\r
   }\r
 \r
     goto ON_EXIT;\r
   }\r
 \r
-  Dev->Address  = Address;\r
+  gBS->Stall (USB_SET_DEVICE_ADDRESS_STALL);\r
 \r
 \r
+  DEBUG (( EFI_D_INFO, "UsbIoPortReset: device is now ADDRESSED at %d\n", Address));\r
+  \r
   //\r
   // Reset the current active configure, after this device\r
   // is in CONFIGURED state.\r
   //\r
   // Reset the current active configure, after this device\r
   // is in CONFIGURED state.\r