From patchwork Fri Sep 6 16:00:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159087 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="0yhD0lWc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2NY0Mdtz9s7T for ; Sat, 7 Sep 2019 02:01:17 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395022AbfIFQBQ (ORCPT ); Fri, 6 Sep 2019 12:01:16 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:38306 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726654AbfIFQBO (ORCPT ); Fri, 6 Sep 2019 12:01:14 -0400 Received: by mail-wm1-f65.google.com with SMTP id o184so7669762wme.3 for ; Fri, 06 Sep 2019 09:01:13 -0700 (PDT) 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; bh=NEUwdSPAcpdRH0WG24D8mfbrruBTMnefsqqZUJOLEKI=; b=0yhD0lWcrofgyBZHJjv2/HEceVdpvl9frVyayuFSFs3uiX0Q1EW4M71vTuuByXjtnl 9uEJegIxoMPhJPS+9Fgq7l33nzmZ3Yr+LJm4fg0CNvNku7swCHnAL2Yh5DHtlmvjCLkI ICdReuE6DPXDuW7qX6+/fIV/eXFKrp81S3Jamk9CDLJnz78Upy+vwtHQChAY2q7QtP9q 4Ni5z/YxEPmu0//Njl1gYyNI2t+EkG3hDHii6bwRz5WeLUtnc4Gt4qDmfOa73NiczgjX mRsbXdeZ71ObQdq5YrMMKLgjvWf7fdyP8NN/EDCcbOZr9S8XzjWf+bcUABYeTs+Z7154 1krA== 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; bh=NEUwdSPAcpdRH0WG24D8mfbrruBTMnefsqqZUJOLEKI=; b=eI0ake0ga++g0Cz8x2uE8pnv7oqGxYmnaWocaW3TklURL749CSCSG1BzUDf7QFUUf1 AUdseJx4pCmZG9tRz2FG/OJuXcxxU+gcm2nYtFNOWpVVh7LP8xW8JYdg5SXzmylA6wZ2 rqJkkpCWcSw2Wt47WD4IL9wvcjKEQ6nmbZ4NisfYFxdrDuz/rrG70qo/ETvzdDs7tIVc VYINdW2DBbEG9zttjT0b39+5bqOBxkcyODvxylgAixhNXiJbMHhltL0sYj/zRVHX6UGK wEYsnw+c3YfI4PybANrFLi25czjw2E0RzemjKTQcqHw12Rwcmr/f3viiBLQ9IjN4Saty Tdqw== X-Gm-Message-State: APjAAAUiOv6439fHkfobovWER/7i5/Xedu//bn7Y5Tp1tfPOdu537igt jJbe64qPEst1TyIg1lDQDZ9EZw== X-Google-Smtp-Source: APXvYqxt/eEZY1pfLi8dYUqvtfJsadLwF9ODRsu31xQVs4G3eyBei5WZZoFF5dIu0ddpa1AZz3ySyA== X-Received: by 2002:a1c:b745:: with SMTP id h66mr7732077wmf.70.1567785672670; Fri, 06 Sep 2019 09:01:12 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:12 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 01/11] devlink: extend 'fw_load_policy' values Date: Fri, 6 Sep 2019 18:00:51 +0200 Message-Id: <20190906160101.14866-2-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Add the 'disk' value to the generic 'fw_load_policy' devlink parameter. This value indicates that firmware should always be loaded from disk only. Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- Documentation/networking/devlink-params.txt | 2 ++ include/uapi/linux/devlink.h | 1 + 2 files changed, 3 insertions(+) diff --git a/Documentation/networking/devlink-params.txt b/Documentation/networking/devlink-params.txt index 2d26434ddcf8..fadb5436188d 100644 --- a/Documentation/networking/devlink-params.txt +++ b/Documentation/networking/devlink-params.txt @@ -48,4 +48,6 @@ fw_load_policy [DEVICE, GENERIC] Load firmware version preferred by the driver. * DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH (1) Load firmware currently stored in flash. + * DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK (2) + Load firmware currently available on host's disk. Type: u8 diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 546e75dd74ac..c25cc29a6647 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -202,6 +202,7 @@ enum devlink_param_cmode { enum devlink_param_fw_load_policy_value { DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER, DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH, + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK, }; enum { From patchwork Fri Sep 6 16:00:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159088 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="QnX105rc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2NY57Cbz9s00 for ; Sat, 7 Sep 2019 02:01:17 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395026AbfIFQBQ (ORCPT ); Fri, 6 Sep 2019 12:01:16 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:44591 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726295AbfIFQBP (ORCPT ); Fri, 6 Sep 2019 12:01:15 -0400 Received: by mail-wr1-f66.google.com with SMTP id 30so7106377wrk.11 for ; Fri, 06 Sep 2019 09:01:14 -0700 (PDT) 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; bh=cQM8y3SyXrcUvODCK1LQLKm1BW+/BGm1Zw6QSw7VtKU=; b=QnX105rc78G2A+TQu5KVgKRaqgJCrcOeQAPRyn5rDkTUT07/+eSz2yyz9VuxvyfF4n D4wTOycehf682XbDD8E1GK9GcfEMP5ALA1CIkacdFXGqoWzL1Ahgqcd5KD3cMI9DE8k5 GGnSkKL/CZMnAYQkAMSurHtkMgCWdC0j+iSBMYNgy8WNmiBTqsZm2mRrSoBfw7g4nkOA lgd96uzXw7lMfO/IUpIy7lFNBvFDAQ8ikiM4Z3UrM+wCKjVVsYL21cStaZIBsrHy1zkq nDWX1uVx/z9jq5oI7sYtTgb798BMPvlqEdyhAGTATGJnHeNm3OyOu7Dovx4f1JUN5vUN y3fw== 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; bh=cQM8y3SyXrcUvODCK1LQLKm1BW+/BGm1Zw6QSw7VtKU=; b=Hlj6gvwhV17oD5Q6wIzPWLBEA3lThbrhxTgtG4m0K30C1Bij+hX8r4XP9IpApYyzIb rnkWyYV8gWExGYVaRF5mtlQeuvzd8XjtBULExMlZiQG+GUxC4ej0umc9RhDmW2ci10Rz vBjJMfnR85qzlaDXiELVFSqGPl40o/w6+kF7hqHOu8G1/1BqANOF25U14zpXbNf0tEZx jjw4O6t6pLplMRp68hLM1m4szNcMEJlZZUBXmmZoXUAv01Iw+6hEmsoyqjfQObyu20j3 GsBj9utx6M21bWRSXVGQsPduVSqOXFVhLGsOSGKgj297jdrREDre535zvuwGzaL0te0K E7gA== X-Gm-Message-State: APjAAAWBUK20lc138YKIV8Pp+uRUswvJtcyIwl5D03CFQ4bJyRASfoJJ a35wni+Xa6WgSUzM4InE8v6iGA== X-Google-Smtp-Source: APXvYqxtfcsRKhoGicFH1HbXgwRF6UfDoFt1txnl7+dobn3nZ9i34Fwbrd6bpcuMyTINADkYCBryrg== X-Received: by 2002:a5d:5606:: with SMTP id l6mr7444837wrv.108.1567785673691; Fri, 06 Sep 2019 09:01:13 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:13 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 02/11] devlink: add 'reset_dev_on_drv_probe' param Date: Fri, 6 Sep 2019 18:00:52 +0200 Message-Id: <20190906160101.14866-3-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Add the 'reset_dev_on_drv_probe' devlink parameter, controlling the device reset policy on driver probe. This parameter is useful in conjunction with the existing 'fw_load_policy' parameter. Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- Documentation/networking/devlink-params.txt | 14 ++++++++++++++ include/net/devlink.h | 4 ++++ include/uapi/linux/devlink.h | 7 +++++++ net/core/devlink.c | 5 +++++ 4 files changed, 30 insertions(+) diff --git a/Documentation/networking/devlink-params.txt b/Documentation/networking/devlink-params.txt index fadb5436188d..f9e30d686243 100644 --- a/Documentation/networking/devlink-params.txt +++ b/Documentation/networking/devlink-params.txt @@ -51,3 +51,17 @@ fw_load_policy [DEVICE, GENERIC] * DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK (2) Load firmware currently available on host's disk. Type: u8 + +reset_dev_on_drv_probe [DEVICE, GENERIC] + Controls the device's reset policy on driver probe. + Valid values: + * DEVLINK_PARAM_RESET_DEV_VALUE_UNKNOWN (0) + Unknown or invalid value. + * DEVLINK_PARAM_RESET_DEV_VALUE_ALWAYS (1) + Always reset device on driver probe. + * DEVLINK_PARAM_RESET_DEV_VALUE_NEVER (2) + Never reset device on driver probe. + * DEVLINK_PARAM_RESET_DEV_VALUE_DISK (3) + Reset only if device firmware can be found in the + filesystem. + Type: u8 diff --git a/include/net/devlink.h b/include/net/devlink.h index 460bc629d1a4..d880de5b8d3a 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -398,6 +398,7 @@ enum devlink_param_generic_id { DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX, DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN, DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY, + DEVLINK_PARAM_GENERIC_ID_RESET_DEV, /* add new param generic ids above here*/ __DEVLINK_PARAM_GENERIC_ID_MAX, @@ -428,6 +429,9 @@ enum devlink_param_generic_id { #define DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_NAME "fw_load_policy" #define DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_TYPE DEVLINK_PARAM_TYPE_U8 +#define DEVLINK_PARAM_GENERIC_RESET_DEV_NAME "reset_dev_on_drv_probe" +#define DEVLINK_PARAM_GENERIC_RESET_DEV_TYPE DEVLINK_PARAM_TYPE_U8 + #define DEVLINK_PARAM_GENERIC(_id, _cmodes, _get, _set, _validate) \ { \ .id = DEVLINK_PARAM_GENERIC_ID_##_id, \ diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index c25cc29a6647..3172d1b3329f 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -205,6 +205,13 @@ enum devlink_param_fw_load_policy_value { DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK, }; +enum devlink_param_reset_dev_value { + DEVLINK_PARAM_RESET_DEV_VALUE_UNKNOWN, + DEVLINK_PARAM_RESET_DEV_VALUE_ALWAYS, + DEVLINK_PARAM_RESET_DEV_VALUE_NEVER, + DEVLINK_PARAM_RESET_DEV_VALUE_DISK, +}; + enum { DEVLINK_ATTR_STATS_RX_PACKETS, /* u64 */ DEVLINK_ATTR_STATS_RX_BYTES, /* u64 */ diff --git a/net/core/devlink.c b/net/core/devlink.c index 6e52d639dac6..e8bc96f104a7 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -2852,6 +2852,11 @@ static const struct devlink_param devlink_param_generic[] = { .name = DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_NAME, .type = DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_TYPE, }, + { + .id = DEVLINK_PARAM_GENERIC_ID_RESET_DEV, + .name = DEVLINK_PARAM_GENERIC_RESET_DEV_NAME, + .type = DEVLINK_PARAM_GENERIC_RESET_DEV_TYPE, + }, }; static int devlink_param_generic_verify(const struct devlink_param *param) From patchwork Fri Sep 6 16:00:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159091 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="y+aUEDLc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nd5klTz9sDB for ; Sat, 7 Sep 2019 02:01:21 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395035AbfIFQBT (ORCPT ); Fri, 6 Sep 2019 12:01:19 -0400 Received: from mail-wm1-f54.google.com ([209.85.128.54]:36149 "EHLO mail-wm1-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389620AbfIFQBQ (ORCPT ); Fri, 6 Sep 2019 12:01:16 -0400 Received: by mail-wm1-f54.google.com with SMTP id p13so7710203wmh.1 for ; Fri, 06 Sep 2019 09:01:15 -0700 (PDT) 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; bh=ztIrhpPXGgpR6CRxJyU3cxdcXT/xvKpS3PfOJtbETmA=; b=y+aUEDLclY2jDSA8UOnLJ8/MWADfpWC/qV45mQRq3m4CCE7Wdl1r88X5crjyEBWLyw gIqjKWfo/nZJGRpZHA/IJ2wSLNjQBV8TQtpdYjABuF8fDWrUOsCtTdRirptYT1INAQb6 Z5cc+RFUJ0dDT64gciLstmFv7UizLLKALbQgymwxkCZY95yFfGwjRTdvnE7jpc6cjBan nGA+Rack2S3ZJ1bOq1MqWrY8/1MXHCiVO3UOKnI955esuywhK93/Ig6lumEMzzlzRd0l sk5sDaZ0Uou/NpdEyIsUX6MBfkhfeOEpLE7nI+Q76tzMz/reeYGUqk7x15vojpYNyMFE sDTA== 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; bh=ztIrhpPXGgpR6CRxJyU3cxdcXT/xvKpS3PfOJtbETmA=; b=C7+3ukQp32++ykkr5GAgImE2bQ0dEnXxiUg/Kr2pIwqI+s6xqUz14mp6rbYLy/tQyL LBRgtKsZSDi3sCWXwb7q0C4/4h2bcENT8MwuRCacY3pVMW963JKCZd77Ypw2fCUmCTNm PJ6hoh27xCUsnEW12okeUTlKt9SajVMa0i7EVAI7texxMS1pGF7/OGGRzfeg8uQjTXcO 0tODv+A4teK0wgc+pYBVWQThOUTEgJbl+oJTOrphI3ZRrBnSM6AcSDcknYhvuyVgMPTq O3xzjserukbPZSphqSiP6mu4EUiXOysV6RyJEsYnFU21fhMrW41izdoAUH3X3W01anzc YQSA== X-Gm-Message-State: APjAAAWU43bVS2Zi4NkrEFEjzl6eG801JjUCha/0tkg4Jiwq3A8OBU0D DGk65cMN37yxxFtDNWGEJwJnesCCo+w= X-Google-Smtp-Source: APXvYqzRfOuURmpriep7aXoYbQRJkcfBAFfDGiEBWNgbFSrco0LZuOyBeXpHIsJPzXVRjPMjTnnJ2A== X-Received: by 2002:a7b:cd12:: with SMTP id f18mr8180279wmj.111.1567785674712; Fri, 06 Sep 2019 09:01:14 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:14 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 03/11] nfp: nsp: add support for fw_loaded command Date: Fri, 6 Sep 2019 18:00:53 +0200 Message-Id: <20190906160101.14866-4-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Add support for the simple command that indicates whether application firmware is loaded. Signed-off-by: Dirk van der Merwe Reviewed-by: Jakub Kicinski Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 10 ++++++++++ drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index 9a08623c325d..b4c5dc5f7404 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -96,6 +96,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_FW_LOADED = 19, /* Is application firmware loaded */ SPCODE_VERSIONS = 21, /* Report FW versions */ SPCODE_READ_SFF_EEPROM = 22, /* Read module EEPROM */ }; @@ -925,6 +926,15 @@ int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size) return 0; } +int nfp_nsp_fw_loaded(struct nfp_nsp *state) +{ + const struct nfp_nsp_command_arg arg = { + .code = SPCODE_FW_LOADED, + }; + + return __nfp_nsp_command(state, &arg); +} + int nfp_nsp_versions(struct nfp_nsp *state, void *buf, unsigned int size) { struct nfp_nsp_command_buf_arg versions = { diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h index 22ee6985ee1c..4ceecff347c6 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h @@ -22,6 +22,7 @@ int nfp_nsp_write_flash(struct nfp_nsp *state, const struct firmware *fw); int nfp_nsp_mac_reinit(struct nfp_nsp *state); int nfp_nsp_load_stored_fw(struct nfp_nsp *state); int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size); +int nfp_nsp_fw_loaded(struct nfp_nsp *state); int nfp_nsp_read_module_eeprom(struct nfp_nsp *state, int eth_index, unsigned int offset, void *data, unsigned int len, unsigned int *read_len); @@ -41,6 +42,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_fw_loaded(struct nfp_nsp *state) +{ + return nfp_nsp_get_abi_ver_minor(state) > 25; +} + static inline bool nfp_nsp_has_versions(struct nfp_nsp *state) { return nfp_nsp_get_abi_ver_minor(state) > 27; From patchwork Fri Sep 6 16:00:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159089 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="2INgNlDb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nb5LPrz9s00 for ; Sat, 7 Sep 2019 02:01:19 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391061AbfIFQBS (ORCPT ); Fri, 6 Sep 2019 12:01:18 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36762 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395023AbfIFQBR (ORCPT ); Fri, 6 Sep 2019 12:01:17 -0400 Received: by mail-wm1-f65.google.com with SMTP id p13so7710302wmh.1 for ; Fri, 06 Sep 2019 09:01:16 -0700 (PDT) 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; bh=Dcj/mXlOQpUiLA4AlOf/wtwWLYZIEfaK15WEJ2S4g6c=; b=2INgNlDbve0pcWH/YvpfFj4g2CBxta+vFy+a4M4ujIbT1/ts0054uD+Nel647Dq2Xk eqD2ZWij3J2P1UzWkGXkn48UDhlAScp4z2GfN36lz5paoJXsTBC/HhrQ09vw5xYt4DzJ JVN/GifOKmhIncEIuJqEuZzDbIXYEJ1WMjgG0li7tFwPOhM/6aSCyxvWlyL+09duFk5A E0C2k/fHIsxY8kIqDPix6AURogC473lpf5q9fUQ7fteUqmNIraIB+J7A2YPPE5ZejP3K WqdhXF9tFT84uSftkTFrkRZBC0r5YwNXVF/g+TrhDR8jNXv0pVyHK9Ok5DCfWHFMCMTI Z9Nw== 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; bh=Dcj/mXlOQpUiLA4AlOf/wtwWLYZIEfaK15WEJ2S4g6c=; b=p1wPIpB7zsJ5NCwjVPKUDTKf4OSfhP6nztCwdG9s+iGXpEKWvaLS7vohnr4qCj7/8D cTr99B6pL/1+ZrZyjQ87ogwNMVPP/8jJDB35BeXTRsX29rjcVard+ECCQTQg+XA/alzU 0oOiHWssydQbKdLKg0FnT3IhvKhlEXfDOP+H0aTvv0WPQI14MJUA64AlJr9ZRmvRi8mY AqihVpZ+l1liVwLhm1eCZVa9Mu31LvQ0txbSpKQf0z/sQd7suyUwoSYoTmoiHnVWBqWU efHfqWQcGYe/8plEC4cLSILX7nm/6YCs85qcdZ8TGIPmfAbpAWr8HRLL/O4PUh5sMpnc TRfQ== X-Gm-Message-State: APjAAAXPrg7ynEYNNT1IcW83tnC0i3ygPJ/l37jGd4UVs868tSollaYg THoG8dxH+MOtKWbyf3pqcRdP4A== X-Google-Smtp-Source: APXvYqz13tNtSHQqnTiUoIDLVdgasUS98dMzWWljerfqE1O6I6Ei9TLEuKUnAF/Lgvaw/Bfj70Ehqw== X-Received: by 2002:a05:600c:3d0:: with SMTP id z16mr7199914wmd.32.1567785675863; Fri, 06 Sep 2019 09:01:15 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:15 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 04/11] nfp: nsp: add support for optional hwinfo lookup Date: Fri, 6 Sep 2019 18:00:54 +0200 Message-Id: <20190906160101.14866-5-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe There are cases where we want to read a hwinfo entry from the NFP, and if it doesn't exist, use a default value instead. To support this, we must silence warning/error messages when the hwinfo entry doesn't exist since this is a valid use case. The NSP command structure provides the ability to silence command errors, in which case the caller should log any command errors appropriately. Protocol errors are unaffected by this. Signed-off-by: Dirk van der Merwe Reviewed-by: Jakub Kicinski Signed-off-by: Simon Horman --- .../net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 52 ++++++++++++++++++++-- .../net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 2 + 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index b4c5dc5f7404..deee91cbf1b2 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -144,6 +144,8 @@ struct nfp_nsp { * @option: NFP SP Command Argument * @buf: NFP SP Buffer Address * @error_cb: Callback for interpreting option if error occurred + * @error_quiet:Don't print command error/warning. Protocol errors are still + * logged. */ struct nfp_nsp_command_arg { u16 code; @@ -152,6 +154,7 @@ struct nfp_nsp_command_arg { u32 option; u64 buf; void (*error_cb)(struct nfp_nsp *state, u32 ret_val); + bool error_quiet; }; /** @@ -406,8 +409,10 @@ __nfp_nsp_command(struct nfp_nsp *state, const struct nfp_nsp_command_arg *arg) err = FIELD_GET(NSP_STATUS_RESULT, reg); if (err) { - nfp_warn(cpp, "Result (error) code set: %d (%d) command: %d\n", - -err, (int)ret_val, arg->code); + if (!arg->error_quiet) + nfp_warn(cpp, "Result (error) code set: %d (%d) command: %d\n", + -err, (int)ret_val, arg->code); + if (arg->error_cb) arg->error_cb(state, ret_val); else @@ -892,12 +897,14 @@ int nfp_nsp_load_stored_fw(struct nfp_nsp *state) } static int -__nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size) +__nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size, + bool optional) { struct nfp_nsp_command_buf_arg hwinfo_lookup = { { .code = SPCODE_HWINFO_LOOKUP, .option = size, + .error_quiet = optional, }, .in_buf = buf, .in_size = size, @@ -914,7 +921,7 @@ int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size) size = min_t(u32, size, NFP_HWINFO_LOOKUP_SIZE); - err = __nfp_nsp_hwinfo_lookup(state, buf, size); + err = __nfp_nsp_hwinfo_lookup(state, buf, size, false); if (err) return err; @@ -926,6 +933,43 @@ int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size) return 0; } +int nfp_nsp_hwinfo_lookup_optional(struct nfp_nsp *state, void *buf, + unsigned int size, const char *default_val) +{ + int err; + + /* Ensure that the default value is usable irrespective of whether + * it is actually going to be used. + */ + if (strnlen(default_val, size) == size) + return -EINVAL; + + if (!nfp_nsp_has_hwinfo_lookup(state)) { + strcpy(buf, default_val); + return 0; + } + + size = min_t(u32, size, NFP_HWINFO_LOOKUP_SIZE); + + err = __nfp_nsp_hwinfo_lookup(state, buf, size, true); + if (err) { + if (err == -ENOENT) { + strcpy(buf, default_val); + return 0; + } + + nfp_err(state->cpp, "NSP HWinfo lookup failed: %d\n", err); + return err; + } + + if (strnlen(buf, size) == size) { + nfp_err(state->cpp, "NSP HWinfo value not NULL-terminated\n"); + return -EINVAL; + } + + return 0; +} + int nfp_nsp_fw_loaded(struct nfp_nsp *state) { const struct nfp_nsp_command_arg arg = { diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h index 4ceecff347c6..a8985c2eb1f1 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h @@ -22,6 +22,8 @@ int nfp_nsp_write_flash(struct nfp_nsp *state, const struct firmware *fw); int nfp_nsp_mac_reinit(struct nfp_nsp *state); int nfp_nsp_load_stored_fw(struct nfp_nsp *state); int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size); +int nfp_nsp_hwinfo_lookup_optional(struct nfp_nsp *state, void *buf, + unsigned int size, const char *default_val); int nfp_nsp_fw_loaded(struct nfp_nsp *state); int nfp_nsp_read_module_eeprom(struct nfp_nsp *state, int eth_index, unsigned int offset, void *data, From patchwork Fri Sep 6 16:00:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159090 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="UX5yP8RS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nc5KP3z9s7T for ; Sat, 7 Sep 2019 02:01:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395040AbfIFQBU (ORCPT ); Fri, 6 Sep 2019 12:01:20 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:39681 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726295AbfIFQBS (ORCPT ); Fri, 6 Sep 2019 12:01:18 -0400 Received: by mail-wr1-f67.google.com with SMTP id t16so7141865wra.6 for ; Fri, 06 Sep 2019 09:01:17 -0700 (PDT) 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; bh=jQMyV+x+vaAQ7ys5KCHBBGyiMgYaDxRKLpQMTJgq/FQ=; b=UX5yP8RSqHon8OhExykl4xi7t3k6wgETHP5brKXwySgHnAK5P9RiCF9UQ6+yJYW2NG br6H51YKqGpRI2KYu0nnNNs5TeqJ3DYKdcNtxJfd44SdPqguap/bTiPQ1Ziij858WPEo jeZCmQCCvXwjJSUeHZwCzF/Xzdgkg7K99TgQNsv/onr1rsb8DNyoxHK9DrqG59mfAlET apsdZfQjysr0Xdk8LI4btPFXTvz7046uAl+q1Nmnt/I2NLN9LPf6PadXu3g+LexfVh0j Kjy/pxGjNgQokmINZswBa5MwK0vOCf/gbZVJKFPNoIxWt57GnGTvI2T4TvJzp7PRf6Ux jpFw== 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; bh=jQMyV+x+vaAQ7ys5KCHBBGyiMgYaDxRKLpQMTJgq/FQ=; b=ju/gYGYNcXkya7XSLGz0hDvqv96QaOCJn+E1N+G9Cnpc2NyXFzli5iadT+ffOOPB7p hvYRiGmt3bWFwqHM13O0nfgArRHos7roxM1gz3NNy8XaGIH6lCII4mRp8o8enLo/KYWt PhI2A+fG8YbW3ERjFOE5eP9sWcJCXrn+Kd15gD8CEBO+vtkpMltblTcCg/07LSm0C91T RRlUp+KOtKj4RwAjMb/a6RSHv4sUzLBdgFcqNJD3LB03Sy4eMsrrFIGjXiEY/7tkwvcd ApAyu/YflvuObo+Uy8/fiVwzkg2sB5u7a9yt901CGRP321P5DUyf80JV3Xjq5rqkoE/b yoAw== X-Gm-Message-State: APjAAAU6MeLfjVqXJ6w97aM3m6nxDEj73CacHK/p/9GdCKeCXxjCZgjj BJML7BZSkhfk9Xprnwz0AdY5Dw== X-Google-Smtp-Source: APXvYqyUsPXw6Pn4Z3sDrgAD29Cgx7hIp7BoxnFj3Z0TN/bew3Zd9Eq/Bk4DEZt3x5VOsibiqQMLMg== X-Received: by 2002:a05:6000:1632:: with SMTP id v18mr8494723wrb.61.1567785677021; Fri, 06 Sep 2019 09:01:17 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:16 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 05/11] nfp: nsp: add support for hwinfo set operation Date: Fri, 6 Sep 2019 18:00:55 +0200 Message-Id: <20190906160101.14866-6-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Add support for the NSP HWinfo set command. This closely follows the HWinfo lookup command. Signed-off-by: Dirk van der Merwe Reviewed-by: Jakub Kicinski Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 15 +++++++++++++++ drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index deee91cbf1b2..f18e787fa9ad 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -96,6 +96,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_HWINFO_SET = 18, /* Set HWinfo entry */ SPCODE_FW_LOADED = 19, /* Is application firmware loaded */ SPCODE_VERSIONS = 21, /* Report FW versions */ SPCODE_READ_SFF_EEPROM = 22, /* Read module EEPROM */ @@ -970,6 +971,20 @@ int nfp_nsp_hwinfo_lookup_optional(struct nfp_nsp *state, void *buf, return 0; } +int nfp_nsp_hwinfo_set(struct nfp_nsp *state, void *buf, unsigned int size) +{ + struct nfp_nsp_command_buf_arg hwinfo_set = { + { + .code = SPCODE_HWINFO_SET, + .option = size, + }, + .in_buf = buf, + .in_size = size, + }; + + return nfp_nsp_command_buf(state, &hwinfo_set); +} + int nfp_nsp_fw_loaded(struct nfp_nsp *state) { const struct nfp_nsp_command_arg arg = { diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h index a8985c2eb1f1..055fda05880d 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h @@ -24,6 +24,7 @@ int nfp_nsp_load_stored_fw(struct nfp_nsp *state); int nfp_nsp_hwinfo_lookup(struct nfp_nsp *state, void *buf, unsigned int size); int nfp_nsp_hwinfo_lookup_optional(struct nfp_nsp *state, void *buf, unsigned int size, const char *default_val); +int nfp_nsp_hwinfo_set(struct nfp_nsp *state, void *buf, unsigned int size); int nfp_nsp_fw_loaded(struct nfp_nsp *state); int nfp_nsp_read_module_eeprom(struct nfp_nsp *state, int eth_index, unsigned int offset, void *data, @@ -44,6 +45,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_hwinfo_set(struct nfp_nsp *state) +{ + return nfp_nsp_get_abi_ver_minor(state) > 25; +} + static inline bool nfp_nsp_has_fw_loaded(struct nfp_nsp *state) { return nfp_nsp_get_abi_ver_minor(state) > 25; From patchwork Fri Sep 6 16:00:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159092 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="N/CuEJH+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Ng355bz9s7T for ; Sat, 7 Sep 2019 02:01:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395046AbfIFQBW (ORCPT ); Fri, 6 Sep 2019 12:01:22 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36775 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395023AbfIFQBV (ORCPT ); Fri, 6 Sep 2019 12:01:21 -0400 Received: by mail-wm1-f65.google.com with SMTP id p13so7710473wmh.1 for ; Fri, 06 Sep 2019 09:01:18 -0700 (PDT) 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; bh=z2vLIzGVHMazqflfz6e3fyXoIG2fjgYyFM5yZYytFEA=; b=N/CuEJH+G1iqdbVKGfmzesHpcfNhyUckAxnNRbVppDhv5xX97FFZkDXJreOKHk6fsi EGZfFcZkMRfEc7uZhY1TbWfrRQnjrGaqm+aVtE1M+SjKYHWEQowpRYEY/OPmhRke9Rdn 93FmWmV+MFPDTcDfLUGqv5yWPC6y0cdD6VV1YgHlG2y50mBgbm0de882Oe+9JMKsqzzx ZDBJ1jHqi6asR4UrFkWbv95zPijl9JY28i9W7wRoeE5nS1jJm/Rcq7I31bwcTZdJ8P+a stoAL2fnEU3vw9W/0BafjZXWuICqXpVOUamv5NoQuPyM/p5S6l5ayIHYkANGjwxfjnhf 7I1g== 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; bh=z2vLIzGVHMazqflfz6e3fyXoIG2fjgYyFM5yZYytFEA=; b=W1vbTl/hiBQcZII5zaPAUyD6GSR+0wq0a3TIQ8xSuTsXWXMRt054cK6Oj26iiTcGa9 CPrbz6OEwV1NYvkh4gla1UI5hL0Io0yL1gXT/hLFMvp6g/E+Lq5jjHsbh6eSS/hujmfA PEpVRjPGcRz/czpHggxkRzy9cIfDBSVQWhgCB/hg372ehnnasHowmAybcL9OtilDX0iG cQJa9poyPXJyXvASbAxPt9pqBrF/I/Jw9KoEvXwt9IstISp12W2wY9S+U96Z1mcc0mK0 yf87A9BI2YBtKhbMJkoB0fsF4Us5ybGyJZoLSwZEZA8UouC4lKbR0RiTojg4eMotZhPn 35wg== X-Gm-Message-State: APjAAAUZ4LbQEK0aIhALYrbEENX9yipn1TCMTWcLw5wdrI6L+W8fv9rv wQSjVHZok3rMnVp751gfTPL5PQ== X-Google-Smtp-Source: APXvYqyvqySaiOpk2ioIey6NdpAD3e8YQ2jUJjwA5NBU0uEGWqeqdBMcXyJ7WWeOw1xUiAjv5YqlCA== X-Received: by 2002:a1c:2bc1:: with SMTP id r184mr7676603wmr.40.1567785678141; Fri, 06 Sep 2019 09:01:18 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:17 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 06/11] nfp: honor FW reset and loading policies Date: Fri, 6 Sep 2019 18:00:56 +0200 Message-Id: <20190906160101.14866-7-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe The firmware reset and loading policies can be controlled with the combination of three hwinfo keys, 'abi_drv_reset', 'abi_drv_load_ifc' and 'app_fw_from_flash'. 'app_fw_from_flash' defines which firmware should take precedence, 'Disk', 'Flash' or the 'Preferred' firmware. When 'Preferred' is selected, the management firmware makes the decision on which firmware will be loaded by comparing versions of the flash firmware and the host supplied firmware. 'abi_drv_reset' defines when the driver should reset the firmware when the driver is probed, either 'Disk' if firmware was found on disk, 'Always' reset or 'Never' reset. Note that the device is always reset on driver unload if firmware was loaded when the driver was probed. 'abi_drv_load_ifc' defines a list of PF devices allowed to load FW on the device. Furthermore, we limit the cases to where the driver will unload firmware again when the driver is removed to only when firmware was loaded by the driver and only if this particular device was the only one that could have loaded firmware. This is needed to avoid firmware being removed while in use on multi-host platforms. Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/nfp_main.c | 139 +++++++++++++++++---- drivers/net/ethernet/netronome/nfp/nfp_main.h | 2 + .../net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 15 +++ 3 files changed, 131 insertions(+), 25 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c index 81679647e842..0d8649024505 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c @@ -352,7 +352,7 @@ nfp_net_fw_request(struct pci_dev *pdev, struct nfp_pf *pf, const char *name) err = request_firmware_direct(&fw, name, &pdev->dev); nfp_info(pf->cpp, " %s: %s\n", - name, err ? "not found" : "found, loading..."); + name, err ? "not found" : "found"); if (err) return NULL; @@ -430,6 +430,33 @@ nfp_net_fw_find(struct pci_dev *pdev, struct nfp_pf *pf) return nfp_net_fw_request(pdev, pf, fw_name); } +static int +nfp_get_fw_policy_value(struct pci_dev *pdev, struct nfp_nsp *nsp, + const char *key, const char *default_val, int max_val, + int *value) +{ + char hwinfo[64]; + long hi_val; + int err; + + snprintf(hwinfo, sizeof(hwinfo), key); + err = nfp_nsp_hwinfo_lookup_optional(nsp, hwinfo, sizeof(hwinfo), + default_val); + if (err) + return err; + + err = kstrtol(hwinfo, 0, &hi_val); + if (err || hi_val < 0 || hi_val > max_val) { + dev_warn(&pdev->dev, + "Invalid value '%s' from '%s', ignoring\n", + hwinfo, key); + err = kstrtol(default_val, 0, &hi_val); + } + + *value = hi_val; + return err; +} + /** * nfp_net_fw_load() - Load the firmware image * @pdev: PCI Device structure @@ -441,44 +468,106 @@ nfp_net_fw_find(struct pci_dev *pdev, struct nfp_pf *pf) static int nfp_fw_load(struct pci_dev *pdev, struct nfp_pf *pf, struct nfp_nsp *nsp) { - const struct firmware *fw; + bool do_reset, fw_loaded = false; + const struct firmware *fw = NULL; + int err, reset, policy, ifcs = 0; + char *token, *ptr; + char hwinfo[64]; u16 interface; - int err; + + snprintf(hwinfo, sizeof(hwinfo), "abi_drv_load_ifc"); + err = nfp_nsp_hwinfo_lookup_optional(nsp, hwinfo, sizeof(hwinfo), + NFP_NSP_DRV_LOAD_IFC_DEFAULT); + if (err) + return err; interface = nfp_cpp_interface(pf->cpp); - if (NFP_CPP_INTERFACE_UNIT_of(interface) != 0) { - /* Only Unit 0 should reset or load firmware */ + ptr = hwinfo; + while ((token = strsep(&ptr, ","))) { + unsigned long interface_hi; + + err = kstrtoul(token, 0, &interface_hi); + if (err) { + dev_err(&pdev->dev, + "Failed to parse interface '%s': %d\n", + token, err); + return err; + } + + ifcs++; + if (interface == interface_hi) + break; + } + + if (!token) { dev_info(&pdev->dev, "Firmware will be loaded by partner\n"); return 0; } + err = nfp_get_fw_policy_value(pdev, nsp, "abi_drv_reset", + NFP_NSP_DRV_RESET_DEFAULT, + NFP_NSP_DRV_RESET_NEVER, &reset); + if (err) + return err; + + err = nfp_get_fw_policy_value(pdev, nsp, "app_fw_from_flash", + NFP_NSP_APP_FW_LOAD_DEFAULT, + NFP_NSP_APP_FW_LOAD_PREF, &policy); + if (err) + return err; + fw = nfp_net_fw_find(pdev, pf); - if (!fw) { - if (nfp_nsp_has_stored_fw_load(nsp)) - nfp_nsp_load_stored_fw(nsp); - return 0; + do_reset = reset == NFP_NSP_DRV_RESET_ALWAYS || + (fw && reset == NFP_NSP_DRV_RESET_DISK); + + if (do_reset) { + dev_info(&pdev->dev, "Soft-resetting the NFP\n"); + err = nfp_nsp_device_soft_reset(nsp); + if (err < 0) { + dev_err(&pdev->dev, + "Failed to soft reset the NFP: %d\n", err); + goto exit_release_fw; + } } - dev_info(&pdev->dev, "Soft-reset, loading FW image\n"); - err = nfp_nsp_device_soft_reset(nsp); - if (err < 0) { - dev_err(&pdev->dev, "Failed to soft reset the NFP: %d\n", - err); - goto exit_release_fw; - } + if (fw && policy != NFP_NSP_APP_FW_LOAD_FLASH) { + if (nfp_nsp_has_fw_loaded(nsp) && nfp_nsp_fw_loaded(nsp)) + goto exit_release_fw; - err = nfp_nsp_load_fw(nsp, fw); - if (err < 0) { - dev_err(&pdev->dev, "FW loading failed: %d\n", err); - goto exit_release_fw; + err = nfp_nsp_load_fw(nsp, fw); + if (err < 0) { + dev_err(&pdev->dev, "FW loading failed: %d\n", + err); + goto exit_release_fw; + } + dev_info(&pdev->dev, "Finished loading FW image\n"); + fw_loaded = true; + } else if (policy != NFP_NSP_APP_FW_LOAD_DISK && + nfp_nsp_has_stored_fw_load(nsp)) { + /* Don't propagate this error to stick with legacy driver + * behavior, failure will be detected later during init. + */ + if (!nfp_nsp_load_stored_fw(nsp)) + dev_info(&pdev->dev, "Finished loading stored FW image\n"); + + /* Don't flag the fw_loaded in this case since other devices + * may reuse the firmware when configured this way + */ + } else { + dev_warn(&pdev->dev, "Didn't load firmware, please update flash or reconfigure card\n"); } - dev_info(&pdev->dev, "Finished loading FW image\n"); - exit_release_fw: release_firmware(fw); - return err < 0 ? err : 1; + /* We don't want to unload firmware when other devices may still be + * dependent on it, which could be the case if there are multiple + * devices that could load firmware. + */ + if (fw_loaded && ifcs == 1) + pf->unload_fw_on_remove = true; + + return err < 0 ? err : fw_loaded; } static void @@ -704,7 +793,7 @@ static int nfp_pci_probe(struct pci_dev *pdev, err_fw_unload: kfree(pf->rtbl); nfp_mip_close(pf->mip); - if (pf->fw_loaded) + if (pf->unload_fw_on_remove) nfp_fw_unload(pf); kfree(pf->eth_tbl); kfree(pf->nspi); @@ -744,7 +833,7 @@ static void __nfp_pci_shutdown(struct pci_dev *pdev, bool unload_fw) vfree(pf->dumpspec); kfree(pf->rtbl); nfp_mip_close(pf->mip); - if (unload_fw && pf->fw_loaded) + if (unload_fw && pf->unload_fw_on_remove) nfp_fw_unload(pf); destroy_workqueue(pf->wq); diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.h b/drivers/net/ethernet/netronome/nfp/nfp_main.h index b7211f200d22..bd6450b0f23f 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.h @@ -64,6 +64,7 @@ struct nfp_dumpspec { * @limit_vfs: Number of VFs supported by firmware (~0 for PCI limit) * @num_vfs: Number of SR-IOV VFs enabled * @fw_loaded: Is the firmware loaded? + * @unload_fw_on_remove:Do we need to unload firmware on driver removal? * @ctrl_vnic: Pointer to the control vNIC if available * @mip: MIP handle * @rtbl: RTsym table @@ -110,6 +111,7 @@ struct nfp_pf { unsigned int num_vfs; bool fw_loaded; + bool unload_fw_on_remove; struct nfp_net *ctrl_vnic; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h index 055fda05880d..1531c1870020 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h @@ -102,6 +102,21 @@ enum nfp_eth_fec { #define NFP_FEC_REED_SOLOMON BIT(NFP_FEC_REED_SOLOMON_BIT) #define NFP_FEC_DISABLED BIT(NFP_FEC_DISABLED_BIT) +/* Defines the valid values of the 'abi_drv_reset' hwinfo key */ +#define NFP_NSP_DRV_RESET_DISK 0 +#define NFP_NSP_DRV_RESET_ALWAYS 1 +#define NFP_NSP_DRV_RESET_NEVER 2 +#define NFP_NSP_DRV_RESET_DEFAULT "0" + +/* Defines the valid values of the 'app_fw_from_flash' hwinfo key */ +#define NFP_NSP_APP_FW_LOAD_DISK 0 +#define NFP_NSP_APP_FW_LOAD_FLASH 1 +#define NFP_NSP_APP_FW_LOAD_PREF 2 +#define NFP_NSP_APP_FW_LOAD_DEFAULT "2" + +/* Define the default value for the 'abi_drv_load_ifc' key */ +#define NFP_NSP_DRV_LOAD_IFC_DEFAULT "0x10ff" + /** * struct nfp_eth_table - ETH table information * @count: number of table entries From patchwork Fri Sep 6 16:00:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159095 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="05mR+ajK"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Np3vpDz9s7T for ; Sat, 7 Sep 2019 02:01:30 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395058AbfIFQB2 (ORCPT ); Fri, 6 Sep 2019 12:01:28 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:36778 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395039AbfIFQBV (ORCPT ); Fri, 6 Sep 2019 12:01:21 -0400 Received: by mail-wm1-f67.google.com with SMTP id p13so7710521wmh.1 for ; Fri, 06 Sep 2019 09:01:19 -0700 (PDT) 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; bh=rE6GAiRBgWW7MnzCoLNjHkiOiFweW/JGgz+JwOySxVo=; b=05mR+ajKBHsmdZIKAyC7CifHuPfM7B5W37b53Il3eSb2rn57stApTBY/6TmSfZR3jP BRvxwOSHmg7uy2iCujFVOweOsNDGcoruCbwJapG0mJXDxng0MBxiJrehTsssI2RytH8/ riu36Rjljgwkxhk6uQ+Pwn99cY10Rdm2KVxxdMTkzL3e4aTltrFxpAcGWrFE0Tx2JowK 00Oorcp4HROvzCFqLNt3VF7gv+2/YvUaJJfXOUW/RKU0Z5ssLoPE/mQDxwNV9w9iqxIX MGfFi38tZy9eQ4083pFoL+agttXObcVQ+uw0ePRRVn3tuFHTSwjc1hF5i9tdHRK02j2s NZLA== 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; bh=rE6GAiRBgWW7MnzCoLNjHkiOiFweW/JGgz+JwOySxVo=; b=pASDhOKXolm6u7oflQ5WviKND4Ggju4QzBJ4qBi4baqaz76kWo3pGUZ+HjU0elqXgI l5V2YEzKMpGxocjzmqYC+pU0BWNx3i62NONwXVI4+GV0JPmItjaHR1+zf5jEQmnTG3XP 9AIrR0RWT0oJJvYm7QIV09FAGLMGe8GbxXhAREn6rr0NMeButTmvuHEru/CZ6DXQtAzu xJePlH6eT5lsjhs4o3GE3i+Jom+VIMKZmTWH3tkj0ZlRCTRxqRoC5KYu2w2CAgs+EUO3 OaQWB4dTsUKX93C0VXB4IZEVXF+omf7YKHMr2hEN2AeBIz7g5nMzRtorG8xZQVldVuTa aYHQ== X-Gm-Message-State: APjAAAWItUSzHreeH69jJlz8uSPZ1zwgLKPxTPHP9nt9SG6BjJuIc2wV x0EKcy3soGm34e3uOLu8yOd3hA== X-Google-Smtp-Source: APXvYqx6l2IWAPTswvDoHqbbyPNFJ8Jkl9ldpJNihJEUfOVCtQXqvUJquCu/U60XEp+/ya4Sof5CJg== X-Received: by 2002:a7b:c752:: with SMTP id w18mr7568879wmk.129.1567785679053; Fri, 06 Sep 2019 09:01:19 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:18 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 07/11] nfp: add devlink param infrastructure Date: Fri, 6 Sep 2019 18:00:57 +0200 Message-Id: <20190906160101.14866-8-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Register devlink parameters for driver use. Subsequent patches will add support for specific parameters. In order to support devlink parameters, the management firmware needs to be able to lookup and set hwinfo keys. Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/Makefile | 1 + drivers/net/ethernet/netronome/nfp/devlink_param.c | 60 ++++++++++++++++++++++ drivers/net/ethernet/netronome/nfp/nfp_main.h | 3 ++ drivers/net/ethernet/netronome/nfp/nfp_net_main.c | 7 +++ 4 files changed, 71 insertions(+) create mode 100644 drivers/net/ethernet/netronome/nfp/devlink_param.c diff --git a/drivers/net/ethernet/netronome/nfp/Makefile b/drivers/net/ethernet/netronome/nfp/Makefile index 2805641965f3..d31772ae511d 100644 --- a/drivers/net/ethernet/netronome/nfp/Makefile +++ b/drivers/net/ethernet/netronome/nfp/Makefile @@ -17,6 +17,7 @@ nfp-objs := \ nfpcore/nfp_target.o \ ccm.o \ ccm_mbox.o \ + devlink_param.o \ nfp_asm.o \ nfp_app.o \ nfp_app_nic.o \ diff --git a/drivers/net/ethernet/netronome/nfp/devlink_param.c b/drivers/net/ethernet/netronome/nfp/devlink_param.c new file mode 100644 index 000000000000..aece98586e32 --- /dev/null +++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +/* Copyright (C) 2019 Netronome Systems, Inc. */ + +#include + +#include "nfpcore/nfp_nsp.h" +#include "nfp_main.h" + +static const struct devlink_param nfp_devlink_params[] = { +}; + +static int nfp_devlink_supports_params(struct nfp_pf *pf) +{ + struct nfp_nsp *nsp; + bool supported; + int err; + + nsp = nfp_nsp_open(pf->cpp); + if (IS_ERR(nsp)) { + err = PTR_ERR(nsp); + dev_err(&pf->pdev->dev, "Failed to access the NSP: %d\n", err); + return err; + } + + supported = nfp_nsp_has_hwinfo_lookup(nsp) && + nfp_nsp_has_hwinfo_set(nsp); + + nfp_nsp_close(nsp); + return supported; +} + +int nfp_devlink_params_register(struct nfp_pf *pf) +{ + struct devlink *devlink = priv_to_devlink(pf); + int err; + + err = nfp_devlink_supports_params(pf); + if (err <= 0) + return err; + + err = devlink_params_register(devlink, nfp_devlink_params, + ARRAY_SIZE(nfp_devlink_params)); + if (err) + return err; + + devlink_params_publish(devlink); + return 0; +} + +void nfp_devlink_params_unregister(struct nfp_pf *pf) +{ + int err; + + err = nfp_devlink_supports_params(pf); + if (err <= 0) + return; + + devlink_params_unregister(priv_to_devlink(pf), nfp_devlink_params, + ARRAY_SIZE(nfp_devlink_params)); +} diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.h b/drivers/net/ethernet/netronome/nfp/nfp_main.h index bd6450b0f23f..5d5812fd9317 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.h @@ -187,4 +187,7 @@ int nfp_shared_buf_pool_get(struct nfp_pf *pf, unsigned int sb, u16 pool_index, int nfp_shared_buf_pool_set(struct nfp_pf *pf, unsigned int sb, u16 pool_index, u32 size, enum devlink_sb_threshold_type threshold_type); + +int nfp_devlink_params_register(struct nfp_pf *pf); +void nfp_devlink_params_unregister(struct nfp_pf *pf); #endif /* NFP_MAIN_H */ diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c index 986464d4a206..47addac104fe 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c @@ -711,6 +711,10 @@ int nfp_net_pci_probe(struct nfp_pf *pf) if (err) goto err_devlink_unreg; + err = nfp_devlink_params_register(pf); + if (err) + goto err_shared_buf_unreg; + mutex_lock(&pf->lock); pf->ddir = nfp_net_debugfs_device_add(pf->pdev); @@ -744,6 +748,8 @@ int nfp_net_pci_probe(struct nfp_pf *pf) err_clean_ddir: nfp_net_debugfs_dir_clean(&pf->ddir); mutex_unlock(&pf->lock); + nfp_devlink_params_unregister(pf); +err_shared_buf_unreg: nfp_shared_buf_unregister(pf); err_devlink_unreg: cancel_work_sync(&pf->port_refresh_work); @@ -773,6 +779,7 @@ void nfp_net_pci_remove(struct nfp_pf *pf) mutex_unlock(&pf->lock); + nfp_devlink_params_unregister(pf); nfp_shared_buf_unregister(pf); devlink_unregister(priv_to_devlink(pf)); From patchwork Fri Sep 6 16:00:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159093 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="vHX1vaXo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nk18Qkz9s00 for ; Sat, 7 Sep 2019 02:01:26 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395050AbfIFQBZ (ORCPT ); Fri, 6 Sep 2019 12:01:25 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:35285 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726295AbfIFQBV (ORCPT ); Fri, 6 Sep 2019 12:01:21 -0400 Received: by mail-wm1-f65.google.com with SMTP id n10so7703010wmj.0 for ; Fri, 06 Sep 2019 09:01:20 -0700 (PDT) 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; bh=39DItuO4WiQ6caSELzSQFtKaaFqyuKgI3/dKRZK4KK4=; b=vHX1vaXoyABPil4nazCNqVVyBLB8q/scXcz9W9h6ivNecc12ig+jCehZuAkVWfnWrh F0daZpb3+Ljj0B5eIFhtHBW8Ecw3Bv65RN0THOhuO6GQchwMc91XmvMuihxaj9lCyqw3 kb4fcQjIbFxpMADRkoy7pKqlmZ/IPxGH+asdll6Tb84a7ohE4EkaYa1JBwbxh3OPVrrA dhlZkAbobGqa+hfW/vAqVC1C28s8t1vcIDKtT51UiYMrd21NRaTcszDvPqgxvOeIJGJz JFdjbteqgZMHZtv2RtuSTqoplVuEMPaNi3CMvB3N2BS4LYetmumNBLdtVDDwu7HhKsQI qBzA== 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; bh=39DItuO4WiQ6caSELzSQFtKaaFqyuKgI3/dKRZK4KK4=; b=PcAu0W7Y9R459sPCG94Fy8PHf2eSWneHkOknWKuW9Z40QxHcfbCPrf86Fvs+K8PssL j2QR2l04eC3AhnuMUiYIcoIbDfQcr/qTg+B1U2xaVgViLuhT5GD/cNP5CmOrkB5vywVt 6oP85q/P2a3OQ4C5kDxu6W4oTQBEGMvpeSWAbdvMNB9wzzOTTGIuKvfg0F+EjZjwbWlr 4wJRXpVDpUrZutRzXs8N0oJjNBlO48KkC3INJIuRqz8L/A59m4RO7aMbtjUZdfbBSmWv BvVNk+FThdOmZROLm4VjOjw5T6bmPA1uFsxJfvCQKDmUmAXD+crcQwSXzvWhy63WV9w+ yXXw== X-Gm-Message-State: APjAAAXHpFOKQHBvGBUP4kP8uuqWUKZImEg4vbA+zrD79ZgJ+G8jA5pa zjHvXXfYvAX8Ri5BwLSAXtm68Q== X-Google-Smtp-Source: APXvYqxLtm1hga97pZYHiWg/zikzepIZn3QHMYI0bPipNVmPG4IXtV5nDgyIeQ9Ed9aFWd6WqScO/A== X-Received: by 2002:a1c:6782:: with SMTP id b124mr8482686wmc.143.1567785680143; Fri, 06 Sep 2019 09:01:20 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:19 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 08/11] nfp: devlink: add 'fw_load_policy' support Date: Fri, 6 Sep 2019 18:00:58 +0200 Message-Id: <20190906160101.14866-9-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Add support for the 'fw_load_policy' devlink parameter. The FW load policy is controlled by the 'app_fw_from_flash' hwinfo key. Remap the values from devlink to the hwinfo key and back. Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- Documentation/networking/devlink-params-nfp.txt | 2 + drivers/net/ethernet/netronome/nfp/devlink_param.c | 165 +++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 Documentation/networking/devlink-params-nfp.txt diff --git a/Documentation/networking/devlink-params-nfp.txt b/Documentation/networking/devlink-params-nfp.txt new file mode 100644 index 000000000000..85b1e36f73a8 --- /dev/null +++ b/Documentation/networking/devlink-params-nfp.txt @@ -0,0 +1,2 @@ +fw_load_policy [DEVICE, GENERIC] + Configuration mode: permanent diff --git a/drivers/net/ethernet/netronome/nfp/devlink_param.c b/drivers/net/ethernet/netronome/nfp/devlink_param.c index aece98586e32..d9c74cfba560 100644 --- a/drivers/net/ethernet/netronome/nfp/devlink_param.c +++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c @@ -3,10 +3,175 @@ #include +#include "nfpcore/nfp.h" #include "nfpcore/nfp_nsp.h" #include "nfp_main.h" +/** + * struct nfp_devlink_param_u8_arg - Devlink u8 parameter get/set arguments + * @hwinfo_name: HWinfo key name + * @default_hi_val: Default HWinfo value if HWinfo doesn't exist + * @invalid_dl_val: Devlink value to use if HWinfo is unknown/invalid. + * -errno if there is no unknown/invalid value available + * @hi_to_dl: HWinfo to devlink value mapping + * @dl_to_hi: Devlink to hwinfo value mapping + * @max_dl_val: Maximum devlink value supported, for validation only + * @max_hi_val: Maximum HWinfo value supported, for validation only + */ +struct nfp_devlink_param_u8_arg { + const char *hwinfo_name; + const char *default_hi_val; + int invalid_dl_val; + u8 hi_to_dl[4]; + u8 dl_to_hi[4]; + u8 max_dl_val; + u8 max_hi_val; +}; + +static const struct nfp_devlink_param_u8_arg nfp_devlink_u8_args[] = { + [DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY] = { + .hwinfo_name = "app_fw_from_flash", + .default_hi_val = NFP_NSP_APP_FW_LOAD_DEFAULT, + .invalid_dl_val = -EINVAL, + .hi_to_dl = { + [NFP_NSP_APP_FW_LOAD_DISK] = + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK, + [NFP_NSP_APP_FW_LOAD_FLASH] = + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH, + [NFP_NSP_APP_FW_LOAD_PREF] = + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER, + }, + .dl_to_hi = { + [DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER] = + NFP_NSP_APP_FW_LOAD_PREF, + [DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH] = + NFP_NSP_APP_FW_LOAD_FLASH, + [DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK] = + NFP_NSP_APP_FW_LOAD_DISK, + }, + .max_dl_val = DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK, + .max_hi_val = NFP_NSP_APP_FW_LOAD_PREF, + }, +}; + +static int +nfp_devlink_param_u8_get(struct devlink *devlink, u32 id, + struct devlink_param_gset_ctx *ctx) +{ + const struct nfp_devlink_param_u8_arg *arg; + struct nfp_pf *pf = devlink_priv(devlink); + struct nfp_nsp *nsp; + char hwinfo[32]; + long value; + int err; + + if (id >= ARRAY_SIZE(nfp_devlink_u8_args)) + return -EOPNOTSUPP; + + arg = &nfp_devlink_u8_args[id]; + + nsp = nfp_nsp_open(pf->cpp); + if (IS_ERR(nsp)) { + err = PTR_ERR(nsp); + nfp_warn(pf->cpp, "can't access NSP: %d\n", err); + return err; + } + + snprintf(hwinfo, sizeof(hwinfo), arg->hwinfo_name); + err = nfp_nsp_hwinfo_lookup_optional(nsp, hwinfo, sizeof(hwinfo), + arg->default_hi_val); + if (err) { + nfp_warn(pf->cpp, "HWinfo lookup failed: %d\n", err); + goto exit_close_nsp; + } + + err = kstrtol(hwinfo, 0, &value); + if (err || value < 0 || value > arg->max_hi_val) { + nfp_warn(pf->cpp, "HWinfo '%s' value %li invalid\n", + arg->hwinfo_name, value); + + if (arg->invalid_dl_val >= 0) + ctx->val.vu8 = arg->invalid_dl_val; + else + err = arg->invalid_dl_val; + + goto exit_close_nsp; + } + + ctx->val.vu8 = arg->hi_to_dl[value]; + +exit_close_nsp: + nfp_nsp_close(nsp); + return err; +} + +static int +nfp_devlink_param_u8_set(struct devlink *devlink, u32 id, + struct devlink_param_gset_ctx *ctx) +{ + const struct nfp_devlink_param_u8_arg *arg; + struct nfp_pf *pf = devlink_priv(devlink); + struct nfp_nsp *nsp; + char hwinfo[32]; + int err; + + if (id >= ARRAY_SIZE(nfp_devlink_u8_args)) + return -EOPNOTSUPP; + + arg = &nfp_devlink_u8_args[id]; + + nsp = nfp_nsp_open(pf->cpp); + if (IS_ERR(nsp)) { + err = PTR_ERR(nsp); + nfp_warn(pf->cpp, "can't access NSP: %d\n", err); + return err; + } + + /* Note the value has already been validated. */ + snprintf(hwinfo, sizeof(hwinfo), "%s=%u", + arg->hwinfo_name, arg->dl_to_hi[ctx->val.vu8]); + err = nfp_nsp_hwinfo_set(nsp, hwinfo, sizeof(hwinfo)); + if (err) { + nfp_warn(pf->cpp, "HWinfo set failed: %d\n", err); + goto exit_close_nsp; + } + +exit_close_nsp: + nfp_nsp_close(nsp); + return err; +} + +static int +nfp_devlink_param_u8_validate(struct devlink *devlink, u32 id, + union devlink_param_value val, + struct netlink_ext_ack *extack) +{ + const struct nfp_devlink_param_u8_arg *arg; + + if (id >= ARRAY_SIZE(nfp_devlink_u8_args)) + return -EOPNOTSUPP; + + arg = &nfp_devlink_u8_args[id]; + + if (val.vu8 > arg->max_dl_val) { + NL_SET_ERR_MSG_MOD(extack, "parameter out of range"); + return -EINVAL; + } + + if (val.vu8 == arg->invalid_dl_val) { + NL_SET_ERR_MSG_MOD(extack, "unknown/invalid value specified"); + return -EINVAL; + } + + return 0; +} + static const struct devlink_param nfp_devlink_params[] = { + DEVLINK_PARAM_GENERIC(FW_LOAD_POLICY, + BIT(DEVLINK_PARAM_CMODE_PERMANENT), + nfp_devlink_param_u8_get, + nfp_devlink_param_u8_set, + nfp_devlink_param_u8_validate), }; static int nfp_devlink_supports_params(struct nfp_pf *pf) From patchwork Fri Sep 6 16:00:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159097 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="WXOhNVWQ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nr6wWcz9s7T for ; Sat, 7 Sep 2019 02:01:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395052AbfIFQB1 (ORCPT ); Fri, 6 Sep 2019 12:01:27 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:52284 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395043AbfIFQBX (ORCPT ); Fri, 6 Sep 2019 12:01:23 -0400 Received: by mail-wm1-f67.google.com with SMTP id t17so7075060wmi.2 for ; Fri, 06 Sep 2019 09:01:21 -0700 (PDT) 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; bh=XA+OI2R78fsHqlyrw1AaSbsvFpqLK1SIrK45sVXiwT0=; b=WXOhNVWQn3tyo+oUjVNgC6Pij3h7SIub6oil66uDomcL03002t+IYE6yepPtbpl8Kf I6fcr6mO2Ej3ImH++s42TIYYW07P1ZzVUrqZTOxh4W/F322tCvrxqMpg+vaWCfMI0qyt lLOxuO0huBA/UyQUjlMGfLN1dc/58XCBGWgzFNXRlCGzEWaw4vz1MGZah4ygJGsrjsao Ew+H8kxDDxnEMl5kdwQhS3i6MObhQ/XTUzP+KsqKIuWFq+rljWowWeXYliw/2vNKLmRm fQwZQ2ejbmr10vH2Ewpw+aldLRa/nlcmynM7gD19aKfKQucVaRw/8nOwthLGkEkLNcyh cf7g== 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; bh=XA+OI2R78fsHqlyrw1AaSbsvFpqLK1SIrK45sVXiwT0=; b=Ply6IF9raBy3x6bh7YizSldnrrZA4sKxdoULbqOoLekqLMCijS2qwarfAdGS37YA8h j6sNopt4MwxqER9m9UY3it1SgxRyRLw9inDGUaWKcXc4bCnULS+xkLtMc+eDLXn1pam9 IH+GjPj82tYeyAHSQTJ7p0svVd1EgE6a740wNUHH3MR7XO0dCN+Oft4geqeaWYSsSZVO wu9qWo2jW7UlXPrzqQi+R2h3cOAQkV5m0auXJWejYg1q0BdOUGxcwvWBJyYoF7QELlzq JtJnRqGGiNrg22748qmDt6cYnyJaeAtGTU1tGXSs29uuUXck/MwF4c/E099oqjySEe+L l0Sw== X-Gm-Message-State: APjAAAW9XW2EmtX1alnN0cTePlm+u93TNjPxLEsDHPfecAQcVQv1/Xst ItIoak/TEfpQL7pCal4NXlLsJA== X-Google-Smtp-Source: APXvYqyFDHxrlsoy1i61LPJ5gFa/rQqH1t3NNGnZWBcf58Mp6vClC41pHe32W0B86QJKH03rWgeLhA== X-Received: by 2002:a7b:cbc2:: with SMTP id n2mr7492763wmi.139.1567785681245; Fri, 06 Sep 2019 09:01:21 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:20 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 09/11] nfp: devlink: add 'reset_dev_on_drv_probe' support Date: Fri, 6 Sep 2019 18:00:59 +0200 Message-Id: <20190906160101.14866-10-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Add support for the 'reset_dev_on_drv_probe' devlink parameter. The reset control policy is controlled by the 'abi_drv_reset' hwinfo key. Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- Documentation/networking/devlink-params-nfp.txt | 3 +++ drivers/net/ethernet/netronome/nfp/devlink_param.c | 28 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Documentation/networking/devlink-params-nfp.txt b/Documentation/networking/devlink-params-nfp.txt index 85b1e36f73a8..43e4d4034865 100644 --- a/Documentation/networking/devlink-params-nfp.txt +++ b/Documentation/networking/devlink-params-nfp.txt @@ -1,2 +1,5 @@ fw_load_policy [DEVICE, GENERIC] Configuration mode: permanent + +reset_dev_on_drv_probe [DEVICE, GENERIC] + Configuration mode: permanent diff --git a/drivers/net/ethernet/netronome/nfp/devlink_param.c b/drivers/net/ethernet/netronome/nfp/devlink_param.c index d9c74cfba560..df5a5c88ee76 100644 --- a/drivers/net/ethernet/netronome/nfp/devlink_param.c +++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c @@ -52,6 +52,29 @@ static const struct nfp_devlink_param_u8_arg nfp_devlink_u8_args[] = { .max_dl_val = DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK, .max_hi_val = NFP_NSP_APP_FW_LOAD_PREF, }, + [DEVLINK_PARAM_GENERIC_ID_RESET_DEV] = { + .hwinfo_name = "abi_drv_reset", + .default_hi_val = NFP_NSP_DRV_RESET_DEFAULT, + .invalid_dl_val = DEVLINK_PARAM_RESET_DEV_VALUE_UNKNOWN, + .hi_to_dl = { + [NFP_NSP_DRV_RESET_ALWAYS] = + DEVLINK_PARAM_RESET_DEV_VALUE_ALWAYS, + [NFP_NSP_DRV_RESET_NEVER] = + DEVLINK_PARAM_RESET_DEV_VALUE_NEVER, + [NFP_NSP_DRV_RESET_DISK] = + DEVLINK_PARAM_RESET_DEV_VALUE_DISK, + }, + .dl_to_hi = { + [DEVLINK_PARAM_RESET_DEV_VALUE_ALWAYS] = + NFP_NSP_DRV_RESET_ALWAYS, + [DEVLINK_PARAM_RESET_DEV_VALUE_NEVER] = + NFP_NSP_DRV_RESET_NEVER, + [DEVLINK_PARAM_RESET_DEV_VALUE_DISK] = + NFP_NSP_DRV_RESET_DISK, + }, + .max_dl_val = DEVLINK_PARAM_RESET_DEV_VALUE_DISK, + .max_hi_val = NFP_NSP_DRV_RESET_NEVER, + } }; static int @@ -172,6 +195,11 @@ static const struct devlink_param nfp_devlink_params[] = { nfp_devlink_param_u8_get, nfp_devlink_param_u8_set, nfp_devlink_param_u8_validate), + DEVLINK_PARAM_GENERIC(RESET_DEV, + BIT(DEVLINK_PARAM_CMODE_PERMANENT), + nfp_devlink_param_u8_get, + nfp_devlink_param_u8_set, + nfp_devlink_param_u8_validate), }; static int nfp_devlink_supports_params(struct nfp_pf *pf) From patchwork Fri Sep 6 16:01:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159096 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="WaR/d3Go"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nq5cMPz9s00 for ; Sat, 7 Sep 2019 02:01:31 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391400AbfIFQB2 (ORCPT ); Fri, 6 Sep 2019 12:01:28 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:35723 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395023AbfIFQBY (ORCPT ); Fri, 6 Sep 2019 12:01:24 -0400 Received: by mail-wr1-f67.google.com with SMTP id g7so7183036wrx.2 for ; Fri, 06 Sep 2019 09:01:23 -0700 (PDT) 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; bh=Dg6/UozT6g/26doWc/K024QVieT90xHL6OMYKkwJKh0=; b=WaR/d3Goayoi4rNGf5gI/jshLByXDh3k8po/HkSuayumo28BWxG12eT3UOHHsjsBlD RAfjPBoOOdubLsSLml0v1NiENXnDIpU9uekbj7h3NIzIedzSfqU8rtiky3PfXO2idgww 6R07ApbQtibYlwMdTQO0tlN+FYnu5WRl19C195oz86r1coHkmX46cYwvOQQ3q+JtbkwH wKQsB++6jYg4UE2NPoLgBR8V4cCu1A28mCyt3f614NRfucsS2ggfLJBqYhq89ViS/wTf 0iytw1mWP10/SSEruMqX2TJF0xe60fFpg+1iXkyU2XZF4ZZYnKOuyCXwqDVED4hVndCS pu7A== 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; bh=Dg6/UozT6g/26doWc/K024QVieT90xHL6OMYKkwJKh0=; b=AdxKoB73UX5J1vLsrzCD04RNfuSvPFn45LLFodyiD02+jnv8GCmoY3nfxasLhOUBIK 74cTy8P6VVhpVxuWfjeJXGn+4yjUaRYTe8OUXp4dSwNi4ZZ/YAuvVizjLDrCIVG0iIO6 eUSV+A3HZRMXdm+WRdSopxSvsLhEMu+IzzdyqWTqMHVX0/9oOC9j+8LcXsKrq3O6oeKp mw54DnQajd9eE1n8QqskoS84mPTEsUXKGlCgLzeCvV1Gryc6MPepngJFHcEvIhnMGFt6 5cLCa61PAKI/ulqYjhu9AmvtuUaXmVrgX7zCyHSxHlkNNNmDP34Lu+GIYybLbJL+2z2F +IFg== X-Gm-Message-State: APjAAAVABhQtYp9LO80Z88zbRZizRqj4gln20QOmq33HjdKCAiFyWgTt lYa2/+QFp3U+v7I6GPPz5cooWQ== X-Google-Smtp-Source: APXvYqx/HYtkLbZEh1DJvcHEe6Q6kjB3shDeIYKXQ+mhQt7KsgcrTqXfCMQVmTQzKS+EKNI6j8vIDQ== X-Received: by 2002:adf:f282:: with SMTP id k2mr7693389wro.38.1567785682313; Fri, 06 Sep 2019 09:01:22 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:21 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 10/11] kdoc: fix nfp_fw_load documentation Date: Fri, 6 Sep 2019 18:01:00 +0200 Message-Id: <20190906160101.14866-11-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe Fixed the incorrect prefix for the 'nfp_fw_load' function. Signed-off-by: Dirk van der Merwe Reviewed-by: Jakub Kicinski Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/nfp_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c index 0d8649024505..c8ad9b701c3e 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c @@ -458,7 +458,7 @@ nfp_get_fw_policy_value(struct pci_dev *pdev, struct nfp_nsp *nsp, } /** - * nfp_net_fw_load() - Load the firmware image + * nfp_fw_load() - Load the firmware image * @pdev: PCI Device structure * @pf: NFP PF Device structure * @nsp: NFP SP handle From patchwork Fri Sep 6 16:01:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159094 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="bHnoEls2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Q2Nn2fPxz9s00 for ; Sat, 7 Sep 2019 02:01:29 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395062AbfIFQB2 (ORCPT ); Fri, 6 Sep 2019 12:01:28 -0400 Received: from mail-wm1-f43.google.com ([209.85.128.43]:50209 "EHLO mail-wm1-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727840AbfIFQBZ (ORCPT ); Fri, 6 Sep 2019 12:01:25 -0400 Received: by mail-wm1-f43.google.com with SMTP id c10so7096150wmc.0 for ; Fri, 06 Sep 2019 09:01:24 -0700 (PDT) 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=sCHpQCcwyG1Tbe8ndR8Fj+dxUy3O/X90uff0dX2UeSw=; b=bHnoEls2W9Av9H591MMPVmLSc7r+qILluQflM/QIA5GDUqhqJvuyHpvugD60rGd3bQ bdPCmsx7lJ0p0HVsQifoTiEOoZRRN362AEk5XIS5F2854p0ulkG1KQ/OCAYOO4r/ZTwU eDS2jhO+mimnx/3eQYk3uaPKd+V8AVcEdNUIVOh2hMZ44wU96GjMl8dP85g61VwBEQKe dpkZHPLYsO51CbeKYC2A2zO1OpDuIhgJLrNDvgOrMbCi3gaDhF5R1GkDmqnd9Pij4RVA 5O2hS4eLJ4RJgppl2u4IM2ZivDXNNhVB4IkT/8iIxWcuD/A4OP90z/jXrc5NbCIfWrH5 PnRw== 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=sCHpQCcwyG1Tbe8ndR8Fj+dxUy3O/X90uff0dX2UeSw=; b=kCh8kpStyng29C7PJgxqeNbcSaQJH4Mf4QwFj3y40OyEQJ1EODGvF1IN9YlT+6Nf/Z 8RKI1aUU/ehx1XrAFk7QBAcCbwYAwBTXxgOyBpIvyGOJD0JHqgbqj3GltdSm0JsuJlLC g+3k03xYyixYeElG7nefywvc4Amp7jvWeXRoECwoU6GD8+ZIzh8HpQVvhOyw5FYzlY5A mLRLytFfbpgk0rHi6FyMeuR0IXz8mB4rzN0+BOLmFuZslpWEEJ6A7HQbsbOiZqDoDdN4 xr+rB8zbqE8Wv9hArXqyr9PZ3Ya3h+pGJEPmPO/CUJawP7fe3usb1uH91wH5XoSL2v9/ fowA== X-Gm-Message-State: APjAAAVTyDlnvo1Olb4UKFZTrT3wIj+EXVlNYcUxaHCvz3qmPMDb0bw0 A6/V0c1VvTPwaccTTuUKMyfw3g== X-Google-Smtp-Source: APXvYqyFzfxAhmSIQXgxrLfx2Kw7LfUITMt/I5ySCV1A9putA8VGG45GfRbNwHczr/fOkc/E8r5MVA== X-Received: by 2002:a1c:24c3:: with SMTP id k186mr7933214wmk.126.1567785683331; Fri, 06 Sep 2019 09:01:23 -0700 (PDT) Received: from reginn.com ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id s1sm8524567wrg.80.2019.09.06.09.01.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Sep 2019 09:01:22 -0700 (PDT) From: Simon Horman To: David Miller Cc: Jakub Kicinski , netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe , Simon Horman Subject: [net-next 11/11] Documentation: nfp: add nfp driver specific notes Date: Fri, 6 Sep 2019 18:01:01 +0200 Message-Id: <20190906160101.14866-12-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190906160101.14866-1-simon.horman@netronome.com> References: <20190906160101.14866-1-simon.horman@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe This adds the initial documentation for the NFP driver specific documentation. Right now, only basic information is provided about acquiring firmware and configuring device firmware loading. Original driver documentation can be found here: https://github.com/Netronome/nfp-drv-kmods/blob/master/README.md Signed-off-by: Dirk van der Merwe Signed-off-by: Simon Horman --- .../networking/device_drivers/netronome/nfp.rst | 133 +++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 Documentation/networking/device_drivers/netronome/nfp.rst diff --git a/Documentation/networking/device_drivers/netronome/nfp.rst b/Documentation/networking/device_drivers/netronome/nfp.rst new file mode 100644 index 000000000000..6c08ac8b5147 --- /dev/null +++ b/Documentation/networking/device_drivers/netronome/nfp.rst @@ -0,0 +1,133 @@ +.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) + +============================================= +Netronome Flow Processor (NFP) Kernel Drivers +============================================= + +Copyright (c) 2019, Netronome Systems, Inc. + +Contents +======== + +- `Overview`_ +- `Acquiring Firmware`_ + +Overview +======== + +This driver supports Netronome's line of Flow Processor devices, +including the NFP4000, NFP5000, and NFP6000 models, which are also +incorporated in the company's family of Agilio SmartNICs. The SR-IOV +physical and virtual functions for these devices are supported by +the driver. + +Acquiring Firmware +================== + +The NFP4000 and NFP6000 devices require application specific firmware +to function. Application firmware can be located either on the host file system +or in the device flash (if supported by management firmware). + +Firmware files on the host filesystem contain card type (`AMDA-*` string), media +config etc. They should be placed in `/lib/firmware/netronome` directory to +load firmware from the host file system. + +Firmware for basic NIC operation is available in the upstream +`linux-firmware.git` repository. + +Firmware in NVRAM +----------------- + +Recent versions of management firmware supports loading application +firmware from flash when the host driver gets probed. The firmware loading +policy configuration may be used to configure this feature appropriately. + +Devlink or ethtool can be used to update the application firmware on the device +flash by providing the appropriate `nic_AMDA*.nffw` file to the respective +command. Users need to take care to write the correct firmware image for the +card and media configuration to flash. + +Available storage space in flash depends on the card being used. + +Dealing with multiple projects +------------------------------ + +NFP hardware is fully programmable therefore there can be different +firmware images targeting different applications. + +When using application firmware from host, we recommend placing +actual firmware files in application-named subdirectories in +`/lib/firmware/netronome` and linking the desired files, e.g.:: + + $ tree /lib/firmware/netronome/ + /lib/firmware/netronome/ + ├── bpf + │   ├── nic_AMDA0081-0001_1x40.nffw + │   └── nic_AMDA0081-0001_4x10.nffw + ├── flower + │   ├── nic_AMDA0081-0001_1x40.nffw + │   └── nic_AMDA0081-0001_4x10.nffw + ├── nic + │   ├── nic_AMDA0081-0001_1x40.nffw + │   └── nic_AMDA0081-0001_4x10.nffw + ├── nic_AMDA0081-0001_1x40.nffw -> bpf/nic_AMDA0081-0001_1x40.nffw + └── nic_AMDA0081-0001_4x10.nffw -> bpf/nic_AMDA0081-0001_4x10.nffw + + 3 directories, 8 files + +You may need to use hard instead of symbolic links on distributions +which use old `mkinitrd` command instead of `dracut` (e.g. Ubuntu). + +After changing firmware files you may need to regenerate the initramfs +image. Initramfs contains drivers and firmware files your system may +need to boot. Refer to the documentation of your distribution to find +out how to update initramfs. Good indication of stale initramfs +is system loading wrong driver or firmware on boot, but when driver is +later reloaded manually everything works correctly. + +Selecting firmware per device +----------------------------- + +Most commonly all cards on the system use the same type of firmware. +If you want to load specific firmware image for a specific card, you +can use either the PCI bus address or serial number. Driver will print +which files it's looking for when it recognizes a NFP device:: + + nfp: Looking for firmware file in order of priority: + nfp: netronome/serial-00-12-34-aa-bb-cc-10-ff.nffw: not found + nfp: netronome/pci-0000:02:00.0.nffw: not found + nfp: netronome/nic_AMDA0081-0001_1x40.nffw: found, loading... + +In this case if file (or link) called *serial-00-12-34-aa-bb-5d-10-ff.nffw* +or *pci-0000:02:00.0.nffw* is present in `/lib/firmware/netronome` this +firmware file will take precedence over `nic_AMDA*` files. + +Note that `serial-*` and `pci-*` files are **not** automatically included +in initramfs, you will have to refer to documentation of appropriate tools +to find out how to include them. + +Firmware loading policy +----------------------- + +Firmware loading policy is controlled via three HWinfo parameters +stored as key value pairs in the device flash: + +app_fw_from_flash + Defines which firmware should take precedence, 'Disk' (0), 'Flash' (1) or + the 'Preferred' (2) firmware. When 'Preferred' is selected, the management + firmware makes the decision over which firmware will be loaded by comparing + versions of the flash firmware and the host supplied firmware. + This variable is configurable using the 'fw_load_policy' + devlink parameter. + +abi_drv_reset + Defines if the driver should reset the firmware when + the driver is probed, either 'Disk' (0) if firmware was found on disk, + 'Always' (1) reset or 'Never' (2) reset. Note that the device is always + reset on driver unload if firmware was loaded when the driver was probed. + This variable is configurable using the 'reset_dev_on_drv_probe' + devlink parameter. + +abi_drv_load_ifc + Defines a list of PF devices allowed to load FW on the device. + This variable is not currently user configurable.