Hi Britton and the community. I've faced with some assert in XHCI too. In my case this is: ASSERT [XhciDxe] /Users/test/edk2_workspace/edk2/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c(1989): TrsRing != ((void *) 0)
Your patch helps to avoid this assert, but as was noticed by Hao Wu,it introduces resources leak, because UsbBusDxe doesn't deallocate configs for devices. I added checks to UsbBuildDescTable like ASSERT (UsbDev->DevDesc == NULL); ASSERT (UsbDev->DevDesc->Configs == NULL); and those fired. I believe there is a problem with XhciDxe, not UsbBusDxe. Meanwhile I have another workaround for initial problem described above and it works. It works fine for virtual machines, but I guess it costs a time for physical environment. My workaround is: --- a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassImpl.c +++ b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassImpl.c @@ -173,7 +173,7 @@ UsbMassReadBlocks ( if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "UsbMassReadBlocks: UsbBootReadBlocks (%r) -> Reset\n", Status)); - UsbMassReset (This, TRUE); + UsbMassReset (This, FALSE); } ON_EXIT: --- Just for the context: I was told that some physical device like Zalman ZM-VE500 doesn't work with edk2. I do not have such device in hands, but I guess it is multi-lun USB device. I tried to reproduce such case in QEMU. Because of USB multi-lun devices are not emulated properly in QEMU, such config causes assert in XhciDxe. On Tue, Jun 6, 2023 at 6:14 AM Wu, Hao A <hao.a...@intel.com> wrote: > > Sorry for the late response, inline comments below: > > > > -----Original Message----- > > From: brit.ches...@amd.com <brit.ches...@amd.com> > > Sent: Wednesday, May 17, 2023 6:16 AM > > To: devel@edk2.groups.io > > Cc: Wang, Jian J <jian.j.w...@intel.com>; Gao, Liming > > <gaolim...@byosoft.com.cn>; Wu, Hao A <hao.a...@intel.com>; Ni, Ray > > <ray...@intel.com> > > Subject: [PATCH v1 1/1] MdeModulePkg: UsbBusDxe: Build Descriptor table > > after resetting port > > > > From: Britton Chesley <brit.ches...@amd.com> > > > > Fixed a bug which led to an ASSERT due to the USB device context being > > maintained after a port reset, but the underlying XHCI context was > > uninitialized. Added build descriptor table call in UsbIoPortReset > > > Could you help to elaborate on what data in XHCI is not initialized that > leads to the assert? Thanks. > > > > > > Cc: Jian J Wang <jian.j.w...@intel.com> > > Cc: Liming Gao <gaolim...@byosoft.com.cn> > > Cc: Hao A Wu <hao.a...@intel.com> > > Cc: Ray Ni <ray...@intel.com> > > Signed-off-by: Britton Chesley <brit.ches...@amd.com> > > --- > > MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c > > b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c > > index c25f3cc2f279..55e0e1f16cdb 100644 > > --- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c > > +++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c > > @@ -882,6 +882,12 @@ UsbIoPortReset ( > > // is in CONFIGURED state. > > // > > if (Dev->ActiveConfig != NULL) { > > + Status = UsbBuildDescTable (Dev); > > > The UsbBuildDescTable function will allocate new buffer resources for and > under Dev->DevDesc (device, configuration and interface descriptors). > Could you help to double check if the old buffers are properly freed for the > proposed change? > > Best Regards, > Hao Wu > > > > + > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "UsbIoPortReset: failed to build descriptor > > table - %r\n", Status)); > > + } > > + > > Status = UsbSetConfig (Dev, Dev->ActiveConfig- > > >Desc.ConfigurationValue); > > > > if (EFI_ERROR (Status)) { > > -- > > 2.36.1 > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#106489): https://edk2.groups.io/g/devel/message/106489 Mute This Topic: https://groups.io/mt/98948709/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-