aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2011-05-13 03:19:42 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-06-09 23:31:24 -0400
commitd9b24135b972ccdd5f5174fba06c730e895e6daf (patch)
treeae5176a5b75cb8790d6411b5eb269edaaf31aec2 /drivers/net/e1000e
parente357964ee66723d0ced63ac1dbd1db4a6a1d417e (diff)
e1000e: disable far-end loopback mode on ESB2
The ESB2 LAN includes a debug feature that enables far-end loopback (FELB) of the SerDes/Kumeran interface. This feature is activated when receiving a sequence of symbols that includes a reserved codeword. On a perfect link, FELB would never be activated. In the presence of bit errors, there is a very small, but non-zero, probability of FELB being activated. If the FELB is activated, the SerDes link becomes non-functional and must be reset. It could also corrupt the switching tables in the switch since the ESB2 is transmitting packets with a different source MAC address. This patch disables the FELB feature. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/e1000e')
-rw-r--r--drivers/net/e1000e/es2lan.c8
-rw-r--r--drivers/net/e1000e/hw.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/e1000e/es2lan.c b/drivers/net/e1000e/es2lan.c
index f4bbeb22f51f..c0ecb2d9fdb7 100644
--- a/drivers/net/e1000e/es2lan.c
+++ b/drivers/net/e1000e/es2lan.c
@@ -836,6 +836,7 @@ static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
836 struct e1000_mac_info *mac = &hw->mac; 836 struct e1000_mac_info *mac = &hw->mac;
837 u32 reg_data; 837 u32 reg_data;
838 s32 ret_val; 838 s32 ret_val;
839 u16 kum_reg_data;
839 u16 i; 840 u16 i;
840 841
841 e1000_initialize_hw_bits_80003es2lan(hw); 842 e1000_initialize_hw_bits_80003es2lan(hw);
@@ -861,6 +862,13 @@ static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
861 /* Setup link and flow control */ 862 /* Setup link and flow control */
862 ret_val = e1000e_setup_link(hw); 863 ret_val = e1000e_setup_link(hw);
863 864
865 /* Disable IBIST slave mode (far-end loopback) */
866 e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
867 &kum_reg_data);
868 kum_reg_data |= E1000_KMRNCTRLSTA_IBIST_DISABLE;
869 e1000_write_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
870 kum_reg_data);
871
864 /* Set the transmit descriptor write-back policy */ 872 /* Set the transmit descriptor write-back policy */
865 reg_data = er32(TXDCTL(0)); 873 reg_data = er32(TXDCTL(0));
866 reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) | 874 reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h
index 6c2fa8327f5c..dde584f5ccc7 100644
--- a/drivers/net/e1000e/hw.h
+++ b/drivers/net/e1000e/hw.h
@@ -312,6 +312,7 @@ enum e1e_registers {
312#define E1000_KMRNCTRLSTA_DIAG_OFFSET 0x3 /* Kumeran Diagnostic */ 312#define E1000_KMRNCTRLSTA_DIAG_OFFSET 0x3 /* Kumeran Diagnostic */
313#define E1000_KMRNCTRLSTA_TIMEOUTS 0x4 /* Kumeran Timeouts */ 313#define E1000_KMRNCTRLSTA_TIMEOUTS 0x4 /* Kumeran Timeouts */
314#define E1000_KMRNCTRLSTA_INBAND_PARAM 0x9 /* Kumeran InBand Parameters */ 314#define E1000_KMRNCTRLSTA_INBAND_PARAM 0x9 /* Kumeran InBand Parameters */
315#define E1000_KMRNCTRLSTA_IBIST_DISABLE 0x0200 /* Kumeran IBIST Disable */
315#define E1000_KMRNCTRLSTA_DIAG_NELPBK 0x1000 /* Nearend Loopback mode */ 316#define E1000_KMRNCTRLSTA_DIAG_NELPBK 0x1000 /* Nearend Loopback mode */
316#define E1000_KMRNCTRLSTA_K1_CONFIG 0x7 317#define E1000_KMRNCTRLSTA_K1_CONFIG 0x7
317#define E1000_KMRNCTRLSTA_K1_ENABLE 0x0002 318#define E1000_KMRNCTRLSTA_K1_ENABLE 0x0002