public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] MdeModulePkg/EhciDxe: fix host controller reset condition in BindingStart
@ 2018-08-31 14:03 Laszlo Ersek
  2018-09-03  8:35 ` Zeng, Star
  0 siblings, 1 reply; 10+ messages in thread
From: Laszlo Ersek @ 2018-08-31 14:03 UTC (permalink / raw)
  To: edk2-devel-01; +Cc: Gerd Hoffmann, Jian J Wang, Ruiyu Ni, Star Zeng, Steven Shi

Commit 09943f5ecc0f ("MdeModulePkg: Skip to manage usb debug port in EDKII
EHCI driver if it's used by usb debug port driver", 2012-04-28) made the
host controller reset in EhcDriverBindingStart() conditional. The intent
was to avoid the reset when
- one of the USB ports on the host controller was a Debug Port, AND
- the Debug Port was in use.

This translates to the following positive condition: reset the controller
only if:
- no USB port on the host controller is a Debug Port, OR
- the Debug Port is not in use.

Commit 09943f5ecc0f failed to implement the first subcondition, and thus
the result is too strict now (for resetting the host controller). Relax it
to the correct condition.

This issue was found by Steven Shi on QEMU. QEMU's EHCI device model does
not have a Debug Port. In repeated disconnect / connect cycles, the
controller is never reset in EhcDriverBindingStart(), therefore the
devices on the controller are never re-enumerated after a disconnect.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Steven Shi <steven.shi@intel.com>
Reported-by: Steven Shi <steven.shi@intel.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1129
Fixes: 09943f5ecc0fbc0c98c511c82703a0ba3b2b5819
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---

Notes:
    Repo:   https://github.com/lersek/edk2.git
    Branch: ehci_start_reset_1129

 MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c b/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c
index 30ad2b2ffeef..89ed034b9093 100644
--- a/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c
+++ b/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c
@@ -1916,11 +1916,13 @@ EhcDriverBindingStart (
   //
   if (FeaturePcdGet (PcdTurnOffUsbLegacySupport)) {
     EhcClearLegacySupport (Ehc);
   }
 
-  if (Ehc->DebugPortNum != 0) {
+  if (Ehc->DebugPortNum == 0) {
+    EhcResetHC (Ehc, EHC_RESET_TIMEOUT);
+  } else {
     State = EhcReadDbgRegister(Ehc, 0);
     if ((State & (USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_OWNER)) != (USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_OWNER)) {
       EhcResetHC (Ehc, EHC_RESET_TIMEOUT);
     }
   }
-- 
2.14.1.3.gb7cf6e02401b



^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2018-09-05 12:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-31 14:03 [PATCH] MdeModulePkg/EhciDxe: fix host controller reset condition in BindingStart Laszlo Ersek
2018-09-03  8:35 ` Zeng, Star
2018-09-03 11:45   ` Laszlo Ersek
2018-09-04  1:27     ` Zeng, Star
2018-09-04 10:38       ` Laszlo Ersek
2018-09-05  9:55         ` Zeng, Star
2018-09-05 10:13           ` Laszlo Ersek
2018-09-05 10:55             ` Shi, Steven
2018-09-05 12:03               ` Laszlo Ersek
2018-09-05 12:18           ` Laszlo Ersek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox