Patch "usb: dwc3: gadget: Disable GUSB2PHYCFG.SUSPHY for End Transfer" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    usb: dwc3: gadget: Disable GUSB2PHYCFG.SUSPHY for End Transfer

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     usb-dwc3-gadget-disable-gusb2phycfg.susphy-for-end-t.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ed149c970acc9676b5e42d4d832be036d284d223
Author: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx>
Date:   Wed Nov 9 17:58:50 2022 -0800

    usb: dwc3: gadget: Disable GUSB2PHYCFG.SUSPHY for End Transfer
    
    [ Upstream commit 3aa07f72894d209fcf922ad686cbb28cf005aaad ]
    
    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@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/5651117207803c26e2f22ddf4e5ce9e865dcf7c7.1668045468.git.Thinh.Nguyen@xxxxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 6f61a288073b..c2075b90f3df 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -291,7 +291,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd,
 	 *
 	 * 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;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux