[PATCH net-next 3/6] net: mdio: Add workaround for Micrel PHYs which are not C45 compatible

Jesse Brandeburg jesse.brandeburg at intel.com
Tue Jan 17 17:07:36 PST 2023


On 1/16/2023 4:55 AM, Michael Walle wrote:
> From: Andrew Lunn <andrew at lunn.ch>
> 
> After scanning the bus for C22 devices, check if any Micrel PHYs have
> been found.  They are known to do bad things if there are C45
> transactions on the bus. Prevent the scanning of the bus using C45 if
> such a PHY has been detected.
> 
> Signed-off-by: Andrew Lunn <andrew at lunn.ch>
> Signed-off-by: Michael Walle <michael at walle.cc>
> ---

...

> @@ -600,6 +601,31 @@ static int mdiobus_scan_bus_c45(struct mii_bus *bus)
>   	return 0;
>   }
>   
> +/* There are some C22 PHYs which do bad things when where is a C45
> + * transaction on the bus, like accepting a read themselves, and
> + * stomping over the true devices reply, to performing a write to
> + * themselves which was intended for another device. Now that C22
> + * devices have been found, see if any of them are bad for C45, and if we
> + * should skip the C45 scan.
> + */
> +static bool mdiobus_prevent_c45_scan(struct mii_bus *bus)
> +{
> +	struct phy_device *phydev;
> +	u32 oui;

nit: phydev and oui declarations can move inside the loop

> +	int i;
> +
> +	for (i = 0; i < PHY_MAX_ADDR; i++) {
> +		phydev = mdiobus_get_phy(bus, i);
> +		if (!phydev)
> +			continue;
> +		oui = phydev->phy_id >> 10;
> +
> +		if (oui == MICREL_OUI)
> +			return true;
> +	}
> +	return false;
> +}
> +
>   /**
>    * __mdiobus_register - bring up all the PHYs on a given bus and attach them to bus
>    * @bus: target mii_bus




More information about the Linux-mediatek mailing list