diff mbox series

[U-Boot] usb: host: dwc3: fix phys init

Message ID 1524649148-27897-1-git-send-email-narmstrong@baylibre.com
State Accepted
Commit 003659bda94a1444ebdfefea3f0928f8e90f9d8f
Delegated to: Marek Vasut
Headers show
Series [U-Boot] usb: host: dwc3: fix phys init | expand

Commit Message

Neil Armstrong April 25, 2018, 9:39 a.m. UTC
When no PHYs are declared in the dwc3 node, the phy init fails.
This patch checks if the "phys" property is presend and reports
the error returned by dev_count_phandle_with_args().

This patchs also fixes the styles issues added in last commit.

This patch should fix the DWC3 support on the UniPhier SoC family.

Fixes: 7c839ea70c49 ("usb: host: dwc3: Add support for multiple PHYs")
Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/usb/host/xhci-dwc3.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

Comments

Masahiro Yamada April 25, 2018, 10 a.m. UTC | #1
2018-04-25 18:39 GMT+09:00 Neil Armstrong <narmstrong@baylibre.com>:
> When no PHYs are declared in the dwc3 node, the phy init fails.
> This patch checks if the "phys" property is presend and reports
> the error returned by dev_count_phandle_with_args().
>
> This patchs also fixes the styles issues added in last commit.
>
> This patch should fix the DWC3 support on the UniPhier SoC family.
>
> Fixes: 7c839ea70c49 ("usb: host: dwc3: Add support for multiple PHYs")
> Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> ---
>  drivers/usb/host/xhci-dwc3.c | 23 +++++++++++++----------
>  1 file changed, 13 insertions(+), 10 deletions(-)


Tested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Bin Meng April 26, 2018, 2 a.m. UTC | #2
On Wed, Apr 25, 2018 at 5:39 PM, Neil Armstrong <narmstrong@baylibre.com> wrote:
> When no PHYs are declared in the dwc3 node, the phy init fails.
> This patch checks if the "phys" property is presend and reports
> the error returned by dev_count_phandle_with_args().
>
> This patchs also fixes the styles issues added in last commit.
>
> This patch should fix the DWC3 support on the UniPhier SoC family.
>
> Fixes: 7c839ea70c49 ("usb: host: dwc3: Add support for multiple PHYs")
> Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> ---
>  drivers/usb/host/xhci-dwc3.c | 23 +++++++++++++----------
>  1 file changed, 13 insertions(+), 10 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Marek Vasut April 26, 2018, 12:03 p.m. UTC | #3
On 04/26/2018 04:00 AM, Bin Meng wrote:
> On Wed, Apr 25, 2018 at 5:39 PM, Neil Armstrong <narmstrong@baylibre.com> wrote:
>> When no PHYs are declared in the dwc3 node, the phy init fails.
>> This patch checks if the "phys" property is presend and reports
>> the error returned by dev_count_phandle_with_args().
>>
>> This patchs also fixes the styles issues added in last commit.
>>
>> This patch should fix the DWC3 support on the UniPhier SoC family.
>>
>> Fixes: 7c839ea70c49 ("usb: host: dwc3: Add support for multiple PHYs")
>> Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
>> ---
>>  drivers/usb/host/xhci-dwc3.c | 23 +++++++++++++----------
>>  1 file changed, 13 insertions(+), 10 deletions(-)
>>
> 
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> 
Applied, thanks
diff mbox series

Patch

diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index c100735..adfa4a7 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -113,16 +113,21 @@  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 (!count)
+	/* Return if no phy declared */
+	if (!dev_read_prop(dev, "phys", NULL))
 		return 0;
 
+	count = dev_count_phandle_with_args(dev, "phys", "#phy-cells");
+	if (count <= 0)
+		return count;
+
 	plat->usb_phys = devm_kcalloc(dev, count, sizeof(struct phy),
-					GFP_KERNEL);
+				      GFP_KERNEL);
 	if (!plat->usb_phys)
 		return -ENOMEM;
 
@@ -136,7 +141,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 +150,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) {
@@ -157,7 +162,6 @@  static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
 
 	return 0;
 
-
 phys_poweron_err:
 	for (; i >= 0; i--)
 		generic_phy_power_off(&plat->usb_phys[i]);
@@ -187,7 +191,7 @@  static int xhci_dwc3_shutdown_phy(struct udevice *dev)
 		ret |= generic_phy_exit(&plat->usb_phys[i]);
 		if (ret) {
 			pr_err("Can't shutdown USB PHY%d for %s\n",
-				i, dev->name);
+			       i, dev->name);
 		}
 	}
 
@@ -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;