net: phy: prevent PHYs w/o Clause 22 regs from calling genphy_config_aneg
authorCamelia Groza <camelia.groza@nxp.com>
Mon, 23 Jul 2018 15:06:15 +0000 (18:06 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Jul 2018 20:02:37 +0000 (13:02 -0700)
genphy_config_aneg() should be called only by PHYs that implement
the Clause 22 register set. Prevent Clause 45 PHYs that don't implement
the register set from calling the genphy function.

Signed-off-by: Camelia Groza <camelia.groza@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy.c

index 914fe8e..04780db 100644 (file)
@@ -471,8 +471,14 @@ static int phy_config_aneg(struct phy_device *phydev)
 {
        if (phydev->drv->config_aneg)
                return phydev->drv->config_aneg(phydev);
-       else
-               return genphy_config_aneg(phydev);
+
+       /* Clause 45 PHYs that don't implement Clause 22 registers are not
+        * allowed to call genphy_config_aneg()
+        */
+       if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0)))
+               return -EOPNOTSUPP;
+
+       return genphy_config_aneg(phydev);
 }
 
 /**