net: dsa: mv88e6xxx: remove link polling
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 3 Oct 2015 17:09:01 +0000 (18:09 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Oct 2015 09:58:47 +0000 (02:58 -0700)
The link status is polled by the generic phy layer, there's no need to
duplicate that polling with additional polling.  This additional polling
adds additional MDIO traffic, and races with the generic phy layer,
resulting in missing or duplicated link status messages.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6123_61_65.c
drivers/net/dsa/mv88e6131.c
drivers/net/dsa/mv88e6171.c
drivers/net/dsa/mv88e6352.c
drivers/net/dsa/mv88e6xxx.c
drivers/net/dsa/mv88e6xxx.h

index 3de2a6d73fdc4dff0ac2f7071b95bbeb4bf33015..4bcfd683bbea0d2eb89e3be9246ee1bdc0c77def 100644 (file)
@@ -125,7 +125,6 @@ struct dsa_switch_driver mv88e6123_61_65_switch_driver = {
        .set_addr               = mv88e6xxx_set_addr_indirect,
        .phy_read               = mv88e6xxx_phy_read,
        .phy_write              = mv88e6xxx_phy_write,
-       .poll_link              = mv88e6xxx_poll_link,
        .get_strings            = mv88e6xxx_get_strings,
        .get_ethtool_stats      = mv88e6xxx_get_ethtool_stats,
        .get_sset_count         = mv88e6xxx_get_sset_count,
index 3e838652996507d673b918e52ec3953d07795d3f..c73121c8f1551576a66007fa6484becc14b58a69 100644 (file)
@@ -178,7 +178,6 @@ struct dsa_switch_driver mv88e6131_switch_driver = {
        .set_addr               = mv88e6xxx_set_addr_direct,
        .phy_read               = mv88e6131_phy_read,
        .phy_write              = mv88e6131_phy_write,
-       .poll_link              = mv88e6xxx_poll_link,
        .get_strings            = mv88e6xxx_get_strings,
        .get_ethtool_stats      = mv88e6xxx_get_ethtool_stats,
        .get_sset_count         = mv88e6xxx_get_sset_count,
index c2daaf087761c38c2dcbb6423c742950893a7024..c95cfab56a4f3560aad93612e6eba0fc5c1c14ed 100644 (file)
@@ -104,7 +104,6 @@ struct dsa_switch_driver mv88e6171_switch_driver = {
        .set_addr               = mv88e6xxx_set_addr_indirect,
        .phy_read               = mv88e6xxx_phy_read_indirect,
        .phy_write              = mv88e6xxx_phy_write_indirect,
-       .poll_link              = mv88e6xxx_poll_link,
        .get_strings            = mv88e6xxx_get_strings,
        .get_ethtool_stats      = mv88e6xxx_get_ethtool_stats,
        .get_sset_count         = mv88e6xxx_get_sset_count,
index 1f5129c105fb3cce995527104b049ebf6e89abac..37367060676f1881a0603527d0954ef16a6d76f7 100644 (file)
@@ -324,7 +324,6 @@ struct dsa_switch_driver mv88e6352_switch_driver = {
        .set_addr               = mv88e6xxx_set_addr_indirect,
        .phy_read               = mv88e6xxx_phy_read_indirect,
        .phy_write              = mv88e6xxx_phy_write_indirect,
-       .poll_link              = mv88e6xxx_poll_link,
        .get_strings            = mv88e6xxx_get_strings,
        .get_ethtool_stats      = mv88e6xxx_get_ethtool_stats,
        .get_sset_count         = mv88e6xxx_get_sset_count,
index 932fb720be2416ce8f50dac5ac2ecf3e231d980b..8e088e35583436fc111cfe3ca96a130828822c7a 100644 (file)
@@ -388,73 +388,6 @@ int mv88e6xxx_phy_write_ppu(struct dsa_switch *ds, int addr,
 }
 #endif
 
-void mv88e6xxx_poll_link(struct dsa_switch *ds)
-{
-       int i;
-
-       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;
-               int fc;
-
-               dev = ds->ports[i];
-               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),
-                                                        PORT_STATUS);
-                       if (port_status < 0)
-                               continue;
-
-                       link = !!(port_status & PORT_STATUS_LINK);
-               }
-
-               if (!link) {
-                       if (netif_carrier_ok(dev)) {
-                               netdev_info(dev, "link down\n");
-                               netif_carrier_off(dev);
-                       }
-                       continue;
-               }
-
-               switch (port_status & PORT_STATUS_SPEED_MASK) {
-               case PORT_STATUS_SPEED_10:
-                       speed = 10;
-                       break;
-               case PORT_STATUS_SPEED_100:
-                       speed = 100;
-                       break;
-               case PORT_STATUS_SPEED_1000:
-                       speed = 1000;
-                       break;
-               default:
-                       speed = -1;
-                       break;
-               }
-               duplex = (port_status & PORT_STATUS_DUPLEX) ? 1 : 0;
-               fc = (port_status & PORT_STATUS_PAUSE_EN) ? 1 : 0;
-
-               if (!netif_carrier_ok(dev)) {
-                       netdev_info(dev,
-                                   "link up, %d Mb/s, %s duplex, flow control %sabled\n",
-                                   speed,
-                                   duplex ? "full" : "half",
-                                   fc ? "en" : "dis");
-                       netif_carrier_on(dev);
-               }
-       }
-}
-
 static bool mv88e6xxx_6065_family(struct dsa_switch *ds)
 {
        struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
index 1cf3cf88790204f6b9b72d39809c2ce1e0659500..d8ec48710b80e11669d51c296f6f4ae7c5178bf2 100644 (file)
@@ -442,7 +442,6 @@ void mv88e6xxx_ppu_state_init(struct dsa_switch *ds);
 int mv88e6xxx_phy_read_ppu(struct dsa_switch *ds, int addr, int regnum);
 int mv88e6xxx_phy_write_ppu(struct dsa_switch *ds, int addr,
                            int regnum, u16 val);
-void mv88e6xxx_poll_link(struct dsa_switch *ds);
 void mv88e6xxx_get_strings(struct dsa_switch *ds, int port, uint8_t *data);
 void mv88e6xxx_get_ethtool_stats(struct dsa_switch *ds, int port,
                                 uint64_t *data);