Message ID | 20230125133359.3538078-2-adrian.zaharia@windriver.com |
---|---|
State | New |
Headers | show |
Series | [5.10,1/1] xhci: Set HCD flag to defer primary roothub registration | expand |
On Wed, Jan 25, 2023 at 03:33:59PM +0200, Adrian Zaharia wrote: > From: Kishon Vijay Abraham I <kishon@ti.com> > > [ Upstream commit b7a4f9b5d0e4b6dd937678c546c0b322dd1a4054 ] > > Set "HCD_FLAG_DEFER_RH_REGISTER" to hcd->flags in xhci_run() to defer > registering primary roothub in usb_add_hcd() if xhci has two roothubs. > This will make sure both primary roothub and secondary roothub will be > registered along with the second HCD. > This is required for cold plugged USB devices to be detected in certain > PCIe USB cards (like Inateck USB card connected to AM64 EVM or J7200 EVM). > > This patch has been added and reverted earier as it triggered a race > in usb device enumeration. > That race is now fixed in 5.16-rc3, and in stable back to 5.4 > commit 6cca13de26ee ("usb: hub: Fix locking issues with address0_mutex") > commit 6ae6dc22d2d1 ("usb: hub: Fix usb enumeration issue due to address0 > race") > > [minor rebase change, and commit message update -Mathias] > > CC: stable@vger.kernel.org # 5.4+ > Suggested-by: Mathias Nyman <mathias.nyman@linux.intel.com> > Tested-by: Chris Chiu <chris.chiu@canonical.com> > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> > Link: https://lore.kernel.org/r/20220510091630.16564-3-kishon@ti.com > Signed-off-by: Adrian Zaharia <Adrian.Zaharia@windriver.com> > --- > drivers/usb/host/xhci.c | 2 ++ > 1 file changed, 2 insertions(+) You dropped my original signed-off-by? Odd... Anyway, now queued up. greg k-h
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 2967372a9988..473b0b64dd57 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -696,6 +696,8 @@ int xhci_run(struct usb_hcd *hcd) xhci_dbg_trace(xhci, trace_xhci_dbg_init, "Finished xhci_run for USB2 roothub"); + set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags); + xhci_dbc_init(xhci); xhci_debugfs_init(xhci);