* FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
@ 2021-02-07 15:30 gregkh
2021-02-07 15:56 ` Pali Rohár
0 siblings, 1 reply; 10+ messages in thread
From: gregkh @ 2021-02-07 15:30 UTC (permalink / raw)
To: pali, gregkh, mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh; +Cc: stable
The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3241929b67d28c83945d3191c6816a3271fd6b85 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
Date: Mon, 1 Feb 2021 16:08:03 +0100
Subject: [PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada
3720
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Older ATF does not provide SMC call for USB 3.0 phy power on functionality
and therefore initialization of xhci-hcd is failing when older version of
ATF is used. In this case phy_power_on() function returns -EOPNOTSUPP.
[ 3.108467] mvebu-a3700-comphy d0018300.phy: unsupported SMC call, try updating your firmware
[ 3.117250] phy phy-d0018300.phy.0: phy poweron failed --> -95
[ 3.123465] xhci-hcd: probe of d0058000.usb failed with error -95
This patch introduces a new plat_setup callback for xhci platform drivers
which is called prior calling usb_add_hcd() function. This function at its
beginning skips PHY init if hcd->skip_phy_initialization is set.
Current init_quirk callback for xhci platform drivers is called from
xhci_plat_setup() function which is called after chip reset completes.
It happens in the middle of the usb_add_hcd() function and therefore this
callback cannot be used for setting if PHY init should be skipped or not.
For Armada 3720 this patch introduce a new xhci_mvebu_a3700_plat_setup()
function configured as a xhci platform plat_setup callback. This new
function calls phy_power_on() and in case it returns -EOPNOTSUPP then
XHCI_SKIP_PHY_INIT quirk is set to instruct xhci-plat to skip PHY
initialization.
This patch fixes above failure by ignoring 'not supported' error in
xhci-hcd driver. In this case it is expected that phy is already power on.
It fixes initialization of xhci-hcd on Espressobin boards where is older
Marvell's Arm Trusted Firmware without SMC call for USB 3.0 phy power.
This is regression introduced in commit bd3d25b07342 ("arm64: dts: marvell:
armada-37xx: link USB hosts with their PHYs") where USB 3.0 phy was defined
and therefore xhci-hcd on Espressobin with older ATF started failing.
Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> # On R-Car
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> # xhci-plat
Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Pali Rohár <pali@kernel.org>
Link: https://lore.kernel.org/r/20210201150803.7305-1-pali@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c
index 60651a50770f..8ca1a235d164 100644
--- a/drivers/usb/host/xhci-mvebu.c
+++ b/drivers/usb/host/xhci-mvebu.c
@@ -8,6 +8,7 @@
#include <linux/mbus.h>
#include <linux/of.h>
#include <linux/platform_device.h>
+#include <linux/phy/phy.h>
#include <linux/usb.h>
#include <linux/usb/hcd.h>
@@ -74,6 +75,47 @@ int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
return 0;
}
+int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd)
+{
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device *dev = hcd->self.controller;
+ struct phy *phy;
+ int ret;
+
+ /* Old bindings miss the PHY handle */
+ phy = of_phy_get(dev->of_node, "usb3-phy");
+ if (IS_ERR(phy) && PTR_ERR(phy) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+ else if (IS_ERR(phy))
+ goto phy_out;
+
+ ret = phy_init(phy);
+ if (ret)
+ goto phy_put;
+
+ ret = phy_set_mode(phy, PHY_MODE_USB_HOST_SS);
+ if (ret)
+ goto phy_exit;
+
+ ret = phy_power_on(phy);
+ if (ret == -EOPNOTSUPP) {
+ /* Skip initializatin of XHCI PHY when it is unsupported by firmware */
+ dev_warn(dev, "PHY unsupported by firmware\n");
+ xhci->quirks |= XHCI_SKIP_PHY_INIT;
+ }
+ if (ret)
+ goto phy_exit;
+
+ phy_power_off(phy);
+phy_exit:
+ phy_exit(phy);
+phy_put:
+ of_phy_put(phy);
+phy_out:
+
+ return 0;
+}
+
int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd)
{
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
diff --git a/drivers/usb/host/xhci-mvebu.h b/drivers/usb/host/xhci-mvebu.h
index 3be021793cc8..01bf3fcb3eca 100644
--- a/drivers/usb/host/xhci-mvebu.h
+++ b/drivers/usb/host/xhci-mvebu.h
@@ -12,6 +12,7 @@ struct usb_hcd;
#if IS_ENABLED(CONFIG_USB_XHCI_MVEBU)
int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd);
+int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd);
int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd);
#else
static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
@@ -19,6 +20,11 @@ static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
return 0;
}
+static inline int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd)
+{
+ return 0;
+}
+
static inline int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd)
{
return 0;
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index 4d34f6005381..c1edcc9b13ce 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -44,6 +44,16 @@ static void xhci_priv_plat_start(struct usb_hcd *hcd)
priv->plat_start(hcd);
}
+static int xhci_priv_plat_setup(struct usb_hcd *hcd)
+{
+ struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
+
+ if (!priv->plat_setup)
+ return 0;
+
+ return priv->plat_setup(hcd);
+}
+
static int xhci_priv_init_quirk(struct usb_hcd *hcd)
{
struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
@@ -111,6 +121,7 @@ static const struct xhci_plat_priv xhci_plat_marvell_armada = {
};
static const struct xhci_plat_priv xhci_plat_marvell_armada3700 = {
+ .plat_setup = xhci_mvebu_a3700_plat_setup,
.init_quirk = xhci_mvebu_a3700_init_quirk,
};
@@ -330,7 +341,14 @@ static int xhci_plat_probe(struct platform_device *pdev)
hcd->tpl_support = of_usb_host_tpl_support(sysdev->of_node);
xhci->shared_hcd->tpl_support = hcd->tpl_support;
- if (priv && (priv->quirks & XHCI_SKIP_PHY_INIT))
+
+ if (priv) {
+ ret = xhci_priv_plat_setup(hcd);
+ if (ret)
+ goto disable_usb_phy;
+ }
+
+ if ((xhci->quirks & XHCI_SKIP_PHY_INIT) || (priv && (priv->quirks & XHCI_SKIP_PHY_INIT)))
hcd->skip_phy_initialization = 1;
if (priv && (priv->quirks & XHCI_SG_TRB_CACHE_SIZE_QUIRK))
diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h
index 1fb149d1fbce..561d0b7bce09 100644
--- a/drivers/usb/host/xhci-plat.h
+++ b/drivers/usb/host/xhci-plat.h
@@ -13,6 +13,7 @@
struct xhci_plat_priv {
const char *firmware_name;
unsigned long long quirks;
+ int (*plat_setup)(struct usb_hcd *);
void (*plat_start)(struct usb_hcd *);
int (*init_quirk)(struct usb_hcd *);
int (*suspend_quirk)(struct usb_hcd *);
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-07 15:30 FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree gregkh
@ 2021-02-07 15:56 ` Pali Rohár
2021-02-08 10:09 ` Greg KH
0 siblings, 1 reply; 10+ messages in thread
From: Pali Rohár @ 2021-02-07 15:56 UTC (permalink / raw)
To: gregkh; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> The patch below does not apply to the 5.4-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@vger.kernel.org>.
>
> thanks,
>
> greg k-h
...
> Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
Hello Greg! Seems that you have forgot to apply some dependency patches.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-07 15:56 ` Pali Rohár
@ 2021-02-08 10:09 ` Greg KH
2021-02-08 10:16 ` Greg KH
2021-02-08 11:06 ` Pali Rohár
0 siblings, 2 replies; 10+ messages in thread
From: Greg KH @ 2021-02-08 10:09 UTC (permalink / raw)
To: Pali Rohár; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > The patch below does not apply to the 5.4-stable tree.
> > If someone wants it applied there, or to any other stable or longterm
> > tree, then please email the backport, including the original git commit
> > id to <stable@vger.kernel.org>.
> >
> > thanks,
> >
> > greg k-h
> ...
> > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
>
> Hello Greg! Seems that you have forgot to apply some dependency patches.
You are right, I had one, not the other, now fixed up...
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 10:09 ` Greg KH
@ 2021-02-08 10:16 ` Greg KH
2021-02-08 11:07 ` Pali Rohár
2021-02-08 11:06 ` Pali Rohár
1 sibling, 1 reply; 10+ messages in thread
From: Greg KH @ 2021-02-08 10:16 UTC (permalink / raw)
To: Pali Rohár; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Mon, Feb 08, 2021 at 11:09:52AM +0100, Greg KH wrote:
> On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > The patch below does not apply to the 5.4-stable tree.
> > > If someone wants it applied there, or to any other stable or longterm
> > > tree, then please email the backport, including the original git commit
> > > id to <stable@vger.kernel.org>.
> > >
> > > thanks,
> > >
> > > greg k-h
> > ...
> > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> >
> > Hello Greg! Seems that you have forgot to apply some dependency patches.
>
> You are right, I had one, not the other, now fixed up...
Nope, of_phy_put(phy) is not present in 5.4, so it needs a "real"
backport.
Can you do that?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 10:09 ` Greg KH
2021-02-08 10:16 ` Greg KH
@ 2021-02-08 11:06 ` Pali Rohár
2021-02-08 11:39 ` Greg KH
1 sibling, 1 reply; 10+ messages in thread
From: Pali Rohár @ 2021-02-08 11:06 UTC (permalink / raw)
To: Greg KH; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Monday 08 February 2021 11:09:52 Greg KH wrote:
> On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > The patch below does not apply to the 5.4-stable tree.
> > > If someone wants it applied there, or to any other stable or longterm
> > > tree, then please email the backport, including the original git commit
> > > id to <stable@vger.kernel.org>.
> > >
> > > thanks,
> > >
> > > greg k-h
> > ...
> > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> >
> > Hello Greg! Seems that you have forgot to apply some dependency patches.
>
> You are right, I had one, not the other, now fixed up...
Ok, great!
Btw, I have just one question: Is there some bot / machine which parses
these Fixes and Cc lines where are written required patch dependences?
Or such patch with dependences needs to be handled manually?
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 10:16 ` Greg KH
@ 2021-02-08 11:07 ` Pali Rohár
2021-02-08 14:37 ` Pali Rohár
0 siblings, 1 reply; 10+ messages in thread
From: Pali Rohár @ 2021-02-08 11:07 UTC (permalink / raw)
To: Greg KH; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Monday 08 February 2021 11:16:20 Greg KH wrote:
> On Mon, Feb 08, 2021 at 11:09:52AM +0100, Greg KH wrote:
> > On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > > The patch below does not apply to the 5.4-stable tree.
> > > > If someone wants it applied there, or to any other stable or longterm
> > > > tree, then please email the backport, including the original git commit
> > > > id to <stable@vger.kernel.org>.
> > > >
> > > > thanks,
> > > >
> > > > greg k-h
> > > ...
> > > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> > >
> > > Hello Greg! Seems that you have forgot to apply some dependency patches.
> >
> > You are right, I had one, not the other, now fixed up...
>
> Nope, of_phy_put(phy) is not present in 5.4, so it needs a "real"
> backport.
>
> Can you do that?
Ok, I will look at it.
> thanks,
>
> greg k-h
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 11:06 ` Pali Rohár
@ 2021-02-08 11:39 ` Greg KH
0 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2021-02-08 11:39 UTC (permalink / raw)
To: Pali Rohár; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Mon, Feb 08, 2021 at 12:06:23PM +0100, Pali Rohár wrote:
> On Monday 08 February 2021 11:09:52 Greg KH wrote:
> > On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > > The patch below does not apply to the 5.4-stable tree.
> > > > If someone wants it applied there, or to any other stable or longterm
> > > > tree, then please email the backport, including the original git commit
> > > > id to <stable@vger.kernel.org>.
> > > >
> > > > thanks,
> > > >
> > > > greg k-h
> > > ...
> > > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> > >
> > > Hello Greg! Seems that you have forgot to apply some dependency patches.
> >
> > You are right, I had one, not the other, now fixed up...
>
> Ok, great!
>
> Btw, I have just one question: Is there some bot / machine which parses
> these Fixes and Cc lines where are written required patch dependences?
> Or such patch with dependences needs to be handled manually?
I do it manually. But it's pretty easy, normally I notice this, but for
the USB patches I just blew through them as I "thought" I knew better :)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 11:07 ` Pali Rohár
@ 2021-02-08 14:37 ` Pali Rohár
2021-02-08 14:54 ` Greg KH
0 siblings, 1 reply; 10+ messages in thread
From: Pali Rohár @ 2021-02-08 14:37 UTC (permalink / raw)
To: Greg KH; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Monday 08 February 2021 12:07:09 Pali Rohár wrote:
> On Monday 08 February 2021 11:16:20 Greg KH wrote:
> > On Mon, Feb 08, 2021 at 11:09:52AM +0100, Greg KH wrote:
> > > On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > > > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > > > The patch below does not apply to the 5.4-stable tree.
> > > > > If someone wants it applied there, or to any other stable or longterm
> > > > > tree, then please email the backport, including the original git commit
> > > > > id to <stable@vger.kernel.org>.
> > > > >
> > > > > thanks,
> > > > >
> > > > > greg k-h
> > > > ...
> > > > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> > > >
> > > > Hello Greg! Seems that you have forgot to apply some dependency patches.
> > >
> > > You are right, I had one, not the other, now fixed up...
> >
> > Nope, of_phy_put(phy) is not present in 5.4, so it needs a "real"
> > backport.
> >
> > Can you do that?
>
> Ok, I will look at it.
Now I have backported this patch to 5.4 version and tested it with old
arm trusted firmware (for which this patch is fixing support) and also
with the new arm trusted firmware. It is working fine in both cases.
Still this patch depends on two mentioned commits which are required.
From a04199cc1ca41f91622e03dfb8d7a2536cdd4f46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
Date: Mon, 1 Feb 2021 16:08:03 +0100
Subject: [PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada
3720
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
commit 3241929b67d28c83945d3191c6816a3271fd6b85 upstream.
Older ATF does not provide SMC call for USB 3.0 phy power on functionality
and therefore initialization of xhci-hcd is failing when older version of
ATF is used. In this case phy_power_on() function returns -EOPNOTSUPP.
[ 3.108467] mvebu-a3700-comphy d0018300.phy: unsupported SMC call, try updating your firmware
[ 3.117250] phy phy-d0018300.phy.0: phy poweron failed --> -95
[ 3.123465] xhci-hcd: probe of d0058000.usb failed with error -95
This patch introduces a new plat_setup callback for xhci platform drivers
which is called prior calling usb_add_hcd() function. This function at its
beginning skips PHY init if hcd->skip_phy_initialization is set.
Current init_quirk callback for xhci platform drivers is called from
xhci_plat_setup() function which is called after chip reset completes.
It happens in the middle of the usb_add_hcd() function and therefore this
callback cannot be used for setting if PHY init should be skipped or not.
For Armada 3720 this patch introduce a new xhci_mvebu_a3700_plat_setup()
function configured as a xhci platform plat_setup callback. This new
function calls phy_power_on() and in case it returns -EOPNOTSUPP then
XHCI_SKIP_PHY_INIT quirk is set to instruct xhci-plat to skip PHY
initialization.
This patch fixes above failure by ignoring 'not supported' error in
xhci-hcd driver. In this case it is expected that phy is already power on.
It fixes initialization of xhci-hcd on Espressobin boards where is older
Marvell's Arm Trusted Firmware without SMC call for USB 3.0 phy power.
This is regression introduced in commit bd3d25b07342 ("arm64: dts: marvell:
armada-37xx: link USB hosts with their PHYs") where USB 3.0 phy was defined
and therefore xhci-hcd on Espressobin with older ATF started failing.
Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> # On R-Car
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> # xhci-plat
Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Pali Rohár <pali@kernel.org>
Link: https://lore.kernel.org/r/20210201150803.7305-1-pali@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[pali: Backported to 5.4 by replacing of_phy_put() with phy_put()]
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/usb/host/xhci-mvebu.c | 42 +++++++++++++++++++++++++++++++++++
drivers/usb/host/xhci-mvebu.h | 6 +++++
drivers/usb/host/xhci-plat.c | 20 ++++++++++++++++-
drivers/usb/host/xhci-plat.h | 1 +
4 files changed, 68 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c
index 60651a50770f..f27d5c2c42f3 100644
--- a/drivers/usb/host/xhci-mvebu.c
+++ b/drivers/usb/host/xhci-mvebu.c
@@ -8,6 +8,7 @@
#include <linux/mbus.h>
#include <linux/of.h>
#include <linux/platform_device.h>
+#include <linux/phy/phy.h>
#include <linux/usb.h>
#include <linux/usb/hcd.h>
@@ -74,6 +75,47 @@ int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
return 0;
}
+int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd)
+{
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device *dev = hcd->self.controller;
+ struct phy *phy;
+ int ret;
+
+ /* Old bindings miss the PHY handle */
+ phy = of_phy_get(dev->of_node, "usb3-phy");
+ if (IS_ERR(phy) && PTR_ERR(phy) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+ else if (IS_ERR(phy))
+ goto phy_out;
+
+ ret = phy_init(phy);
+ if (ret)
+ goto phy_put;
+
+ ret = phy_set_mode(phy, PHY_MODE_USB_HOST_SS);
+ if (ret)
+ goto phy_exit;
+
+ ret = phy_power_on(phy);
+ if (ret == -EOPNOTSUPP) {
+ /* Skip initializatin of XHCI PHY when it is unsupported by firmware */
+ dev_warn(dev, "PHY unsupported by firmware\n");
+ xhci->quirks |= XHCI_SKIP_PHY_INIT;
+ }
+ if (ret)
+ goto phy_exit;
+
+ phy_power_off(phy);
+phy_exit:
+ phy_exit(phy);
+phy_put:
+ phy_put(phy);
+phy_out:
+
+ return 0;
+}
+
int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd)
{
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
diff --git a/drivers/usb/host/xhci-mvebu.h b/drivers/usb/host/xhci-mvebu.h
index ca0a3a5721dd..74b4d21a498a 100644
--- a/drivers/usb/host/xhci-mvebu.h
+++ b/drivers/usb/host/xhci-mvebu.h
@@ -12,6 +12,7 @@ struct usb_hcd;
#if IS_ENABLED(CONFIG_USB_XHCI_MVEBU)
int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd);
+int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd);
int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd);
#else
static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
@@ -19,6 +20,11 @@ static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
return 0;
}
+static inline int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd)
+{
+ return 0;
+}
+
static inline int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd)
{
return 0;
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index 7f78818ebbb3..84cfa8544285 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -44,6 +44,16 @@ static void xhci_priv_plat_start(struct usb_hcd *hcd)
priv->plat_start(hcd);
}
+static int xhci_priv_plat_setup(struct usb_hcd *hcd)
+{
+ struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
+
+ if (!priv->plat_setup)
+ return 0;
+
+ return priv->plat_setup(hcd);
+}
+
static int xhci_priv_init_quirk(struct usb_hcd *hcd)
{
struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
@@ -101,6 +111,7 @@ static const struct xhci_plat_priv xhci_plat_marvell_armada = {
};
static const struct xhci_plat_priv xhci_plat_marvell_armada3700 = {
+ .plat_setup = xhci_mvebu_a3700_plat_setup,
.init_quirk = xhci_mvebu_a3700_init_quirk,
};
@@ -308,7 +319,14 @@ static int xhci_plat_probe(struct platform_device *pdev)
hcd->tpl_support = of_usb_host_tpl_support(sysdev->of_node);
xhci->shared_hcd->tpl_support = hcd->tpl_support;
- if (priv && (priv->quirks & XHCI_SKIP_PHY_INIT))
+
+ if (priv) {
+ ret = xhci_priv_plat_setup(hcd);
+ if (ret)
+ goto disable_usb_phy;
+ }
+
+ if ((xhci->quirks & XHCI_SKIP_PHY_INIT) || (priv && (priv->quirks & XHCI_SKIP_PHY_INIT)))
hcd->skip_phy_initialization = 1;
ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h
index 5681723fc9cd..b7749151bdfb 100644
--- a/drivers/usb/host/xhci-plat.h
+++ b/drivers/usb/host/xhci-plat.h
@@ -13,6 +13,7 @@
struct xhci_plat_priv {
const char *firmware_name;
unsigned long long quirks;
+ int (*plat_setup)(struct usb_hcd *);
void (*plat_start)(struct usb_hcd *);
int (*init_quirk)(struct usb_hcd *);
int (*resume_quirk)(struct usb_hcd *);
--
2.20.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 14:37 ` Pali Rohár
@ 2021-02-08 14:54 ` Greg KH
2021-02-08 15:00 ` Pali Rohár
0 siblings, 1 reply; 10+ messages in thread
From: Greg KH @ 2021-02-08 14:54 UTC (permalink / raw)
To: Pali Rohár; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Mon, Feb 08, 2021 at 03:37:05PM +0100, Pali Rohár wrote:
> On Monday 08 February 2021 12:07:09 Pali Rohár wrote:
> > On Monday 08 February 2021 11:16:20 Greg KH wrote:
> > > On Mon, Feb 08, 2021 at 11:09:52AM +0100, Greg KH wrote:
> > > > On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > > > > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > > > > The patch below does not apply to the 5.4-stable tree.
> > > > > > If someone wants it applied there, or to any other stable or longterm
> > > > > > tree, then please email the backport, including the original git commit
> > > > > > id to <stable@vger.kernel.org>.
> > > > > >
> > > > > > thanks,
> > > > > >
> > > > > > greg k-h
> > > > > ...
> > > > > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > > > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > > > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> > > > >
> > > > > Hello Greg! Seems that you have forgot to apply some dependency patches.
> > > >
> > > > You are right, I had one, not the other, now fixed up...
> > >
> > > Nope, of_phy_put(phy) is not present in 5.4, so it needs a "real"
> > > backport.
> > >
> > > Can you do that?
> >
> > Ok, I will look at it.
>
> Now I have backported this patch to 5.4 version and tested it with old
> arm trusted firmware (for which this patch is fixing support) and also
> with the new arm trusted firmware. It is working fine in both cases.
>
> Still this patch depends on two mentioned commits which are required.
This worked, thanks!
greg k-h
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree
2021-02-08 14:54 ` Greg KH
@ 2021-02-08 15:00 ` Pali Rohár
0 siblings, 0 replies; 10+ messages in thread
From: Pali Rohár @ 2021-02-08 15:00 UTC (permalink / raw)
To: Greg KH; +Cc: mathias.nyman, stable, tmn505, yoshihiro.shimoda.uh
On Monday 08 February 2021 15:54:10 Greg KH wrote:
> On Mon, Feb 08, 2021 at 03:37:05PM +0100, Pali Rohár wrote:
> > On Monday 08 February 2021 12:07:09 Pali Rohár wrote:
> > > On Monday 08 February 2021 11:16:20 Greg KH wrote:
> > > > On Mon, Feb 08, 2021 at 11:09:52AM +0100, Greg KH wrote:
> > > > > On Sun, Feb 07, 2021 at 04:56:21PM +0100, Pali Rohár wrote:
> > > > > > On Sunday 07 February 2021 16:30:54 gregkh@linuxfoundation.org wrote:
> > > > > > > The patch below does not apply to the 5.4-stable tree.
> > > > > > > If someone wants it applied there, or to any other stable or longterm
> > > > > > > tree, then please email the backport, including the original git commit
> > > > > > > id to <stable@vger.kernel.org>.
> > > > > > >
> > > > > > > thanks,
> > > > > > >
> > > > > > > greg k-h
> > > > > > ...
> > > > > > > Fixes: bd3d25b07342 ("arm64: dts: marvell: armada-37xx: link USB hosts with their PHYs")
> > > > > > > Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
> > > > > > > Cc: <stable@vger.kernel.org> # 5.1+: f768e718911e: usb: host: xhci-plat: add priv quirk for skip PHY initialization
> > > > > >
> > > > > > Hello Greg! Seems that you have forgot to apply some dependency patches.
> > > > >
> > > > > You are right, I had one, not the other, now fixed up...
> > > >
> > > > Nope, of_phy_put(phy) is not present in 5.4, so it needs a "real"
> > > > backport.
> > > >
> > > > Can you do that?
> > >
> > > Ok, I will look at it.
> >
> > Now I have backported this patch to 5.4 version and tested it with old
> > arm trusted firmware (for which this patch is fixing support) and also
> > with the new arm trusted firmware. It is working fine in both cases.
> >
> > Still this patch depends on two mentioned commits which are required.
>
> This worked, thanks!
>
> greg k-h
Perfect!
Just to note for other people, I have tested this backported patch on
linux 5.4 on Espressobin v5 board with "old arm trusted firmware"
version 2017.03-armada-17.10 from http://espressobin.net/tech-spec/
And on 5.4 kernel finally usb 3.0 port started working!
(of course with new arm trusted firmware compiled from source code there
is no such issue, but Espressobin comes with burned above old firmware
version)
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-02-08 15:01 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-02-07 15:30 FAILED: patch "[PATCH] usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada" failed to apply to 5.4-stable tree gregkh
2021-02-07 15:56 ` Pali Rohár
2021-02-08 10:09 ` Greg KH
2021-02-08 10:16 ` Greg KH
2021-02-08 11:07 ` Pali Rohár
2021-02-08 14:37 ` Pali Rohár
2021-02-08 14:54 ` Greg KH
2021-02-08 15:00 ` Pali Rohár
2021-02-08 11:06 ` Pali Rohár
2021-02-08 11:39 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox