[U-Boot] [PATCH v2] drivers: net: phy: Ignore PHY ID 0 during PHY probing

Bin Meng bmeng.cn at gmail.com
Fri Jul 5 08:57:15 UTC 2019


On Fri, Jul 5, 2019 at 4:38 PM Alex Marginean <alexm.osslist at gmail.com> wrote:
>
> Current code fails to probe some C45 PHYs that also respond to C22 reads.
> This is the case for PHYs like Aquantia AQR112, Marvell 88X2242 (as
> previously posted on the u-boot list).
> If the PHY ID reads all 0s just ignore it and try the next addr.
>
> Signed-off-by: Alex Marginean <alexm.osslist at gmail.com>
> Reviewed-By: Ramon Fried <rfried.dev at gmail.com>
> ---
>
> Changes in v2:
>         - continue with next addr instead of returning NULL right away
>         - check get_phy_id return code too
>
>  drivers/net/phy/phy.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
>
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index c1c1af9abd..d4e7556e6f 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -727,12 +727,22 @@ static struct phy_device *create_phy_by_mask(struct mii_dev *bus,
>         while (phy_mask) {
>                 int addr = ffs(phy_mask) - 1;
>                 int r = get_phy_id(bus, addr, devad, &phy_id);
> +
> +               /* If the PHY ID is flat 0 we ignore it.  There are C45 PHYs

nits: missing the changes to the comment format :)

> +                * that return all 0s for C22 reads (like Aquantia AQR112) and
> +                * there are C22 PHYs that return all 0s for C45 reads (like
> +                * Atheros AR8035).
> +                */
> +               if (r == 0 && phy_id == 0)
> +                       goto next;
> +
>                 /* If the PHY ID is mostly f's, we didn't find anything */
>                 if (r == 0 && (phy_id & 0x1fffffff) != 0x1fffffff) {
>                         is_c45 = (devad == MDIO_DEVAD_NONE) ? false : true;
>                         return phy_device_create(bus, addr, phy_id, is_c45,
>                                                  interface);
>                 }
> +next:
>                 phy_mask &= ~(1 << addr);
>         }
>         return NULL;

Other than above,
Reviewed-by: Bin Meng <bmeng.cn at gmail.com>


Regards,
Bin


More information about the U-Boot mailing list