Wed, Jan 30, 2019 at 08:05:12PM CET, jakub.kicin...@netronome.com wrote: >Report versions of firmware components using the new NSP command. > >Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com> >--- > .../net/ethernet/netronome/nfp/nfp_devlink.c | 86 +++++++++++++++++++ > include/net/devlink.h | 11 +++ > 2 files changed, 97 insertions(+) > >diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c >b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c >index 9857fa663adf..fade37d2b796 100644 >--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c >+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c >@@ -207,11 +207,59 @@ nfp_devlink_versions_get_hwinfo(struct nfp_pf *pf, >struct devlink_info_req *req) > return 0; > } > >+static const struct nfp_devlink_versions { >+ enum nfp_nsp_versions id; >+ const char *key; >+} nfp_devlink_versions_nsp[] = { >+ { NFP_VERSIONS_BUNDLE, "fw.bundle_id", }, >+ { NFP_VERSIONS_BSP, DEVLINK_VERSION_GENERIC_FW_MGMT, }, >+ { NFP_VERSIONS_CPLD, "fw.cpld", }, >+ { NFP_VERSIONS_APP, DEVLINK_VERSION_GENERIC_FW_APP, }, >+ { NFP_VERSIONS_UNDI, DEVLINK_VERSION_GENERIC_FW_UNDI, }, >+ { NFP_VERSIONS_NCSI, DEVLINK_VERSION_GENERIC_FW_NCSI, }, >+ { NFP_VERSIONS_CFGR, "chip.init", }, >+}; >+ >+static int >+nfp_devlink_versions_get_nsp(struct devlink_info_req *req, bool flash, >+ const u8 *buf, unsigned int size) >+{ >+ enum devlink_version_type type; >+ unsigned int i; >+ int err; >+ >+ type = flash ? DEVLINK_VERSION_STORED : DEVLINK_VERSION_RUNNING; >+ >+ for (i = 0; i < ARRAY_SIZE(nfp_devlink_versions_nsp); i++) { >+ const struct nfp_devlink_versions *info; >+ const char *version; >+ >+ info = &nfp_devlink_versions_nsp[i]; >+ >+ version = nfp_nsp_versions_get(info->id, flash, buf, size); >+ if (IS_ERR(version)) { >+ if (PTR_ERR(version) == -ENOENT) >+ continue; >+ else >+ return PTR_ERR(version); >+ } >+ >+ err = devlink_info_report_version(req, type, >+ info->key, version); >+ if (err) >+ return err; >+ } >+ >+ return 0; >+} >+ > static int > nfp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req, > struct netlink_ext_ack *extack) > { > struct nfp_pf *pf = devlink_priv(devlink); >+ struct nfp_nsp *nsp; >+ char *buf = NULL; > const char *sn; > int err; > >@@ -226,7 +274,45 @@ nfp_devlink_info_get(struct devlink *devlink, struct >devlink_info_req *req, > return err; > } > >+ nsp = nfp_nsp_open(pf->cpp); >+ if (IS_ERR(nsp)) { >+ NL_SET_ERR_MSG_MOD(extack, "can't access NSP"); >+ return PTR_ERR(nsp); >+ } >+ >+ if (nfp_nsp_has_versions(nsp)) { >+ buf = kzalloc(NFP_NSP_VERSION_BUFSZ, GFP_KERNEL); >+ if (!buf) { >+ err = -ENOMEM; >+ goto err_close_nsp; >+ } >+ >+ err = nfp_nsp_versions(nsp, buf, NFP_NSP_VERSION_BUFSZ); >+ if (err) >+ goto err_free_buf; >+ >+ err = nfp_devlink_versions_get_nsp(req, false, >+ buf, NFP_NSP_VERSION_BUFSZ); >+ if (err) >+ goto err_free_buf; >+ >+ err = nfp_devlink_versions_get_nsp(req, true, >+ buf, NFP_NSP_VERSION_BUFSZ); >+ if (err) >+ goto err_free_buf; >+ >+ kfree(buf); >+ } >+ >+ nfp_nsp_close(nsp); >+ > return nfp_devlink_versions_get_hwinfo(pf, req); >+ >+err_free_buf: >+ kfree(buf); >+err_close_nsp: >+ nfp_nsp_close(nsp); >+ return err; > } > > const struct devlink_ops nfp_devlink_ops = { >diff --git a/include/net/devlink.h b/include/net/devlink.h >index 3d553cc6693d..c678ed0cb099 100644 >--- a/include/net/devlink.h >+++ b/include/net/devlink.h >@@ -433,6 +433,17 @@ enum devlink_param_wol_types { > /* Revision of board design */ > #define DEVLINK_VERSION_GENERIC_BOARD_REV "board.rev" > >+/* Control processor FW version, FW is responsible for house keeping tasks, >+ * PHY control etc. >+ */ >+#define DEVLINK_VERSION_GENERIC_FW_MGMT "fw.mgmt" >+/* Data path microcode controlling high-speed packet processing */ >+#define DEVLINK_VERSION_GENERIC_FW_APP "fw.app" >+/* UNDI software version */ >+#define DEVLINK_VERSION_GENERIC_FW_UNDI "fw.undi" >+/* NCSI support/handler version */ >+#define DEVLINK_VERSION_GENERIC_FW_NCSI "fw.ncsi"
Same here. Also, please put "INFO" in the names to respect the namespacing >+ > enum devlink_version_type { > DEVLINK_VERSION_FIXED, > DEVLINK_VERSION_STORED, >-- >2.19.2 >