diff mbox series

[v1] usb: xhci: plat: Add USB 3.0 phy support

Message ID 20230407060731.20537-1-stanley_chang@realtek.com (mailing list archive)
State Accepted
Commit 9134c1fd05034dd29a1a2f010abd178af409171e
Headers show
Series [v1] usb: xhci: plat: Add USB 3.0 phy support | expand

Commit Message

Stanley Chang[昌育德] April 7, 2023, 6:07 a.m. UTC
For Realtek SoC, the usb xhci uses different driver for u2phy and u3phy.
Therefore, add a hook to retrieve the USB 3.0 PHY to XHCI plat.

Signed-off-by: Stanley Chang <stanley_chang@realtek.com>
---
 drivers/usb/host/xhci-plat.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

Comments

Klaus Kudielka May 9, 2023, 5:33 p.m. UTC | #1
On Fri, 2023-04-07 at 14:07 +0800, Stanley Chang wrote:
> For Realtek SoC, the usb xhci uses different driver for u2phy and u3phy.
> Therefore, add a hook to retrieve the USB 3.0 PHY to XHCI plat.
> 
> Signed-off-by: Stanley Chang <stanley_chang@realtek.com>
> ---
>  drivers/usb/host/xhci-plat.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
> index b9f9625467d6..61c95349b998 100644
> --- a/drivers/usb/host/xhci-plat.c
> +++ b/drivers/usb/host/xhci-plat.c
> @@ -291,6 +291,21 @@ int xhci_plat_probe(struct platform_device *pdev, struct device *sysdev, const s
>                         goto dealloc_usb2_hcd;
>                 }
>  
> +               xhci->shared_hcd->usb_phy = devm_usb_get_phy_by_phandle(sysdev,
> +                           "usb-phy", 1);
> +               if (IS_ERR(xhci->shared_hcd->usb_phy)) {
> +                       if (PTR_ERR(xhci->shared_hcd->usb_phy) != -ENODEV)
> +                               dev_err(sysdev, "%s get usb3phy fail (ret=%d)\n",

Hello,

I'm booting 6.4-rc1 on a Turris Omnia (arm/boot/dts/armada-385-turris-omnia.dts)
and get those error messages:
[    0.231609] xhci-hcd f10f0000.usb3: xhci_plat_probe get usb3phy fail (ret=-6)
[    0.239716] xhci-hcd f10f8000.usb3: xhci_plat_probe get usb3phy fail (ret=-6)

It looks like a cosmetic issue with error codes, but maybe it can be fixed?


> +                                            __func__,
> +                                           (int)PTR_ERR(xhci->shared_hcd->usb_phy));
> +                       xhci->shared_hcd->usb_phy = NULL;
> +               } else {
> +                       ret = usb_phy_init(xhci->shared_hcd->usb_phy);
> +                       if (ret)
> +                               dev_err(sysdev, "%s init usb3phy fail (ret=%d)\n",
> +                                           __func__, ret);
> +               }
> +
>                 xhci->shared_hcd->tpl_support = hcd->tpl_support;
>         }
>
Stanley Chang[昌育德] May 10, 2023, 3:16 a.m. UTC | #2
Hi Klaus,

> > diff --git a/drivers/usb/host/xhci-plat.c
> > b/drivers/usb/host/xhci-plat.c index b9f9625467d6..61c95349b998 100644
> > --- a/drivers/usb/host/xhci-plat.c
> > +++ b/drivers/usb/host/xhci-plat.c
> > @@ -291,6 +291,21 @@ int xhci_plat_probe(struct platform_device *pdev,
> struct device *sysdev, const s
> >                         goto dealloc_usb2_hcd;
> >                 }
> >
> > +               xhci->shared_hcd->usb_phy =
> devm_usb_get_phy_by_phandle(sysdev,
> > +                           "usb-phy", 1);
> > +               if (IS_ERR(xhci->shared_hcd->usb_phy)) {
> > +                       if (PTR_ERR(xhci->shared_hcd->usb_phy) !=
> -ENODEV)
> > +                               dev_err(sysdev, "%s get usb3phy fail
> > + (ret=%d)\n",
> 
> Hello,
> 
> I'm booting 6.4-rc1 on a Turris Omnia
> (arm/boot/dts/armada-385-turris-omnia.dts)
> and get those error messages:
> [    0.231609] xhci-hcd f10f0000.usb3: xhci_plat_probe get usb3phy fail
> (ret=-6)
> [    0.239716] xhci-hcd f10f8000.usb3: xhci_plat_probe get usb3phy fail
> (ret=-6)
> 
> It looks like a cosmetic issue with error codes, but maybe it can be fixed?
> 

1. I checked arm/boot/dts/armada-385-turris-omnia.dts.
The xhci node doesn't seem to have usb-phy.
In this case it should get error code -ENODEV (-19).
I'm not sure why the error code is -ENXIO (-6).
Can you provide more details?

2. This error message will be printed only when getting the usb3 phy fails.
And usb_phy set to NULL, It does not affect the original behavior.
Maybe I'm missing checking -ENXIO or some other error code.
I can delete this log according to usb2 phy situation.

Thanks,
Stanley
Klaus Kudielka May 10, 2023, 6:11 a.m. UTC | #3
On 10.05.2023 05:16, Stanley Chang[昌育德] wrote:
> Hi Klaus,
>
>>
>> I'm booting 6.4-rc1 on a Turris Omnia
>> (arm/boot/dts/armada-385-turris-omnia.dts)
>> and get those error messages:
>> [    0.231609] xhci-hcd f10f0000.usb3: xhci_plat_probe get usb3phy fail
>> (ret=-6)
>> [    0.239716] xhci-hcd f10f8000.usb3: xhci_plat_probe get usb3phy fail
>> (ret=-6)
>>
>> It looks like a cosmetic issue with error codes, but maybe it can be fixed?
>>
> 1. I checked arm/boot/dts/armada-385-turris-omnia.dts.
> The xhci node doesn't seem to have usb-phy.
> In this case it should get error code -ENODEV (-19).
> I'm not sure why the error code is -ENXIO (-6).
> Can you provide more details?

I have CONFIG_USB_PHY disabled. In that case, devm_usb_get_phy_by_phandle
is declared static inline and returns -ENXIO. See include/linux/usb/phy.h.

> 2. This error message will be printed only when getting the usb3 phy fails.
> And usb_phy set to NULL, It does not affect the original behavior.
> Maybe I'm missing checking -ENXIO or some other error code.
> I can delete this log according to usb2 phy situation.

Checking for -ENXIO in addition to -ENODEV would cover the !CONFIG_USB_PHY
case, I guess. Whether there are other "false alarm" cases, I don't know.

> Thanks,
> Stanley

Best regards, Klaus
Stanley Chang[昌育德] May 10, 2023, 6:25 a.m. UTC | #4
> >>
> >> I'm booting 6.4-rc1 on a Turris Omnia
> >> (arm/boot/dts/armada-385-turris-omnia.dts)
> >> and get those error messages:
> >> [    0.231609] xhci-hcd f10f0000.usb3: xhci_plat_probe get usb3phy fail
> >> (ret=-6)
> >> [    0.239716] xhci-hcd f10f8000.usb3: xhci_plat_probe get usb3phy fail
> >> (ret=-6)
> >>
> >> It looks like a cosmetic issue with error codes, but maybe it can be fixed?
> >>
> > 1. I checked arm/boot/dts/armada-385-turris-omnia.dts.
> > The xhci node doesn't seem to have usb-phy.
> > In this case it should get error code -ENODEV (-19).
> > I'm not sure why the error code is -ENXIO (-6).
> > Can you provide more details?
> 
> I have CONFIG_USB_PHY disabled. In that case,
> devm_usb_get_phy_by_phandle is declared static inline and returns -ENXIO.
> See include/linux/usb/phy.h.
> 
> > 2. This error message will be printed only when getting the usb3 phy fails.
> > And usb_phy set to NULL, It does not affect the original behavior.
> > Maybe I'm missing checking -ENXIO or some other error code.
> > I can delete this log according to usb2 phy situation.
> 
> Checking for -ENXIO in addition to -ENODEV would cover
> the !CONFIG_USB_PHY case, I guess. Whether there are other "false alarm"
> cases, I don't know.
> 
Okay, I will remove this log message.
I think using the log in drivers/usb/phy/phy.c can easy to debug error case.

Thanks,
Stanley
diff mbox series

Patch

diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index b9f9625467d6..61c95349b998 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -291,6 +291,21 @@  int xhci_plat_probe(struct platform_device *pdev, struct device *sysdev, const s
 			goto dealloc_usb2_hcd;
 		}
 
+		xhci->shared_hcd->usb_phy = devm_usb_get_phy_by_phandle(sysdev,
+			    "usb-phy", 1);
+		if (IS_ERR(xhci->shared_hcd->usb_phy)) {
+			if (PTR_ERR(xhci->shared_hcd->usb_phy) != -ENODEV)
+				dev_err(sysdev, "%s get usb3phy fail (ret=%d)\n",
+					     __func__,
+					    (int)PTR_ERR(xhci->shared_hcd->usb_phy));
+			xhci->shared_hcd->usb_phy = NULL;
+		} else {
+			ret = usb_phy_init(xhci->shared_hcd->usb_phy);
+			if (ret)
+				dev_err(sysdev, "%s init usb3phy fail (ret=%d)\n",
+					    __func__, ret);
+		}
+
 		xhci->shared_hcd->tpl_support = hcd->tpl_support;
 	}