e1000e: delay second read of PHY_STATUS register on failure of first read
authorBruce Allan <bruce.w.allan@intel.com>
Wed, 1 Jul 2009 13:28:50 +0000 (13:28 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 4 Jul 2009 03:09:39 +0000 (20:09 -0700)
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>
drivers/net/e1000e/phy.c

index d8453946bff8b118b859379a85b1af51e63e0169..994401fd0664fbc188980ea188e33bdf95fdb0ec 100644 (file)
@@ -1531,7 +1531,12 @@ s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
                 */
                ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
                if (ret_val)
-                       break;
+                       /*
+                        * If the first read fails, another entity may have
+                        * ownership of the resources, wait and try again to
+                        * see if they have relinquished the resources yet.
+                        */
+                       udelay(usec_interval);
                ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
                if (ret_val)
                        break;