From: Boon Khai Ng Date: Tue, 24 Feb 2026 15:18:28 +0000 (+0800) Subject: usb: xhci-dwc3: Call xhci_deregister() before asserting reset X-Git-Tag: v2026.10-rc1~18^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8f9c5595a824f08bc712e999eed9cb456b25efe;p=thirdparty%2Fu-boot.git usb: xhci-dwc3: Call xhci_deregister() before asserting reset Reorder the remove path to deregister the controller first (and return early on failure), then shut down PHY/clocks and finally assert reset. This prevents register reads/writes after reset and avoids undefined behavior. Signed-off-by: Boon Khai Ng Reviewed-by: Marek Vasut --- diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c index 8ad07a4b98c..3504a7cf42c 100644 --- a/drivers/usb/host/xhci-dwc3.c +++ b/drivers/usb/host/xhci-dwc3.c @@ -226,6 +226,11 @@ static int xhci_dwc3_probe(struct udevice *dev) static int xhci_dwc3_remove(struct udevice *dev) { struct xhci_dwc3_plat *plat = dev_get_plat(dev); + int ret; + + ret = xhci_deregister(dev); + if (ret) + return ret; dwc3_shutdown_phy(dev, &plat->phys); @@ -233,7 +238,7 @@ static int xhci_dwc3_remove(struct udevice *dev) reset_release_bulk(&plat->resets); - return xhci_deregister(dev); + return 0; } static const struct udevice_id xhci_dwc3_ids[] = {