]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/EhciPei/EhcPeim.c
MdeModulePkg/Ehci: don't clear port status bits during init
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciPei / EhcPeim.c
index 09769eaf243aa23d3fa7f616328f7ca7985ef268..31647ff0525cb546a6dc9a880edc031e70254e54 100644 (file)
@@ -2,7 +2,7 @@
 PEIM to produce gPeiUsb2HostControllerPpiGuid based on gPeiUsbControllerPpiGuid\r
 which is used to enable recovery function from USB Drivers.\r
 \r
-Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>\r
   \r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
@@ -411,12 +411,20 @@ EhcPowerOnAllPorts (
   IN PEI_USB2_HC_DEV          *Ehc\r
   )\r
 {\r
-  UINT8 PortNumber;\r
-  UINT8 Index;\r
-\r
+  UINT8     PortNumber;\r
+  UINT8     Index;\r
+  UINT32    RegVal;\r
+  \r
   PortNumber = (UINT8)(Ehc->HcStructParams & HCSP_NPORTS);\r
   for (Index = 0; Index < PortNumber; Index++) {\r
-    EhcSetOpRegBit (Ehc, EHC_PORT_STAT_OFFSET + 4 * Index, PORTSC_POWER);\r
+    //\r
+    // Do not clear port status bits on initialization.  Otherwise devices will\r
+    // not enumerate properly at startup.\r
+    //\r
+    RegVal  = EhcReadOpReg(Ehc, EHC_PORT_STAT_OFFSET + 4 * Index);\r
+    RegVal &= ~PORTSC_CHANGE_MASK;\r
+    RegVal |= PORTSC_POWER;\r
+    EhcWriteOpReg (Ehc, EHC_PORT_STAT_OFFSET + 4 * Index, RegVal);\r
   }\r
 }\r
 \r