aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/82571.c
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2010-11-16 22:50:13 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2010-11-16 22:50:13 -0500
commitd478eb44f7a6b53256ae399fa7e597525b4034ee (patch)
tree05a2e01c4ff7cbabf4f5e0eda9ef8b430e1ea441 /drivers/net/e1000e/82571.c
parentb1d670f10e8078485884f0cf7e384d890909aeaa (diff)
e1000e: 82571 SerDes link handle null code word from partner
SerDes Link detection on certain 82571 mezzanine cards can fail when the link is forced, the link partner does not recognize forced link and the link partner sends null code words. Detect the null code words and return to auto-negotiation state which causes the link partner to begin responding with valid code words. Within a reasonable interval the link will finally settle as forced by both partners. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/e1000e/82571.c')
-rw-r--r--drivers/net/e1000e/82571.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
index 7236f1a53ba0..235856375ff3 100644
--- a/drivers/net/e1000e/82571.c
+++ b/drivers/net/e1000e/82571.c
@@ -1431,8 +1431,10 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1431 * auto-negotiation in the TXCW register and disable 1431 * auto-negotiation in the TXCW register and disable
1432 * forced link in the Device Control register in an 1432 * forced link in the Device Control register in an
1433 * attempt to auto-negotiate with our link partner. 1433 * attempt to auto-negotiate with our link partner.
1434 * If the partner code word is null, stop forcing
1435 * and restart auto negotiation.
1434 */ 1436 */
1435 if (rxcw & E1000_RXCW_C) { 1437 if ((rxcw & E1000_RXCW_C) || !(rxcw & E1000_RXCW_CW)) {
1436 /* Enable autoneg, and unforce link up */ 1438 /* Enable autoneg, and unforce link up */
1437 ew32(TXCW, mac->txcw); 1439 ew32(TXCW, mac->txcw);
1438 ew32(CTRL, (ctrl & ~E1000_CTRL_SLU)); 1440 ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));