Patch "usb: dwc3: Decouple USB 2.0 L1 & L2 events" has been added to the 5.10-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: Decouple USB 2.0 L1 & L2 events

to the 5.10-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-decouple-usb-2.0-l1-l2-events.patch
and it can be found in the queue-5.10 subdirectory.

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



commit 966c4a922aed674103fcc10bfdeef97ce186c796
Author: Jack Pham <quic_jackp@xxxxxxxxxxx>
Date:   Thu Aug 12 01:26:35 2021 -0700

    usb: dwc3: Decouple USB 2.0 L1 & L2 events
    
    [ Upstream commit 843714bb37d9a3780160d7b4a4a72b8077a77589 ]
    
    On DWC_usb3 revisions 3.00a and newer (including DWC_usb31 and
    DWC_usb32) the GUCTL1 register gained the DEV_DECOUPLE_L1L2_EVT
    field (bit 31) which when enabled allows the controller in device
    mode to treat USB 2.0 L1 LPM & L2 events separately.
    
    After commit d1d90dd27254 ("usb: dwc3: gadget: Enable suspend
    events") the controller will now receive events (and therefore
    interrupts) for every state change when entering/exiting either
    L1 or L2 states.  Since L1 is handled entirely by the hardware
    and requires no software intervention, there is no need to even
    enable these events and unnecessarily notify the gadget driver.
    Enable the aforementioned bit to help reduce the overall interrupt
    count for these L1 events that don't need to be handled while
    retaining the events for full L2 suspend/wakeup.
    
    Tested-by: Jun Li <jun.li@xxxxxxx>
    Tested-by: Amit Pundir <amit.pundir@xxxxxxxxxx> # for RB5 (sm8250)
    Tested-by: John Stultz <john.stultz@xxxxxxxxxx> # for HiKey960 & db845c
    Reviewed-by: Jun Li <jun.li@xxxxxxx>
    Acked-by: Felipe Balbi <balbi@xxxxxxxxxx>
    Signed-off-by: Jack Pham <jackp@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20210812082635.12924-1-jackp@xxxxxxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Stable-dep-of: 9149c9b0c7e0 ("usb: dwc3: core: update LC timer as per USB Spec V3.2")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index ee7682faa6f3..3a88e4268590 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1064,6 +1064,15 @@ static int dwc3_core_init(struct dwc3 *dwc)
 		if (!DWC3_VER_IS_PRIOR(DWC3, 290A))
 			reg |= DWC3_GUCTL1_DEV_L1_EXIT_BY_HW;
 
+		/*
+		 * Decouple USB 2.0 L1 & L2 events which will allow for
+		 * gadget driver to only receive U3/L2 suspend & wakeup
+		 * events and prevent the more frequent L1 LPM transitions
+		 * from interrupting the driver.
+		 */
+		if (!DWC3_VER_IS_PRIOR(DWC3, 300A))
+			reg |= DWC3_GUCTL1_DEV_DECOUPLE_L1L2_EVT;
+
 		if (dwc->dis_tx_ipgap_linecheck_quirk)
 			reg |= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS;
 
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 1c8496fc732e..620c19deeee7 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -250,9 +250,10 @@
 #define DWC3_GCTL_DSBLCLKGTNG		BIT(0)
 
 /* Global User Control 1 Register */
-#define DWC3_GUCTL1_PARKMODE_DISABLE_SS	BIT(17)
+#define DWC3_GUCTL1_DEV_DECOUPLE_L1L2_EVT	BIT(31)
 #define DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS	BIT(28)
-#define DWC3_GUCTL1_DEV_L1_EXIT_BY_HW	BIT(24)
+#define DWC3_GUCTL1_DEV_L1_EXIT_BY_HW		BIT(24)
+#define DWC3_GUCTL1_PARKMODE_DISABLE_SS		BIT(17)
 
 /* Global Status Register */
 #define DWC3_GSTS_OTG_IP	BIT(10)




[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