diff options
author | Bruce Allan <bruce.w.allan@intel.com> | 2012-12-05 01:25:36 -0500 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2013-01-27 03:19:19 -0500 |
commit | a8fc18910b7f35a59345b5f5cd140c7f64d57d86 (patch) | |
tree | bf0229abc859a33c21348bc45cfd5314aa0b8366 | |
parent | 031554eab078705edb96e9a39665597e3fd22781 (diff) |
e1000e: fix ethtool offline register test for I217
The SHRAH[9] register on I217 has a different R/W bit-mask than RAR and
SHRAL/H registers. Set R/W bit-mask appropriately for SHRAH[9] when
testing the R/W ability of the register. Also, fix the error message log
format so that it does not provide misleading information (i.e. the logged
register address could be incorrect).
Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r-- | drivers/net/ethernet/intel/e1000e/ethtool.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c index f268cbcb751d..ceff1bf300b3 100644 --- a/drivers/net/ethernet/intel/e1000e/ethtool.c +++ b/drivers/net/ethernet/intel/e1000e/ethtool.c | |||
@@ -760,8 +760,9 @@ static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data, | |||
760 | (test[pat] & write)); | 760 | (test[pat] & write)); |
761 | val = E1000_READ_REG_ARRAY(&adapter->hw, reg, offset); | 761 | val = E1000_READ_REG_ARRAY(&adapter->hw, reg, offset); |
762 | if (val != (test[pat] & write & mask)) { | 762 | if (val != (test[pat] & write & mask)) { |
763 | e_err("pattern test reg %04X failed: got 0x%08X expected 0x%08X\n", | 763 | e_err("pattern test failed (reg 0x%05X): got 0x%08X expected 0x%08X\n", |
764 | reg + offset, val, (test[pat] & write & mask)); | 764 | reg + (offset << 2), val, |
765 | (test[pat] & write & mask)); | ||
765 | *data = reg; | 766 | *data = reg; |
766 | return 1; | 767 | return 1; |
767 | } | 768 | } |
@@ -776,7 +777,7 @@ static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data, | |||
776 | __ew32(&adapter->hw, reg, write & mask); | 777 | __ew32(&adapter->hw, reg, write & mask); |
777 | val = __er32(&adapter->hw, reg); | 778 | val = __er32(&adapter->hw, reg); |
778 | if ((write & mask) != (val & mask)) { | 779 | if ((write & mask) != (val & mask)) { |
779 | e_err("set/check reg %04X test failed: got 0x%08X expected 0x%08X\n", | 780 | e_err("set/check test failed (reg 0x%05X): got 0x%08X expected 0x%08X\n", |
780 | reg, (val & mask), (write & mask)); | 781 | reg, (val & mask), (write & mask)); |
781 | *data = reg; | 782 | *data = reg; |
782 | return 1; | 783 | return 1; |
@@ -884,12 +885,20 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data) | |||
884 | E1000_FWSM_WLOCK_MAC_SHIFT; | 885 | E1000_FWSM_WLOCK_MAC_SHIFT; |
885 | 886 | ||
886 | for (i = 0; i < mac->rar_entry_count; i++) { | 887 | for (i = 0; i < mac->rar_entry_count; i++) { |
887 | /* Cannot test write-protected SHRAL[n] registers */ | 888 | if (mac->type == e1000_pch_lpt) { |
888 | if ((wlock_mac == 1) || (wlock_mac && (i > wlock_mac))) | 889 | /* Cannot test write-protected SHRAL[n] registers */ |
889 | continue; | 890 | if ((wlock_mac == 1) || (wlock_mac && (i > wlock_mac))) |
891 | continue; | ||
892 | |||
893 | /* SHRAH[9] different than the others */ | ||
894 | if (i == 10) | ||
895 | mask |= (1 << 30); | ||
896 | else | ||
897 | mask &= ~(1 << 30); | ||
898 | } | ||
890 | 899 | ||
891 | REG_PATTERN_TEST_ARRAY(E1000_RA, ((i << 1) + 1), | 900 | REG_PATTERN_TEST_ARRAY(E1000_RA, ((i << 1) + 1), mask, |
892 | mask, 0xFFFFFFFF); | 901 | 0xFFFFFFFF); |
893 | } | 902 | } |
894 | 903 | ||
895 | for (i = 0; i < mac->mta_reg_count; i++) | 904 | for (i = 0; i < mac->mta_reg_count; i++) |