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

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 --- 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;

On Thu, 3 Feb 2022 at 11:08, Angus Ainslie angus@akkea.ca wrote:
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
drivers/phy/phy-uclass.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
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

On Thu, 3 Feb 2022 at 11:08, Angus Ainslie angus@akkea.ca wrote:
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
drivers/phy/phy-uclass.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!
participants (2)
-
Angus Ainslie
-
Simon Glass