]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
phy: phy-uclass: check the parents for phys
authorAngus Ainslie <angus@akkea.ca>
Thu, 3 Feb 2022 18:08:38 +0000 (10:08 -0800)
committerSimon Glass <sjg@chromium.org>
Tue, 22 Feb 2022 17:05:44 +0000 (10:05 -0700)
The port/hub leaf nodes don't contain the phy definitions in some dts
files so check the parents.

Signed-off-by: Angus Ainslie <angus@akkea.ca>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/phy/phy-uclass.c

index 49e2ec25c28b3f1debfb820a676ad4f4cabbe35c..8b84da3ce0da48bb87418916d34dad77fae96037 100644 (file)
@@ -354,23 +354,31 @@ int generic_phy_configure(struct phy *phy, void *params)
 int generic_phy_get_bulk(struct udevice *dev, struct phy_bulk *bulk)
 {
        int i, ret, count;
+       struct udevice *phydev = dev;
 
        bulk->count = 0;
 
        /* Return if no phy declared */
-       if (!dev_read_prop(dev, "phys", NULL))
-               return 0;
+       if (!dev_read_prop(dev, "phys", NULL)) {
+               phydev = dev->parent;
+               if (!dev_read_prop(phydev, "phys", NULL)) {
+                       pr_err("%s : no phys property\n", __func__);
+                       return 0;
+               }
+       }
 
-       count = dev_count_phandle_with_args(dev, "phys", "#phy-cells", 0);
-       if (count < 1)
+       count = dev_count_phandle_with_args(phydev, "phys", "#phy-cells", 0);
+       if (count < 1) {
+               pr_err("%s : no phys found %d\n", __func__, count);
                return count;
+       }
 
-       bulk->phys = devm_kcalloc(dev, count, sizeof(struct phy), GFP_KERNEL);
+       bulk->phys = devm_kcalloc(phydev, count, sizeof(struct phy), GFP_KERNEL);
        if (!bulk->phys)
                return -ENOMEM;
 
        for (i = 0; i < count; i++) {
-               ret = generic_phy_get_by_index(dev, i, &bulk->phys[i]);
+               ret = generic_phy_get_by_index(phydev, i, &bulk->phys[i]);
                if (ret) {
                        pr_err("Failed to get PHY%d for %s\n", i, dev->name);
                        return ret;