aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/igb/igb_main.c
diff options
context:
space:
mode:
authorCarolyn Wyborny <carolyn.wyborny@intel.com>2012-10-18 03:16:19 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-10-30 02:49:29 -0400
commit0b1a6f2ee85d77d02e73ea8be43e1a9d8d97ccee (patch)
tree81fc5687ac4df40f1024a52ebb425dc81c471e58 /drivers/net/ethernet/intel/igb/igb_main.c
parent9f0b8516198e8b0919774a1874fab064a2ea3ae8 (diff)
igb: Update firmware version info for ethtool output.
There are multiple places in our device nvm where the version is stored. This update fixes some output errors with some types of images and refactors the way the version data is gathered and stored for ethtool output. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@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/igb/igb_main.c')
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c76
1 files changed, 26 insertions, 50 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index b07d679b46f2..df1e7907bbaf 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -1785,58 +1785,34 @@ static const struct net_device_ops igb_netdev_ops = {
1785void igb_set_fw_version(struct igb_adapter *adapter) 1785void igb_set_fw_version(struct igb_adapter *adapter)
1786{ 1786{
1787 struct e1000_hw *hw = &adapter->hw; 1787 struct e1000_hw *hw = &adapter->hw;
1788 u16 eeprom_verh, eeprom_verl, comb_verh, comb_verl, comb_offset; 1788 struct e1000_fw_version fw;
1789 u16 major, build, patch, fw_version; 1789
1790 u32 etrack_id; 1790 igb_get_fw_version(hw, &fw);
1791 1791
1792 hw->nvm.ops.read(hw, 5, 1, &fw_version); 1792 switch (hw->mac.type) {
1793 if (adapter->hw.mac.type != e1000_i211) { 1793 case e1000_i211:
1794 hw->nvm.ops.read(hw, NVM_ETRACK_WORD, 1, &eeprom_verh);
1795 hw->nvm.ops.read(hw, (NVM_ETRACK_WORD + 1), 1, &eeprom_verl);
1796 etrack_id = (eeprom_verh << IGB_ETRACK_SHIFT) | eeprom_verl;
1797
1798 /* combo image version needs to be found */
1799 hw->nvm.ops.read(hw, NVM_COMB_VER_PTR, 1, &comb_offset);
1800 if ((comb_offset != 0x0) &&
1801 (comb_offset != IGB_NVM_VER_INVALID)) {
1802 hw->nvm.ops.read(hw, (NVM_COMB_VER_OFF + comb_offset
1803 + 1), 1, &comb_verh);
1804 hw->nvm.ops.read(hw, (NVM_COMB_VER_OFF + comb_offset),
1805 1, &comb_verl);
1806
1807 /* Only display Option Rom if it exists and is valid */
1808 if ((comb_verh && comb_verl) &&
1809 ((comb_verh != IGB_NVM_VER_INVALID) &&
1810 (comb_verl != IGB_NVM_VER_INVALID))) {
1811 major = comb_verl >> IGB_COMB_VER_SHFT;
1812 build = (comb_verl << IGB_COMB_VER_SHFT) |
1813 (comb_verh >> IGB_COMB_VER_SHFT);
1814 patch = comb_verh & IGB_COMB_VER_MASK;
1815 snprintf(adapter->fw_version,
1816 sizeof(adapter->fw_version),
1817 "%d.%d%d, 0x%08x, %d.%d.%d",
1818 (fw_version & IGB_MAJOR_MASK) >>
1819 IGB_MAJOR_SHIFT,
1820 (fw_version & IGB_MINOR_MASK) >>
1821 IGB_MINOR_SHIFT,
1822 (fw_version & IGB_BUILD_MASK),
1823 etrack_id, major, build, patch);
1824 goto out;
1825 }
1826 }
1827 snprintf(adapter->fw_version, sizeof(adapter->fw_version),
1828 "%d.%d%d, 0x%08x",
1829 (fw_version & IGB_MAJOR_MASK) >> IGB_MAJOR_SHIFT,
1830 (fw_version & IGB_MINOR_MASK) >> IGB_MINOR_SHIFT,
1831 (fw_version & IGB_BUILD_MASK), etrack_id);
1832 } else {
1833 snprintf(adapter->fw_version, sizeof(adapter->fw_version), 1794 snprintf(adapter->fw_version, sizeof(adapter->fw_version),
1834 "%d.%d%d", 1795 "%2d.%2d-%d",
1835 (fw_version & IGB_MAJOR_MASK) >> IGB_MAJOR_SHIFT, 1796 fw.invm_major, fw.invm_minor, fw.invm_img_type);
1836 (fw_version & IGB_MINOR_MASK) >> IGB_MINOR_SHIFT, 1797 break;
1837 (fw_version & IGB_BUILD_MASK)); 1798
1799 default:
1800 /* if option is rom valid, display its version too */
1801 if (fw.or_valid) {
1802 snprintf(adapter->fw_version,
1803 sizeof(adapter->fw_version),
1804 "%d.%d, 0x%08x, %d.%d.%d",
1805 fw.eep_major, fw.eep_minor, fw.etrack_id,
1806 fw.or_major, fw.or_build, fw.or_patch);
1807 /* no option rom */
1808 } else {
1809 snprintf(adapter->fw_version,
1810 sizeof(adapter->fw_version),
1811 "%d.%d, 0x%08x",
1812 fw.eep_major, fw.eep_minor, fw.etrack_id);
1813 }
1814 break;
1838 } 1815 }
1839out:
1840 return; 1816 return;
1841} 1817}
1842 1818