[U-Boot] DWC3 USB driver regression

Hi.
I found DWC3 usb driver on UniPhier SoC family not working.
I did git-bisect, and the first bad commit is
7c839ea70c4991e8d4c322e074359ac5e155d59d is the first bad commit commit 7c839ea70c4991e8d4c322e074359ac5e155d59d Author: Neil Armstrong narmstrong@baylibre.com Date: Wed Apr 11 17:08:01 2018 +0200
usb: host: dwc3: Add support for multiple PHYs
DWC3 Ips can have more than 1 PHY for USB2 and 1 PHY for USB3, add support for a generic number of PHYs and adapt the code to handle a generic number of PHYs.
Signed-off-by: Neil Armstrong narmstrong@baylibre.com
If I revert this commit, I can get the USB on my board working.
Any insight about the cause of the problem?

On 25/04/2018 06:21, Masahiro Yamada wrote:
Hi.
I found DWC3 usb driver on UniPhier SoC family not working.
I did git-bisect, and the first bad commit is
7c839ea70c4991e8d4c322e074359ac5e155d59d is the first bad commit commit 7c839ea70c4991e8d4c322e074359ac5e155d59d Author: Neil Armstrong narmstrong@baylibre.com Date: Wed Apr 11 17:08:01 2018 +0200
usb: host: dwc3: Add support for multiple PHYs DWC3 Ips can have more than 1 PHY for USB2 and 1 PHY for USB3, add support for a generic number of PHYs and adapt the code to handle a generic number of PHYs. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
If I revert this commit, I can get the USB on my board working.
Any insight about the cause of the problem?
Hi,
Let me have a look.
Neil

Hi,
On 25/04/2018 06:21, Masahiro Yamada wrote:
Hi.
I found DWC3 usb driver on UniPhier SoC family not working.
I did git-bisect, and the first bad commit is
7c839ea70c4991e8d4c322e074359ac5e155d59d is the first bad commit commit 7c839ea70c4991e8d4c322e074359ac5e155d59d Author: Neil Armstrong narmstrong@baylibre.com Date: Wed Apr 11 17:08:01 2018 +0200
usb: host: dwc3: Add support for multiple PHYs DWC3 Ips can have more than 1 PHY for USB2 and 1 PHY for USB3, add support for a generic number of PHYs and adapt the code to handle a generic number of PHYs. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
If I revert this commit, I can get the USB on my board working.
Any insight about the cause of the problem?
Can you test this ?
====><=============================
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c index c100735..4e6bf5a 100644 --- a/drivers/usb/host/xhci-dwc3.c +++ b/drivers/usb/host/xhci-dwc3.c @@ -113,11 +113,15 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val) }
#ifdef CONFIG_DM_USB -static int xhci_dwc3_setup_phy(struct udevice *dev, int count) +static int xhci_dwc3_setup_phy(struct udevice *dev) { struct xhci_dwc3_platdata *plat = dev_get_platdata(dev); - int i, ret; + int i, ret, count; + + if (!dev_read_prop(dev, "phys", NULL)) + return 0;
+ count = dev_count_phandle_with_args(dev, "phys", "#phy-cells"); if (!count) return 0;
@@ -136,7 +140,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
++plat->num_phys; } - + for (i = 0; i < plat->num_phys; i++) { ret = generic_phy_init(&plat->usb_phys[i]); if (ret) { @@ -145,7 +149,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count) goto phys_init_err; } } - + for (i = 0; i < plat->num_phys; i++) { ret = generic_phy_power_on(&plat->usb_phys[i]); if (ret) { @@ -206,8 +210,7 @@ static int xhci_dwc3_probe(struct udevice *dev) hcor = (struct xhci_hcor *)((uintptr_t)hccr + HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
- ret = xhci_dwc3_setup_phy(dev, dev_count_phandle_with_args( - dev, "phys", "#phy-cells")); + ret = xhci_dwc3_setup_phy(dev); if (ret) return ret;

Hi Neil.
2018-04-25 17:37 GMT+09:00 Neil Armstrong narmstrong@baylibre.com:
Hi,
On 25/04/2018 06:21, Masahiro Yamada wrote:
Hi.
I found DWC3 usb driver on UniPhier SoC family not working.
I did git-bisect, and the first bad commit is
7c839ea70c4991e8d4c322e074359ac5e155d59d is the first bad commit commit 7c839ea70c4991e8d4c322e074359ac5e155d59d Author: Neil Armstrong narmstrong@baylibre.com Date: Wed Apr 11 17:08:01 2018 +0200
usb: host: dwc3: Add support for multiple PHYs DWC3 Ips can have more than 1 PHY for USB2 and 1 PHY for USB3, add support for a generic number of PHYs and adapt the code to handle a generic number of PHYs. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
If I revert this commit, I can get the USB on my board working.
Any insight about the cause of the problem?
Can you test this ?
====><=============================
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c index c100735..4e6bf5a 100644 --- a/drivers/usb/host/xhci-dwc3.c +++ b/drivers/usb/host/xhci-dwc3.c @@ -113,11 +113,15 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val) }
#ifdef CONFIG_DM_USB -static int xhci_dwc3_setup_phy(struct udevice *dev, int count) +static int xhci_dwc3_setup_phy(struct udevice *dev) { struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
int i, ret;
int i, ret, count;
if (!dev_read_prop(dev, "phys", NULL))
return 0;
count = dev_count_phandle_with_args(dev, "phys", "#phy-cells"); if (!count) return 0;
@@ -136,7 +140,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
++plat->num_phys; }
for (i = 0; i < plat->num_phys; i++) { ret = generic_phy_init(&plat->usb_phys[i]); if (ret) {
@@ -145,7 +149,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count) goto phys_init_err; } }
for (i = 0; i < plat->num_phys; i++) { ret = generic_phy_power_on(&plat->usb_phys[i]); if (ret) {
@@ -206,8 +210,7 @@ static int xhci_dwc3_probe(struct udevice *dev) hcor = (struct xhci_hcor *)((uintptr_t)hccr + HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
ret = xhci_dwc3_setup_phy(dev, dev_count_phandle_with_args(
dev, "phys", "#phy-cells"));
ret = xhci_dwc3_setup_phy(dev); if (ret) return ret;
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Yeah, it fixed the problem.
In my case, the "phy" property is missing in the DWC3 node, so dev_count_phandle_with_args() returns a negative error code.
Thanks.

Hi,
On 25/04/2018 11:09, Masahiro Yamada wrote:
Hi Neil.
2018-04-25 17:37 GMT+09:00 Neil Armstrong narmstrong@baylibre.com:
Hi,
On 25/04/2018 06:21, Masahiro Yamada wrote:
Hi.
I found DWC3 usb driver on UniPhier SoC family not working.
I did git-bisect, and the first bad commit is
7c839ea70c4991e8d4c322e074359ac5e155d59d is the first bad commit commit 7c839ea70c4991e8d4c322e074359ac5e155d59d Author: Neil Armstrong narmstrong@baylibre.com Date: Wed Apr 11 17:08:01 2018 +0200
usb: host: dwc3: Add support for multiple PHYs DWC3 Ips can have more than 1 PHY for USB2 and 1 PHY for USB3, add support for a generic number of PHYs and adapt the code to handle a generic number of PHYs. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
If I revert this commit, I can get the USB on my board working.
Any insight about the cause of the problem?
[...]
Yeah, it fixed the problem.
In my case, the "phy" property is missing in the DWC3 node, so dev_count_phandle_with_args() returns a negative error code.
Thanks.
I sent a "usb: host: dwc3: fix phys init" patch, can you test it and report the test result for Marek ?
Thanks for testing, Neil
participants (2)
-
Masahiro Yamada
-
Neil Armstrong