dsa: mv88e6xxx: Don't poll forced interfaces for state changes
authorAndrew Lunn <andrew@lunn.ch>
Mon, 31 Aug 2015 13:56:52 +0000 (15:56 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 31 Aug 2015 21:48:02 +0000 (14:48 -0700)
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>
drivers/net/dsa/mv88e6xxx.c

index 90dee97ae7938264cabc958b54f2e6b53ac50668..6f13f72067621411383bc381e20b314427d6c8e6 100644 (file)
@@ -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),