Report information about the hardware. RFCv2: - add defines for board IDs which are likely to be reusable for other drivers (Jiri).
Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com> --- .../net/ethernet/netronome/nfp/nfp_devlink.c | 37 ++++++++++++++++++- include/net/devlink.h | 5 +++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index cb3ef7e46614..63b2fa37256c 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -172,6 +172,41 @@ static int nfp_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode, return ret; } +static const struct nfp_devlink_versions_simple { + const char *key; + const char *hwinfo; +} nfp_devlink_versions_hwinfo[] = { + { DEVLINK_VERSION_GENERIC_BOARD_ID, "assembly.partno", }, + { DEVLINK_VERSION_GENERIC_BOARD_REV, "assembly.revision", }, + { "board.vendor", /* fab */ "assembly.vendor", }, + { "board.name", /* code name */ "assembly.model", }, +}; + +static int +nfp_devlink_versions_get_hwinfo(struct nfp_pf *pf, struct devlink_info_req *req) +{ + unsigned int i; + int err; + + for (i = 0; i < ARRAY_SIZE(nfp_devlink_versions_hwinfo); i++) { + const struct nfp_devlink_versions_simple *info; + const char *val; + + info = &nfp_devlink_versions_hwinfo[i]; + + val = nfp_hwinfo_lookup(pf->hwinfo, info->hwinfo); + if (!val) + continue; + + err = devlink_info_report_version(req, DEVLINK_VERSION_FIXED, + info->key, val); + 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) @@ -191,7 +226,7 @@ nfp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req, return err; } - return 0; + return nfp_devlink_versions_get_hwinfo(pf, req); } const struct devlink_ops nfp_devlink_ops = { diff --git a/include/net/devlink.h b/include/net/devlink.h index f53ace3ac4b3..dc08301028a9 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -419,6 +419,11 @@ enum devlink_param_generic_id { .validate = _validate, \ } +/* Part number, identifier of board design */ +#define DEVLINK_VERSION_GENERIC_BOARD_ID "board.id" +/* Revision of board design */ +#define DEVLINK_VERSION_GENERIC_BOARD_REV "board.rev" + enum devlink_version_type { DEVLINK_VERSION_FIXED, DEVLINK_VERSION_STORED, -- 2.19.2