OSDN Git Service

igc: Expose the NVM version
authorSasha Neftin <sasha.neftin@intel.com>
Thu, 10 Dec 2020 06:42:09 +0000 (08:42 +0200)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Wed, 3 Feb 2021 23:20:32 +0000 (15:20 -0800)
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.neftin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/igc/igc.h
drivers/net/ethernet/intel/igc/igc_defines.h
drivers/net/ethernet/intel/igc/igc_ethtool.c

index 35baae9..2d8b171 100644 (file)
@@ -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);
index 6cc9580..4b7251d 100644 (file)
 #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
index 29da271..7dd1ca7 100644 (file)
@@ -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));