2023-12-14 07:43:45

by Johan Hovold

[permalink] [raw]
Subject: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
controller in order to be able to wake the system up from low-power
states and to be able to detect disconnect events, which requires
triggering on falling edges.

A recent commit updated the trigger type but failed to change the
interrupt provider as required. This leads to the current Linux driver
failing to probe instead of printing an error during suspend and USB
wakeup not working as intended.

Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
Cc: [email protected] # 6.2
Cc: Richard Acayan <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
---
arch/arm64/boot/dts/qcom/sdm670.dtsi | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/sdm670.dtsi b/arch/arm64/boot/dts/qcom/sdm670.dtsi
index c873560ae9d5..fe4067c012a0 100644
--- a/arch/arm64/boot/dts/qcom/sdm670.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm670.dtsi
@@ -1295,10 +1295,10 @@ usb_1: usb@a6f8800 {
<&gcc GCC_USB30_PRIM_MASTER_CLK>;
assigned-clock-rates = <19200000>, <150000000>;

- interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 488 IRQ_TYPE_EDGE_BOTH>,
- <GIC_SPI 489 IRQ_TYPE_EDGE_BOTH>;
+ interrupts-extended = <&intc GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
+ <&intc GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>,
+ <&pdc 8 IRQ_TYPE_EDGE_BOTH>,
+ <&pdc 9 IRQ_TYPE_EDGE_BOTH>;
interrupt-names = "hs_phy_irq", "ss_phy_irq",
"dm_hs_phy_irq", "dp_hs_phy_irq";

--
2.41.0


2023-12-14 12:28:15

by Konrad Dybcio

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts



On 12/14/23 08:43, Johan Hovold wrote:
> The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
> controller in order to be able to wake the system up from low-power
> states and to be able to detect disconnect events, which requires
> triggering on falling edges.
>
> A recent commit updated the trigger type but failed to change the
> interrupt provider as required. This leads to the current Linux driver
> failing to probe instead of printing an error during suspend and USB
> wakeup not working as intended.
>
> Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
> Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
> Cc: [email protected] # 6.2
> Cc: Richard Acayan <[email protected]>
> Signed-off-by: Johan Hovold <[email protected]>
> ---
Reviewed-by: Konrad Dybcio <[email protected]>

Konrad

2023-12-15 01:55:52

by Richard Acayan

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

On Thu, Dec 14, 2023 at 08:43:17AM +0100, Johan Hovold wrote:
> The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
> controller in order to be able to wake the system up from low-power
> states and to be able to detect disconnect events, which requires
> triggering on falling edges.
>
> A recent commit updated the trigger type but failed to change the
> interrupt provider as required. This leads to the current Linux driver
> failing to probe instead of printing an error during suspend and USB
> wakeup not working as intended.
>
> Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
> Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
> Cc: [email protected] # 6.2
> Cc: Richard Acayan <[email protected]>
> Signed-off-by: Johan Hovold <[email protected]>
> ---

Tested-by: Richard Acayan <[email protected]>

On a Pixel 3a, plugging in a USB cable doesn't wake up the device
(presumably because there is no wakeup-source property) but this gets
USB working again on linux-next.

2023-12-15 07:35:28

by Johan Hovold

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

On Thu, Dec 14, 2023 at 08:46:27PM -0500, Richard Acayan wrote:
> On Thu, Dec 14, 2023 at 08:43:17AM +0100, Johan Hovold wrote:
> > The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
> > controller in order to be able to wake the system up from low-power
> > states and to be able to detect disconnect events, which requires
> > triggering on falling edges.
> >
> > A recent commit updated the trigger type but failed to change the
> > interrupt provider as required. This leads to the current Linux driver
> > failing to probe instead of printing an error during suspend and USB
> > wakeup not working as intended.
> >
> > Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
> > Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
> > Cc: [email protected] # 6.2
> > Cc: Richard Acayan <[email protected]>
> > Signed-off-by: Johan Hovold <[email protected]>
> > ---
>
> Tested-by: Richard Acayan <[email protected]>
>
> On a Pixel 3a, plugging in a USB cable doesn't wake up the device
> (presumably because there is no wakeup-source property) but this gets
> USB working again on linux-next.

Thanks for testing. And yes, the wakeup interrupts will indeed not be
enabled at system suspend unless the wakeup-source property is there.
Did you try adding it?

Johan

2023-12-16 00:05:15

by Richard Acayan

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

On Fri, Dec 15, 2023 at 08:34:39AM +0100, Johan Hovold wrote:
> On Thu, Dec 14, 2023 at 08:46:27PM -0500, Richard Acayan wrote:
> > On Thu, Dec 14, 2023 at 08:43:17AM +0100, Johan Hovold wrote:
> > > The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
> > > controller in order to be able to wake the system up from low-power
> > > states and to be able to detect disconnect events, which requires
> > > triggering on falling edges.
> > >
> > > A recent commit updated the trigger type but failed to change the
> > > interrupt provider as required. This leads to the current Linux driver
> > > failing to probe instead of printing an error during suspend and USB
> > > wakeup not working as intended.
> > >
> > > Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
> > > Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
> > > Cc: [email protected] # 6.2
> > > Cc: Richard Acayan <[email protected]>
> > > Signed-off-by: Johan Hovold <[email protected]>
> > > ---
> >
> > Tested-by: Richard Acayan <[email protected]>
> >
> > On a Pixel 3a, plugging in a USB cable doesn't wake up the device
> > (presumably because there is no wakeup-source property) but this gets
> > USB working again on linux-next.
>
> Thanks for testing. And yes, the wakeup interrupts will indeed not be
> enabled at system suspend unless the wakeup-source property is there.
> Did you try adding it?

Just tested today. Adding it does not cause the system to wake up when
plugging in a laptop on the Pixel 3a, but that might just be because
USB wakeups are disabled when the adapter is configured for peripheral
mode.

drivers/usb/dwc3/dwc3-qcom.c (dwc3_qcom_suspend):
/*
* The role is stable during suspend as role switching is done from a
* freezable workqueue.
*/
if (dwc3_qcom_is_host(qcom) && wakeup) {
qcom->usb2_speed = dwc3_qcom_read_usb2_speed(qcom);
dwc3_qcom_enable_interrupts(qcom);
}

2023-12-16 02:35:16

by Richard Acayan

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

On Thu, Dec 14, 2023 at 08:43:17AM +0100, Johan Hovold wrote:
> The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
> controller in order to be able to wake the system up from low-power
> states and to be able to detect disconnect events, which requires
> triggering on falling edges.
>
> A recent commit updated the trigger type but failed to change the
> interrupt provider as required. This leads to the current Linux driver
> failing to probe instead of printing an error during suspend and USB
> wakeup not working as intended.
>
> Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
> Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
> Cc: [email protected] # 6.2

I almost forgot to mention, both SDM670 patches seem to depend on
b51ee205dc4f ("arm64: dts: qcom: sdm670: Add PDC") in 6.6 to compile
properly.

> Cc: Richard Acayan <[email protected]>
> Signed-off-by: Johan Hovold <[email protected]>
> ---
> arch/arm64/boot/dts/qcom/sdm670.dtsi | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm670.dtsi b/arch/arm64/boot/dts/qcom/sdm670.dtsi
> index c873560ae9d5..fe4067c012a0 100644
> --- a/arch/arm64/boot/dts/qcom/sdm670.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm670.dtsi
> @@ -1295,10 +1295,10 @@ usb_1: usb@a6f8800 {
> <&gcc GCC_USB30_PRIM_MASTER_CLK>;
> assigned-clock-rates = <19200000>, <150000000>;
>
> - interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 488 IRQ_TYPE_EDGE_BOTH>,
> - <GIC_SPI 489 IRQ_TYPE_EDGE_BOTH>;
> + interrupts-extended = <&intc GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
> + <&intc GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>,
> + <&pdc 8 IRQ_TYPE_EDGE_BOTH>,
> + <&pdc 9 IRQ_TYPE_EDGE_BOTH>;
> interrupt-names = "hs_phy_irq", "ss_phy_irq",
> "dm_hs_phy_irq", "dp_hs_phy_irq";
>
> --
> 2.41.0
>

2023-12-18 07:36:14

by Johan Hovold

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

On Fri, Dec 15, 2023 at 07:04:23PM -0500, Richard Acayan wrote:
> On Fri, Dec 15, 2023 at 08:34:39AM +0100, Johan Hovold wrote:
> > On Thu, Dec 14, 2023 at 08:46:27PM -0500, Richard Acayan wrote:

> > > Tested-by: Richard Acayan <[email protected]>
> > >
> > > On a Pixel 3a, plugging in a USB cable doesn't wake up the device
> > > (presumably because there is no wakeup-source property) but this gets
> > > USB working again on linux-next.
> >
> > Thanks for testing. And yes, the wakeup interrupts will indeed not be
> > enabled at system suspend unless the wakeup-source property is there.
> > Did you try adding it?
>
> Just tested today. Adding it does not cause the system to wake up when
> plugging in a laptop on the Pixel 3a, but that might just be because
> USB wakeups are disabled when the adapter is configured for peripheral
> mode.

Right, wake up is currently only implemented for host mode.

Johan

2023-12-18 07:39:28

by Johan Hovold

[permalink] [raw]
Subject: Re: [PATCH 1/3] arm64: dts: qcom: sdm670: fix USB DP/DM HS PHY interrupts

On Fri, Dec 15, 2023 at 09:34:53PM -0500, Richard Acayan wrote:
> On Thu, Dec 14, 2023 at 08:43:17AM +0100, Johan Hovold wrote:
> > The USB DP/DM HS PHY interrupts need to be provided by the PDC interrupt
> > controller in order to be able to wake the system up from low-power
> > states and to be able to detect disconnect events, which requires
> > triggering on falling edges.
> >
> > A recent commit updated the trigger type but failed to change the
> > interrupt provider as required. This leads to the current Linux driver
> > failing to probe instead of printing an error during suspend and USB
> > wakeup not working as intended.
> >
> > Fixes: de3b3de30999 ("arm64: dts: qcom: sdm670: fix USB wakeup interrupt types")
> > Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees")
> > Cc: [email protected] # 6.2
>
> I almost forgot to mention, both SDM670 patches seem to depend on
> b51ee205dc4f ("arm64: dts: qcom: sdm670: Add PDC") in 6.6 to compile
> properly.

Thanks for spotting that. The 6.5 stable tree is EOL now so this will
fortunately not be an issue in practice.

Johan