igb: Unset sigdetect for SERDES loopback on 82580 and i350
authorCarolyn Wyborny <carolyn.wyborny@intel.com>
Thu, 22 Nov 2012 02:49:22 +0000 (02:49 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sat, 1 Dec 2012 11:20:40 +0000 (03:20 -0800)
This patch unsets the sigdetect bit for SERDES loopback tests on 82580 and
i350 parts.  The loopback test can fail on these parts without this
setting.

Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/igb.h
drivers/net/ethernet/intel/igb/igb_ethtool.c

index c15a481..17f1686 100644 (file)
@@ -42,6 +42,8 @@
 
 struct igb_adapter;
 
+#define E1000_PCS_CFG_IGN_SD               1
+
 /* Interrupt defines */
 #define IGB_START_ITR                    648 /* ~6000 ints/sec */
 #define IGB_4K_ITR                       980
index e2288b5..bfe9208 100644 (file)
@@ -1624,6 +1624,20 @@ static int igb_setup_loopback_test(struct igb_adapter *adapter)
                reg &= ~E1000_CONNSW_ENRGSRC;
                wr32(E1000_CONNSW, reg);
 
+               /* Unset sigdetect for SERDES loopback on
+                * 82580 and i350 devices.
+                */
+               switch (hw->mac.type) {
+               case e1000_82580:
+               case e1000_i350:
+                       reg = rd32(E1000_PCS_CFG0);
+                       reg |= E1000_PCS_CFG_IGN_SD;
+                       wr32(E1000_PCS_CFG0, reg);
+                       break;
+               default:
+                       break;
+               }
+
                /* Set PCS register for forced speed */
                reg = rd32(E1000_PCS_LCTL);
                reg &= ~E1000_PCS_LCTL_AN_ENABLE;     /* Disable Autoneg*/