aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/e1000e
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2014-05-20 04:22:45 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-05-27 05:10:44 -0400
commitc6f3148c5bcad2eb9ff1c700d6c79815173aed35 (patch)
tree2ec3c4a276ebfeeec40df99c7c4251bdfb06b91c /drivers/net/ethernet/intel/e1000e
parent50844bb7f445165afda1af315bd16c93bf528185 (diff)
e1000e: Out of line __ew32_prepare/__ew32
Out of lining these two common inlines saves about 30k text size, due to their errata workarounds. 14131431 2008136 1507328 17646895 10d452f vmlinux-before-e1000e 14101415 2004040 1507328 17612783 10cbfef vmlinux-e1000e Signed-off-by: Andi Kleen <ak@linux.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/ethernet/intel/e1000e')
-rw-r--r--drivers/net/ethernet/intel/e1000e/e1000.h31
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c30
2 files changed, 32 insertions, 29 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
index 63bde99a4ab4..7785240a0da1 100644
--- a/drivers/net/ethernet/intel/e1000e/e1000.h
+++ b/drivers/net/ethernet/intel/e1000e/e1000.h
@@ -575,35 +575,8 @@ static inline u32 __er32(struct e1000_hw *hw, unsigned long reg)
575 575
576#define er32(reg) __er32(hw, E1000_##reg) 576#define er32(reg) __er32(hw, E1000_##reg)
577 577
578/** 578s32 __ew32_prepare(struct e1000_hw *hw);
579 * __ew32_prepare - prepare to write to MAC CSR register on certain parts 579void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val);
580 * @hw: pointer to the HW structure
581 *
582 * When updating the MAC CSR registers, the Manageability Engine (ME) could
583 * be accessing the registers at the same time. Normally, this is handled in
584 * h/w by an arbiter but on some parts there is a bug that acknowledges Host
585 * accesses later than it should which could result in the register to have
586 * an incorrect value. Workaround this by checking the FWSM register which
587 * has bit 24 set while ME is accessing MAC CSR registers, wait if it is set
588 * and try again a number of times.
589 **/
590static inline s32 __ew32_prepare(struct e1000_hw *hw)
591{
592 s32 i = E1000_ICH_FWSM_PCIM2PCI_COUNT;
593
594 while ((er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI) && --i)
595 udelay(50);
596
597 return i;
598}
599
600static inline void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val)
601{
602 if (hw->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
603 __ew32_prepare(hw);
604
605 writel(val, hw->hw_addr + reg);
606}
607 580
608#define ew32(reg, val) __ew32(hw, E1000_##reg, (val)) 581#define ew32(reg, val) __ew32(hw, E1000_##reg, (val))
609 582
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index e00144a4ed55..201cc93f3625 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -124,6 +124,36 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {
124}; 124};
125 125
126/** 126/**
127 * __ew32_prepare - prepare to write to MAC CSR register on certain parts
128 * @hw: pointer to the HW structure
129 *
130 * When updating the MAC CSR registers, the Manageability Engine (ME) could
131 * be accessing the registers at the same time. Normally, this is handled in
132 * h/w by an arbiter but on some parts there is a bug that acknowledges Host
133 * accesses later than it should which could result in the register to have
134 * an incorrect value. Workaround this by checking the FWSM register which
135 * has bit 24 set while ME is accessing MAC CSR registers, wait if it is set
136 * and try again a number of times.
137 **/
138s32 __ew32_prepare(struct e1000_hw *hw)
139{
140 s32 i = E1000_ICH_FWSM_PCIM2PCI_COUNT;
141
142 while ((er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI) && --i)
143 udelay(50);
144
145 return i;
146}
147
148void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val)
149{
150 if (hw->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
151 __ew32_prepare(hw);
152
153 writel(val, hw->hw_addr + reg);
154}
155
156/**
127 * e1000_regdump - register printout routine 157 * e1000_regdump - register printout routine
128 * @hw: pointer to the HW structure 158 * @hw: pointer to the HW structure
129 * @reginfo: pointer to the register info table 159 * @reginfo: pointer to the register info table