|
|
8b9353 |
From 38f673299de759cd43b5b50c2ff3ee22bc00ec9c Mon Sep 17 00:00:00 2001
|
|
|
8b9353 |
From: Edwin Peer <edwin.peer@broadcom.com>
|
|
|
8b9353 |
Date: Sun, 5 Sep 2021 14:10:56 -0400
|
|
|
8b9353 |
Subject: [PATCH 3/6] bnxt_en: fix read of stored FW_PSID version on P5 devices
|
|
|
8b9353 |
Patch-mainline: v5.14
|
|
|
8b9353 |
Git-commit: beb55fcf950f5454715df05234bb2b2914bc97ac
|
|
|
8b9353 |
References: jsc#SLE-19704
|
|
|
8b9353 |
|
|
|
8b9353 |
P5 devices store NVM arrays using a different internal representation.
|
|
|
8b9353 |
This implementation detail permeates into the HWRM API, requiring the
|
|
|
8b9353 |
caller to explicitly index the array elements in HWRM_NVM_GET_VARIABLE
|
|
|
8b9353 |
on these devices. Conversely, older devices do not support the indexed
|
|
|
8b9353 |
mode of operation and require reading the raw NVM content.
|
|
|
8b9353 |
|
|
|
8b9353 |
Fixes: db28b6c77f40 ("bnxt_en: Fix devlink info's stored fw.psid version format.")
|
|
|
8b9353 |
Signed-off-by: Edwin Peer <edwin.peer@broadcom.com>
|
|
|
8b9353 |
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
|
|
8b9353 |
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
|
8b9353 |
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
|
|
|
8b9353 |
---
|
|
|
8b9353 |
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 45 ++++++++++++++++-------
|
|
|
8b9353 |
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 4 +-
|
|
|
8b9353 |
2 files changed, 34 insertions(+), 15 deletions(-)
|
|
|
8b9353 |
|
|
|
8b9353 |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
|
|
8b9353 |
index 95afb1a0354a..ca97f81da2ce 100644
|
|
|
8b9353 |
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
|
|
8b9353 |
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
|
|
8b9353 |
@@ -352,13 +352,16 @@ static void bnxt_copy_from_nvm_data(union devlink_param_value *dst,
|
|
|
8b9353 |
dst->vu8 = (u8)val32;
|
|
|
8b9353 |
}
|
|
|
8b9353 |
|
|
|
8b9353 |
-static int bnxt_hwrm_get_nvm_cfg_ver(struct bnxt *bp,
|
|
|
8b9353 |
- union devlink_param_value *nvm_cfg_ver)
|
|
|
8b9353 |
+static int bnxt_hwrm_get_nvm_cfg_ver(struct bnxt *bp, u32 *nvm_cfg_ver)
|
|
|
8b9353 |
{
|
|
|
8b9353 |
struct hwrm_nvm_get_variable_input *req;
|
|
|
8b9353 |
+ u16 bytes = BNXT_NVM_CFG_VER_BYTES;
|
|
|
8b9353 |
+ u16 bits = BNXT_NVM_CFG_VER_BITS;
|
|
|
8b9353 |
+ union devlink_param_value ver;
|
|
|
8b9353 |
union bnxt_nvm_data *data;
|
|
|
8b9353 |
dma_addr_t data_dma_addr;
|
|
|
8b9353 |
- int rc;
|
|
|
8b9353 |
+ int rc, i = 2;
|
|
|
8b9353 |
+ u16 dim = 1;
|
|
|
8b9353 |
|
|
|
8b9353 |
rc = hwrm_req_init(bp, req, HWRM_NVM_GET_VARIABLE);
|
|
|
8b9353 |
if (rc)
|
|
|
8b9353 |
@@ -370,16 +373,34 @@ static int bnxt_hwrm_get_nvm_cfg_ver(struct bnxt *bp,
|
|
|
8b9353 |
goto exit;
|
|
|
8b9353 |
}
|
|
|
8b9353 |
|
|
|
8b9353 |
+ /* earlier devices present as an array of raw bytes */
|
|
|
8b9353 |
+ if (!BNXT_CHIP_P5(bp)) {
|
|
|
8b9353 |
+ dim = 0;
|
|
|
8b9353 |
+ i = 0;
|
|
|
8b9353 |
+ bits *= 3; /* array of 3 version components */
|
|
|
8b9353 |
+ bytes *= 4; /* copy whole word */
|
|
|
8b9353 |
+ }
|
|
|
8b9353 |
+
|
|
|
8b9353 |
hwrm_req_hold(bp, req);
|
|
|
8b9353 |
req->dest_data_addr = cpu_to_le64(data_dma_addr);
|
|
|
8b9353 |
- req->data_len = cpu_to_le16(BNXT_NVM_CFG_VER_BITS);
|
|
|
8b9353 |
+ req->data_len = cpu_to_le16(bits);
|
|
|
8b9353 |
req->option_num = cpu_to_le16(NVM_OFF_NVM_CFG_VER);
|
|
|
8b9353 |
+ req->dimensions = cpu_to_le16(dim);
|
|
|
8b9353 |
|
|
|
8b9353 |
- rc = hwrm_req_send_silent(bp, req);
|
|
|
8b9353 |
- if (!rc)
|
|
|
8b9353 |
- bnxt_copy_from_nvm_data(nvm_cfg_ver, data,
|
|
|
8b9353 |
- BNXT_NVM_CFG_VER_BITS,
|
|
|
8b9353 |
- BNXT_NVM_CFG_VER_BYTES);
|
|
|
8b9353 |
+ while (i >= 0) {
|
|
|
8b9353 |
+ req->index_0 = cpu_to_le16(i--);
|
|
|
8b9353 |
+ rc = hwrm_req_send_silent(bp, req);
|
|
|
8b9353 |
+ if (rc)
|
|
|
8b9353 |
+ goto exit;
|
|
|
8b9353 |
+ bnxt_copy_from_nvm_data(&ver, data, bits, bytes);
|
|
|
8b9353 |
+
|
|
|
8b9353 |
+ if (BNXT_CHIP_P5(bp)) {
|
|
|
8b9353 |
+ *nvm_cfg_ver <<= 8;
|
|
|
8b9353 |
+ *nvm_cfg_ver |= ver.vu8;
|
|
|
8b9353 |
+ } else {
|
|
|
8b9353 |
+ *nvm_cfg_ver = ver.vu32;
|
|
|
8b9353 |
+ }
|
|
|
8b9353 |
+ }
|
|
|
8b9353 |
|
|
|
8b9353 |
exit:
|
|
|
8b9353 |
hwrm_req_drop(bp, req);
|
|
|
8b9353 |
@@ -416,12 +437,12 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
|
|
|
8b9353 |
{
|
|
|
8b9353 |
struct hwrm_nvm_get_dev_info_output nvm_dev_info;
|
|
|
8b9353 |
struct bnxt *bp = bnxt_get_bp_from_dl(dl);
|
|
|
8b9353 |
- union devlink_param_value nvm_cfg_ver;
|
|
|
8b9353 |
struct hwrm_ver_get_output *ver_resp;
|
|
|
8b9353 |
char mgmt_ver[FW_VER_STR_LEN];
|
|
|
8b9353 |
char roce_ver[FW_VER_STR_LEN];
|
|
|
8b9353 |
char ncsi_ver[FW_VER_STR_LEN];
|
|
|
8b9353 |
char buf[32];
|
|
|
8b9353 |
+ u32 ver = 0;
|
|
|
8b9353 |
int rc;
|
|
|
8b9353 |
|
|
|
8b9353 |
rc = devlink_info_driver_name_put(req, DRV_MODULE_NAME);
|
|
|
8b9353 |
@@ -475,9 +496,7 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
|
|
|
8b9353 |
if (rc)
|
|
|
8b9353 |
return rc;
|
|
|
8b9353 |
|
|
|
8b9353 |
- if (BNXT_PF(bp) && !bnxt_hwrm_get_nvm_cfg_ver(bp, &nvm_cfg_ver)) {
|
|
|
8b9353 |
- u32 ver = nvm_cfg_ver.vu32;
|
|
|
8b9353 |
-
|
|
|
8b9353 |
+ if (BNXT_PF(bp) && !bnxt_hwrm_get_nvm_cfg_ver(bp, &ver)) {
|
|
|
8b9353 |
sprintf(buf, "%d.%d.%d", (ver >> 16) & 0xff, (ver >> 8) & 0xff,
|
|
|
8b9353 |
ver & 0xff);
|
|
|
8b9353 |
rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
|
|
|
8b9353 |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
|
|
8b9353 |
index d22cab5d6856..d889f240da2b 100644
|
|
|
8b9353 |
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
|
|
8b9353 |
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
|
|
8b9353 |
@@ -40,8 +40,8 @@ static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
|
|
|
8b9353 |
#define NVM_OFF_ENABLE_SRIOV 401
|
|
|
8b9353 |
#define NVM_OFF_NVM_CFG_VER 602
|
|
|
8b9353 |
|
|
|
8b9353 |
-#define BNXT_NVM_CFG_VER_BITS 24
|
|
|
8b9353 |
-#define BNXT_NVM_CFG_VER_BYTES 4
|
|
|
8b9353 |
+#define BNXT_NVM_CFG_VER_BITS 8
|
|
|
8b9353 |
+#define BNXT_NVM_CFG_VER_BYTES 1
|
|
|
8b9353 |
|
|
|
8b9353 |
#define BNXT_MSIX_VEC_MAX 512
|
|
|
8b9353 |
#define BNXT_MSIX_VEC_MIN_MAX 128
|
|
|
8b9353 |
--
|
|
|
8b9353 |
2.16.4
|
|
|
8b9353 |
|