diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igc')
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_main.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_regs.h | 5 | 
2 files changed, 7 insertions, 1 deletions
| diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index ae17af44fe02..a5ebee7df4a8 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -6171,6 +6171,9 @@ u32 igc_rd32(struct igc_hw *hw, u32 reg)  	u8 __iomem *hw_addr = READ_ONCE(hw->hw_addr);  	u32 value = 0; +	if (IGC_REMOVED(hw_addr)) +		return ~value; +  	value = readl(&hw_addr[reg]);  	/* reads should not return all F's */ diff --git a/drivers/net/ethernet/intel/igc/igc_regs.h b/drivers/net/ethernet/intel/igc/igc_regs.h index e197a33d93a0..026c3b65fc37 100644 --- a/drivers/net/ethernet/intel/igc/igc_regs.h +++ b/drivers/net/ethernet/intel/igc/igc_regs.h @@ -306,7 +306,8 @@ u32 igc_rd32(struct igc_hw *hw, u32 reg);  #define wr32(reg, val) \  do { \  	u8 __iomem *hw_addr = READ_ONCE((hw)->hw_addr); \ -	writel((val), &hw_addr[(reg)]); \ +	if (!IGC_REMOVED(hw_addr)) \ +		writel((val), &hw_addr[(reg)]); \  } while (0)  #define rd32(reg) (igc_rd32(hw, reg)) @@ -318,4 +319,6 @@ do { \  #define array_rd32(reg, offset) (igc_rd32(hw, (reg) + ((offset) << 2))) +#define IGC_REMOVED(h) unlikely(!(h)) +  #endif |