Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 491a04d2 authored by David Ertman's avatar David Ertman Committed by Jeff Kirsher
Browse files

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: default avatarDave Ertman <david.m.ertman@intel.com>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 493004d0
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -327,9 +327,12 @@ bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw)
	} else if ((hw->mac.type == e1000_82574) ||
	} else if ((hw->mac.type == e1000_82574) ||
		   (hw->mac.type == e1000_82583)) {
		   (hw->mac.type == e1000_82583)) {
		u16 data;
		u16 data;
		s32 ret_val;


		factps = er32(FACTPS);
		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) &&
		if (!(factps & E1000_FACTPS_MNGCG) &&
		    ((data & E1000_NVM_INIT_CTRL2_MNGM) ==
		    ((data & E1000_NVM_INIT_CTRL2_MNGM) ==
+16 −6
Original line number Original line Diff line number Diff line
@@ -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;
	int bars, i, err, pci_using_dac;
	u16 eeprom_data = 0;
	u16 eeprom_data = 0;
	u16 eeprom_apme_mask = E1000_EEPROM_APME;
	u16 eeprom_apme_mask = E1000_EEPROM_APME;
	s32 rval = 0;


	if (ei->flags2 & FLAG2_DISABLE_ASPM_L0S)
	if (ei->flags2 & FLAG2_DISABLE_ASPM_L0S)
		aspm_disable_flag = PCIE_LINK_STATE_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) {
	} else if (adapter->flags & FLAG_APME_IN_CTRL3) {
		if (adapter->flags & FLAG_APME_CHECK_PORT_B &&
		if (adapter->flags & FLAG_APME_CHECK_PORT_B &&
		    (adapter->hw.bus.func == 1))
		    (adapter->hw.bus.func == 1))
			e1000_read_nvm(&adapter->hw, NVM_INIT_CONTROL3_PORT_B,
			rval = e1000_read_nvm(&adapter->hw,
					      NVM_INIT_CONTROL3_PORT_B,
					      1, &eeprom_data);
					      1, &eeprom_data);
		else
		else
			e1000_read_nvm(&adapter->hw, NVM_INIT_CONTROL3_PORT_A,
			rval = e1000_read_nvm(&adapter->hw,
					      NVM_INIT_CONTROL3_PORT_A,
					      1, &eeprom_data);
					      1, &eeprom_data);
	}
	}


	/* fetch WoL from EEPROM */
	/* 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;
		adapter->eeprom_wol |= E1000_WUFC_MAG;


	/* now that we have the eeprom settings, apply the special cases
	/* 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);
		device_wakeup_enable(&pdev->dev);


	/* save off EEPROM version number */
	/* 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 */
	/* reset the hardware with the new settings */
	e1000e_reset(adapter);
	e1000e_reset(adapter);
+3 −1
Original line number Original line Diff line number Diff line
@@ -327,8 +327,10 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)


		ew32(EERD, eerd);
		ew32(EERD, eerd);
		ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ);
		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;
			break;
		}


		data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA);
		data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA);
	}
	}