net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390
authorAndrew Lunn <andrew@lunn.ch>
Wed, 1 Feb 2017 02:40:05 +0000 (03:40 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 3 Feb 2017 02:50:51 +0000 (21:50 -0500)
The internal PHYs of the mv88e6390 do not have a model ID. Trap any
calls to the ID register, and if it is zero, return the ID for the
mv88e6390. The Marvell PHY driver can then bind to this ID.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6xxx/chip.c

index bf385377a461dd44204433c6e3899819f39ff720..29190303ace0fc4cb7845fe404baeff52e2fd711 100644 (file)
@@ -2930,6 +2930,14 @@ static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg)
        err = chip->info->ops->phy_read(chip, bus, phy, reg, &val);
        mutex_unlock(&chip->reg_lock);
 
+       if (reg == MII_PHYSID2) {
+               /* Some internal PHYS don't have a model number.  Use
+                * the mv88e6390 family model number instead.
+                */
+               if (!(val & 0x3f0))
+                       val |= PORT_SWITCH_ID_PROD_NUM_6390;
+       }
+
        return err ? err : val;
 }