]> git.karo-electronics.de Git - linux-beck.git/commitdiff
e1000e: 82571-based mezzanine card can fail ethtool link test
authorBruce Allan <bruce.w.allan@intel.com>
Wed, 24 Nov 2010 06:01:20 +0000 (06:01 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sat, 11 Dec 2010 06:13:05 +0000 (22:13 -0800)
On certain 82571-based mezzanine NICs in some blade servers, the ethtool
link test can fail due to the serdes_has_link flag not set correctly.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/e1000e/82571.c

index 9333921010cc23c7eff6d4a54ee30cbc3dc3fdbf..6942e2f86eac101c80193cfa79597c8c5bf2adde 100644 (file)
@@ -1523,8 +1523,10 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
                                    e1000_serdes_link_autoneg_progress;
                                mac->serdes_has_link = false;
                                e_dbg("AN_UP     -> AN_PROG\n");
+                       } else {
+                               mac->serdes_has_link = true;
                        }
-               break;
+                       break;
 
                case e1000_serdes_link_forced_up:
                        /*
@@ -1543,6 +1545,8 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
                                    e1000_serdes_link_autoneg_progress;
                                mac->serdes_has_link = false;
                                e_dbg("FORCED_UP -> AN_PROG\n");
+                       } else {
+                               mac->serdes_has_link = true;
                        }
                        break;
 
@@ -1598,6 +1602,7 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
                        ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));
                        mac->serdes_link_state =
                            e1000_serdes_link_autoneg_progress;
+                       mac->serdes_has_link = false;
                        e_dbg("DOWN      -> AN_PROG\n");
                        break;
                }