aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ertman <david.m.ertman@intel.com>2014-07-09 12:07:42 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-07-25 23:51:00 -0400
commit491a04d2812b0a665bda34ea39875833dc7a1aaf (patch)
treedccfd1e8134272c43c712d10f7f83ebadce1b1de
parent493004d04f56fd7d642bdbb2938e17e5f7d622d1 (diff)
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>
-rw-r--r--drivers/net/ethernet/intel/e1000e/manage.c5
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c22
-rw-r--r--drivers/net/ethernet/intel/e1000e/nvm.c4
3 files changed, 23 insertions, 8 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/manage.c b/drivers/net/ethernet/intel/e1000e/manage.c
index cb37ff1f1321..58856032298d 100644
--- a/drivers/net/ethernet/intel/e1000e/manage.c
+++ b/drivers/net/ethernet/intel/e1000e/manage.c
@@ -327,9 +327,12 @@ bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw)
327 } else if ((hw->mac.type == e1000_82574) || 327 } else if ((hw->mac.type == e1000_82574) ||
328 (hw->mac.type == e1000_82583)) { 328 (hw->mac.type == e1000_82583)) {
329 u16 data; 329 u16 data;
330 s32 ret_val;
330 331
331 factps = er32(FACTPS); 332 factps = er32(FACTPS);
332 e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data); 333 ret_val = e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data);
334 if (ret_val)
335 return false;
333 336
334 if (!(factps & E1000_FACTPS_MNGCG) && 337 if (!(factps & E1000_FACTPS_MNGCG) &&
335 ((data & E1000_NVM_INIT_CTRL2_MNGM) == 338 ((data & E1000_NVM_INIT_CTRL2_MNGM) ==
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 201cc93f3625..fe3e42a6c8e9 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -6708,6 +6708,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
6708 int bars, i, err, pci_using_dac; 6708 int bars, i, err, pci_using_dac;
6709 u16 eeprom_data = 0; 6709 u16 eeprom_data = 0;
6710 u16 eeprom_apme_mask = E1000_EEPROM_APME; 6710 u16 eeprom_apme_mask = E1000_EEPROM_APME;
6711 s32 rval = 0;
6711 6712
6712 if (ei->flags2 & FLAG2_DISABLE_ASPM_L0S) 6713 if (ei->flags2 & FLAG2_DISABLE_ASPM_L0S)
6713 aspm_disable_flag = PCIE_LINK_STATE_L0S; 6714 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)
6940 } else if (adapter->flags & FLAG_APME_IN_CTRL3) { 6941 } else if (adapter->flags & FLAG_APME_IN_CTRL3) {
6941 if (adapter->flags & FLAG_APME_CHECK_PORT_B && 6942 if (adapter->flags & FLAG_APME_CHECK_PORT_B &&
6942 (adapter->hw.bus.func == 1)) 6943 (adapter->hw.bus.func == 1))
6943 e1000_read_nvm(&adapter->hw, NVM_INIT_CONTROL3_PORT_B, 6944 rval = e1000_read_nvm(&adapter->hw,
6944 1, &eeprom_data); 6945 NVM_INIT_CONTROL3_PORT_B,
6946 1, &eeprom_data);
6945 else 6947 else
6946 e1000_read_nvm(&adapter->hw, NVM_INIT_CONTROL3_PORT_A, 6948 rval = e1000_read_nvm(&adapter->hw,
6947 1, &eeprom_data); 6949 NVM_INIT_CONTROL3_PORT_A,
6950 1, &eeprom_data);
6948 } 6951 }
6949 6952
6950 /* fetch WoL from EEPROM */ 6953 /* fetch WoL from EEPROM */
6951 if (eeprom_data & eeprom_apme_mask) 6954 if (rval)
6955 e_dbg("NVM read error getting WoL initial values: %d\n", rval);
6956 else if (eeprom_data & eeprom_apme_mask)
6952 adapter->eeprom_wol |= E1000_WUFC_MAG; 6957 adapter->eeprom_wol |= E1000_WUFC_MAG;
6953 6958
6954 /* now that we have the eeprom settings, apply the special cases 6959 /* 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)
6967 device_wakeup_enable(&pdev->dev); 6972 device_wakeup_enable(&pdev->dev);
6968 6973
6969 /* save off EEPROM version number */ 6974 /* save off EEPROM version number */
6970 e1000_read_nvm(&adapter->hw, 5, 1, &adapter->eeprom_vers); 6975 rval = e1000_read_nvm(&adapter->hw, 5, 1, &adapter->eeprom_vers);
6976
6977 if (rval) {
6978 e_dbg("NVM read error getting EEPROM version: %d\n", rval);
6979 adapter->eeprom_vers = 0;
6980 }
6971 6981
6972 /* reset the hardware with the new settings */ 6982 /* reset the hardware with the new settings */
6973 e1000e_reset(adapter); 6983 e1000e_reset(adapter);
diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c
index b1f212b7baf7..fa6b1036a327 100644
--- a/drivers/net/ethernet/intel/e1000e/nvm.c
+++ b/drivers/net/ethernet/intel/e1000e/nvm.c
@@ -327,8 +327,10 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
327 327
328 ew32(EERD, eerd); 328 ew32(EERD, eerd);
329 ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ); 329 ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ);
330 if (ret_val) 330 if (ret_val) {
331 e_dbg("NVM read error: %d\n", ret_val);
331 break; 332 break;
333 }
332 334
333 data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA); 335 data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA);
334 } 336 }