Hi All, Could you please help review this patch. Very appreciated!
Thanks, Xianglei -----Original Message----- From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Xianglei Cai Sent: Monday, September 18, 2023 2:57 PM To: devel@edk2.groups.io Cc: Cai, Xianglei <xianglei....@intel.com>; Wu, Hao A <hao.a...@intel.com>; Ni, Ray <ray...@intel.com>; Wang, Jian J <jian.j.w...@intel.com>; Gao, Liming <gaolim...@byosoft.com.cn>; Shih, More <more.s...@intel.com> Subject: [edk2-devel] [PATCH 1/1] MdeModulePkg\XhciDxe: Command Abort when times out https://bugzilla.tianocore.org/show_bug.cgi?id=4552 CC: Hao A Wu <hao.a...@intel.com> CC: Ray Ni <ray...@intel.com> CC: Jian J Wang <jian.j.w...@intel.com> CC: Liming Gao <gaolim...@byosoft.com.cn> CC: More Shih <more.s...@intel.com> Signed-off-by: Xianglei Cai <xianglei....@intel.com> --- MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c index 53421e64a850..5024d5e3acb9 100644 --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c @@ -2121,6 +2121,29 @@ RingIntTransferDoorBell ( return EFI_SUCCESS; } +/** + Set Command abort + + @param Xhc The XHCI Instance. + @param SlotId The slot id to be disabled. + + @retval EFI_SUCCESS Successfully disable the device slot. + +**/ +VOID +XhcCmdRingCmdAbort ( + IN USB_XHCI_INSTANCE *Xhc, + IN UINT8 SlotId + ) +{ + // + // Some 3rd party XHCI external cards don't support single 64-bytes +width register access, + // So divide it to two 32-bytes width register access. + // + DEBUG ((DEBUG_INFO, "Command Ring Control set Command Abort, SlotId: +%d!\n", SlotId)); + XhcSetOpRegBit (Xhc, XHC_CRCR_OFFSET, XHC_CRCR_CA); } + /** Assign and initialize the device slot for a new device. @@ -2331,6 +2354,12 @@ XhcInitializeDeviceSlot ( Xhc->UsbDevContext[SlotId].XhciDevAddr = DeviceAddress; } else { DEBUG ((DEBUG_ERROR, " Slot %d address not assigned successfully. Status = %r\n", SlotId, Status)); + // + // Software need abort the command if a command times out in xHCI spec 4.6. + // + if (Status == EFI_TIMEOUT) { + XhcCmdRingCmdAbort (Xhc, SlotId); + } XhcDisableSlotCmd (Xhc, SlotId); } @@ -2547,6 +2576,12 @@ XhcInitializeDeviceSlot64 ( Xhc->UsbDevContext[SlotId].XhciDevAddr = DeviceAddress; } else { DEBUG ((DEBUG_ERROR, " Slot %d address not assigned successfully. Status = %r\n", SlotId, Status)); + // + // Software need abort the command if a command times out in xHCI spec 4.6. + // + if (Status == EFI_TIMEOUT) { + XhcCmdRingCmdAbort (Xhc, SlotId); + } XhcDisableSlotCmd64 (Xhc, SlotId); } -- 2.42.0.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#108895): https://edk2.groups.io/g/devel/message/108895 Mute This Topic: https://groups.io/mt/101435621/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-