2020-09-29 10:49:48

by Sandeep Maheswaram

[permalink] [raw]
Subject: [PATCH v3 0/5] USB DWC3 host wake up support from system suspend

Avoiding phy powerdown in host mode so that it can be wake up by devices.
Set GENPD_FLAG_ACTIVE_WAKEUP flag to keep usb30_prim gdsc active
when wakeup capable devices are connected to the host.
Using PDC interrupts instead of GIC interrupst to support wakeup in
xo shutdown case.

Changes in v3:
Removed need_phy_for_wakeup flag and by default avoiding phy powerdown.
Addressed Matthias comments and added entry for DEV_SUPERSPEED.
Added suspend_quirk in dwc3 host and moved the dwc3_set_phy_speed_flags.
Added wakeup-source dt entry and reading in dwc-qcom.c glue driver.

Changes in v2:
Dropped the patch in clock to set GENPD_FLAG_ACTIVE_WAKEUP flag and
setting in usb dwc3 driver.
Separated the core patch and glue driver patch.
Made need_phy_for_wakeup flag part of dwc structure and
hs_phy_flags as unsgined int.
Adrressed the comment on device_init_wakeup call.
Corrected offset for reading portsc register.
Added pacth to support wakeup in xo shutdown case.

Sandeep Maheswaram (5):
usb: dwc3: core: Host wake up support from system suspend
usb: dwc3: host: Add suspend_quirk for dwc3 host
usb: dwc3: qcom: Configure wakeup interrupts and set genpd active
wakeup flag
arm64: dts: qcom: sc7180: Use pdc interrupts for USB instead of GIC
interrupts
arm64: dts: qcom: sc7180: Add wakeup-source property for USB
controller node

arch/arm64/boot/dts/qcom/sc7180-idp.dts | 1 +
arch/arm64/boot/dts/qcom/sc7180-trogdor.dtsi | 1 +
arch/arm64/boot/dts/qcom/sc7180.dtsi | 8 +--
drivers/usb/dwc3/core.c | 14 ++----
drivers/usb/dwc3/core.h | 3 ++
drivers/usb/dwc3/dwc3-qcom.c | 74 ++++++++++++++++++++++------
drivers/usb/dwc3/host.c | 49 ++++++++++++++++++
7 files changed, 120 insertions(+), 30 deletions(-)

--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation


2020-09-29 10:50:50

by Sandeep Maheswaram

[permalink] [raw]
Subject: [PATCH v3 1/5] usb: dwc3: core: Host wake up support from system suspend

Avoiding phy powerdown in host mode so that it can be wake up by devices.
Added hs_phy_flags and ss_phy_flags to check connection status and
set phy mode and configure interrupts.

Signed-off-by: Sandeep Maheswaram <[email protected]>
---
drivers/usb/dwc3/core.c | 14 +++-----------
drivers/usb/dwc3/core.h | 3 +++
2 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 385262f..c32ed10 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1663,10 +1663,6 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
dwc3_core_exit(dwc);
break;
case DWC3_GCTL_PRTCAP_HOST:
- if (!PMSG_IS_AUTO(msg)) {
- dwc3_core_exit(dwc);
- break;
- }

/* Let controller to suspend HSPHY before PHY driver suspends */
if (dwc->dis_u2_susphy_quirk ||
@@ -1724,13 +1720,9 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
spin_unlock_irqrestore(&dwc->lock, flags);
break;
case DWC3_GCTL_PRTCAP_HOST:
- if (!PMSG_IS_AUTO(msg)) {
- ret = dwc3_core_init_for_resume(dwc);
- if (ret)
- return ret;
- dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
- break;
- }
+
+ dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
+
/* Restore GUSB2PHYCFG bits that were modified in suspend */
reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
if (dwc->dis_u2_susphy_quirk)
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 83b6c87..cd385a8 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -1096,6 +1096,9 @@ struct dwc3 {

bool phys_ready;

+ unsigned int hs_phy_flags;
+ unsigned int ss_phy_flags;
+
struct ulpi *ulpi;
bool ulpi_ready;

--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

2020-09-29 11:47:03

by Sergei Shtylyov

[permalink] [raw]
Subject: Re: [PATCH v3 1/5] usb: dwc3: core: Host wake up support from system suspend

On 29.09.2020 13:47, Sandeep Maheswaram wrote:

> Avoiding phy powerdown in host mode so that it can be wake up by devices.

s/wake/woken/?

> Added hs_phy_flags and ss_phy_flags to check connection status and
> set phy mode and configure interrupts.
>
> Signed-off-by: Sandeep Maheswaram <[email protected]>
[...]

MBR, Sergei

2020-09-29 18:19:17

by Matthias Kaehlcke

[permalink] [raw]
Subject: Re: [PATCH v3 1/5] usb: dwc3: core: Host wake up support from system suspend

On Tue, Sep 29, 2020 at 04:17:28PM +0530, Sandeep Maheswaram wrote:
> Avoiding phy powerdown in host mode so that it can be wake up by devices.
> Added hs_phy_flags and ss_phy_flags to check connection status and
> set phy mode and configure interrupts.
>
> Signed-off-by: Sandeep Maheswaram <[email protected]>
> ---
> drivers/usb/dwc3/core.c | 14 +++-----------
> drivers/usb/dwc3/core.h | 3 +++
> 2 files changed, 6 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 385262f..c32ed10 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -1663,10 +1663,6 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
> dwc3_core_exit(dwc);
> break;
> case DWC3_GCTL_PRTCAP_HOST:
> - if (!PMSG_IS_AUTO(msg)) {
> - dwc3_core_exit(dwc);
> - break;
> - }
>
> /* Let controller to suspend HSPHY before PHY driver suspends */
> if (dwc->dis_u2_susphy_quirk ||
> @@ -1724,13 +1720,9 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
> spin_unlock_irqrestore(&dwc->lock, flags);
> break;
> case DWC3_GCTL_PRTCAP_HOST:
> - if (!PMSG_IS_AUTO(msg)) {
> - ret = dwc3_core_init_for_resume(dwc);
> - if (ret)
> - return ret;
> - dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
> - break;
> - }
> +
> + dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
> +
> /* Restore GUSB2PHYCFG bits that were modified in suspend */
> reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
> if (dwc->dis_u2_susphy_quirk)
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 83b6c87..cd385a8 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -1096,6 +1096,9 @@ struct dwc3 {
>
> bool phys_ready;
>
> + unsigned int hs_phy_flags;
> + unsigned int ss_phy_flags;
> +

It doesn't seem ss_phy_flags is really needed, it is only used
in dwc3_set_phy_speed_flags(), a local variable could be used
instead.

The 'flags' are passed as 'mode' to phy_set_mode(), I think it
would be clearer to reflect that in the name, i.e. 'hs_phy_mode'
instead of 'hs_phy_flags'.