From patchwork Sun Sep 8 23:54:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159569 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="RAXeWOYZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpK1hMxz9sNf for ; Mon, 9 Sep 2019 09:55:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731511AbfIHXyw (ORCPT ); Sun, 8 Sep 2019 19:54:52 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:45670 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731203AbfIHXyw (ORCPT ); Sun, 8 Sep 2019 19:54:52 -0400 Received: by mail-qt1-f195.google.com with SMTP id r15so14081095qtn.12 for ; Sun, 08 Sep 2019 16:54:51 -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=/mu3kFz/4noHhOUuDA1Y/A1WY6xVTU9kSlUa3R8hWlM=; b=RAXeWOYZkf5rPeE2GzfYKwt+KLUQwEFnfbtI0u51pP34bitygO67p3UeJAiNfH3HzB q3/zQzTNdz+1tHEXqib3cL24BJ08VqYGR5/IdhWVljztEWrY7I0lBmUQ9GXbsi64aE0t F81Hc+ZTwcsFZDgWIqhBe1q/yjx0WCd5j1HprrkgMsdZClX1FpiBaoYjk0aExbekn92i QcIQ3Gj5C+JYXjbF3AHOQNJwg8vxkm5Cv28cIoqPTE5Pq8sbn6poFO7pFlvPUZNdTca6 mica4telzXBTYLnGatp2vG4KeeFk0T0SoRaypKQTgvuvEt7mJYmx81vFMHyon8tDedE3 FgIg== 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=/mu3kFz/4noHhOUuDA1Y/A1WY6xVTU9kSlUa3R8hWlM=; b=ofb0uEjWDYHHPRB8cXzfZ+fpRNCHp9902UjA3dxZM16G0IoNi8Nrc8PcBuGgoHeF4O w4+ZUu5c8vhyFfMWI2sLMhRDq4VSOYplu/IyCsHGIL3A2q64GEaISioIwHH4PIgtO+OQ v6L/amDD6plkiV2+PAKjYPNqVXl0z80cwS8svPDuocHxcLfWtDTQykxInmoYUu4+rUU+ 0HZ6d0bn1YcpNrW9n8xUKeYsm47zCElwalfydowWaj3DAEYHZ6fD9IRrXFoKZlQLQsaT JyzfFQt6PZIS84QBvfuyJpBScI6DFLkG5aUrEX050xWYQ/pkHWHFLb/mqNvu9X2iUCB8 L1bQ== X-Gm-Message-State: APjAAAXn1iWBKHGWml28pNTpMbWmjSv1l1xRGrRRJe2ZQ/oMvyR5JrjS sM8LtZseWDv9dhckbul25UL5AA== X-Google-Smtp-Source: APXvYqwKv9hldVIoIsb9+Ha/+gZPcGgDcnTBtGdBV6Q6XJnwLNce4T7hljUjqSo73FHy70KkST6UfQ== X-Received: by 2002:ac8:3876:: with SMTP id r51mr21080913qtb.66.1567986891058; Sun, 08 Sep 2019 16:54:51 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.54.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:54:50 -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: [PATCH net-next v2 01/11] devlink: extend 'fw_load_policy' values Date: Mon, 9 Sep 2019 00:54:17 +0100 Message-Id: <20190908235427.9757-2-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski 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 Sun Sep 8 23:54:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159570 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="bulcnN0K"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpK5CMBz9sNx for ; Mon, 9 Sep 2019 09:55:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731537AbfIHXyy (ORCPT ); Sun, 8 Sep 2019 19:54:54 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:43391 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731203AbfIHXyy (ORCPT ); Sun, 8 Sep 2019 19:54:54 -0400 Received: by mail-qk1-f194.google.com with SMTP id h126so3656641qke.10 for ; Sun, 08 Sep 2019 16:54:53 -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=OAfWibDu4zRz2cliMjfQmubuVEIcTGefP06/QaW45tI=; b=bulcnN0Kso0i5oCcwNL9LZdjFmkzBws3NAIs0GsdmHCEgfwzy32eyCVeS7TX/hK7q3 ljXooPYGTNL1/sVgZ/EOYDJNTxcaga5gN5nzviaXLoyVy3mYFQiCrxy3J794DNPN8wdF mVj/FdnSa+hcVhzcJLPiZCcXCNPG+nCoxElOw1YYz2O3JtlYCRYdQu2CvY/tiLG+GF0H Gub4MWFC+XQ/3tbsGk77btweHkZxaSaqm5MCkJYIjnjpCdKIpfuAacSx81w+ZSHxBlEu bCdmPTvHzlrsbWxmISc1S0zuA7IsXk/UUTdYh5PXlFhg35bJe9UcGTovV9EX9fP/OnoG meuQ== 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=OAfWibDu4zRz2cliMjfQmubuVEIcTGefP06/QaW45tI=; b=aEenv0Zxnv0WZ69TTmNOj/jXmo3CYaKgYx1KTutNh7LMSwbNkYoos9Bhk8nVGM4Phc bUWySfzWH3vXRG0KoxXtvp/lERCNfB7LSKGRn9UrGpMiXlNUNKyGTtyWMCLB8nGErsAb CjuUA8uAE/pqu2mTef3Ko4EhXIWp1rVTXX4TLK7r1Z1lmIhsDXBZ/jtC9A8b/bVrDCzx 225gZeQuwFJGnJuZEyaCZFmVm/MOkfuviZV9sgp8UxhRVIFqcmR0UdPDSjjoJZU3kIS/ V4w+H0MDVAWXEK1fjwmLXyap0L37F2+mOYD97axLB1vSLe6Y09nAPYoDuKDqW9GMfFGp 9zpw== X-Gm-Message-State: APjAAAXO/M2ANK0SYPneZkK/6sDCYIvd9lYe7is18l8FbppfMGzIdKKQ l6k3yj8M7Cb+nuMTCeQxZRT5GA== X-Google-Smtp-Source: APXvYqy0zJJ3Qw6bnmjV3fvj6SvgDz3SKUhnKP6CvXnLxEqtzS55PaHpkC4xTuTu1xKgX68GRpYpUw== X-Received: by 2002:ae9:f445:: with SMTP id z5mr20302523qkl.121.1567986892942; Sun, 08 Sep 2019 16:54:52 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.54.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:54:52 -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: [PATCH net-next v2 02/11] devlink: add 'reset_dev_on_drv_probe' param Date: Mon, 9 Sep 2019 00:54:18 +0100 Message-Id: <20190908235427.9757-3-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski Signed-off-by: Simon Horman --- Documentation/networking/devlink-params.txt | 14 ++++++++++++++ include/net/devlink.h | 5 +++++ include/uapi/linux/devlink.h | 7 +++++++ net/core/devlink.c | 5 +++++ 4 files changed, 31 insertions(+) diff --git a/Documentation/networking/devlink-params.txt b/Documentation/networking/devlink-params.txt index fadb5436188d..ddba3e9b55b1 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_ON_DRV_PROBE_VALUE_UNKNOWN (0) + Unknown or invalid value. + * DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS (1) + Always reset device on driver probe. + * DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER (2) + Never reset device on driver probe. + * DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_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..03e4d9244ff3 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_ON_DRV_PROBE, /* add new param generic ids above here*/ __DEVLINK_PARAM_GENERIC_ID_MAX, @@ -428,6 +429,10 @@ 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_ON_DRV_PROBE_NAME \ + "reset_dev_on_drv_probe" +#define DEVLINK_PARAM_GENERIC_RESET_DEV_ON_DRV_PROBE_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..1da3e83f1fd4 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_on_drv_probe_value { + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN, + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS, + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER, + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_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..4a2fb94c44cf 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_ON_DRV_PROBE, + .name = DEVLINK_PARAM_GENERIC_RESET_DEV_ON_DRV_PROBE_NAME, + .type = DEVLINK_PARAM_GENERIC_RESET_DEV_ON_DRV_PROBE_TYPE, + }, }; static int devlink_param_generic_verify(const struct devlink_param *param) From patchwork Sun Sep 8 23:54:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159571 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="M4Mh/wsY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpL1YsZz9sCJ for ; Mon, 9 Sep 2019 09:55:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731552AbfIHXy4 (ORCPT ); Sun, 8 Sep 2019 19:54:56 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:35698 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731203AbfIHXyz (ORCPT ); Sun, 8 Sep 2019 19:54:55 -0400 Received: by mail-qk1-f194.google.com with SMTP id d26so11422918qkk.2 for ; Sun, 08 Sep 2019 16:54:55 -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=T1rRRwWXT3QaVagLyAOhHwvQqwm/h8f33DBBH5bc+/o=; b=M4Mh/wsYZ9d3pgzOt5cvFyhA4WAyHGXj2UrRe5RtNKvzLSrJVIGrZn7XkA4bkw8Wfm s0tDUmAVUxsFWrNHHIv5H3pN31EWPNdLNHfjnTDHmdmUsjqsjYBbwkHEiuLZlRQ7aD1A iNKyZs8XSfSJLOl2236dnfQmEWf98YxzKoiH4/Y1NR4dvV6Xl6WKHwAaS+MhEtLAyTLV vbmhj5TbtizzErd2WSvNbiODIU08xSmtvEXFRh2ysbH7FS8I57xeB9LsEvG9U+QvlM2b 5SEutxNBpBIauKyEXrNR5OiYfSsXq+ZVQ85w9w+Q0Q0D4j7tPf0aIf3vH+nOWLfmAf3E /O0w== 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=T1rRRwWXT3QaVagLyAOhHwvQqwm/h8f33DBBH5bc+/o=; b=eBIWDXlhMwa5LHtMjhzsl/LJk3SJRR2owRpOROfMxQ6n+cRjT2aNqzjDOWDEr9Z2Kv qmVtcYcSEdIK7J3Ap/DJrCScApXCSAREKoNpU/nD/Www3Wv+QYNhiusio1+g6dAHI3YU 1ZSFsba50IiYPMyfAp29o7YqF1oZs1w2FsqNxx2xn+MR4V/QS7fIqMp6ToHtvsJN+S8r po5y332WYSVeMf7Jwv9nip8cj8nDvFLuMpI7ZzdN7iU14veSU7VKJYglaBKnj9kWxA09 WMaD1qtMbE/VFmSxnN/359vEmlC0BBCk15/0zQHxkWjiR+8SPdrCxU8q7WIJzO21Ek7q 6xuA== X-Gm-Message-State: APjAAAXCpbQRIpvTRRo04uvwKDab+RAlzfBSYAa+bvvElMGZN9NMT/WG vV+Q5XV5dw86cgUjzxI5FQKv2Q== X-Google-Smtp-Source: APXvYqznJ95XH6PMeFYf308Dau12mOCbT1pDedWGBtSWydJmkiyXL+cKyUKpUJw4LN3ZTaBpF9z/8Q== X-Received: by 2002:a37:48cd:: with SMTP id v196mr19830867qka.419.1567986895032; Sun, 08 Sep 2019 16:54:55 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.54.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:54:54 -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: [PATCH net-next v2 03/11] nfp: nsp: add support for fw_loaded command Date: Mon, 9 Sep 2019 00:54:19 +0100 Message-Id: <20190908235427.9757-4-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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 Signed-off-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 Sun Sep 8 23:54:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159572 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="BL6NWDhF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpL4PLGz9sNf for ; Mon, 9 Sep 2019 09:55:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731574AbfIHXy7 (ORCPT ); Sun, 8 Sep 2019 19:54:59 -0400 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41883 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731203AbfIHXy6 (ORCPT ); Sun, 8 Sep 2019 19:54:58 -0400 Received: by mail-qt1-f193.google.com with SMTP id j10so14097941qtp.8 for ; Sun, 08 Sep 2019 16:54:57 -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=WDphX/abkNdZSGaPRzwpnuRj8Go4BGIGepFdRBH1BMI=; b=BL6NWDhFPi5vUfygojrLJu38UtoHD+BZGK9mqtDy5SWjSVMmUcWmy9k2uKhGjt1SDe qJ19KZ7YR1p6AtcbYunqpl+5GbiK898HTigJuUgskbtRETft8wsLdI8pxX86oLupqQkG 2KW02KUtN4TqypfSE2PQQI2Oq0/2JGYA4AL8EEvHZ/XB8yWUM8mYKDT7vWe3mAN3hd42 fjvZQU6Ay8PSR1O+8cTxRxcKqbu2ZivNT42chTsCiQhkLmVtH/v+PDrfPA3YF9TYML3W 3axlm2A44nb/APpb3mSL7IHBHYanqskrZasekZ5hsxRL4h+7jT2cfaRD0CEaDCxaTiEh 2UFQ== 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=WDphX/abkNdZSGaPRzwpnuRj8Go4BGIGepFdRBH1BMI=; b=aZP9Fye44oTJIYUcQYRv3VW1TyvngcC8Hg8gKHmnHHftLDO8KY/peTqurwUB7fb6Is g1c1CB/l3+VnguAa8pBECFY15p5xpN48yRm9nsoD9zk+irknIKH/oVmI3QutjnBJ75Vv ab81fz4O1klr8ADjP/X/1P68wcLL+gEbcckdML1OmhOwLquJHwzW1GF6Ulh9LsyuIIq3 hYf0I0U6GZVgzWkJRonyQ2DotyQpq9BJVXjeSoeJ5kBqC8/9UyMYNUhvoLr9GEpSFQKc DJFsTxXO377qDWQXV+fNhNZYDe9q5aH33kQZulpKtWzvwPe/c4SKfU5UDFIQBnawGbdr WuNA== X-Gm-Message-State: APjAAAUm0w6LTD4GvKOlYVCRGojJKy4Qy7aKOMBCcSr9aIWLvWjuleb2 9MG7DJtSngLi1giuy8LE1s+M7w== X-Google-Smtp-Source: APXvYqy0QlJABfYGD8lSh+arrtx00wg3RWcfon+878LsBp0sKnWywPaujeMcUkWHcIpak3YaSDwEqA== X-Received: by 2002:ac8:7612:: with SMTP id t18mr20032874qtq.94.1567986896923; Sun, 08 Sep 2019 16:54:56 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.54.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:54:56 -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: [PATCH net-next v2 04/11] nfp: nsp: add support for optional hwinfo lookup Date: Mon, 9 Sep 2019 00:54:20 +0100 Message-Id: <20190908235427.9757-5-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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 Signed-off-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 Sun Sep 8 23:54:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159573 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="a89Iq83o"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpM0l1Jz9sNx for ; Mon, 9 Sep 2019 09:55:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731584AbfIHXzB (ORCPT ); Sun, 8 Sep 2019 19:55:01 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:35704 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731203AbfIHXy7 (ORCPT ); Sun, 8 Sep 2019 19:54:59 -0400 Received: by mail-qk1-f194.google.com with SMTP id d26so11423013qkk.2 for ; Sun, 08 Sep 2019 16:54:59 -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=gEiaUTDA5a50+LWsAeRcviNLIrH5IR/RNH30K0Fxnsc=; b=a89Iq83oamhl7ecFBzuyR9rXZx6Jmkxxk+eCcaepu9NPQTBihWfz1XchCf1lRQoUf8 clRrFL6cJOx2nM/QhrZa8XMI50hGu0MBNooJaxbUZPIs2RnJaiQy52WZBq4bomubrZ2G icm1bx4DQKoqDmKauo6ygvzn6WBsGJ08fZtxuAi+R2UqKuSF62i10qVuOa/CJT3KE0Xl OvxDc1RumM+cF0XYR+3FM3o/IRGAANRzj4EtiS48YnKKdkYBu4bIOyYqY9RGENaSnDdB 64aNbOsWdrjlr7nYW9EEBHmZIip+Mr5k1HS/OGz+zsotjnOnHElF9ncq4A3F81vVsP+f p56A== 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=gEiaUTDA5a50+LWsAeRcviNLIrH5IR/RNH30K0Fxnsc=; b=n91u8lTdxh/LsS5hJc8kBrBT1k+3Ete/VRzYHyx8/yz2o6JcMvzmeuE1C2+w0cB02F j+V7SGUlNHJLbNCx6+gp/fDBRaZuUbdnx8b8cLTOxx4MCLTmQwsX2QiwzcgHOmTvhIKg RaeZUV03ux0/WZ+NSNbTdLuYyl/KO5NuSHnV6GMAJ5MIa42+sfRv7eLle9TKs6ZxrYNO FGeV1C2eGx0Nuumb9ywWgVs/TS2oeT35+oHg/53msXo1yuTSbfx2vXgEH/ZLR+u5yy82 nA2DQJ0/qTrEvZ36HpM/ujmyoCGbAJMqLsMpAvptFKSagpJb7BR5ZsZkFz+mgFnYuOhA R/pQ== X-Gm-Message-State: APjAAAVa/E1i8NNo/49TiQjoM8e84IA5f5VVs+TEeV6t43yPhlixT292 icG23FYSGqTutvU4EqNiBy1wJA== X-Google-Smtp-Source: APXvYqx/koDZEfdkAcdpj4ySzr3WHXq50u28L9bnYKKCNaNEnIR7qMPdpRmSEW2VLxMeM+KNnQ0CdQ== X-Received: by 2002:a37:a604:: with SMTP id p4mr19197745qke.58.1567986898926; Sun, 08 Sep 2019 16:54:58 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.54.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:54:58 -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: [PATCH net-next v2 05/11] nfp: nsp: add support for hwinfo set operation Date: Mon, 9 Sep 2019 00:54:21 +0100 Message-Id: <20190908235427.9757-6-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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 Signed-off-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 Sun Sep 8 23:54:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159574 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="ZqMF6x+1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpM3YCbz9sCJ for ; Mon, 9 Sep 2019 09:55:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731635AbfIHXzE (ORCPT ); Sun, 8 Sep 2019 19:55:04 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:38137 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731595AbfIHXzC (ORCPT ); Sun, 8 Sep 2019 19:55:02 -0400 Received: by mail-qt1-f196.google.com with SMTP id b2so14136068qtq.5 for ; Sun, 08 Sep 2019 16:55:01 -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=RZIDR3GQuJKZgF9/25aiSHfmiLcbtzo4S66qz4lxX18=; b=ZqMF6x+1Hb9gAYBhHcoWAlsUPZLbVJ/FiwoGx5wYPKanqCg3mATmgCB9FBoXwSbP3a Yut8DD4WuEq3utZ+vR5FEgiL0N7eDeyE2Gpl/wpp7ERjrVDBKPzdnhcWHER7igAvVtCh pPlXjd+7ZhWWaueAtsJQy5QSZgmJa46FH6cJr5+KfxRBBB4T/cMxMTrmxhfgXTIxxHa2 Dv2BK92pN8EegmI7G8hcZURVuBCnrmijVpca5qE2dcZjtsD7Yh7RR8sK0LROlfZS94/i aiiJpuy4ksLAQQM7umydFSC7FJin3XThNrbKrc8cZRqRJKMwFr1uz3kcwVhK0BX26imE R9wg== 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=RZIDR3GQuJKZgF9/25aiSHfmiLcbtzo4S66qz4lxX18=; b=mDto83pjFdcnYVYCsOHZ1nLakrsMKlMX/k9qUg5j/1RZWeDUT9qBRRcl0IcX27m36X xHCX5SRkxPxQ7pOtdEySH7QzTbMxWc47c4F65BmArBSGJqWxPA1gaBDREdIZDAq0BPFz UaVQVR6tGHuGIX6P2MC/PTnxcf6C4u7FzdQASQPYoWWNcrANsBlQmucdGRZ9mXsQJsqv 89ede6bqFXEL92tgOt5hGbFTcYlQC3h03mReOJIhb7kp3qNUctYrQ97Xf36dwpAzOzrY RFLjw5eL1nAU7VSKitPITreSSC1AkhHkpl/dAyXXp+CoaKxVePRkIriqpL5weheio2fn p7cA== X-Gm-Message-State: APjAAAWWVMuuhEnqMybtHNmAswa0IyTcEi8LQyacwKlqW0ggySYQsewA PVSKCVhD4wRB5i0SrS58IZh2pw== X-Google-Smtp-Source: APXvYqzFHZXp8hc2+YXpr4ft97gaYswBF+SKbccLc2G8ICPmz5LfFzLqYJPId+ql1iq6idinEc/9bA== X-Received: by 2002:ac8:748c:: with SMTP id v12mr20917049qtq.23.1567986900861; Sun, 08 Sep 2019 16:55:00 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.54.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:55:00 -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: [PATCH net-next v2 06/11] nfp: honor FW reset and loading policies Date: Mon, 9 Sep 2019 00:54:22 +0100 Message-Id: <20190908235427.9757-7-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/nfp_main.c | 140 +++++++++++++++++---- drivers/net/ethernet/netronome/nfp/nfp_main.h | 2 + .../net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 15 +++ 3 files changed, 132 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..969850f8fe51 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,107 @@ 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 +794,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 +834,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 Sun Sep 8 23:54:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159575 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="kkHyCbMX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpM74GXz9sNf for ; Mon, 9 Sep 2019 09:55:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731645AbfIHXzG (ORCPT ); Sun, 8 Sep 2019 19:55:06 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:34519 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731610AbfIHXzE (ORCPT ); Sun, 8 Sep 2019 19:55:04 -0400 Received: by mail-qk1-f193.google.com with SMTP id q203so11376634qke.1 for ; Sun, 08 Sep 2019 16:55:03 -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=/x8fezSSUhC/hAIW4Lx/qChUcik2wbuWNo0PZEZhMV4=; b=kkHyCbMXPbuK3vmy5/uUDACgVvCNaAxKzGt11bTUtp5jYyfaOkhVjzrDoM2cL707SZ zRPFNB/eSDDpYskGgaiWGRy1D8IojwESO8x3bNyRP/0dcsEs63qzDn+Omq4KJ4RFHsEE DZku1FSZkygr1B43GJksEKwCM5s0cT2cvycXOF14MglOqdNBplvuWFOILTUlc5vPzw1o j8qQAslZoS9A5K6+zU/JPSYMQLvOqnYxs3mElRxf8/0VrKnvRo/00GWgmBLRRr8YL4cW oQNfXhqEuOlrPRSZ0pIzvUGw/+kbCfoVzgoW2aGt3zz8YohD1fnYgFOdHor9gLs7XJ0M OgYA== 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=/x8fezSSUhC/hAIW4Lx/qChUcik2wbuWNo0PZEZhMV4=; b=H2PlOwtv/mdkx6XLIJlSNSq1OU5v6ByJe1sWNwLhwQ1UFxENsWkovqdngbIfIOHDT1 BMQLu+Xz0zVzU963O8UmBiji5PHJUeqpV7cubreid8Sfwqt+moE7kxKgFEoHomhQgUDW E35xDLwjMldU/dj7BjONt68zIqKv+n1FDldQMKwDPL7fVuYOcK1LCTThvMelPqD3X+dx 0zaHpmw4gbXVMOdzaMQblQI9jEKOQuja+6/+c4CZmcoTENr6ax0B2pPCbsCOMgqJRRPd 3ZGfisdhjMQTyazbz7pcovna657Rm2UbY+dxvi34GMDQ2gRjVIYRLJYns9z1p8D+11wd fwjQ== X-Gm-Message-State: APjAAAWlmXzPV52f0aoCJOvfQ06vtqXMEXqwCQb/5j/pj6D5GFICI1I6 sVGymIJGgqniYnt1Y010Z/paBEdMI83fCA== X-Google-Smtp-Source: APXvYqwbnKYmabeipR8rVFjfDdx4tnVzSk24/9kYIOJjqJFf+I3+4ctuYZggkyJqK7SlFjR2K71oKg== X-Received: by 2002:a37:6358:: with SMTP id x85mr21556571qkb.229.1567986902689; Sun, 08 Sep 2019 16:55:02 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.55.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:55:02 -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: [PATCH net-next v2 07/11] nfp: add devlink param infrastructure Date: Mon, 9 Sep 2019 00:54:23 +0100 Message-Id: <20190908235427.9757-8-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski 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 Sun Sep 8 23:54:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159576 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="qxEAQ6lq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpP4QBWz9sCJ for ; Mon, 9 Sep 2019 09:55:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731665AbfIHXzH (ORCPT ); Sun, 8 Sep 2019 19:55:07 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:33334 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731595AbfIHXzF (ORCPT ); Sun, 8 Sep 2019 19:55:05 -0400 Received: by mail-qk1-f194.google.com with SMTP id x134so11396240qkb.0 for ; Sun, 08 Sep 2019 16:55:05 -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=X1JraFRrGleQzGb8RsYx950FKthISlA3lMgAFm99vHY=; b=qxEAQ6lqjQ5Qsv6d+GBuLYKttgUOGy+R2+qRXWdeW27mrwwNd2Am99TZai7HDA27Wx wKPuKK1yKEymgT+iLF985+hYAoDFlD5L4hF1XrRq1x6nHYCBvtSIQJYgAjwBSBqMmStG S/L0M3+OJt+P1INbyJSpZFLUbSXf78bYFkqMf0uwfk5+L02mNDxmJ3PjnCDXC09YW7WK 9Pq7fMSylAoeFYEsZT1oMlbSiSXhdUPHCv5cKxB4q1BElnRRfKEXBgUm5X8A/VM68yyM /CWLGLPxUlRYls6jY8ldliuxywGgItCkvISie+WcBhyQhHpx6N01I5R28WO2v9Iaasou w1SQ== 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=X1JraFRrGleQzGb8RsYx950FKthISlA3lMgAFm99vHY=; b=gpwpWffz4e6vS5SJnRugn+y5FF0+yZ20RaiLbHSGaakVJw0VfF47+YhRBhvpWf2XUd sUIylpTVjn2JjThe9h654oJWtn0GXV79Z7Qdr16xj+5qZmIW/+lr0lYF9tCAPP/3FsMm MM9cgOIsvW+KQijeeTpic7Ll/OJwkxZ5/4DYPort58MvDEZXgLyNr2MbCbpc7YVH+FPc t1ysmeOQ+Avxd7LI1qdzgZHxQr0PdPA/rE1mOYs8pwln3WPumMRIY4V/us88x3aXn/Ja PH4O02EKOmAhj2L2gLz0KrUh47H5J1YaJIspEnN6tXuDbRJIb7POsWt/srW4O0ZiWC7G AV7A== X-Gm-Message-State: APjAAAVJqa7gh9V0xigIf8JvsCHkszWrAP4ZkybXfXpsgavUIxtPo+1G F/SyzSRQ0T007KIzX8l8gEldqQ== X-Google-Smtp-Source: APXvYqxTiRByh1t9gSLQtrqUx+ahELSjtUMCH4P6P1sZYqB34hfYwHLSbug+X3k+pNNN02V8VNEkig== X-Received: by 2002:a37:470f:: with SMTP id u15mr20518621qka.290.1567986904518; Sun, 08 Sep 2019 16:55:04 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.55.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:55:03 -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: [PATCH net-next v2 08/11] nfp: devlink: add 'fw_load_policy' support Date: Mon, 9 Sep 2019 00:54:24 +0100 Message-Id: <20190908235427.9757-9-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski 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 Sun Sep 8 23:54:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159577 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="ZF+lq0U0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpR5Ljrz9sCJ for ; Mon, 9 Sep 2019 09:55:11 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731674AbfIHXzK (ORCPT ); Sun, 8 Sep 2019 19:55:10 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:41111 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731649AbfIHXzH (ORCPT ); Sun, 8 Sep 2019 19:55:07 -0400 Received: by mail-qk1-f193.google.com with SMTP id o11so11352050qkg.8 for ; Sun, 08 Sep 2019 16:55:06 -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=V6RCP6M4YEyWGsl8TrDKulGop/UMht/FxAzB5SUwGN4=; b=ZF+lq0U0idjBei/+FHL2SV9NR9bAjfvtfacw7Hoh9uSn//t9+r7q/iHgneHydLt55S oYvFOj8rf7YmcIItz5cD4dQLqVZqtF7KB01ChaMzbL8UEHqg3XmR1FNGCHHmvxnl2aYo ZTU2K72FTu/lgL05+xEyCdEfVMp7IOvATQlKJ1x6SSYpy6UNpLXHiwTlvnfuRdL2lpdP cAQlw9Z6H/y++4k37U1vQP7HZyqupMX0EW8jMgolEJrRXgUtWdKmu+OLdjAkcZwSRcH0 ULyDWE6Z3G+FVQxHw5CJp7OLjjvbX5zexxpcWAGlD+wabjXT26hS0kj0GbK4kmab0Ymn kW5A== 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=V6RCP6M4YEyWGsl8TrDKulGop/UMht/FxAzB5SUwGN4=; b=kJ3LPY4NLoytAscYH2yZl7Mzq2RhiQl+KRCOgOPNoDYtaGu8mjfd9lmx92PtAhEcHK sDvdm1eT8q0QccikL6N7flKOaCz6j/5iexgmHFEIpXm6qgu+e2J0wa96yawDKX3XjRWa RQlv2ViQxFv7+fNg+RO31gf1P96XUcYfbX63BJffmiyFAAQemJG5sNVA5PAjeoaHuxTw MxxJbviBVjyObijHFhKf3TCYNHTD91xjVRkMMAX/h8hUDjvqHBwmnTbWYv3PD4sBR0C7 25r9RqRbh5nVidSQhplVkBJGt3kxbWBC5aNeZmkQO5PHbEvqJMcSAD/7JzwSNuqLL+wz 9xOw== X-Gm-Message-State: APjAAAVehs57G3X929YtLCWj0R7sZTwbd1bQ/2Hf0ZJFXgW+S7odaoe8 s9tnrt3e3h7oiYqEXSazcK/BlA== X-Google-Smtp-Source: APXvYqy9a+628NesnNTLDV0sP9Eo+4LqRv+Y8e1bHlkk+bacMREw6Ykge5IGczKi7pjDwD8eqazunQ== X-Received: by 2002:a37:b981:: with SMTP id j123mr18014550qkf.201.1567986906412; Sun, 08 Sep 2019 16:55:06 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.55.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:55:05 -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: [PATCH net-next v2 09/11] nfp: devlink: add 'reset_dev_on_drv_probe' support Date: Mon, 9 Sep 2019 00:54:25 +0100 Message-Id: <20190908235427.9757-10-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski Signed-off-by: Simon Horman --- Documentation/networking/devlink-params-nfp.txt | 3 +++ drivers/net/ethernet/netronome/nfp/devlink_param.c | 29 ++++++++++++++++++++++ 2 files changed, 32 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..4a8141b4d625 100644 --- a/drivers/net/ethernet/netronome/nfp/devlink_param.c +++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c @@ -52,6 +52,30 @@ 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_ON_DRV_PROBE] = { + .hwinfo_name = "abi_drv_reset", + .default_hi_val = NFP_NSP_DRV_RESET_DEFAULT, + .invalid_dl_val = + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN, + .hi_to_dl = { + [NFP_NSP_DRV_RESET_ALWAYS] = + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS, + [NFP_NSP_DRV_RESET_NEVER] = + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER, + [NFP_NSP_DRV_RESET_DISK] = + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK, + }, + .dl_to_hi = { + [DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS] = + NFP_NSP_DRV_RESET_ALWAYS, + [DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER] = + NFP_NSP_DRV_RESET_NEVER, + [DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK] = + NFP_NSP_DRV_RESET_DISK, + }, + .max_dl_val = DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK, + .max_hi_val = NFP_NSP_DRV_RESET_NEVER, + } }; static int @@ -172,6 +196,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_ON_DRV_PROBE, + 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 Sun Sep 8 23:54:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159578 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="dkv200VW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpT5C49z9sCJ for ; Mon, 9 Sep 2019 09:55:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731693AbfIHXzL (ORCPT ); Sun, 8 Sep 2019 19:55:11 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:42598 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731668AbfIHXzJ (ORCPT ); Sun, 8 Sep 2019 19:55:09 -0400 Received: by mail-qt1-f195.google.com with SMTP id c9so14106866qth.9 for ; Sun, 08 Sep 2019 16:55:08 -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=8yKskexvc0yKszSPHLlD+xXy+tddncxqe3N323uJrtk=; b=dkv200VWCZxu1ijix9eiWu0jgagBwixqO8Om+x8VYN5HON1bQDp4orua5XYTjsN8LQ y8DylFLt9Cxqkiu2QcRvFm+ijn+GMCwbiS0+A68PdUkJKz8Qd70ABD8KZri+1Lun/Z39 2wf5eOKAjc2uyv1RSX2Wwmfyy+iezpzY8Tc8Mw8FUeGZqotHDs2rfDW6FE37ABnJntIO gszUPs/bMw0N6pVB1DFee7afX0qK7qQQ202eoEt9L5w1xeDAAVWx8HByIyoQar2MvLQV +3PnyV8pbJDDZAPIz6hzzDsnChi/e8jsStKM+HQ3gmI0zEWRnqEk6vXwgM142OaX17am NdzQ== 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=8yKskexvc0yKszSPHLlD+xXy+tddncxqe3N323uJrtk=; b=sS0UgaJD9QQRWKUYEsRlDy1UPddYUN9TAL76ISMRj1ymG9us+LQMs/0VJN9IYcI4Y8 fDGFJmSwR2ip8Uur0wesCnoLveE3v8UopSelehFhAxzquneQBevflVV11DajJvA9BOoi +wBPILlBdHmQ+LpIrToVwogJWXqgrc/1Iva6aBgo+uyAyRwd6H7PhTdvJgHr7bJ7NNY4 J4CGG3wvu28n2QQfI+MqoDpoJE246IXASzl55UPfI7joABamFb97txzU33FQ11uIo66v JIkn1Sz0HClcsuxg0LE7Qs75xUe3TzXGZv7rFTd/Z/6yUDtvYLXrnrvarAMvrTcvb14i TtVQ== X-Gm-Message-State: APjAAAWYUa+0Z+m4XCFInxwQVsKPsZ8o/MpRYluFVkBvB8EhaNox/Qti qC6Cc566PWX8KlhvIRr3ZGhYHw== X-Google-Smtp-Source: APXvYqxwhNy3YftOWvpt4hNoEI+ymUrWmMSmnOcSyTXXgvMiAq4PVXgpHuNaQK6wykjhgx8xGVbSAQ== X-Received: by 2002:a0c:e501:: with SMTP id l1mr12752759qvm.1.1567986908223; Sun, 08 Sep 2019 16:55:08 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.55.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:55:07 -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: [PATCH net-next v2 10/11] kdoc: fix nfp_fw_load documentation Date: Mon, 9 Sep 2019 00:54:26 +0100 Message-Id: <20190908235427.9757-11-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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 Signed-off-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 969850f8fe51..4d282fc56009 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 Sun Sep 8 23:54:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1159579 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="Epl+RTl1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46RSpW5CC7z9sCJ for ; Mon, 9 Sep 2019 09:55:15 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731711AbfIHXzP (ORCPT ); Sun, 8 Sep 2019 19:55:15 -0400 Received: from mail-qt1-f179.google.com ([209.85.160.179]:38692 "EHLO mail-qt1-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731675AbfIHXzL (ORCPT ); Sun, 8 Sep 2019 19:55:11 -0400 Received: by mail-qt1-f179.google.com with SMTP id b2so14136406qtq.5 for ; Sun, 08 Sep 2019 16:55:10 -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=INumR7NpyhxctnUiH8eSiMISlDBQHE0cLlhCKcV3eyk=; b=Epl+RTl1oTm3S3AY/IZotMwyK0PHPEnR6liIV7+ljOcGs7DA9ihSnfvRyoFwA0meZj scrAaba57/S2eFhBt5eqq2ZQtH2F9z/3Zu4UFJD+M1lwN1L10h9MLXJ89QrSBLGFTKdX Vig19SH+OTY/Me3Fyphsv1nc6u0hBfdL7hInRG5OHp8NrgC4pXohihbQoyHug7MhJ4il jF6Nkcm4Aayqgm2/kJe6uJovKVj56EGOpxwXJz6wiQDz4AwJkadaKp+QoujGaoIemO5M ON6zM7xK14mgb3jHwyMbIF00O3n0YvwuE3CXW6oEVuSqgVEIbOsBgMmI1gwfRjLhVLHq NYHg== 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=INumR7NpyhxctnUiH8eSiMISlDBQHE0cLlhCKcV3eyk=; b=Hp8d69/ZCyDTax2Y7IqvwotFiVCOwDhjw44we9caZsNXgaEe0xJdFLUaV7uzrDhQoI b1ZN/6o5FQ4rBlF6P0QAtI6cboGo+JouSh2tT3eNfg8eGFNAYjSuZrFDHaD7ZaSjpQbt Sstu2HHPqN9UandtMB0oitdo+xM2QUvoJ3ajAG1k7IECzefoK6+VcTp2UTpmuRbIrINq 3GIbHYg/0hTKk9Xjr6Z2dVNVbtuQxk4BlakeiRIuHzZTDPgkMDuAbkYIZqw8wwSuGhSG eMjPA6WSEg8ZzyJ5CWvoPkaUb1otPo/UNPh+m4EB1Go1qXYFgb3SbXZi0Ki02va6NgyS RF9A== X-Gm-Message-State: APjAAAUFUeHj10ZFwl5iq5obVoIGpDZevxovuYqUnPG4+LaPSLA5EztU XUK5ByEpiXhxRx+zVwYzXetqMA== X-Google-Smtp-Source: APXvYqwP37yOdgusaCv+L7fhZ+c5bQbRlHPs90xFZODFiLy2NUyeqAtt9jPSXDSiE3pDah9kQCvW6g== X-Received: by 2002:ad4:5303:: with SMTP id y3mr13043510qvr.19.1567986910163; Sun, 08 Sep 2019 16:55:10 -0700 (PDT) Received: from penelope.pa.netronome.com (195-23-252-147.net.novis.pt. [195.23.252.147]) by smtp.gmail.com with ESMTPSA id p27sm5464406qkm.92.2019.09.08.16.55.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Sep 2019 16:55:09 -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: [PATCH net-next v2 11/11] Documentation: nfp: add nfp driver specific notes Date: Mon, 9 Sep 2019 00:54:27 +0100 Message-Id: <20190908235427.9757-12-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190908235427.9757-1-simon.horman@netronome.com> References: <20190908235427.9757-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: Jakub Kicinski 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.