aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/phy.c
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2009-07-01 09:28:50 -0400
committerDavid S. Miller <davem@davemloft.net>2009-07-03 23:09:39 -0400
commit906e8d9792b1c4a8b58c1383f4c00fc4c9936fc3 (patch)
treed5d12aa0a373b3d9cb8ce072d64d3bdeffaa7400 /drivers/net/e1000e/phy.c
parent28c9195a570a32de2760310ca278d44a4fd060a4 (diff)
e1000e: delay second read of PHY_STATUS register on failure of first read
Some PHYs may require two reads of the PHY_STATUS register to determine the link status. If the PHY is being accessed by another thread it is possible the first read could timeout and fail. In this case, put a delay in so the second read will pick up the correct link status. Signed-off-by: Bruce Allan <bruce.w.allan@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/phy.c')
-rw-r--r--drivers/net/e1000e/phy.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c
index d8453946bff8..994401fd0664 100644
--- a/drivers/net/e1000e/phy.c
+++ b/drivers/net/e1000e/phy.c
@@ -1531,7 +1531,12 @@ s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
1531 */ 1531 */
1532 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status); 1532 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
1533 if (ret_val) 1533 if (ret_val)
1534 break; 1534 /*
1535 * If the first read fails, another entity may have
1536 * ownership of the resources, wait and try again to
1537 * see if they have relinquished the resources yet.
1538 */
1539 udelay(usec_interval);
1535 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status); 1540 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
1536 if (ret_val) 1541 if (ret_val)
1537 break; 1542 break;