[U-Boot] DWC3 USB driver regression
Neil Armstrong
narmstrong at baylibre.com
Wed Apr 25 08:37:57 UTC 2018
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 at 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 at 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;
More information about the U-Boot
mailing list