[PATCH] phy: phy-uclass: check the parents for phys

Angus Ainslie angus at akkea.ca
Thu Feb 3 19:08:38 CET 2022


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 at akkea.ca>
---
 drivers/phy/phy-uclass.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/phy/phy-uclass.c b/drivers/phy/phy-uclass.c
index 49e2ec25c2..8b84da3ce0 100644
--- a/drivers/phy/phy-uclass.c
+++ b/drivers/phy/phy-uclass.c
@@ -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;
-- 
2.25.1



More information about the U-Boot mailing list