diff options
author | Andrew Lunn <andrew@lunn.ch> | 2015-08-31 15:56:52 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-08-31 14:48:02 -0700 |
commit | 8b59d19e749b8cb454b7912396c2a6a1b91b9d30 (patch) | |
tree | 75d1f71f2434bd4c6ae254a0395d1e194eb89ca6 /drivers/net/dsa | |
parent | e7e72ac05acc357065a9448314dd14fff7c40d39 (diff) | |
download | linux-8b59d19e749b8cb454b7912396c2a6a1b91b9d30.tar.bz2 |
dsa: mv88e6xxx: Don't poll forced interfaces for state changes
When polling for link status, don't consider ports which have a forced
link. Such ports don't monitor their phy or may not even have a phy.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r-- | drivers/net/dsa/mv88e6xxx.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c index 90dee97ae793..6f13f7206762 100644 --- a/drivers/net/dsa/mv88e6xxx.c +++ b/drivers/net/dsa/mv88e6xxx.c @@ -395,6 +395,7 @@ void mv88e6xxx_poll_link(struct dsa_switch *ds) for (i = 0; i < DSA_MAX_PORTS; i++) { struct net_device *dev; int uninitialized_var(port_status); + int pcs_ctrl; int link; int speed; int duplex; @@ -404,6 +405,10 @@ void mv88e6xxx_poll_link(struct dsa_switch *ds) if (dev == NULL) continue; + pcs_ctrl = mv88e6xxx_reg_read(ds, REG_PORT(i), PORT_PCS_CTRL); + if (pcs_ctrl < 0 || pcs_ctrl & PORT_PCS_CTRL_FORCE_LINK) + continue; + link = 0; if (dev->flags & IFF_UP) { port_status = mv88e6xxx_reg_read(ds, REG_PORT(i), |