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

Simon Glass sjg at chromium.org
Sat Feb 19 23:12:10 CET 2022


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

Reviewed-by: Simon Glass <sjg at 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
>


More information about the U-Boot mailing list