During port reset, the device descriptors should be checked before attempting to set an endpoint configuration.
In particular this fixes a crash due to ASSERT(TrsRing != NULL) in XhcSyncTrsRing(). That crash happens during error recovery on devices attached to XHCI hosts. This is because the port disable clears and deallocats all the EP data structures. When the port is reconfigured without first requesting the EP descriptors, XhcSetConfigCmd[64]() is not being called because the NumConfigurations remains 0. We could attempt to rebuild the EP descriptions directly from the XHCI driver. OTOH, its probably good practice to assure the device description is what we expect from within the core USB subsystem during reset. Signed-off-by: Jeremy Linton <jeremy.lin...@arm.com> --- MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c index 4b4915c019..17bb691bf8 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c +++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c @@ -874,6 +874,14 @@ UsbIoPortReset ( // is in CONFIGURED state. // if (Dev->ActiveConfig != NULL) { + Status = UsbBuildDescTable (Dev); + + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "UsbIoPortReset: failed to build descriptor table for %d - %r\n", + Dev->Address, Status)); + goto ON_EXIT; + } + Status = UsbSetConfig (Dev, Dev->ActiveConfig->Desc.ConfigurationValue); if (EFI_ERROR (Status)) { -- 2.24.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58193): https://edk2.groups.io/g/devel/message/58193 Mute This Topic: https://groups.io/mt/73315690/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-