mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 08:34:20 +08:00
e1000e: Add code to check return values on NVM accesses
Adding code to check and respond to previously ignored return values from NVM access functions. Issue discovered through static analysis. Signed-off-by: Dave Ertman <david.m.ertman@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
493004d04f
commit
491a04d281
@ -327,9 +327,12 @@ bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw)
|
||||
} else if ((hw->mac.type == e1000_82574) ||
|
||||
(hw->mac.type == e1000_82583)) {
|
||||
u16 data;
|
||||
s32 ret_val;
|
||||
|
||||
factps = er32(FACTPS);
|
||||
e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data);
|
||||
ret_val = e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data);
|
||||
if (ret_val)
|
||||
return false;
|
||||
|
||||
if (!(factps & E1000_FACTPS_MNGCG) &&
|
||||
((data & E1000_NVM_INIT_CTRL2_MNGM) ==
|
||||
|
@ -6708,6 +6708,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
int bars, i, err, pci_using_dac;
|
||||
u16 eeprom_data = 0;
|
||||
u16 eeprom_apme_mask = E1000_EEPROM_APME;
|
||||
s32 rval = 0;
|
||||
|
||||
if (ei->flags2 & FLAG2_DISABLE_ASPM_L0S)
|
||||
aspm_disable_flag = PCIE_LINK_STATE_L0S;
|
||||
@ -6940,15 +6941,19 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
} else if (adapter->flags & FLAG_APME_IN_CTRL3) {
|
||||
if (adapter->flags & FLAG_APME_CHECK_PORT_B &&
|
||||
(adapter->hw.bus.func == 1))
|
||||
e1000_read_nvm(&adapter->hw, NVM_INIT_CONTROL3_PORT_B,
|
||||
1, &eeprom_data);
|
||||
rval = e1000_read_nvm(&adapter->hw,
|
||||
NVM_INIT_CONTROL3_PORT_B,
|
||||
1, &eeprom_data);
|
||||
else
|
||||
e1000_read_nvm(&adapter->hw, NVM_INIT_CONTROL3_PORT_A,
|
||||
1, &eeprom_data);
|
||||
rval = e1000_read_nvm(&adapter->hw,
|
||||
NVM_INIT_CONTROL3_PORT_A,
|
||||
1, &eeprom_data);
|
||||
}
|
||||
|
||||
/* fetch WoL from EEPROM */
|
||||
if (eeprom_data & eeprom_apme_mask)
|
||||
if (rval)
|
||||
e_dbg("NVM read error getting WoL initial values: %d\n", rval);
|
||||
else if (eeprom_data & eeprom_apme_mask)
|
||||
adapter->eeprom_wol |= E1000_WUFC_MAG;
|
||||
|
||||
/* now that we have the eeprom settings, apply the special cases
|
||||
@ -6967,7 +6972,12 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
device_wakeup_enable(&pdev->dev);
|
||||
|
||||
/* save off EEPROM version number */
|
||||
e1000_read_nvm(&adapter->hw, 5, 1, &adapter->eeprom_vers);
|
||||
rval = e1000_read_nvm(&adapter->hw, 5, 1, &adapter->eeprom_vers);
|
||||
|
||||
if (rval) {
|
||||
e_dbg("NVM read error getting EEPROM version: %d\n", rval);
|
||||
adapter->eeprom_vers = 0;
|
||||
}
|
||||
|
||||
/* reset the hardware with the new settings */
|
||||
e1000e_reset(adapter);
|
||||
|
@ -327,8 +327,10 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
|
||||
|
||||
ew32(EERD, eerd);
|
||||
ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ);
|
||||
if (ret_val)
|
||||
if (ret_val) {
|
||||
e_dbg("NVM read error: %d\n", ret_val);
|
||||
break;
|
||||
}
|
||||
|
||||
data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user