From: Vasundhara Volam <vasundhara-v.vo...@broadcom.com>

HWRM_VER_GET firmware command returns package name that is running
actively on the adapter.  Use this version instead of parsing from
the package log in NVRAM.

Signed-off-by: Vasundhara Volam <vasundhara-v.vo...@broadcom.com>
Signed-off-by: Michael Chan <michael.c...@broadcom.com>
diff --git a/main/Cumulus/drivers/linux/v3/bnxt.c 
b/main/Cumulus/drivers/linux/v3/bnxt.c
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c         | 9 +++++++++
 drivers/net/ethernet/broadcom/bnxt/bnxt.h         | 1 +
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 3 ++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 4e0fec2..256be9d 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -6693,6 +6693,15 @@ static int bnxt_hwrm_ver_get(struct bnxt *bp)
                 resp->hwrm_fw_maj_8b, resp->hwrm_fw_min_8b,
                 resp->hwrm_fw_bld_8b, resp->hwrm_fw_rsvd_8b);
 
+       if (strlen(resp->active_pkg_name)) {
+               int fw_ver_len = strlen(bp->fw_ver_str);
+
+               snprintf(bp->fw_ver_str + fw_ver_len,
+                        FW_VER_STR_LEN - fw_ver_len - 1, "/pkg %s",
+                        resp->active_pkg_name);
+               bp->fw_cap |= BNXT_FW_CAP_PKG_VER;
+       }
+
        bp->hwrm_cmd_timeout = le16_to_cpu(resp->def_req_timeout);
        if (!bp->hwrm_cmd_timeout)
                bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h 
b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 647f7c0..2c18f08 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1481,6 +1481,7 @@ struct bnxt {
        #define BNXT_FW_CAP_KONG_MB_CHNL                0x00000080
        #define BNXT_FW_CAP_OVS_64BIT_HANDLE            0x00000400
        #define BNXT_FW_CAP_TRUSTED_VF                  0x00000800
+       #define BNXT_FW_CAP_PKG_VER                     0x00004000
        #define BNXT_FW_CAP_PCIE_STATS_SUPPORTED        0x00020000
        #define BNXT_FW_CAP_EXT_STATS_SUPPORTED         0x00040000
 
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index bdd9d16..b126382 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -3305,7 +3305,8 @@ void bnxt_ethtool_init(struct bnxt *bp)
        struct net_device *dev = bp->dev;
        int i, rc;
 
-       bnxt_get_pkgver(dev);
+       if (!(bp->fw_cap & BNXT_FW_CAP_PKG_VER))
+               bnxt_get_pkgver(dev);
 
        if (bp->hwrm_spec_code < 0x10704 || !BNXT_SINGLE_PF(bp))
                return;
-- 
2.5.1

Reply via email to