From: Thinh Nguyen <Thinh.Nguyen@synopsys.com> To: Jack Pham <firstname.lastname@example.org>, Thinh Nguyen <Thinh.Nguyen@synopsys.com>, John Stultz <email@example.com>, Amit Pundir <firstname.lastname@example.org>, Ray Chi <email@example.com>, Ferry Toth <firstname.lastname@example.org>, Chunfeng Yun <email@example.com>, Andy Shevchenko <firstname.lastname@example.org>, Marek Szyprowski <email@example.com>, Li Jun <firstname.lastname@example.org> Cc: Felipe Balbi <email@example.com>, Greg Kroah-Hartman <firstname.lastname@example.org>, "email@example.com" <firstname.lastname@example.org>, Wesley Cheng <email@example.com> Subject: Re: [RFT][PATCH] usb: dwc3: Decouple USB 2.0 L1 & L2 events Date: Thu, 19 Aug 2021 02:01:21 +0000 [thread overview] Message-ID: <firstname.lastname@example.org> (raw) In-Reply-To: <20210818012859.GB30805@jackp-linux.qualcomm.com> Jack Pham wrote: > On Thu, Aug 12, 2021 at 01:26:35AM -0700, Jack Pham wrote: >> 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. > Currently dwc3 doesn't handle or do anything more for L1 suspend/resume, so it doesn't care about L1 suspend/wake events. For your design, there maybe no more power saving can be done at L1 from the driver, but it may not apply to all others. Other than that, the change is fine. BR, Thinh > Hi folks in To: > > I'd like to request if any of you could help test this patch on your > boards to help make sure it doesn't cause any regressions since I know > some of the recent dwc3 patches from Qualcomm have been found to break > other devices :(. So I'm hoping to avoid that even for a patch as > small as this. > > Hoping this could be tried out on boards/SoCs such as db845c, hikey960, > Exynos, the Intel "lakes", etc. Ideally this needs validation with a > high-speed connection to a USB 3.x host, which increases the chances > that USB 2.0 Link Power Management is supported. > > The overall goal of this patch is to eliminate events generated for > L1 entry/exit, so we should see a slight reduction in interrupt counts > when checking `grep dwc3 /proc/interrupts` for comparable traffic. > > Appreciate any feedback and help in testing! > Thanks, > Jack > >> Signed-off-by: Jack Pham <email@example.com> >> --- >> drivers/usb/dwc3/core.c | 9 +++++++++ >> drivers/usb/dwc3/core.h | 5 +++-- >> 2 files changed, 12 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c >> index ba74ad7f6995..719dac228703 100644 >> --- a/drivers/usb/dwc3/core.c >> +++ b/drivers/usb/dwc3/core.c >> @@ -1050,6 +1050,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 5991766239ba..356b94a7ec70 100644 >> --- a/drivers/usb/dwc3/core.h >> +++ b/drivers/usb/dwc3/core.h >> @@ -256,9 +256,10 @@ >> #define DWC3_GUCTL_HSTINAUTORETRY BIT(14) >> >> /* 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) >> -- >> 2.24.0 >> >
next prev parent reply other threads:[~2021-08-19 2:01 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-12 8:26 [PATCH] " Jack Pham 2021-08-18 1:28 ` [RFT][PATCH] " Jack Pham 2021-08-18 2:07 ` John Stultz 2021-08-18 7:52 ` Jun Li 2021-08-18 9:09 ` Amit Pundir 2021-08-18 9:33 ` Andy Shevchenko 2021-08-18 19:48 ` Ferry Toth 2021-08-19 12:26 ` Andy Shevchenko 2021-08-20 12:17 ` Jack Pham 2021-08-19 2:01 ` Thinh Nguyen [this message] 2021-08-18 5:08 ` [PATCH] " Felipe Balbi
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --subject='Re: [RFT][PATCH] usb: dwc3: Decouple USB 2.0 L1 & L2 events' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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).