Propagate the external PHY settings also in 1000BaseX and
2500BaseX mode.

Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com>
---
 drivers/net/dsa/mv88e6xxx/serdes.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c 
b/drivers/net/dsa/mv88e6xxx/serdes.c
index 6a5de1b72..238f79872 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -509,6 +509,7 @@ int mv88e6390x_serdes_power(struct mv88e6xxx_chip *chip, 
int port, bool on)
 static void mv88e6390_serdes_irq_link_sgmii(struct mv88e6xxx_chip *chip,
                                            int port, int lane)
 {
+       u8 cmode = chip->ports[port].cmode;
        struct dsa_switch *ds = chip->ds;
        int duplex = DUPLEX_UNKNOWN;
        int speed = SPEED_UNKNOWN;
@@ -525,7 +526,13 @@ static void mv88e6390_serdes_irq_link_sgmii(struct 
mv88e6xxx_chip *chip,
        link = status & MV88E6390_SGMII_PHY_STATUS_LINK ?
               LINK_FORCED_UP : LINK_FORCED_DOWN;
 
-       if (status & MV88E6390_SGMII_PHY_STATUS_SPD_DPL_VALID) {
+       if (cmode == MV88E6XXX_PORT_STS_CMODE_1000BASE_X) {
+               speed = SPEED_1000;
+               duplex = DUPLEX_FULL;
+       } else if (cmode == MV88E6XXX_PORT_STS_CMODE_2500BASEX) {
+               speed = SPEED_2500;
+               duplex = DUPLEX_FULL;
+       } else if (status & MV88E6390_SGMII_PHY_STATUS_SPD_DPL_VALID) {
                duplex = status & MV88E6390_SGMII_PHY_STATUS_DUPLEX_FULL ?
                         DUPLEX_FULL : DUPLEX_HALF;
 
-- 
2.21.0

Reply via email to