diff mbox series

[net-next,9/9] bnxt_en: Add stored FW version info to devlink info_get cb.

Message ID 1602411781-6012-10-git-send-email-michael.chan@broadcom.com (mailing list archive)
State Not Applicable
Delegated to: Netdev Maintainers
Headers show
Series bnxt_en: Updates for net-next. | expand

Commit Message

Michael Chan Oct. 11, 2020, 10:23 a.m. UTC
From: Vasundhara Volam <vasundhara-v.volam@broadcom.com>

This patch adds FW versions stored in the flash to devlink info_get
callback.  Return the correct fw.psid running version using the
newly added bp->nvm_cfg_ver.

Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 .../net/ethernet/broadcom/bnxt/bnxt_devlink.c | 45 ++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

Comments

Jakub Kicinski Oct. 11, 2020, 10:02 p.m. UTC | #1
On Sun, 11 Oct 2020 06:23:01 -0400 Michael Chan wrote:
> +	rc = bnxt_hwrm_nvm_get_dev_info(bp, &nvm_dev_info);
> +	if (rc)
> +		return rc;

This will not cause an error to be returned for the entire operation on
older FW or HW, right?

> +	if (!(nvm_dev_info.flags & NVM_GET_DEV_INFO_RESP_FLAGS_FW_VER_VALID))
> +		return 0;


> +	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
> +			      DEVLINK_INFO_VERSION_GENERIC_FW_ROCE, roce_ver);
>  	return rc;

return bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
			DEVLINK_INFO_VERSION_GENERIC_FW_ROCE, roce_ver);
Michael Chan Oct. 11, 2020, 10:31 p.m. UTC | #2
On Sun, Oct 11, 2020 at 3:02 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Sun, 11 Oct 2020 06:23:01 -0400 Michael Chan wrote:
> > +     rc = bnxt_hwrm_nvm_get_dev_info(bp, &nvm_dev_info);
> > +     if (rc)
> > +             return rc;
>
> This will not cause an error to be returned for the entire operation on
> older FW or HW, right?
>

I don't think so.  This firmware call has been around for many years.
The call was recently extended to return the stored version
information but older firmware will still return successfully without
the stored versions.  I'll ask Vasundhara to double check on this.
Vasundhara Volam Oct. 12, 2020, 3:06 a.m. UTC | #3
On Mon, Oct 12, 2020 at 4:01 AM Michael Chan <michael.chan@broadcom.com> wrote:
>
> On Sun, Oct 11, 2020 at 3:02 PM Jakub Kicinski <kuba@kernel.org> wrote:
> >
> > On Sun, 11 Oct 2020 06:23:01 -0400 Michael Chan wrote:
> > > +     rc = bnxt_hwrm_nvm_get_dev_info(bp, &nvm_dev_info);
> > > +     if (rc)
> > > +             return rc;
> >
> > This will not cause an error to be returned for the entire operation on
> > older FW or HW, right?
> >
>
> I don't think so.  This firmware call has been around for many years.
> The call was recently extended to return the stored version
> information but older firmware will still return successfully without
> the stored versions.  I'll ask Vasundhara to double check on this.
Yes, older firmware will return success and does not set the new flag
support for stored firmware versions. Only in error cases, older or
newer FW will return error. Thanks.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index 65e8da1f7a01..7631c2d4c19e 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -408,6 +408,7 @@  static int bnxt_dl_info_put(struct bnxt *bp, struct devlink_info_req *req,
 static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
 			    struct netlink_ext_ack *extack)
 {
+	struct hwrm_nvm_get_dev_info_output nvm_dev_info;
 	struct bnxt *bp = bnxt_get_bp_from_dl(dl);
 	union devlink_param_value nvm_cfg_ver;
 	struct hwrm_ver_get_output *ver_resp;
@@ -455,6 +456,12 @@  static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
 	if (rc)
 		return rc;
 
+	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_RUNNING,
+			      DEVLINK_INFO_VERSION_GENERIC_FW_PSID,
+			      bp->nvm_cfg_ver);
+	if (rc)
+		return rc;
+
 	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_RUNNING,
 			      DEVLINK_INFO_VERSION_GENERIC_FW,
 			      ver_resp->active_pkg_name);
@@ -466,7 +473,7 @@  static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
 
 		sprintf(buf, "%X.%X.%X", (ver >> 16) & 0xF, (ver >> 8) & 0xF,
 			ver & 0xF);
-		rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_RUNNING,
+		rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
 				      DEVLINK_INFO_VERSION_GENERIC_FW_PSID,
 				      buf);
 		if (rc)
@@ -516,7 +523,43 @@  static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
 
 	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_RUNNING,
 			      DEVLINK_INFO_VERSION_GENERIC_FW_ROCE, roce_ver);
+	if (rc)
+		return rc;
+
+	rc = bnxt_hwrm_nvm_get_dev_info(bp, &nvm_dev_info);
+	if (rc)
+		return rc;
+
+	if (!(nvm_dev_info.flags & NVM_GET_DEV_INFO_RESP_FLAGS_FW_VER_VALID))
+		return 0;
+
+	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
+			      DEVLINK_INFO_VERSION_GENERIC_FW,
+			      nvm_dev_info.pkg_name);
+	if (rc)
+		return rc;
+
+	snprintf(mgmt_ver, FW_VER_STR_LEN, "%d.%d.%d.%d",
+		 nvm_dev_info.hwrm_fw_major, nvm_dev_info.hwrm_fw_minor,
+		 nvm_dev_info.hwrm_fw_build, nvm_dev_info.hwrm_fw_patch);
+	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
+			      DEVLINK_INFO_VERSION_GENERIC_FW_MGMT, mgmt_ver);
+	if (rc)
+		return rc;
+
+	snprintf(ncsi_ver, FW_VER_STR_LEN, "%d.%d.%d.%d",
+		 nvm_dev_info.mgmt_fw_major, nvm_dev_info.mgmt_fw_minor,
+		 nvm_dev_info.mgmt_fw_build, nvm_dev_info.mgmt_fw_patch);
+	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
+			      DEVLINK_INFO_VERSION_GENERIC_FW_NCSI, ncsi_ver);
+	if (rc)
+		return rc;
 
+	snprintf(roce_ver, FW_VER_STR_LEN, "%d.%d.%d.%d",
+		 nvm_dev_info.roce_fw_major, nvm_dev_info.roce_fw_minor,
+		 nvm_dev_info.roce_fw_build, nvm_dev_info.roce_fw_patch);
+	rc = bnxt_dl_info_put(bp, req, BNXT_VERSION_STORED,
+			      DEVLINK_INFO_VERSION_GENERIC_FW_ROCE, roce_ver);
 	return rc;
 }