aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/ethtool.c
diff options
context:
space:
mode:
authorCarolyn Wyborny <carolyn.wyborny@intel.com>2010-10-15 13:35:31 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-18 10:54:30 -0400
commitc6ce3854f098e1307ecd3bde07903d65fb14a9cb (patch)
tree5d53aecfa96574bea440747be4d0d68339dbf5f3 /drivers/net/e1000e/ethtool.c
parenta7714338aa9332e569b38c7643dc4a7bb37a0ff5 (diff)
e1000e: Fix for offline diag test failure at first call
Move link test call to later in the offline sequence, move the restore settings block to afterwards and add another reset to ensure the hardware is in a known state afterwards. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com> Acked-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/e1000e/ethtool.c')
-rw-r--r--drivers/net/e1000e/ethtool.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index b7f15b3f0e03..8984d165a39b 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -1717,13 +1717,6 @@ static void e1000_diag_test(struct net_device *netdev,
1717 1717
1718 e_info("offline testing starting\n"); 1718 e_info("offline testing starting\n");
1719 1719
1720 /*
1721 * Link test performed before hardware reset so autoneg doesn't
1722 * interfere with test result
1723 */
1724 if (e1000_link_test(adapter, &data[4]))
1725 eth_test->flags |= ETH_TEST_FL_FAILED;
1726
1727 if (if_running) 1720 if (if_running)
1728 /* indicate we're in test mode */ 1721 /* indicate we're in test mode */
1729 dev_close(netdev); 1722 dev_close(netdev);
@@ -1747,15 +1740,19 @@ static void e1000_diag_test(struct net_device *netdev,
1747 if (e1000_loopback_test(adapter, &data[3])) 1740 if (e1000_loopback_test(adapter, &data[3]))
1748 eth_test->flags |= ETH_TEST_FL_FAILED; 1741 eth_test->flags |= ETH_TEST_FL_FAILED;
1749 1742
1743 /* force this routine to wait until autoneg complete/timeout */
1744 adapter->hw.phy.autoneg_wait_to_complete = 1;
1745 e1000e_reset(adapter);
1746 adapter->hw.phy.autoneg_wait_to_complete = 0;
1747
1748 if (e1000_link_test(adapter, &data[4]))
1749 eth_test->flags |= ETH_TEST_FL_FAILED;
1750
1750 /* restore speed, duplex, autoneg settings */ 1751 /* restore speed, duplex, autoneg settings */
1751 adapter->hw.phy.autoneg_advertised = autoneg_advertised; 1752 adapter->hw.phy.autoneg_advertised = autoneg_advertised;
1752 adapter->hw.mac.forced_speed_duplex = forced_speed_duplex; 1753 adapter->hw.mac.forced_speed_duplex = forced_speed_duplex;
1753 adapter->hw.mac.autoneg = autoneg; 1754 adapter->hw.mac.autoneg = autoneg;
1754
1755 /* force this routine to wait until autoneg complete/timeout */
1756 adapter->hw.phy.autoneg_wait_to_complete = 1;
1757 e1000e_reset(adapter); 1755 e1000e_reset(adapter);
1758 adapter->hw.phy.autoneg_wait_to_complete = 0;
1759 1756
1760 clear_bit(__E1000_TESTING, &adapter->state); 1757 clear_bit(__E1000_TESTING, &adapter->state);
1761 if (if_running) 1758 if (if_running)