net: phy: bcm54140: apply the workaround on b0 chips
authorMichael Walle <michael@walle.cc>
Tue, 28 Apr 2020 23:06:58 +0000 (01:06 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 1 May 2020 03:55:49 +0000 (20:55 -0700)
The lower three bits of the phy_id specifies the chip stepping. The
workaround is specifically for the B0 stepping. Apply it only on these
chips.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/bcm54140.c

index 63acf34..d0498ed 100644 (file)
 #define BCM54140_HWMON_IN_ALARM_BIT(ch) ((ch) ? BCM54140_RDB_MON_ISR_3V3 \
                                              : BCM54140_RDB_MON_ISR_1V0)
 
+#define BCM54140_PHY_ID_REV(phy_id)    ((phy_id) & 0x7)
+#define BCM54140_REV_B0                        1
+
 #define BCM54140_DEFAULT_DOWNSHIFT 5
 #define BCM54140_MAX_DOWNSHIFT 9
 
@@ -632,9 +635,11 @@ static int bcm54140_config_init(struct phy_device *phydev)
        int ret;
 
        /* Apply hardware errata */
-       ret = bcm54140_b0_workaround(phydev);
-       if (ret)
-               return ret;
+       if (BCM54140_PHY_ID_REV(phydev->phy_id) == BCM54140_REV_B0) {
+               ret = bcm54140_b0_workaround(phydev);
+               if (ret)
+                       return ret;
+       }
 
        /* Unmask events we are interested in. */
        reg &= ~(BCM54140_RDB_INT_DUPLEX |