From patchwork Thu Jan 31 18:50:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034435 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="Rzvxp8Am"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8VQ1l79z9s9G for ; Fri, 1 Feb 2019 05:52:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728067AbfAaSwN (ORCPT ); Thu, 31 Jan 2019 13:52:13 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:38431 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727189AbfAaSwL (ORCPT ); Thu, 31 Jan 2019 13:52:11 -0500 Received: by mail-pg1-f193.google.com with SMTP id g189so1739041pgc.5 for ; Thu, 31 Jan 2019 10:52:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9TNE9TWSeMJwLo2W7BkA9f0xVLo8ZzszFxhd9tR8S9I=; b=Rzvxp8AmX7+agGG8SEcEbJv+cMY/wnr3JIyK7rz8JLH65bV0PXhbiF5uWL/C9Yt+JB ple6WuvW4S3v50U2M6pvx/GoXKGACmX6sUE5Rz6Ja09a7jycU14toG1Hry+2K+lNA+6h FNDLZUr9vWqwYln2f3RDmUIq3zbWioNaFob8BiKeYkNBrQINhc+x6X6tLSOYrDcoYB5k XPh3ExP6tBBId3Cz2dcyG4vBGag9AJCXUpMAaMOvJqq0tKlXrRSZC+nyDsyBZ8mQe7vY UWHvUxIpmEbM7Tx4UgSjZFyltXLUAZX2RE40mVduQqTuYbAZFwcpPH/+us+qy/d0d+4i qRgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9TNE9TWSeMJwLo2W7BkA9f0xVLo8ZzszFxhd9tR8S9I=; b=YrLaqXhs2zsu503KBiQqXTo+9ptaRZxBEDT00JdedbzYE/2Bi/ZuFxXKK2qcSknV8O VACwdt7D2EkOYqxYv39LfCWBLl5aJyRUUbXDEKLoDPyCd+kmKGc2E/W+3iSt1UC2mMPW Mekd5xkPTNJQuYFeLU45OwxiaVj+KDB3ZwmtTDDbqdx/s8p/Y036triPBS4pJtdwLVle 58WHJO+Ax5Nx+zRYiXQ+xp5NmCVCT+maJfpMJHqkxRe7BflSrLvBDJkkye0fn275D4Zy ARUIcvu9eFDTmXiqSSPbZvCWuqT5Szgf11uBumBum8GiAK9mLxGTemVIKoSXbi4SdwFe knDg== X-Gm-Message-State: AJcUukd45enqnpE+3GETYyPGj1nEX6zIzgtVYCsl2CrE4Vxsp0QWLHFo 5RmTVfBA1aMyls2pzY6iEBv7fA== X-Google-Smtp-Source: ALg8bN4KVaZD+uqERhLdXFYccYh89VXwsh2NG/GnFr7DVU4bIHOGG2DBcZ4fSOf8egR4r5Zz7K97Kg== X-Received: by 2002:a62:fb07:: with SMTP id x7mr35697250pfm.71.1548960730428; Thu, 31 Jan 2019 10:52:10 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:09 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 1/8] devlink: add device information API Date: Thu, 31 Jan 2019 10:50:40 -0800 Message-Id: <20190131185047.27685-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ethtool -i has served us well for a long time, but its showing its limitations more and more. The device information should also be reported per device not per-netdev. Lay foundation for a simple devlink-based way of reading device info. Add driver name and device serial number as initial pieces of information exposed via this new API. v3: - rename helpers (Jiri); - rename driver name attr (Jiri); - remove double spacing in commit message (Jiri). RFC v2: - wrap the skb into an opaque structure (Jiri); - allow the serial number of be any length (Jiri & Andrew); - add driver name (Jonathan). Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko --- include/net/devlink.h | 18 ++++++ include/uapi/linux/devlink.h | 5 ++ net/core/devlink.c | 112 +++++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+) diff --git a/include/net/devlink.h b/include/net/devlink.h index 85c9eabaf056..a6d0a530483d 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -429,6 +429,7 @@ enum devlink_param_wol_types { } struct devlink_region; +struct devlink_info_req; typedef void devlink_snapshot_data_dest_t(const void *data); @@ -484,6 +485,8 @@ struct devlink_ops { int (*eswitch_encap_mode_get)(struct devlink *devlink, u8 *p_encap_mode); int (*eswitch_encap_mode_set)(struct devlink *devlink, u8 encap_mode, struct netlink_ext_ack *extack); + int (*info_get)(struct devlink *devlink, struct devlink_info_req *req, + struct netlink_ext_ack *extack); }; static inline void *devlink_priv(struct devlink *devlink) @@ -607,6 +610,10 @@ u32 devlink_region_shapshot_id_get(struct devlink *devlink); int devlink_region_snapshot_create(struct devlink_region *region, u64 data_len, u8 *data, u32 snapshot_id, devlink_snapshot_data_dest_t *data_destructor); +int devlink_info_serial_number_put(struct devlink_info_req *req, + const char *sn); +int devlink_info_driver_name_put(struct devlink_info_req *req, + const char *name); #else @@ -905,6 +912,17 @@ devlink_region_snapshot_create(struct devlink_region *region, u64 data_len, return 0; } +static inline int +devlink_info_driver_name_put(struct devlink_info_req *req, const char *name) +{ + return 0; +} + +static inline int +devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn) +{ + return 0; +} #endif #endif /* _NET_DEVLINK_H_ */ diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 61b4447a6c5b..142710d45093 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -94,6 +94,8 @@ enum devlink_command { DEVLINK_CMD_PORT_PARAM_NEW, DEVLINK_CMD_PORT_PARAM_DEL, + DEVLINK_CMD_INFO_GET, /* can dump */ + /* add new commands above here */ __DEVLINK_CMD_MAX, DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1 @@ -290,6 +292,9 @@ enum devlink_attr { DEVLINK_ATTR_REGION_CHUNK_ADDR, /* u64 */ DEVLINK_ATTR_REGION_CHUNK_LEN, /* u64 */ + DEVLINK_ATTR_INFO_DRIVER_NAME, /* string */ + DEVLINK_ATTR_INFO_SERIAL_NUMBER, /* string */ + /* add new attributes above here, update the policy in devlink.c */ __DEVLINK_ATTR_MAX, diff --git a/net/core/devlink.c b/net/core/devlink.c index e6f170caf449..f456f6aa3d40 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -3714,6 +3714,110 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb, return 0; } +struct devlink_info_req { + struct sk_buff *msg; +}; + +int devlink_info_driver_name_put(struct devlink_info_req *req, const char *name) +{ + return nla_put_string(req->msg, DEVLINK_ATTR_INFO_DRIVER_NAME, name); +} +EXPORT_SYMBOL_GPL(devlink_info_driver_name_put); + +int devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn) +{ + return nla_put_string(req->msg, DEVLINK_ATTR_INFO_SERIAL_NUMBER, sn); +} +EXPORT_SYMBOL_GPL(devlink_info_serial_number_put); + +static int +devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink, + enum devlink_command cmd, u32 portid, + u32 seq, int flags, struct netlink_ext_ack *extack) +{ + struct devlink_info_req req; + void *hdr; + int err; + + hdr = genlmsg_put(msg, portid, seq, &devlink_nl_family, flags, cmd); + if (!hdr) + return -EMSGSIZE; + + err = -EMSGSIZE; + if (devlink_nl_put_handle(msg, devlink)) + goto err_cancel_msg; + + req.msg = msg; + err = devlink->ops->info_get(devlink, &req, extack); + if (err) + goto err_cancel_msg; + + genlmsg_end(msg, hdr); + return 0; + +err_cancel_msg: + genlmsg_cancel(msg, hdr); + return err; +} + +static int devlink_nl_cmd_info_get_doit(struct sk_buff *skb, + struct genl_info *info) +{ + struct devlink *devlink = info->user_ptr[0]; + struct sk_buff *msg; + int err; + + if (!devlink->ops || !devlink->ops->info_get) + return -EOPNOTSUPP; + + msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); + if (!msg) + return -ENOMEM; + + err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET, + info->snd_portid, info->snd_seq, 0, + info->extack); + if (err) { + nlmsg_free(msg); + return err; + } + + return genlmsg_reply(msg, info); +} + +static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg, + struct netlink_callback *cb) +{ + struct devlink *devlink; + int start = cb->args[0]; + int idx = 0; + int err; + + mutex_lock(&devlink_mutex); + list_for_each_entry(devlink, &devlink_list, list) { + if (!net_eq(devlink_net(devlink), sock_net(msg->sk))) + continue; + if (idx < start) { + idx++; + continue; + } + + mutex_lock(&devlink->lock); + err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET, + NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, NLM_F_MULTI, + cb->extack); + mutex_unlock(&devlink->lock); + if (err) + break; + idx++; + } + mutex_unlock(&devlink_mutex); + + cb->args[0] = idx; + return msg->len; +} + static const struct nla_policy devlink_nl_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING }, [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING }, @@ -3974,6 +4078,14 @@ static const struct genl_ops devlink_nl_ops[] = { .flags = GENL_ADMIN_PERM, .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, }, + { + .cmd = DEVLINK_CMD_INFO_GET, + .doit = devlink_nl_cmd_info_get_doit, + .dumpit = devlink_nl_cmd_info_get_dumpit, + .policy = devlink_nl_policy, + .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, + /* can be retrieved by unprivileged users */ + }, }; static struct genl_family devlink_nl_family __ro_after_init = { From patchwork Thu Jan 31 18:50:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034439 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="x/XiVtgF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8VY3cWKz9s9G for ; Fri, 1 Feb 2019 05:52:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728214AbfAaSwU (ORCPT ); Thu, 31 Jan 2019 13:52:20 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:45634 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728024AbfAaSwM (ORCPT ); Thu, 31 Jan 2019 13:52:12 -0500 Received: by mail-pf1-f193.google.com with SMTP id g62so1869734pfd.12 for ; Thu, 31 Jan 2019 10:52:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OCHkpA8d2u8kW2UuLvBnZYGEoOK0CXrtOyEyOIgO2Sc=; b=x/XiVtgFaWtAITbe6Vpk3RuEbphwElYTNra5mQG4jrJc94rZUZ11s82awIBfoMpQnD LUeeLfltl1J1CokPGcIMA1h7jlCI8nHKx/sQ6fF6hVJ8PSnL+xRvGaDQgKMyFh0KZ4gV NiL3o5T372pR0D05mdjwAlAXndAG6d/Ozoh+No4pZTtiCTcSwA+Cw6OdzFFGsaUHY9hL mVuHx33X4Ic8DUt/GYNyd4tPYYCjD3X7U989YxxuZQjfdOEfdsZ71WzvpqD7hWo0zcnD /VZ88PLyj/j2tvPxezgNnZ5hJTopK60zA67hgl9u4FtMG9TJlTNB0sLH7uA5JcQlV3l9 /Chw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OCHkpA8d2u8kW2UuLvBnZYGEoOK0CXrtOyEyOIgO2Sc=; b=n02sWbnqGohYwGHkFWvx05QwOSIILEEeUcPF7WZIi5uGxDL/yr5p7xYmNd9zrRrkzl f1uDHhRQL4sSujEPV2SeD68oU7x97noFBOvIA81nnyZyFKRghhYlM2nxWLYg2b9jDYjd kqxCIXiXXApnwh5hsutW2ZNjuxIldDNXJeB2ewBFwrA/SMoXDfilYSTwQpvX2Q/6+GfO MvY0MiQ1JsKWduoLB4QDO2F9gEIzYXnlgc0ilEPFcegbZTtdXJ3mZZIMUsrE8SnTgZab RhqqKbIPkBSykXWY/p70wX2W4OPLWWBI0nC5n6tI4gXI4QmKZRjfiLV001LfTB7iDEUQ e9wQ== X-Gm-Message-State: AJcUukc7M0e1usUlDXdRj4cJfusI+PJFwZHilsYLaEsjTpo+L0SBDs5y T917ldTYOTO0fIrzg0BCfdR8gA== X-Google-Smtp-Source: ALg8bN7IBq6HgJU+ExHhLr5NX+yLEepyca7ODgS5V5PFiGNZX7OeJfpud6M8r+9u0PrI6HPlqgweVw== X-Received: by 2002:a62:4587:: with SMTP id n7mr35624073pfi.118.1548960731817; Thu, 31 Jan 2019 10:52:11 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:11 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 2/8] devlink: add version reporting to devlink info API Date: Thu, 31 Jan 2019 10:50:41 -0800 Message-Id: <20190131185047.27685-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ethtool -i has a few fixed-size fields which can be used to report firmware version and expansion ROM version. Unfortunately, modern hardware has more firmware components. There is usually some datapath microcode, management controller, PXE drivers, and a CPLD load. Running ethtool -i on modern controllers reveals the fact that vendors cram multiple values into firmware version field. Here are some examples from systems I could lay my hands on quickly: tg3: "FFV20.2.17 bc 5720-v1.39" i40e: "6.01 0x800034a4 1.1747.0" nfp: "0.0.3.5 0.25 sriov-2.1.16 nic" Add a new devlink API to allow retrieving multiple versions, and provide user-readable name for those versions. While at it break down the versions into three categories: - fixed - this is the board/fixed component version, usually vendors report information like the board version in the PCI VPD, but it will benefit from naming and common API as well; - running - this is the running firmware version; - stored - this is firmware in the flash, after firmware update this value will reflect the flashed version, while the running version may only be updated after reboot. v3: - add per-type helpers instead of using the special argument (Jiri). RFCv2: - remove the nesting in attr DEVLINK_ATTR_INFO_VERSIONS (now versions are mixed with other info attrs)l - have the driver report versions from the same callback as other info. Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko --- include/net/devlink.h | 33 +++++++++++++++++++++ include/uapi/linux/devlink.h | 5 ++++ net/core/devlink.c | 57 ++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) diff --git a/include/net/devlink.h b/include/net/devlink.h index a6d0a530483d..6dc0ef964392 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -614,6 +614,15 @@ int devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn); int devlink_info_driver_name_put(struct devlink_info_req *req, const char *name); +int devlink_info_version_fixed_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value); +int devlink_info_version_stored_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value); +int devlink_info_version_running_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value); #else @@ -923,6 +932,30 @@ devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn) { return 0; } + +static inline int +devlink_info_version_fixed_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value) +{ + return 0; +} + +static inline int +devlink_info_version_stored_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value) +{ + return 0; +} + +static inline int +devlink_info_version_running_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value) +{ + return 0; +} #endif #endif /* _NET_DEVLINK_H_ */ diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 142710d45093..7fffd879c328 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -294,6 +294,11 @@ enum devlink_attr { DEVLINK_ATTR_INFO_DRIVER_NAME, /* string */ DEVLINK_ATTR_INFO_SERIAL_NUMBER, /* string */ + DEVLINK_ATTR_INFO_VERSION_FIXED, /* nested */ + DEVLINK_ATTR_INFO_VERSION_RUNNING, /* nested */ + DEVLINK_ATTR_INFO_VERSION_STORED, /* nested */ + DEVLINK_ATTR_INFO_VERSION_NAME, /* string */ + DEVLINK_ATTR_INFO_VERSION_VALUE, /* string */ /* add new attributes above here, update the policy in devlink.c */ diff --git a/net/core/devlink.c b/net/core/devlink.c index f456f6aa3d40..e31b6d617837 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -3730,6 +3730,63 @@ int devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn) } EXPORT_SYMBOL_GPL(devlink_info_serial_number_put); +static int devlink_info_version_put(struct devlink_info_req *req, int attr, + const char *version_name, + const char *version_value) +{ + struct nlattr *nest; + int err; + + nest = nla_nest_start(req->msg, attr); + if (!nest) + return -EMSGSIZE; + + err = nla_put_string(req->msg, DEVLINK_ATTR_INFO_VERSION_NAME, + version_name); + if (err) + goto nla_put_failure; + + err = nla_put_string(req->msg, DEVLINK_ATTR_INFO_VERSION_VALUE, + version_value); + if (err) + goto nla_put_failure; + + nla_nest_end(req->msg, nest); + + return 0; + +nla_put_failure: + nla_nest_cancel(req->msg, nest); + return err; +} + +int devlink_info_version_fixed_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value) +{ + return devlink_info_version_put(req, DEVLINK_ATTR_INFO_VERSION_FIXED, + version_name, version_value); +} +EXPORT_SYMBOL_GPL(devlink_info_version_fixed_put); + +int devlink_info_version_stored_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value) +{ + return devlink_info_version_put(req, DEVLINK_ATTR_INFO_VERSION_STORED, + version_name, version_value); +} +EXPORT_SYMBOL_GPL(devlink_info_version_stored_put); + +int devlink_info_version_running_put(struct devlink_info_req *req, + const char *version_name, + const char *version_value) +{ + return devlink_info_version_put(req, DEVLINK_ATTR_INFO_VERSION_RUNNING, + version_name, version_value); +} +EXPORT_SYMBOL_GPL(devlink_info_version_running_put); + static int devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink, enum devlink_command cmd, u32 portid, From patchwork Thu Jan 31 18:50:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034436 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="UwWN95U4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8VS37Qmz9sBQ for ; Fri, 1 Feb 2019 05:52:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728127AbfAaSwO (ORCPT ); Thu, 31 Jan 2019 13:52:14 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:45509 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728068AbfAaSwO (ORCPT ); Thu, 31 Jan 2019 13:52:14 -0500 Received: by mail-pg1-f193.google.com with SMTP id y4so1718793pgc.12 for ; Thu, 31 Jan 2019 10:52:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RHy6l9Z3+47VOO2rXkskGSjnhYroEUqWghgTZJZIjUc=; b=UwWN95U4YtcKTplBkbJioG3lXXhTrApD5ZYgPYbz9rFS+xf0/hvxdF3l1LX9gO3DYr Cla25zUutrkJu6A2ZaYlHB+2Bw9V3ooY6rV2rBI0khcbu+R+wSWeTlgebMMP/zaTIE9F Ox7MLvKNloUM0ZuQxWDSghbrHYmclv/6c6+v/4KVuUDBJqTGcdluCH/5T1X2jH5TJeFi yNt5D0SrS5TpDCJ3FyWPjKk+03z9H3nIvGm9jzDoAMwZyCTEMNfLbxqk6ifqqkSPriXB pJ3xM2xs1dpZ6JL5X4TqekpE37JSWp1qJd5Zcm/+zxj0VdhzriApnR06NxWWriJ6c8JV bZRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RHy6l9Z3+47VOO2rXkskGSjnhYroEUqWghgTZJZIjUc=; b=H7u1bw7ICscsqU5WpmJw9rOYCA0PBK5o9OzAZ9mVs2xTWWnNHQP1xCbk0XAxT+33BU vwsNdYR82l0OB6B/4rchYGVATwwIkvAS3xHDA55SJ/YHLDfdYZQZy0M587UYa+SqWw0i Vpe7T7bLRa2k2g3Mfr4nguOPy/Az5EjVWPFGfoH2UpYF4k2cSQwRwie1R7a0jO7DmMsJ ahP/a3tfLkjZzAqXeog8SFphJ2BqPVTtbJZLmmKCFJYUJkcLGWK1oGK8S2WxPYtaKpbF A+gbjasCe7qjwmBAUwVriqavy2BbnlC3m+u0lhdZYWtuSCkucF/1erm7i/VcV4vDrA49 RboA== X-Gm-Message-State: AJcUukfUGYEGkwuAl0W5AkMWZ68zj4KltEqlq0bQJPSNEGDfBZh/bzr0 u+CsjEZhcfsMh+fr6qgI/5p1wQ== X-Google-Smtp-Source: ALg8bN5Fn+TYsdcA3nXhF50WbkhH7KBpLYR1/Mm5ZBkPP3WBXxmRp+8bq1TAhjL5HW+Ya4QVxykEyw== X-Received: by 2002:a63:f1f:: with SMTP id e31mr32217991pgl.274.1548960733011; Thu, 31 Jan 2019 10:52:13 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:12 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 3/8] devlink: add generic info version names Date: Thu, 31 Jan 2019 10:50:42 -0800 Message-Id: <20190131185047.27685-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add defines and docs for generic info versions. v3: - add docs; - separate patch (Jiri). Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko --- .../networking/devlink-info-versions.rst | 38 +++++++++++++++++++ Documentation/networking/index.rst | 1 + include/net/devlink.h | 14 +++++++ 3 files changed, 53 insertions(+) create mode 100644 Documentation/networking/devlink-info-versions.rst diff --git a/Documentation/networking/devlink-info-versions.rst b/Documentation/networking/devlink-info-versions.rst new file mode 100644 index 000000000000..7d4ecf6b6f34 --- /dev/null +++ b/Documentation/networking/devlink-info-versions.rst @@ -0,0 +1,38 @@ +.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) + +===================== +Devlink info versions +===================== + +board.id +======== + +Unique identifier of the board design. + +board.rev +========= + +Board design revision. + +fw.mgmt +======= + +Control unit firmware version. This firmware is responsible for house +keeping tasks, PHY control etc. but not the packet-by-packet data path +operation. + +fw.app +====== + +Data path microcode controlling high-speed packet processing. + +fw.undi +======= + +UNDI software, may include the UEFI driver, firmware or both. + +fw.ncsi +======= + +Version of the software responsible for supporting/handling the +Network Controller Sideband Interface. diff --git a/Documentation/networking/index.rst b/Documentation/networking/index.rst index f1627ca2a0ea..9a32451cd201 100644 --- a/Documentation/networking/index.rst +++ b/Documentation/networking/index.rst @@ -24,6 +24,7 @@ Linux Networking Documentation device_drivers/intel/i40e device_drivers/intel/iavf device_drivers/intel/ice + devlink-info-versions kapi z8530book msg_zerocopy diff --git a/include/net/devlink.h b/include/net/devlink.h index 6dc0ef964392..6b417f141fd6 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -428,6 +428,20 @@ enum devlink_param_wol_types { .validate = _validate, \ } +/* Part number, identifier of board design */ +#define DEVLINK_INFO_VERSION_GENERIC_BOARD_ID "board.id" +/* Revision of board design */ +#define DEVLINK_INFO_VERSION_GENERIC_BOARD_REV "board.rev" + +/* Control processor FW version */ +#define DEVLINK_INFO_VERSION_GENERIC_FW_MGMT "fw.mgmt" +/* Data path microcode controlling high-speed packet processing */ +#define DEVLINK_INFO_VERSION_GENERIC_FW_APP "fw.app" +/* UNDI software version */ +#define DEVLINK_INFO_VERSION_GENERIC_FW_UNDI "fw.undi" +/* NCSI support/handler version */ +#define DEVLINK_INFO_VERSION_GENERIC_FW_NCSI "fw.ncsi" + struct devlink_region; struct devlink_info_req; From patchwork Thu Jan 31 18:50:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034437 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="ayZ/iemv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8VV75Htz9s9G for ; Fri, 1 Feb 2019 05:52:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728177AbfAaSwR (ORCPT ); Thu, 31 Jan 2019 13:52:17 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:38436 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728121AbfAaSwP (ORCPT ); Thu, 31 Jan 2019 13:52:15 -0500 Received: by mail-pg1-f195.google.com with SMTP id g189so1739105pgc.5 for ; Thu, 31 Jan 2019 10:52:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=d3bA10u6oPMa/IHOLsKWIEP9MfeNLRZkCauupPDMlis=; b=ayZ/iemvAIqh8TI2YB4NC1WfswIo+s8kvU4ao87/Ie5ZjpudNVE+lGzSYpLiRXaL6y gqrTFelyMUlReOyiAipf0PHw8lpt5ugEUJ2pdQR+esuUsRBiOgZVi0UKZjngqJEYEcm6 +NXk4tzFF/26PlgKdvTG1O23JZ+L9WjGBX3RnXxTvNzshMbY/tlolGrSJxAbYF1YKo1F scRy6evaRxTHHQ6ocZOtQH1cSqGFM/zxvUemLOjdvpnZeiPG91MNna8GJlMchD584mAD 8tS0C7WPTTjUypcEe5mFZDancw+ZtWiA7JDa+U4+Ah9SjXvUdzEvg3qqUaXP1I4kyMdU mR8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=d3bA10u6oPMa/IHOLsKWIEP9MfeNLRZkCauupPDMlis=; b=oXSGevM8F0x1aAJCR2X4MmN2ZXZWM6OaM7INEZaJEALp/576W60FhUXWveLHTlXHbi c5Rut7tW3FaHnbltZavKMawcAQR7vRruclfAk6O68jvDAUvLqs82fRr8/Lhr5yH/lhWO G6TAh6FZplgb3DPiZDZk/cnECLBEWss7Wfjd/QEH8Bl3fBJmh317la7nw/7XhfxYiqye NzlusyHBK7EwZP1gGDA9M6CqDA6Qk2ADxdFTB0HgW2AFcTCH60aQDZ4lZw6D3JSl8o5d HPA3XAif4G9RZpelXSl2m45zkdVVRkuGdIHMR8SK/9dhfIywAMTI+BU+SXqaTpZZizBy ATbw== X-Gm-Message-State: AJcUukfJMy92yvtB3Tah7UXpmvSPrlMVI9jOnMAiNoyVbi3rSIEw+19G HoTZh9qVG/GHmsoOz1BSA1LW3A== X-Google-Smtp-Source: ALg8bN5wyFGZRjdkqCrOLksFZrEaXx170uIGeMjCfbmATiX8pJwlg3x6uOAr2BaqO+IgjKYsa0oIJw== X-Received: by 2002:a63:a002:: with SMTP id r2mr32108951pge.212.1548960734176; Thu, 31 Jan 2019 10:52:14 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:13 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 4/8] nfp: devlink: report driver name and serial number Date: Thu, 31 Jan 2019 10:50:43 -0800 Message-Id: <20190131185047.27685-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Report the basic info through new devlink info API. RFCv2: - add driver name; - align serial to core changes. Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko --- .../net/ethernet/netronome/nfp/nfp_devlink.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index 808647ec3573..2ba3b3891d99 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -4,6 +4,7 @@ #include #include +#include "nfpcore/nfp.h" #include "nfpcore/nfp_nsp.h" #include "nfp_app.h" #include "nfp_main.h" @@ -171,6 +172,28 @@ static int nfp_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode, return ret; } +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); + const char *sn; + int err; + + err = devlink_info_driver_name_put(req, "nfp"); + if (err) + return err; + + sn = nfp_hwinfo_lookup(pf->hwinfo, "assembly.serial"); + if (sn) { + err = devlink_info_serial_number_put(req, sn); + if (err) + return err; + } + + return 0; +} + const struct devlink_ops nfp_devlink_ops = { .port_split = nfp_devlink_port_split, .port_unsplit = nfp_devlink_port_unsplit, @@ -178,6 +201,7 @@ const struct devlink_ops nfp_devlink_ops = { .sb_pool_set = nfp_devlink_sb_pool_set, .eswitch_mode_get = nfp_devlink_eswitch_mode_get, .eswitch_mode_set = nfp_devlink_eswitch_mode_set, + .info_get = nfp_devlink_info_get, }; int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port) From patchwork Thu Jan 31 18:50:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034443 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="Y4IyrOq4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8Vl0zr1z9s9G for ; Fri, 1 Feb 2019 05:52:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728289AbfAaSw3 (ORCPT ); Thu, 31 Jan 2019 13:52:29 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:43009 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728148AbfAaSwQ (ORCPT ); Thu, 31 Jan 2019 13:52:16 -0500 Received: by mail-pf1-f193.google.com with SMTP id w73so1876435pfk.10 for ; Thu, 31 Jan 2019 10:52:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ri7H/uGxLaKJrB48JTTqQvjwjkmZBMqcD9NTy0OxrUo=; b=Y4IyrOq4U6iVJYZ92QxL85wguiUqX+7ms323boR55u1BoHv8Bv3BoT2m3yxCJLJL3N 5tNjg171qQLL6YfAt6q3GFTXI7vANYs6YXG3Lro9yJaihed2q/aM8702RSFY1DwChBrK Qwvg/itieGZOxzhUArnZvrXgVCsCSffrq3Aq9Dma3/xn+VNfjZOaQLSEukeTuoLKivaE erzVnbE/kpBM52v6UTiwyW/5YLaBkiiekZYxNQ5w9VDxyosRCe1OFCSVA1jrYew0OsEw FOvbyDihnXU6QWj8RrcsIjbsnB4//syzUvWaHoaMPLqSi57Kh7yDVqJP+IfBpSpwvZ+b NBAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ri7H/uGxLaKJrB48JTTqQvjwjkmZBMqcD9NTy0OxrUo=; b=Zz0WQnWRZONZqq+eGmUlRdlWM9UCDyIF8NIDG9evZnzRj04rw2BIk6c+42ZC5tDIxn 616ZHX3FW3YbXa3ubC6t1o/yhB8mX3oV5X2qJhN3qrwFQX4wJLRCMuzVezXO0k948voE 3HDw9ktiVsl7PVfFwsX7sFMvEoxYscolmPr7+bj2L5jjXRhuojaaiw/+TlQKiDM5rg2/ SzlYUQeaAfmXvWtUpdtz4REAH7KzM5qVXBmYlbMBRtQS1+Ue7qzeSaOIKWf0WApMdERD 9zeAngxy7oqzgdhmXwFqOxhtHZbM8bjgG3rcjp1nHB9THuLacCY0SE4F7j8Srh2RWP2N i3MQ== X-Gm-Message-State: AJcUukdRJ6HRXYuN1YIxD2AuOR3psQwn0A2yOc/e/EbTAk8ALiBjOAq3 xipfVhoa9sGEzunSTOrkKVH/B+FQoS0= X-Google-Smtp-Source: ALg8bN73q+2A5MgSLT+uOs7Z4ThcJCUyWJgsiXOw9irajnihWa8g4/NCBIwtD++0uZuGRGTWhRd9UQ== X-Received: by 2002:a63:314d:: with SMTP id x74mr25778286pgx.10.1548960735413; Thu, 31 Jan 2019 10:52:15 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:14 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 5/8] nfp: devlink: report fixed versions Date: Thu, 31 Jan 2019 10:50:44 -0800 Message-Id: <20190131185047.27685-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Acked-by: Jiri Pirko --- .../net/ethernet/netronome/nfp/nfp_devlink.c | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index 2ba3b3891d99..75eda34fc1b4 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -172,6 +172,40 @@ 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_INFO_VERSION_GENERIC_BOARD_ID, "assembly.partno", }, + { DEVLINK_INFO_VERSION_GENERIC_BOARD_REV, "assembly.revision", }, + { "board.vendor", /* fab */ "assembly.vendor", }, + { "board.model", /* 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_version_fixed_put(req, 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 +225,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 = { From patchwork Thu Jan 31 18:50:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034441 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="0SAYt/gW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8Vd2NW2z9s9G for ; Fri, 1 Feb 2019 05:52:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728243AbfAaSwY (ORCPT ); Thu, 31 Jan 2019 13:52:24 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:36094 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728182AbfAaSwR (ORCPT ); Thu, 31 Jan 2019 13:52:17 -0500 Received: by mail-pl1-f194.google.com with SMTP id g9so1890297plo.3 for ; Thu, 31 Jan 2019 10:52:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4SOy1pNy3CjkcKGqiOwqYFPs1gCaV7XHprUQCfB7GIQ=; b=0SAYt/gWvxqZIIbGt5V3EX2kIvDDFr6ybVRUD8iRTIGtCoRyxY0w0yC6ksRNwb/qzc CSE+yp5E6yTSipg0L1bEIuZ8nxZnCaPcHs/uQ6G9MSOOnxHBaQxIDpw+EPlkfHKME6RO LVs4oU1qM0Z6zy8ZEXQZ71z+PsubXpDQ5F+1irmRTAhRVEUEqvYgYchL5FPnijDXfhcY Y5QP2DDBmE2R9KsIf+6XJs1nVekADMnDPSeGaoinAe67seBZKMEV2unMeO4rP+MBCj4r kURFrMoIEsYaqA0x8XrN1k5jhRMxfW49gPVM3kZGrAozaYd+8S9mcMgXFgcaBtOEmjMD hGNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4SOy1pNy3CjkcKGqiOwqYFPs1gCaV7XHprUQCfB7GIQ=; b=DlgxANLvpALWtMTwHER9gq+vF7WNuePeacLyJNWHIcmHmj+kZ+CEy2BsA2XxEsCR0D q0kcnrPDeWjpC4Dc164/Oiduq9MtN6Oz+DVrle8qYBIimfV7889V7jpkBByF/dRGEGVd 7Rl93se7kzS86OPRRfjNN+DYVvu825QB4mh+XfHbb2OvsYqcc1B1NuSMJr43DotNPcB7 ZXXRkdL0iiTudBeWFF5SLNAWr6tt/24JXg0d2uSF+lFDKXv2awGj0pby+HLfX4AtNPZl yjd8G0BnHnugKL301WTnREbAQtoSQ0YrTg+uOCO9/UoJK+CJGJ3r+A4c+W+PUBOEdMaF edgA== X-Gm-Message-State: AJcUukdONbdH+bizYLKGjLpTid5JE4UqyQLzTVxrgeNq1G9QR0XA9Y1i SL/5zLSCTKHkTq17BlGNyzvTxQ== X-Google-Smtp-Source: ALg8bN6xeP5qEsv5KpkQJFuytQCBFeIPpuP0mhOfs0kCn7lTVTU6KoVhgVylG3S1bOppa0ZLqL104Q== X-Received: by 2002:a17:902:24a2:: with SMTP id w31mr35240311pla.216.1548960736729; Thu, 31 Jan 2019 10:52:16 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:16 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 6/8] nfp: nsp: add support for versions command Date: Thu, 31 Jan 2019 10:50:45 -0800 Message-Id: <20190131185047.27685-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Retrieve the FW versions with the new command. Signed-off-by: Jakub Kicinski --- .../ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 61 +++++++++++++++++++ .../ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 20 ++++++ 2 files changed, 81 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index ce1577bbbd2a..a9d53df0070c 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -7,6 +7,7 @@ * Jason McMullan */ +#include #include #include #include @@ -62,6 +63,16 @@ #define NFP_HWINFO_LOOKUP_SIZE GENMASK(11, 0) +#define NFP_VERSIONS_SIZE GENMASK(11, 0) +#define NFP_VERSIONS_CNT_OFF 0 +#define NFP_VERSIONS_BSP_OFF 2 +#define NFP_VERSIONS_CPLD_OFF 6 +#define NFP_VERSIONS_APP_OFF 10 +#define NFP_VERSIONS_BUNDLE_OFF 14 +#define NFP_VERSIONS_UNDI_OFF 18 +#define NFP_VERSIONS_NCSI_OFF 22 +#define NFP_VERSIONS_CFGR_OFF 26 + enum nfp_nsp_cmd { SPCODE_NOOP = 0, /* No operation */ SPCODE_SOFT_RESET = 1, /* Soft reset the NFP */ @@ -77,6 +88,7 @@ enum nfp_nsp_cmd { SPCODE_NSP_IDENTIFY = 13, /* Read NSP version */ SPCODE_FW_STORED = 16, /* If no FW loaded, load flash app FW */ SPCODE_HWINFO_LOOKUP = 17, /* Lookup HWinfo with overwrites etc. */ + SPCODE_VERSIONS = 21, /* Report FW versions */ }; static const struct { @@ -711,3 +723,52 @@ int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size) return 0; } + +int nfp_nsp_versions(struct nfp_nsp *state, void *buf, unsigned int size) +{ + struct nfp_nsp_command_buf_arg versions = { + { + .code = SPCODE_VERSIONS, + .option = min_t(u32, size, NFP_VERSIONS_SIZE), + }, + .out_buf = buf, + .out_size = min_t(u32, size, NFP_VERSIONS_SIZE), + }; + + return nfp_nsp_command_buf(state, &versions); +} + +const char *nfp_nsp_versions_get(enum nfp_nsp_versions id, bool flash, + const u8 *buf, unsigned int size) +{ + static const u32 id2off[] = { + [NFP_VERSIONS_BSP] = NFP_VERSIONS_BSP_OFF, + [NFP_VERSIONS_CPLD] = NFP_VERSIONS_CPLD_OFF, + [NFP_VERSIONS_APP] = NFP_VERSIONS_APP_OFF, + [NFP_VERSIONS_BUNDLE] = NFP_VERSIONS_BUNDLE_OFF, + [NFP_VERSIONS_UNDI] = NFP_VERSIONS_UNDI_OFF, + [NFP_VERSIONS_NCSI] = NFP_VERSIONS_NCSI_OFF, + [NFP_VERSIONS_CFGR] = NFP_VERSIONS_CFGR_OFF, + }; + unsigned int field, buf_field_cnt, buf_off; + + if (id >= ARRAY_SIZE(id2off) || !id2off[id]) + return ERR_PTR(-EINVAL); + + field = id * 2 + flash; + + buf_field_cnt = get_unaligned_le16(buf); + if (buf_field_cnt <= field) + return ERR_PTR(-ENOENT); + + buf_off = get_unaligned_le16(buf + id2off[id] + flash * 2); + if (!buf_off) + return ERR_PTR(-ENOENT); + + if (buf_off >= size) + return ERR_PTR(-EINVAL); + if (strnlen(&buf[buf_off], size - buf_off) == size - buf_off) + return ERR_PTR(-EINVAL); + + return (const char *)&buf[buf_off]; +} diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h index ff33ac54097a..246e213f1514 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h @@ -38,6 +38,11 @@ static inline bool nfp_nsp_has_hwinfo_lookup(struct nfp_nsp *state) return nfp_nsp_get_abi_ver_minor(state) > 24; } +static inline bool nfp_nsp_has_versions(struct nfp_nsp *state) +{ + return nfp_nsp_get_abi_ver_minor(state) > 27; +} + enum nfp_eth_interface { NFP_INTERFACE_NONE = 0, NFP_INTERFACE_SFP = 1, @@ -208,4 +213,19 @@ enum nfp_nsp_sensor_id { int nfp_hwmon_read_sensor(struct nfp_cpp *cpp, enum nfp_nsp_sensor_id id, long *val); +#define NFP_NSP_VERSION_BUFSZ 1024 /* reasonable size, not in the ABI */ + +enum nfp_nsp_versions { + NFP_VERSIONS_BSP, + NFP_VERSIONS_CPLD, + NFP_VERSIONS_APP, + NFP_VERSIONS_BUNDLE, + NFP_VERSIONS_UNDI, + NFP_VERSIONS_NCSI, + NFP_VERSIONS_CFGR, +}; + +int nfp_nsp_versions(struct nfp_nsp *state, void *buf, unsigned int size); +const char *nfp_nsp_versions_get(enum nfp_nsp_versions id, bool flash, + const u8 *buf, unsigned int size); #endif From patchwork Thu Jan 31 18:50:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034440 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="VEx/FhQx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8Vc0KjMz9s9G for ; Fri, 1 Feb 2019 05:52:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728261AbfAaSwX (ORCPT ); Thu, 31 Jan 2019 13:52:23 -0500 Received: from mail-pl1-f196.google.com ([209.85.214.196]:44543 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728121AbfAaSwS (ORCPT ); Thu, 31 Jan 2019 13:52:18 -0500 Received: by mail-pl1-f196.google.com with SMTP id e11so1868045plt.11 for ; Thu, 31 Jan 2019 10:52:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dnRJjJ3a+Y59Mvt13HLlWO19iquzAJP6mihZVPhgviA=; b=VEx/FhQxrzVOWPW937/MmVvTtkiYjFT95QiNvz3SkqnWPKpC/6MTCnSpwsGlErgYV+ aMMDPucz7FlE8XoAjI78d4I7HHJwNz1Q3K00fK1KEWExTrPiwc7gIovJZRfjqpcqW48y wfEDHF2yBna3hmW/8LWbGDLs+gfF8zbKUYJGUtv9ZA6suZbxY/2Oh/wr9mTVwjm4pZkZ T8WWiOKlacKCYPjvH+i7W0aZPGng+a6GmPMvFE+Rsip0I3jVLtOicHcXWb6k/W3BNTOk FestU/btdKo95615AJeW3zQ0JUuJ6nxKmmuMwUfcAeZ8u6QOwZ9eBM6+H4NM3CP5g8n3 l+Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dnRJjJ3a+Y59Mvt13HLlWO19iquzAJP6mihZVPhgviA=; b=gZl9/jrJwxdqsZRSqMfYB9xJgim4HAJgroD07RAYLFXF+eETdVjReLLnGWKvitAuVE E/JIFm/Bk9QC+tfIZkhsYTr9+KUVAV2kEXAmZjHH8sQ38Hnfc6ImoDqu74wpcgH2Gag9 tT4fvo22XzWSMqzpDCQf+yLEtglc0YzXsAfmvtgEHNN5Cf+HqbEWaK9t4UhBe/wYg6Gq EYwlPKrxFWn/WwpbOZVpCreN8sk81F+tC8nd4DCetIa7vsH9pPQ7a+8JTkBfXc/S/3vv y2/PVr1upxDhAZwGKI9MeK3wm6/Ep+XbgK/ohpq7bqlbrLwzIulVEzfv64SxKB/R8Qoh 9jEA== X-Gm-Message-State: AJcUukdUs9Yt3jpryVx20PP5uMUbHBfkQNgqzy4a4ZH5GQJ3f3wuY6iG TQR1Q7A16bxOcrReWEn2Gmly2w== X-Google-Smtp-Source: ALg8bN6enttJcrWfYXBoFz2hdytRiThSd655kBKyZEUwR5Gpqv+Da2iKoLA0PeySMJHeQZg329jPhA== X-Received: by 2002:a17:902:1101:: with SMTP id d1mr35572628pla.136.1548960738015; Thu, 31 Jan 2019 10:52:18 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:17 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 7/8] nfp: devlink: report the running and flashed versions Date: Thu, 31 Jan 2019 10:50:46 -0800 Message-Id: <20190131185047.27685-8-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Report versions of firmware components using the new NSP command. Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko --- .../net/ethernet/netronome/nfp/nfp_devlink.c | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index 75eda34fc1b4..dddbb0575be9 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -206,11 +206,60 @@ 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_INFO_VERSION_GENERIC_FW_MGMT, }, + { NFP_VERSIONS_CPLD, "fw.cpld", }, + { NFP_VERSIONS_APP, DEVLINK_INFO_VERSION_GENERIC_FW_APP, }, + { NFP_VERSIONS_UNDI, DEVLINK_INFO_VERSION_GENERIC_FW_UNDI, }, + { NFP_VERSIONS_NCSI, DEVLINK_INFO_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) +{ + unsigned int i; + int err; + + 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); + } + + if (flash) + err = devlink_info_version_stored_put(req, info->key, + version); + else + err = devlink_info_version_running_put(req, 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; @@ -225,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 = { From patchwork Thu Jan 31 18:50:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1034442 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="bD3EtMGY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43r8Vg6Kl3z9s9G for ; Fri, 1 Feb 2019 05:52:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728225AbfAaSwW (ORCPT ); Thu, 31 Jan 2019 13:52:22 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:42824 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728201AbfAaSwU (ORCPT ); Thu, 31 Jan 2019 13:52:20 -0500 Received: by mail-pl1-f193.google.com with SMTP id y1so1872786plp.9 for ; Thu, 31 Jan 2019 10:52:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QZt7KR/GoFF4zVkdwXzl1RmHnB+ETCVXsnfZ1mE+y1E=; b=bD3EtMGY8fKrhvV/9P5R1T0Jva0QISR/VMClmSDHmBAjk4yzGxUj/SD0V5MyYZQh4E uDK2+dOf7nEBCM+hJtr3ViOr+5+t9LOC7hvFWBxZPrxNaravHXli1LpeS+PUB2wGcvOj 31Xads0+5jyAJ+Gjsfb4XZv/T7H3xzdTZvqBF139xLfjY0urLVa+LRI9M557ZLHxyIZU cZA5Pj3vTJMng1gJJDqtWqslxjGZkd4/1oP+nPNYV0GUglYdnGjDkP4QAQR43rYlvASr 3EmW33abSUEnKHLrAigw9RRIJIWqkou+bbnM18x/kgd6TDrS9pBfKX2561hS/tMgyW8i t2Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QZt7KR/GoFF4zVkdwXzl1RmHnB+ETCVXsnfZ1mE+y1E=; b=QZYv3QrrnQcQX3tSz8vTHvpOcCoNNcRokVEjWqnEWRDN6nk9QQVSOV6+4Q6F7o1sVT JAMG9w/JCLP4Z4/QsEfaP2Hrt565kbj54mfnoFpVkAGUx1D0eKqVy0b6ZgxDPQBertnR tz91PE9MR2YI5EEywCIf2JUb/874PbmJD79RpOJYAzyv2W8F+0GmtwaCfZeqauDyzZEP EanXOodL/Q62ZHky5ZEkNYUMyMSIMEVH2+1x9snkYcIj5OFwYSwUmZQZjR5xMLSC9BDW AFOFXQnJoF3Ef9nMWTc6yc5mQN7Ap+74bPJxQhPtlnUb/CCFb30CpQ0ygjD+3LfBLzJP tdJA== X-Gm-Message-State: AJcUukdEPA3Zw9W+tPE9httcnsSjsAaAU03E8DUGCM87ZumKohWYVMmg U+jBnr8mYWUvQDhZcPN+S87YvQ== X-Google-Smtp-Source: ALg8bN4Yl5i1JauAzvQLxWI9O+u2SVVN49oR2NMOe8WHWZI33bgWUXxvR4wEwGUYIeUtJe6Fwl7d5w== X-Received: by 2002:a17:902:780a:: with SMTP id p10mr36763162pll.54.1548960739223; Thu, 31 Jan 2019 10:52:19 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id o4sm7726169pgs.12.2019.01.31.10.52.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 10:52:18 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, jiri@resnulli.us, andrew@lunn.ch, f.fainelli@gmail.com, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, Jakub Kicinski Subject: [PATCH net-next v4 8/8] ethtool: add compat for devlink info Date: Thu, 31 Jan 2019 10:50:47 -0800 Message-Id: <20190131185047.27685-9-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190131185047.27685-1-jakub.kicinski@netronome.com> References: <20190131185047.27685-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If driver did not fill the fw_version field, try to call into the new devlink get_info op and collect the versions that way. We assume ethtool was always reporting running versions. v4: - use IS_REACHABLE() to avoid problems with DEVLINK=m (kbuildbot). v3 (Jiri): - do a dump and then parse it instead of special handling; - concatenate all versions (well, all that fit :)). Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko --- include/net/devlink.h | 10 +++++++ net/core/devlink.c | 63 +++++++++++++++++++++++++++++++++++++++++++ net/core/ethtool.c | 7 +++++ 3 files changed, 80 insertions(+) diff --git a/include/net/devlink.h b/include/net/devlink.h index 6b417f141fd6..1c8523920f66 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -972,4 +972,14 @@ devlink_info_version_running_put(struct devlink_info_req *req, } #endif +#if IS_REACHABLE(CONFIG_NET_DEVLINK) +void devlink_compat_running_version(struct net_device *dev, + char *buf, size_t len); +#else +static inline void +devlink_compat_running_version(struct net_device *dev, char *buf, size_t len) +{ +} +#endif + #endif /* _NET_DEVLINK_H_ */ diff --git a/net/core/devlink.c b/net/core/devlink.c index e31b6d617837..eb839d74bcc0 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -5278,6 +5278,69 @@ int devlink_region_snapshot_create(struct devlink_region *region, u64 data_len, } EXPORT_SYMBOL_GPL(devlink_region_snapshot_create); +static void __devlink_compat_running_version(struct devlink *devlink, + char *buf, size_t len) +{ + const struct nlattr *nlattr; + struct devlink_info_req req; + struct sk_buff *msg; + int rem, err; + + if (!devlink->ops->info_get) + return; + + msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); + if (!msg) + return; + + req.msg = msg; + err = devlink->ops->info_get(devlink, &req, NULL); + if (err) + goto free_msg; + + nla_for_each_attr(nlattr, (void *)msg->data, msg->len, rem) { + const struct nlattr *kv; + int rem_kv; + + if (nla_type(nlattr) != DEVLINK_ATTR_INFO_VERSION_RUNNING) + continue; + + nla_for_each_nested(kv, nlattr, rem_kv) { + if (nla_type(kv) != DEVLINK_ATTR_INFO_VERSION_VALUE) + continue; + + strlcat(buf, nla_data(kv), len); + strlcat(buf, " ", len); + } + } +free_msg: + nlmsg_free(msg); +} + +void devlink_compat_running_version(struct net_device *dev, + char *buf, size_t len) +{ + struct devlink_port *devlink_port; + struct devlink *devlink; + + mutex_lock(&devlink_mutex); + list_for_each_entry(devlink, &devlink_list, list) { + mutex_lock(&devlink->lock); + list_for_each_entry(devlink_port, &devlink->port_list, list) { + if (devlink_port->type == DEVLINK_PORT_TYPE_ETH || + devlink_port->type_dev == dev) { + __devlink_compat_running_version(devlink, + buf, len); + mutex_unlock(&devlink->lock); + goto out; + } + } + mutex_unlock(&devlink->lock); + } +out: + mutex_unlock(&devlink_mutex); +} + static int __init devlink_module_init(void) { return genl_register_family(&devlink_nl_family); diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 158264f7cfaf..197a4dfb712d 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -27,6 +27,7 @@ #include #include #include +#include #include /* @@ -803,6 +804,12 @@ static noinline_for_stack int ethtool_get_drvinfo(struct net_device *dev, if (ops->get_eeprom_len) info.eedump_len = ops->get_eeprom_len(dev); + rtnl_unlock(); + if (!info.fw_version[0]) + devlink_compat_running_version(dev, info.fw_version, + sizeof(info.fw_version)); + rtnl_lock(); + if (copy_to_user(useraddr, &info, sizeof(info))) return -EFAULT; return 0;