* [PATCH v1 2/2] usb: dwc3: Force full reset on xhci removal
@ 2025-05-15 4:02 Roy Luo
2025-05-15 7:32 ` Greg KH
0 siblings, 1 reply; 3+ messages in thread
From: Roy Luo @ 2025-05-15 4:02 UTC (permalink / raw)
To: royluo, Thinh.Nguyen, gregkh, linux-usb, linux-kernel
During an xhci host controller reset (via `USBCMD.HCRST`), reading DWC3
registers can return zero instead of their actual values. This applies
not only to registers within the xhci memory space but also those in
the broader DWC3 IP block.
By default, the xhci driver doesn't wait for the reset handshake to
complete during teardown. This can cause problems when the DWC3 controller
is operating as a dual role device and is switching from host to device
mode, the invalid register read caused by ongoing HCRST could lead to
gadget mode startup failures and unintended register overwrites.
To mitigate this, enable xhci-full-reset-on-remove-quirk to ensure that
xhci_reset() completes its full reset handshake during xhci removal.
Signed-off-by: Roy Luo <royluo@google.com>
---
drivers/usb/dwc3/host.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c
index b48e108fc8fe..ea865898308f 100644
--- a/drivers/usb/dwc3/host.c
+++ b/drivers/usb/dwc3/host.c
@@ -126,7 +126,7 @@ static int dwc3_host_get_irq(struct dwc3 *dwc)
int dwc3_host_init(struct dwc3 *dwc)
{
- struct property_entry props[6];
+ struct property_entry props[7];
struct platform_device *xhci;
int ret, irq;
int prop_idx = 0;
@@ -182,6 +182,9 @@ int dwc3_host_init(struct dwc3 *dwc)
if (DWC3_VER_IS_WITHIN(DWC3, ANY, 300A))
props[prop_idx++] = PROPERTY_ENTRY_BOOL("quirk-broken-port-ped");
+ if (dwc->dr_mode == USB_DR_MODE_OTG)
+ props[prop_idx++] = PROPERTY_ENTRY_BOOL("xhci-full-reset-on-remove-quirk");
+
if (prop_idx) {
ret = device_create_managed_software_node(&xhci->dev, props, NULL);
if (ret) {
--
2.49.0.1045.g170613ef41-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v1 2/2] usb: dwc3: Force full reset on xhci removal
2025-05-15 4:02 [PATCH v1 2/2] usb: dwc3: Force full reset on xhci removal Roy Luo
@ 2025-05-15 7:32 ` Greg KH
2025-05-15 18:57 ` Roy Luo
0 siblings, 1 reply; 3+ messages in thread
From: Greg KH @ 2025-05-15 7:32 UTC (permalink / raw)
To: Roy Luo; +Cc: Thinh.Nguyen, linux-usb, linux-kernel
On Thu, May 15, 2025 at 04:02:59AM +0000, Roy Luo wrote:
> During an xhci host controller reset (via `USBCMD.HCRST`), reading DWC3
> registers can return zero instead of their actual values. This applies
> not only to registers within the xhci memory space but also those in
> the broader DWC3 IP block.
>
> By default, the xhci driver doesn't wait for the reset handshake to
> complete during teardown. This can cause problems when the DWC3 controller
> is operating as a dual role device and is switching from host to device
> mode, the invalid register read caused by ongoing HCRST could lead to
> gadget mode startup failures and unintended register overwrites.
>
> To mitigate this, enable xhci-full-reset-on-remove-quirk to ensure that
> xhci_reset() completes its full reset handshake during xhci removal.
>
> Signed-off-by: Roy Luo <royluo@google.com>
> ---
> drivers/usb/dwc3/host.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
What commit id does this fix? Should it also go to stable kernels? If
so, how far back?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v1 2/2] usb: dwc3: Force full reset on xhci removal
2025-05-15 7:32 ` Greg KH
@ 2025-05-15 18:57 ` Roy Luo
0 siblings, 0 replies; 3+ messages in thread
From: Roy Luo @ 2025-05-15 18:57 UTC (permalink / raw)
To: Greg KH; +Cc: Thinh.Nguyen, linux-usb, linux-kernel
On Thu, May 15, 2025 at 12:34 AM Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Thu, May 15, 2025 at 04:02:59AM +0000, Roy Luo wrote:
> > During an xhci host controller reset (via `USBCMD.HCRST`), reading DWC3
> > registers can return zero instead of their actual values. This applies
> > not only to registers within the xhci memory space but also those in
> > the broader DWC3 IP block.
> >
> > By default, the xhci driver doesn't wait for the reset handshake to
> > complete during teardown. This can cause problems when the DWC3 controller
> > is operating as a dual role device and is switching from host to device
> > mode, the invalid register read caused by ongoing HCRST could lead to
> > gadget mode startup failures and unintended register overwrites.
> >
> > To mitigate this, enable xhci-full-reset-on-remove-quirk to ensure that
> > xhci_reset() completes its full reset handshake during xhci removal.
> >
> > Signed-off-by: Roy Luo <royluo@google.com>
> > ---
> > drivers/usb/dwc3/host.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
>
> What commit id does this fix? Should it also go to stable kernels? If
> so, how far back?
>
> thanks,
>
> greg k-h
Added Fixes tag and cc stable in v2.
Thanks,
Roy
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-05-15 18:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-15 4:02 [PATCH v1 2/2] usb: dwc3: Force full reset on xhci removal Roy Luo
2025-05-15 7:32 ` Greg KH
2025-05-15 18:57 ` Roy Luo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).