net: dsa: mv88e6xxx: Fix phylink_validate for Topaz family
authorMarek Behún <marek.behun@nic.cz>
Mon, 25 Feb 2019 11:39:55 +0000 (12:39 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Feb 2019 17:47:09 +0000 (09:47 -0800)
The Topaz family should have different phylink_validate method from the
Peridot, since on Topaz the port supporting 2500BaseX mode is port 5,
not 9 and 10.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6xxx/chip.c

index 0c944ed2173e3933b4721975738a16f657b2dfdc..a3a2eb985aced2b75b8d829c256f62a9fe4d4ef4 100644 (file)
@@ -658,6 +658,20 @@ static void mv88e6185_phylink_validate(struct mv88e6xxx_chip *chip, int port,
        mv88e6065_phylink_validate(chip, port, mask, state);
 }
 
+static void mv88e6341_phylink_validate(struct mv88e6xxx_chip *chip, int port,
+                                      unsigned long *mask,
+                                      struct phylink_link_state *state)
+{
+       if (port >= 5)
+               phylink_set(mask, 2500baseX_Full);
+
+       /* No ethtool bits for 200Mbps */
+       phylink_set(mask, 1000baseT_Full);
+       phylink_set(mask, 1000baseX_Full);
+
+       mv88e6065_phylink_validate(chip, port, mask, state);
+}
+
 static void mv88e6352_phylink_validate(struct mv88e6xxx_chip *chip, int port,
                                       unsigned long *mask,
                                       struct phylink_link_state *state)
@@ -3079,7 +3093,7 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
        .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
        .serdes_power = mv88e6341_serdes_power,
        .gpio_ops = &mv88e6352_gpio_ops,
-       .phylink_validate = mv88e6390_phylink_validate,
+       .phylink_validate = mv88e6341_phylink_validate,
 };
 
 static const struct mv88e6xxx_ops mv88e6161_ops = {
@@ -3711,7 +3725,7 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
        .gpio_ops = &mv88e6352_gpio_ops,
        .avb_ops = &mv88e6390_avb_ops,
        .ptp_ops = &mv88e6352_ptp_ops,
-       .phylink_validate = mv88e6390_phylink_validate,
+       .phylink_validate = mv88e6341_phylink_validate,
 };
 
 static const struct mv88e6xxx_ops mv88e6350_ops = {