aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/e1000e/ethtool.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index 11f486e4ff7b..c62f0db6dcb0 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -1516,8 +1516,19 @@ static int e1000_set_es2lan_mac_loopback(struct e1000_adapter *adapter)
1516static int e1000_setup_loopback_test(struct e1000_adapter *adapter) 1516static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
1517{ 1517{
1518 struct e1000_hw *hw = &adapter->hw; 1518 struct e1000_hw *hw = &adapter->hw;
1519 u32 rctl; 1519 u32 rctl, fext_nvm11, tarc0;
1520 1520
1521 if (hw->mac.type == e1000_pch_spt) {
1522 fext_nvm11 = er32(FEXTNVM11);
1523 fext_nvm11 |= E1000_FEXTNVM11_DISABLE_MULR_FIX;
1524 ew32(FEXTNVM11, fext_nvm11);
1525 tarc0 = er32(TARC(0));
1526 /* clear bits 28 & 29 (control of MULR concurrent requests) */
1527 tarc0 &= 0xcfffffff;
1528 /* set bit 29 (value of MULR requests is now 2) */
1529 tarc0 |= 0x20000000;
1530 ew32(TARC(0), tarc0);
1531 }
1521 if (hw->phy.media_type == e1000_media_type_fiber || 1532 if (hw->phy.media_type == e1000_media_type_fiber ||
1522 hw->phy.media_type == e1000_media_type_internal_serdes) { 1533 hw->phy.media_type == e1000_media_type_internal_serdes) {
1523 switch (hw->mac.type) { 1534 switch (hw->mac.type) {
@@ -1542,7 +1553,7 @@ static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
1542static void e1000_loopback_cleanup(struct e1000_adapter *adapter) 1553static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1543{ 1554{
1544 struct e1000_hw *hw = &adapter->hw; 1555 struct e1000_hw *hw = &adapter->hw;
1545 u32 rctl; 1556 u32 rctl, fext_nvm11, tarc0;
1546 u16 phy_reg; 1557 u16 phy_reg;
1547 1558
1548 rctl = er32(RCTL); 1559 rctl = er32(RCTL);
@@ -1550,6 +1561,16 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1550 ew32(RCTL, rctl); 1561 ew32(RCTL, rctl);
1551 1562
1552 switch (hw->mac.type) { 1563 switch (hw->mac.type) {
1564 case e1000_pch_spt:
1565 fext_nvm11 = er32(FEXTNVM11);
1566 fext_nvm11 &= ~E1000_FEXTNVM11_DISABLE_MULR_FIX;
1567 ew32(FEXTNVM11, fext_nvm11);
1568 tarc0 = er32(TARC(0));
1569 /* clear bits 28 & 29 (control of MULR concurrent requests) */
1570 /* set bit 29 (value of MULR requests is now 0) */
1571 tarc0 &= 0xcfffffff;
1572 ew32(TARC(0), tarc0);
1573 /* fall through */
1553 case e1000_80003es2lan: 1574 case e1000_80003es2lan:
1554 if (hw->phy.media_type == e1000_media_type_fiber || 1575 if (hw->phy.media_type == e1000_media_type_fiber ||
1555 hw->phy.media_type == e1000_media_type_internal_serdes) { 1576 hw->phy.media_type == e1000_media_type_internal_serdes) {