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 <and...@lunn.ch>
Reviewed-by: Florian Fainelli <f.faine...@gmail.com>
---
 drivers/net/dsa/mv88e6xxx/global2.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/mv88e6xxx/global2.c 
b/drivers/net/dsa/mv88e6xxx/global2.c
index 353e26bea3c3..521a5511bd5f 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.c
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
@@ -520,7 +520,21 @@ int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip,
        if (err)
                return err;
 
-       return mv88e6xxx_g2_read(chip, GLOBAL2_SMI_PHY_DATA, val);
+       err = mv88e6xxx_g2_read(chip, GLOBAL2_SMI_PHY_DATA, val);
+       if (err)
+               return err;
+
+       if (reg == MII_PHYSID2) {
+               /* The mv88e6390 internal PHYS don't have a model number.
+                * Use the switch family model number instead.
+                */
+               if (!(*val & 0x3ff)) {
+                       if (chip->info->family == MV88E6XXX_FAMILY_6390)
+                               *val |= PORT_SWITCH_ID_PROD_NUM_6390;
+               }
+       }
+
+       return 0;
 }
 
 int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip,
-- 
2.11.0

Reply via email to