diff mbox series

phy: rockchip-inno-usb2: Ignore OTG IRQs in host mode

Message ID 20220708061434.38115-1-samuel@sholland.org
State Accepted
Commit fd7d47484125c7d04578de9294faa7fec6e5df0a
Headers show
Series phy: rockchip-inno-usb2: Ignore OTG IRQs in host mode | expand

Commit Message

Samuel Holland July 8, 2022, 6:14 a.m. UTC
When the OTG port is fixed to host mode, the driver does not request its
IRQs, nor does it enable those IRQs in hardware. Similarly, the driver
should ignore the OTG port IRQs when handling the shared interrupt.

Otherwise, it would update the extcon based on an ID pin which may be in
an undefined state, or try to queue a uninitialized work item.

Fixes: 6a98df08ccd5 ("phy: rockchip-inno-usb2: Fix muxed interrupt support")
Reported-by: Frank Wunderlich <frank-w@public-files.de>
Signed-off-by: Samuel Holland <samuel@sholland.org>
---

 drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Frank Wunderlich July 8, 2022, 11:47 a.m. UTC | #1
Hi Samuel

thx for the fix...with this it works again

Tested-by: Frank Wunderlich <frank-w@public-files.de>

regards Frank


> Gesendet: Freitag, 08. Juli 2022 um 08:14 Uhr
> Von: "Samuel Holland" <samuel@sholland.org>
> An: "Frank Wunderlich" <frank-w@public-files.de>, "Vinod Koul" <vkoul@kernel.org>
> Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, "Peter Geis" <pgwipeout@gmail.com>, "Samuel Holland" <samuel@sholland.org>, "Heiko Stuebner" <heiko@sntech.de>, "Kishon Vijay Abraham I" <kishon@ti.com>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-rockchip@lists.infradead.org
> Betreff: [PATCH] phy: rockchip-inno-usb2: Ignore OTG IRQs in host mode
>
> When the OTG port is fixed to host mode, the driver does not request its
> IRQs, nor does it enable those IRQs in hardware. Similarly, the driver
> should ignore the OTG port IRQs when handling the shared interrupt.
>
> Otherwise, it would update the extcon based on an ID pin which may be in
> an undefined state, or try to queue a uninitialized work item.
>
> Fixes: 6a98df08ccd5 ("phy: rockchip-inno-usb2: Fix muxed interrupt support")
> Reported-by: Frank Wunderlich <frank-w@public-files.de>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---
>
>  drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> index 6711659f727c..26b841c49ec6 100644
> --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> @@ -978,7 +978,9 @@ static irqreturn_t rockchip_usb2phy_irq(int irq, void *data)
>
>  		switch (rport->port_id) {
>  		case USB2PHY_PORT_OTG:
> -			ret |= rockchip_usb2phy_otg_mux_irq(irq, rport);
> +			if (rport->mode != USB_DR_MODE_HOST &&
> +			    rport->mode != USB_DR_MODE_UNKNOWN)
> +				ret |= rockchip_usb2phy_otg_mux_irq(irq, rport);
>  			break;
>  		case USB2PHY_PORT_HOST:
>  			ret |= rockchip_usb2phy_linestate_irq(irq, rport);
> --
> 2.35.1
>
>
Peter Geis July 8, 2022, 1:03 p.m. UTC | #2
Good Morning,

I've confirmed this also resolves the issues with phy warnings on quartz64-a.
Tested-by: Peter Geis <pgwipeout@gmail.com>

Very Respectfully,
Peter Geis

On Fri, Jul 8, 2022 at 7:47 AM Frank Wunderlich <frank-w@public-files.de> wrote:
>
> Hi Samuel
>
> thx for the fix...with this it works again
>
> Tested-by: Frank Wunderlich <frank-w@public-files.de>
>
> regards Frank
>
>
> > Gesendet: Freitag, 08. Juli 2022 um 08:14 Uhr
> > Von: "Samuel Holland" <samuel@sholland.org>
> > An: "Frank Wunderlich" <frank-w@public-files.de>, "Vinod Koul" <vkoul@kernel.org>
> > Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, "Peter Geis" <pgwipeout@gmail.com>, "Samuel Holland" <samuel@sholland.org>, "Heiko Stuebner" <heiko@sntech.de>, "Kishon Vijay Abraham I" <kishon@ti.com>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-rockchip@lists.infradead.org
> > Betreff: [PATCH] phy: rockchip-inno-usb2: Ignore OTG IRQs in host mode
> >
> > When the OTG port is fixed to host mode, the driver does not request its
> > IRQs, nor does it enable those IRQs in hardware. Similarly, the driver
> > should ignore the OTG port IRQs when handling the shared interrupt.
> >
> > Otherwise, it would update the extcon based on an ID pin which may be in
> > an undefined state, or try to queue a uninitialized work item.
> >
> > Fixes: 6a98df08ccd5 ("phy: rockchip-inno-usb2: Fix muxed interrupt support")
> > Reported-by: Frank Wunderlich <frank-w@public-files.de>
> > Signed-off-by: Samuel Holland <samuel@sholland.org>
> > ---
> >
> >  drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> > index 6711659f727c..26b841c49ec6 100644
> > --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> > +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> > @@ -978,7 +978,9 @@ static irqreturn_t rockchip_usb2phy_irq(int irq, void *data)
> >
> >               switch (rport->port_id) {
> >               case USB2PHY_PORT_OTG:
> > -                     ret |= rockchip_usb2phy_otg_mux_irq(irq, rport);
> > +                     if (rport->mode != USB_DR_MODE_HOST &&
> > +                         rport->mode != USB_DR_MODE_UNKNOWN)
> > +                             ret |= rockchip_usb2phy_otg_mux_irq(irq, rport);
> >                       break;
> >               case USB2PHY_PORT_HOST:
> >                       ret |= rockchip_usb2phy_linestate_irq(irq, rport);
> > --
> > 2.35.1
> >
> >
Vinod Koul July 15, 2022, 11:48 a.m. UTC | #3
On 08-07-22, 01:14, Samuel Holland wrote:
> When the OTG port is fixed to host mode, the driver does not request its
> IRQs, nor does it enable those IRQs in hardware. Similarly, the driver
> should ignore the OTG port IRQs when handling the shared interrupt.
> 
> Otherwise, it would update the extcon based on an ID pin which may be in
> an undefined state, or try to queue a uninitialized work item.

Applied, thanks
diff mbox series

Patch

diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
index 6711659f727c..26b841c49ec6 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
@@ -978,7 +978,9 @@  static irqreturn_t rockchip_usb2phy_irq(int irq, void *data)
 
 		switch (rport->port_id) {
 		case USB2PHY_PORT_OTG:
-			ret |= rockchip_usb2phy_otg_mux_irq(irq, rport);
+			if (rport->mode != USB_DR_MODE_HOST &&
+			    rport->mode != USB_DR_MODE_UNKNOWN)
+				ret |= rockchip_usb2phy_otg_mux_irq(irq, rport);
 			break;
 		case USB2PHY_PORT_HOST:
 			ret |= rockchip_usb2phy_linestate_irq(irq, rport);