From patchwork Wed Jan 16 05:23:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1025653 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="cHwwyLVP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43fbHl19Dhz9sD4 for ; Wed, 16 Jan 2019 16:24:51 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730623AbfAPFYt (ORCPT ); Wed, 16 Jan 2019 00:24:49 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:37586 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729052AbfAPFYq (ORCPT ); Wed, 16 Jan 2019 00:24:46 -0500 Received: by mail-qk1-f196.google.com with SMTP id g125so3055648qke.4 for ; Tue, 15 Jan 2019 21:24:45 -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=Jv7mC+22i9/VKFrMGN94xjJdpmmCvqWOYDAfC5V4rs8=; b=cHwwyLVPV2r+/1Y7qW+SKPDBPm25FnfEAguOWv/XRQo5fM2ZKfv/rF3vYjlwTcwZav WHxcug32qKFqd5ZZr6ct5DlG3oZnAjqtY9ipSmQDzsKcb+a05v38IrbBkiRlHm33HREO mLIL3hCDc8NcEKs0dSnCggdpZkUz3gexfZIkXbzYDnWtbfjQhpM8QhlSAo7hlP/FAfe5 QqHtlgFwArbuAOBv/f/6q+MLWmdvN4s2tU/mjy3THWSrgONN4qfAsfXlzcKPEQKvkd4d dY+bXMHho5bzd8H6ajZ4fjZMBUd9ETGZ+qpUv299Q6+zQ3Eea6ez5E5YhrJxorGZW2oO r1pQ== 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=Jv7mC+22i9/VKFrMGN94xjJdpmmCvqWOYDAfC5V4rs8=; b=L3xn4M913SlHWU+qXMiIdNer0LPpE7rhn28m4Wdi75vSpyYIfsAiWCAQtFn6QRcUdr Wrv0oi6UKmLOKQ0Yl7XZ2rdpEg8R/XL8gk7j9nJp0aDCR9mxWekemypI9Ah3KPcH3gfz 9nMTE+G4Tv/roswDbscT0/Pw+kOlDrxnP0/AwToDncwpWBKUKbO5opzkuoV3ouK2dgPk 3SSYRr1BfsMcKtLITE3m3iZdgA/M0pu6ZS7MuvwbY42/Tz35fup8QyWrOwZtCOh6ji1U o2LkWpYypVTWAFKEWeMw8Ljp67HQJp9Y7Zmt0j451YgNjodEa01sZ3MSoiOsIrlFE7OV 8JhA== X-Gm-Message-State: AJcUukf2IIjTIo2Jxlt2HmeDH28ym9cFZ5o2chCr4Ho0/vS4R57Ta8Ez qRDHDTNKydN28+R6igNTYbIg4g== X-Google-Smtp-Source: ALg8bN7FB8Po7k4l4aJygre4XiWu1FR2qFGgUevjTtcbQkn5Yhtseqfdk01rUccZQYOIzyswfOOOGQ== X-Received: by 2002:a37:bcc1:: with SMTP id m184mr5249696qkf.286.1547616285263; Tue, 15 Jan 2019 21:24:45 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id n71sm57803913qkh.59.2019.01.15.21.24.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Jan 2019 21:24:44 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, jiri@resnulli.us, f.fainelli@gmail.com, andrew@lunn.ch, mkubecek@suse.cz, eugenem@fb.com, jonathan.lemon@gmail.com, oss-drivers@netronome.com, Jakub Kicinski Subject: [RFC net-next v2 6/6] nfp: devlink: report the running and flashed versions Date: Tue, 15 Jan 2019 21:23:55 -0800 Message-Id: <20190116052356.18086-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190116052356.18086-1-jakub.kicinski@netronome.com> References: <20190116052356.18086-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 --- .../net/ethernet/netronome/nfp/nfp_devlink.c | 73 +++++++++++++++++++ include/net/devlink.h | 7 ++ 2 files changed, 80 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index 63b2fa37256c..e3d23724a37c 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -207,11 +207,54 @@ 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_BSP, DEVLINK_VERSION_GENERIC_FW_MGMT, }, + { NFP_VERSIONS_CPLD, "fw.cpld", }, + { NFP_VERSIONS_APP, DEVLINK_VERSION_GENERIC_FW_APP, }, +}; + +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; const char *sn; int err; @@ -226,7 +269,37 @@ 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)) { + char buf[512] = {}; + + err = nfp_nsp_versions(nsp, buf, sizeof(buf)); + if (err) + goto err_close_nsp; + + err = nfp_devlink_versions_get_nsp(req, false, + buf, sizeof(buf)); + if (err) + goto err_close_nsp; + + err = nfp_devlink_versions_get_nsp(req, true, + buf, sizeof(buf)); + if (err) + goto err_close_nsp; + } + + nfp_nsp_close(nsp); + return nfp_devlink_versions_get_hwinfo(pf, req); + +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 dc08301028a9..9270f1a21f08 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -424,6 +424,13 @@ enum devlink_param_generic_id { /* 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" + enum devlink_version_type { DEVLINK_VERSION_FIXED, DEVLINK_VERSION_STORED,