Re: [Patch V4] MdeModulePkg/XhciDxe: Error handle for USB slot initialization failure


Wu, Hao A
 

-----Original Message-----
From: Luo, Heng <heng.luo@intel.com>
Sent: Friday, October 23, 2020 9:26 AM
To: devel@edk2.groups.io
Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
Subject: [Patch V4] MdeModulePkg/XhciDxe: Error handle for USB slot
initialization failure

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3007

Currently UsbDevContext is not cleaned up if USB slot initialization is failed, the
wrong context data will affect next USB devices and the USB devices can not be
enumerated.
Need to disable slot if USB slot initialization is failed.

Below test cases are passed on UpXtreme:
a. USB 3.0 thumb drives can be recognized in UEFI shell b. SUT can boot to
Puppylinux from USB3.0 mass storage, the storage can be recognized in linux c.
Plug in a USB keyboard (hot plug) and enumeration is OK in UEFI shell and linux
d. Plug in a USB mouse(hot plug) and enumeration is OK in linux.

Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Best Regards,
Hao Wu



Cc: Ray Ni <ray.ni@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Heng Luo <heng.luo@intel.com>
---
MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c
b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c
index 9cb115363c..00e9cc63d6 100644
--- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c
+++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c
@@ -2,7 +2,7 @@
XHCI transfer scheduling routines. -Copyright (c) 2011 - 2018, Intel
Corporation. All rights reserved.<BR>+Copyright (c) 2011 - 2020, Intel
Corporation. All rights reserved.<BR> Copyright (c) Microsoft Corporation.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -2279,6 +2279,9 @@
XhcInitializeDeviceSlot (
DeviceAddress = (UINT8) ((DEVICE_CONTEXT *) OutputContext)-
Slot.DeviceAddress; DEBUG ((EFI_D_INFO, " Address %d assigned
successfully\n", DeviceAddress)); Xhc->UsbDevContext[SlotId].XhciDevAddr =
DeviceAddress;+ } else {+ DEBUG ((DEBUG_INFO, " Address %d assigned
unsuccessfully\n"));+ XhcDisableSlotCmd (Xhc, SlotId); } return Status;@@ -
2489,7 +2492,11 @@ XhcInitializeDeviceSlot64 (
DeviceAddress = (UINT8) ((DEVICE_CONTEXT_64 *) OutputContext)-
Slot.DeviceAddress; DEBUG ((EFI_D_INFO, " Address %d assigned
successfully\n", DeviceAddress)); Xhc->UsbDevContext[SlotId].XhciDevAddr =
DeviceAddress;+ } else {+ DEBUG ((DEBUG_INFO, " Address %d assigned
unsuccessfully\n"));+ XhcDisableSlotCmd64 (Xhc, SlotId); }+ return Status; } --
2.24.0.windows.2

Join devel@edk2.groups.io to automatically receive all group messages.