Propagate the external PHY settings also in 1000BaseX and
2500BaseX mode.
Signed-off-by: Heiner Kallweit <[email protected]>
---
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