sis900: don't restart auto-negotiation each time after link resume.
authorDenis Kirjanov <kda@linux-powerpc.org>
Fri, 16 Aug 2013 07:20:07 +0000 (11:20 +0400)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Aug 2013 07:07:02 +0000 (00:07 -0700)
Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sis/sis900.c

index f5d7ad75e47903ce2156864c6dabd1444ae27baf..b7a39305472b156c05b21d0af850fd56fc3945dd 100644 (file)
@@ -1309,23 +1309,9 @@ static void sis900_timer(unsigned long data)
        struct sis900_private *sis_priv = netdev_priv(net_dev);
        struct mii_phy *mii_phy = sis_priv->mii;
        static const int next_tick = 5*HZ;
+       int speed = 0, duplex = 0;
        u16 status;
 
-       if (!sis_priv->autong_complete){
-               int uninitialized_var(speed), duplex = 0;
-
-               sis900_read_mode(net_dev, &speed, &duplex);
-               if (duplex){
-                       sis900_set_mode(sis_priv, speed, duplex);
-                       sis630_set_eq(net_dev, sis_priv->chipset_rev);
-                       netif_carrier_on(net_dev);
-               }
-
-               sis_priv->timer.expires = jiffies + HZ;
-               add_timer(&sis_priv->timer);
-               return;
-       }
-
        status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
        status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
 
@@ -1336,8 +1322,16 @@ static void sis900_timer(unsigned long data)
                status = sis900_default_phy(net_dev);
                mii_phy = sis_priv->mii;
 
-               if (status & MII_STAT_LINK)
-                       sis900_check_mode(net_dev, mii_phy);
+               if (status & MII_STAT_LINK) {
+                       WARN_ON(!(status & MII_STAT_AUTO_DONE));
+
+                       sis900_read_mode(net_dev, &speed, &duplex);
+                       if (duplex) {
+                               sis900_set_mode(sis_priv, speed, duplex);
+                               sis630_set_eq(net_dev, sis_priv->chipset_rev);
+                               netif_carrier_on(net_dev);
+                       }
+               }
        } else {
        /* Link ON -> OFF */
                 if (!(status & MII_STAT_LINK)){