2019-03-22 08:54:04

by Chen-Yu Tsai

[permalink] [raw]
Subject: [PATCH 0/2] ARM: sunxi: Fix USB host init fail on v5.1-rc1

From: Chen-Yu Tsai <[email protected]>

Hi everyone,

As previously reported [1], USB EHCI/OHCI hosts are broken on Allwinner
SoCs on v5.1-rc1. This is partially triggered by commit b97a31348379
("usb: core: comply to PHY framework"), and partially due to how the
Allwinner USB PHY driver handles phy_set_mode for non-OTG PHYs.

This series fixes this in both places.

Patch 1 makes phy-sun4i-usb accept PHY_MODE_USB_HOST for non-OTG PHYs.

Patch 2 makes the usb core fall back to setting the mode
PHY_MODE_USB_HOST if set_mode with PHY_MODE_USB_HOST_SS fails. If that
fails then the failure path is the same as before. This should make it
so existing USB 3.0 drivers are affected.

The patches don't have any dependencies on each other, and could go in
through separate branches. However this affects usability of USB input
devices and Ethernet dongles, I'd rather they go in sooner than later.

Regards
ChenYu


[1] https://lkml.org/lkml/2019/3/18/74

Chen-Yu Tsai (2):
phy: sun4i-usb: Support set_mode to USB_HOST for non-OTG PHYs
usb: core: Try generic PHY_MODE_USB_HOST if usb_phy_roothub_set_mode
fails

drivers/phy/allwinner/phy-sun4i-usb.c | 5 ++++-
drivers/usb/core/hcd.c | 3 +++
2 files changed, 7 insertions(+), 1 deletion(-)

--
2.20.1



2019-03-22 08:52:28

by Chen-Yu Tsai

[permalink] [raw]
Subject: [PATCH 1/2] phy: sun4i-usb: Support set_mode to USB_HOST for non-OTG PHYs

From: Chen-Yu Tsai <[email protected]>

While only the first PHY supports mode switching, the remaining PHYs
work in USB host mode. They should support set_mode with mode=USB_HOST
instead of failing. This is especially needed now that the USB core does
set_mode for all USB ports, which was added in commit b97a31348379 ("usb:
core: comply to PHY framework").

Make set_mode with mode=USB_HOST a no-op instead of failing for the
non-OTG USB PHYs.

Fixes: 6ba43c291961 ("phy-sun4i-usb: Add support for phy_set_mode")
Signed-off-by: Chen-Yu Tsai <[email protected]>
---
drivers/phy/allwinner/phy-sun4i-usb.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index 5163097b43df..4bbd9ede38c8 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -485,8 +485,11 @@ static int sun4i_usb_phy_set_mode(struct phy *_phy,
struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
int new_mode;

- if (phy->index != 0)
+ if (phy->index != 0) {
+ if (mode == PHY_MODE_USB_HOST)
+ return 0;
return -EINVAL;
+ }

switch (mode) {
case PHY_MODE_USB_HOST:
--
2.20.1


2019-03-22 08:52:28

by Chen-Yu Tsai

[permalink] [raw]
Subject: [PATCH 2/2] usb: core: Try generic PHY_MODE_USB_HOST if usb_phy_roothub_set_mode fails

From: Chen-Yu Tsai <[email protected]>

Some PHYs do not support PHY_MODE_USB_HOST_SS, i.e. USB 3.0 or higher.
Fall back and try the more generic PHY_MODE_USB_HOST if it fails.

Fixes: b97a31348379 ("usb: core: comply to PHY framework")
Signed-off-by: Chen-Yu Tsai <[email protected]>
---
drivers/usb/core/hcd.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 3189181bb628..975d7c1288e3 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2741,6 +2741,9 @@ int usb_add_hcd(struct usb_hcd *hcd,

retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
PHY_MODE_USB_HOST_SS);
+ if (retval)
+ retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
+ PHY_MODE_USB_HOST);
if (retval)
goto err_usb_phy_roothub_power_on;

--
2.20.1


2019-03-22 09:06:43

by Maxime Ripard

[permalink] [raw]
Subject: Re: [PATCH 0/2] ARM: sunxi: Fix USB host init fail on v5.1-rc1

On Fri, Mar 22, 2019 at 04:51:06PM +0800, Chen-Yu Tsai wrote:
> From: Chen-Yu Tsai <[email protected]>
>
> Hi everyone,
>
> As previously reported [1], USB EHCI/OHCI hosts are broken on Allwinner
> SoCs on v5.1-rc1. This is partially triggered by commit b97a31348379
> ("usb: core: comply to PHY framework"), and partially due to how the
> Allwinner USB PHY driver handles phy_set_mode for non-OTG PHYs.
>
> This series fixes this in both places.
>
> Patch 1 makes phy-sun4i-usb accept PHY_MODE_USB_HOST for non-OTG PHYs.
>
> Patch 2 makes the usb core fall back to setting the mode
> PHY_MODE_USB_HOST if set_mode with PHY_MODE_USB_HOST_SS fails. If that
> fails then the failure path is the same as before. This should make it
> so existing USB 3.0 drivers are affected.
>
> The patches don't have any dependencies on each other, and could go in
> through separate branches. However this affects usability of USB input
> devices and Ethernet dongles, I'd rather they go in sooner than later.

Acked-by: Maxime Ripard <[email protected]>

Maxime

--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


Attachments:
(No filename) (1.14 kB)
signature.asc (235.00 B)
Download all attachments

2019-03-22 12:57:20

by Neil Armstrong

[permalink] [raw]
Subject: Re: [PATCH 2/2] usb: core: Try generic PHY_MODE_USB_HOST if usb_phy_roothub_set_mode fails

On 22/03/2019 09:51, Chen-Yu Tsai wrote:
> From: Chen-Yu Tsai <[email protected]>
>
> Some PHYs do not support PHY_MODE_USB_HOST_SS, i.e. USB 3.0 or higher.
> Fall back and try the more generic PHY_MODE_USB_HOST if it fails.
>
> Fixes: b97a31348379 ("usb: core: comply to PHY framework")
> Signed-off-by: Chen-Yu Tsai <[email protected]>
> ---
> drivers/usb/core/hcd.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
> index 3189181bb628..975d7c1288e3 100644
> --- a/drivers/usb/core/hcd.c
> +++ b/drivers/usb/core/hcd.c
> @@ -2741,6 +2741,9 @@ int usb_add_hcd(struct usb_hcd *hcd,
>
> retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
> PHY_MODE_USB_HOST_SS);
> + if (retval)
> + retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
> + PHY_MODE_USB_HOST);
> if (retval)
> goto err_usb_phy_roothub_power_on;
>
>

Tested-by: Neil Armstrong <[email protected]>

This fixes USB on Amlogic GXL/GXL, tested on a Nexbox A1 with a S912 SoC running v5.1-rc1

Error was :
[ 4.851477] phy phy-d0078080.phy.3: unsupported PHY mode 5
[ 4.856266] xhci-hcd: probe of xhci-hcd.0.auto failed with error -22

Neil

2019-03-26 07:50:29

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 0/2] ARM: sunxi: Fix USB host init fail on v5.1-rc1

On Fri, Mar 22, 2019 at 04:51:06PM +0800, Chen-Yu Tsai wrote:
> From: Chen-Yu Tsai <[email protected]>
>
> Hi everyone,
>
> As previously reported [1], USB EHCI/OHCI hosts are broken on Allwinner
> SoCs on v5.1-rc1. This is partially triggered by commit b97a31348379
> ("usb: core: comply to PHY framework"), and partially due to how the
> Allwinner USB PHY driver handles phy_set_mode for non-OTG PHYs.
>
> This series fixes this in both places.
>
> Patch 1 makes phy-sun4i-usb accept PHY_MODE_USB_HOST for non-OTG PHYs.
>
> Patch 2 makes the usb core fall back to setting the mode
> PHY_MODE_USB_HOST if set_mode with PHY_MODE_USB_HOST_SS fails. If that
> fails then the failure path is the same as before. This should make it
> so existing USB 3.0 drivers are affected.
>
> The patches don't have any dependencies on each other, and could go in
> through separate branches. However this affects usability of USB input
> devices and Ethernet dongles, I'd rather they go in sooner than later.

I'll take them both now, thanks.

greg k-h