diff options
author | Denis Kirjanov <kda@linux-powerpc.org> | 2013-08-16 11:20:07 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-20 00:07:02 -0700 |
commit | 78f1ccc4f82cd7bbb65b0e938ed0dfd81e902fe0 (patch) | |
tree | 9361059981c87612d0de725b156bcabb9c7eb57a /drivers/net/ethernet/sis | |
parent | 2ff1cf12c9fe70e75e600404e6a4274b19d293ed (diff) | |
download | linux-78f1ccc4f82cd7bbb65b0e938ed0dfd81e902fe0.tar.bz2 |
sis900: don't restart auto-negotiation each time after link resume.
Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/sis')
-rw-r--r-- | drivers/net/ethernet/sis/sis900.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/drivers/net/ethernet/sis/sis900.c b/drivers/net/ethernet/sis/sis900.c index f5d7ad75e479..b7a39305472b 100644 --- a/drivers/net/ethernet/sis/sis900.c +++ b/drivers/net/ethernet/sis/sis900.c @@ -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)){ |