]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c
MdeMdeModulePkg/Usb: two tunings for better device identification behind hub
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusDxe / UsbBus.c
index 742cdc193124f1745629c2b15853ec7c54cd7b39..ff6b99c87f9ad88a1a797edc0d139fa57a980d73 100644 (file)
@@ -813,6 +813,7 @@ UsbIoPortReset (
   USB_DEVICE              *Dev;\r
   EFI_TPL                 OldTpl;\r
   EFI_STATUS              Status;\r
+  UINT8                   DevAddress;\r
 \r
   OldTpl = gBS->RaiseTPL (USB_BUS_TPL);\r
 \r
@@ -834,12 +835,17 @@ UsbIoPortReset (
     goto ON_EXIT;\r
   }\r
 \r
+  HubIf->HubApi->ClearPortChange (HubIf, Dev->ParentPort);\r
+\r
   //\r
   // Reset the device to its current address. The device now has an address\r
   // of ZERO after port reset, so need to set Dev->Address to the device again for\r
   // host to communicate with it.\r
   //\r
-  Status  = UsbSetAddress (Dev, Dev->Address);\r
+  DevAddress   = Dev->Address;\r
+  Dev->Address = 0;\r
+  Status  = UsbSetAddress (Dev, DevAddress);\r
+  Dev->Address = DevAddress;\r
 \r
   gBS->Stall (USB_SET_DEVICE_ADDRESS_STALL);\r
   \r