Message ID | 20240412202611.3565052-7-alexander.sverdlin@siemens.com |
---|---|
State | New |
Delegated to: | Marek Vasut |
Headers | show |
Series | usb: dwc3: gadget: avoid EP command timeout | expand |
On Fri, Apr 12, 2024 at 10:26:06PM +0200, A. Sverdlin wrote: > From: Thinh Nguyen <Thinh.Nguyen@synopsys.com> > > Upstream Linux commit 3aa07f72894d. > > If there's a disconnection while operating in eSS, there may be a delay > in VBUS drop response from the connector. In that case, the internal > link state may drop to operate in usb2 speed while the controller thinks > the VBUS is still high. The driver must make sure to disable > GUSB2PHYCFG.SUSPHY when sending endpoint command while in usb2 speed. > The End Transfer command may be called, and only that command needs to > go through at this point. Let's keep it simple and unconditionally > disable GUSB2PHYCFG.SUSPHY whenever we issue the command. > > This scenario is not seen in real hardware. In a rare case, our > prototype type-c controller/interface may have a slow response > triggerring this issue. > > Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> > Link: https://lore.kernel.org/r/5651117207803c26e2f22ddf4e5ce9e865dcf7c7.1668045468.git.Thinh.Nguyen@synopsys.com > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com> Confused, why did you resend this to us?
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index c14d7870b9461..debfd4d6781db 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -316,7 +316,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep, * * DWC_usb3 3.30a and DWC_usb31 1.90a programming guide section 3.2.2 */ - if (dwc->gadget.speed <= USB_SPEED_HIGH) { + if (dwc->gadget.speed <= USB_SPEED_HIGH || + DWC3_DEPCMD_CMD(cmd) == DWC3_DEPCMD_ENDTRANSFER) { reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)); if (unlikely(reg & DWC3_GUSB2PHYCFG_SUSPHY)) { saved_config |= DWC3_GUSB2PHYCFG_SUSPHY;