Commit d0ad2ea2 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

bnxt_en: Store the running firmware version code.

We currently only store the firmware version as a string for ethtool
and devlink info.  Store it also as a version code.  The next 2
patches will need to check the firmware major version to determine
some workarounds.

We also use the 16-bit firmware version fields if the firmware is newer
and provides the 16-bit fields.
Reviewed-by: default avatarEdwin Peer <edwin.peer@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a83024b9
...@@ -7240,8 +7240,9 @@ static int __bnxt_hwrm_ver_get(struct bnxt *bp, bool silent) ...@@ -7240,8 +7240,9 @@ static int __bnxt_hwrm_ver_get(struct bnxt *bp, bool silent)
static int bnxt_hwrm_ver_get(struct bnxt *bp) static int bnxt_hwrm_ver_get(struct bnxt *bp)
{ {
struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr; struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr;
u16 fw_maj, fw_min, fw_bld, fw_rsv;
u32 dev_caps_cfg, hwrm_ver; u32 dev_caps_cfg, hwrm_ver;
int rc; int rc, len;
bp->hwrm_max_req_len = HWRM_MAX_REQ_LEN; bp->hwrm_max_req_len = HWRM_MAX_REQ_LEN;
mutex_lock(&bp->hwrm_cmd_lock); mutex_lock(&bp->hwrm_cmd_lock);
...@@ -7273,9 +7274,22 @@ static int bnxt_hwrm_ver_get(struct bnxt *bp) ...@@ -7273,9 +7274,22 @@ static int bnxt_hwrm_ver_get(struct bnxt *bp)
resp->hwrm_intf_maj_8b, resp->hwrm_intf_min_8b, resp->hwrm_intf_maj_8b, resp->hwrm_intf_min_8b,
resp->hwrm_intf_upd_8b); resp->hwrm_intf_upd_8b);
snprintf(bp->fw_ver_str, BC_HWRM_STR_LEN, "%d.%d.%d.%d", fw_maj = le16_to_cpu(resp->hwrm_fw_major);
resp->hwrm_fw_maj_8b, resp->hwrm_fw_min_8b, if (bp->hwrm_spec_code > 0x10803 && fw_maj) {
resp->hwrm_fw_bld_8b, resp->hwrm_fw_rsvd_8b); fw_min = le16_to_cpu(resp->hwrm_fw_minor);
fw_bld = le16_to_cpu(resp->hwrm_fw_build);
fw_rsv = le16_to_cpu(resp->hwrm_fw_patch);
len = FW_VER_STR_LEN;
} else {
fw_maj = resp->hwrm_fw_maj_8b;
fw_min = resp->hwrm_fw_min_8b;
fw_bld = resp->hwrm_fw_bld_8b;
fw_rsv = resp->hwrm_fw_rsvd_8b;
len = BC_HWRM_STR_LEN;
}
bp->fw_ver_code = BNXT_FW_VER_CODE(fw_maj, fw_min, fw_bld, fw_rsv);
snprintf(bp->fw_ver_str, len, "%d.%d.%d.%d", fw_maj, fw_min, fw_bld,
fw_rsv);
if (strlen(resp->active_pkg_name)) { if (strlen(resp->active_pkg_name)) {
int fw_ver_len = strlen(bp->fw_ver_str); int fw_ver_len = strlen(bp->fw_ver_str);
......
...@@ -1746,6 +1746,10 @@ struct bnxt { ...@@ -1746,6 +1746,10 @@ struct bnxt {
#define PHY_VER_STR_LEN (FW_VER_STR_LEN - BC_HWRM_STR_LEN) #define PHY_VER_STR_LEN (FW_VER_STR_LEN - BC_HWRM_STR_LEN)
char fw_ver_str[FW_VER_STR_LEN]; char fw_ver_str[FW_VER_STR_LEN];
char hwrm_ver_supp[FW_VER_STR_LEN]; char hwrm_ver_supp[FW_VER_STR_LEN];
u64 fw_ver_code;
#define BNXT_FW_VER_CODE(maj, min, bld, rsv) \
((u64)(maj) << 48 | (u64)(min) << 32 | (u64)(bld) << 16 | (rsv))
__be16 vxlan_port; __be16 vxlan_port;
u8 vxlan_port_cnt; u8 vxlan_port_cnt;
__le16 vxlan_fw_dst_port_id; __le16 vxlan_fw_dst_port_id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment