From: Sasha Neftin <sasha.nef...@intel.com>

Expose the NVM map version via drvinfo in ethtool
NVM image version is reported as firmware version for i225 device
Minor typo fix - remove space

Signed-off-by: Sasha Neftin <sasha.nef...@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.ngu...@intel.com>
---
 drivers/net/ethernet/intel/igc/igc.h         |  2 ++
 drivers/net/ethernet/intel/igc/igc_defines.h |  1 +
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 16 ++++++++++++++--
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc.h 
b/drivers/net/ethernet/intel/igc/igc.h
index 35baae900c1f..2d8b1716a20c 100644
--- a/drivers/net/ethernet/intel/igc/igc.h
+++ b/drivers/net/ethernet/intel/igc/igc.h
@@ -217,6 +217,8 @@ struct igc_adapter {
        struct timecounter tc;
        struct timespec64 prev_ptp_time; /* Pre-reset PTP clock */
        ktime_t ptp_reset_start; /* Reset time in clock mono */
+
+       char fw_version[16];
 };
 
 void igc_up(struct igc_adapter *adapter);
diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h 
b/drivers/net/ethernet/intel/igc/igc_defines.h
index 6cc958031fce..4b7251d0c4e1 100644
--- a/drivers/net/ethernet/intel/igc/igc_defines.h
+++ b/drivers/net/ethernet/intel/igc/igc_defines.h
@@ -160,6 +160,7 @@
 #define IGC_NVM_RW_REG_START   1    /* Start operation */
 #define IGC_NVM_RW_ADDR_SHIFT  2    /* Shift to the address bits */
 #define IGC_NVM_POLL_READ      0    /* Flag for polling for read complete */
+#define IGC_NVM_DEV_STARTER    5    /* Dev_starter Version */
 
 /* NVM Word Offsets */
 #define NVM_CHECKSUM_REG               0x003F
diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c 
b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 29da2710b500..7dd1ca7f3ed5 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -129,10 +129,22 @@ static void igc_ethtool_get_drvinfo(struct net_device 
*netdev,
                                    struct ethtool_drvinfo *drvinfo)
 {
        struct igc_adapter *adapter = netdev_priv(netdev);
+       struct igc_hw *hw = &adapter->hw;
+       u16 nvm_version = 0;
+
+       strscpy(drvinfo->driver, igc_driver_name, sizeof(drvinfo->driver));
+
+       /* NVM image version is reported as firmware version for i225 device */
+       hw->nvm.ops.read(hw, IGC_NVM_DEV_STARTER, 1, &nvm_version);
+
+       scnprintf(adapter->fw_version,
+                 sizeof(adapter->fw_version),
+                 "%x",
+                 nvm_version);
 
-       strlcpy(drvinfo->driver,  igc_driver_name, sizeof(drvinfo->driver));
+       strscpy(drvinfo->fw_version, adapter->fw_version,
+               sizeof(drvinfo->fw_version));
 
-       /* add fw_version here */
        strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
                sizeof(drvinfo->bus_info));
 
-- 
2.26.2

Reply via email to