From patchwork Wed Feb 27 04:19:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1048661 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="1jL3SZ+p"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 448MsN0lcxz9s5c for ; Wed, 27 Feb 2019 15:19:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729638AbfB0ETo (ORCPT ); Tue, 26 Feb 2019 23:19:44 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:35159 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729574AbfB0ETn (ORCPT ); Tue, 26 Feb 2019 23:19:43 -0500 Received: by mail-qk1-f196.google.com with SMTP id z13so9100802qki.2 for ; Tue, 26 Feb 2019 20:19:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SEYN5KwATerBwj39YUfimjPKm/cYf6OdkWw0CEEwfjI=; b=1jL3SZ+psx/TZ0Qk9dVBa5Dp2TT7Wg/PyRTTipAezcVJzsybpkBjP2OcZwJVgoMz+f y8kLfVB+M8FF7EsvlJ33DhRJRyFX+VbmVzD2HqKBgXbaAoPzCNkwyyX4oQnB6469Po5F /klVj9LxmqZacNFVce9wqXn5pE7+veUd+ecgDUns8/ohCs7S+mrjNDqVKVTSHUV7BxdD 7Qj7ejuiNTB42I+Rigsn2y87Bw9cDqIOdTVnc9MB3WU1EmgQUpcA8XjLYXPDOoimCQjb SsfZF5sKqtFqhk+VmP9mmQAC7pRi9u73AfKh6vtCryqaGysXA2uAPzSUADzLCMHaCMq4 gNJg== 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=SEYN5KwATerBwj39YUfimjPKm/cYf6OdkWw0CEEwfjI=; b=apB/j96lEstTZp4AVdyxCak67RhI/8YiAmKSMUVoD6YFuxZRMBXFiXJ1iYgzvxEZ84 HNlz+KDiuFkng0l7U/kssQ1m0My1Ea8leH6yJvuOdCxmEeV5DbUIIk9BANNl5E+dKV87 aSTGDe1txv/KdRc/hwIgcCds8tXAAr0wj+ZLPzq3tOLVm9DPTPGC6LYe3G1Wu6s8+HZ4 j63LX2uKMMk3M0w7xoy43RPphsEtccv0JDd59yJ0fnlKvFTno8sSjk6IfhdVZ/vcocbi 0952lZpivjPixoev57tcmuCzuZ+u2ULoyyPeUh3fPi5BaDAOs3znlZ5531MHHpy87/eT H7bg== X-Gm-Message-State: AHQUAubPPgWCQ9ILYjPtODcDuXl0zXm1xM1Mxi3KLE0Okzuc2mqOlVRq ctJiKwtb9lrPeOkSDGjrZHDfBg== X-Google-Smtp-Source: AHgI3IZMt+opfTXTk93ZZdwfGyHgbiCkM7ldZnkBIQqNjtGYpXGVpl1j2aFLYAXnjISP8RtVCVqhDA== X-Received: by 2002:a05:620a:16b0:: with SMTP id s16mr728576qkj.163.1551241182594; Tue, 26 Feb 2019 20:19:42 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id p64sm1497093qkc.62.2019.02.26.20.19.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 20:19:42 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next 1/5] nfp: report RJ45 connector in ethtool Date: Tue, 26 Feb 2019 20:19:29 -0800 Message-Id: <20190227041933.15194-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190227041933.15194-1-jakub.kicinski@netronome.com> References: <20190227041933.15194-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for reporting twisted pair port type. Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 1 + drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h index 246e213f1514..bd9c358c646f 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h @@ -49,6 +49,7 @@ enum nfp_eth_interface { NFP_INTERFACE_SFPP = 10, NFP_INTERFACE_SFP28 = 28, NFP_INTERFACE_QSFP = 40, + NFP_INTERFACE_RJ45 = 45, NFP_INTERFACE_CXP = 100, NFP_INTERFACE_QSFP28 = 112, }; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c index f6f028fa5db9..311a5be25acb 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c @@ -206,6 +206,9 @@ nfp_eth_calc_port_type(struct nfp_cpp *cpp, struct nfp_eth_table_port *entry) if (entry->interface == NFP_INTERFACE_NONE) { entry->port_type = PORT_NONE; return; + } else if (entry->interface == NFP_INTERFACE_RJ45) { + entry->port_type = PORT_TP; + return; } if (entry->media == NFP_MEDIA_FIBRE) From patchwork Wed Feb 27 04:19:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1048662 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="1ka29gyM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 448MsN5ljzz9s55 for ; Wed, 27 Feb 2019 15:19:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729687AbfB0ETq (ORCPT ); Tue, 26 Feb 2019 23:19:46 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41496 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729634AbfB0ETp (ORCPT ); Tue, 26 Feb 2019 23:19:45 -0500 Received: by mail-qt1-f193.google.com with SMTP id v10so17752537qtp.8 for ; Tue, 26 Feb 2019 20:19:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XhS326aTOFCNsT2lZQDuonzxazqwDYMovhJ3hHZw8QI=; b=1ka29gyM8OBl+F/MKO7Kk+yBbPxrVxpJw2b0IMEVA2MBJZ4G0ZIQzQyQA9jGVwjy5P 92Ar0K55d4L3CeKEfRymHYSXf099/4tVGigR5jOJfysMTfBeYrMO0V8zQyXiRYnrlJC9 Ji7mRNJbMqsxqkfDnr3CUXYaYmtKb/OFjnGZ9zBh2JhVvXMtyYmaIs+wAMqiJan8Btth CMFRWt9YKYA8tuGrLvqrGmvoxZBssEBjV54v1j+67tM8dXyym7U/27nqLCQGt6sPMiuz YZ6vfMbwJ8hWtrOcEJWsfClwaTb4+2H01FFQcE+su9ti792zpFfAh8MQlSKzrUFmNIAi Dkgg== 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=XhS326aTOFCNsT2lZQDuonzxazqwDYMovhJ3hHZw8QI=; b=e+6+tJc1vQCdhFzuNS+PpueAL9krlUj/V5nAGgShZv45Uml6pAdPfAz372GGCpKhyo 0lkGqEZjtZRPEb/BS456KslxRGNRxEk8jmF3KRnd+Ox6bDScxLY5jLBls/bvBIWia7c3 p8RAU/NtSigJ2/cDQunDqt3g8TRQGjTOpiutkbmUmRY05oWxQp9ThC2+VbMWcrLQD8Jv BDmc8rg4KWUw2Zw4us37NrftUr9Vi2zxCDzZLJoJVc7CMkPKggFlLBZ52qCj3q5dOSFD cTtHMIvnK7pvsXFcbZorLZJ9FuocV1jAkiDBc0ZmbPT8XJ/TcwmYqndmYdSIFuMsFVdH Gg+w== X-Gm-Message-State: APjAAAUo/18tgrhJ7AZGP5Xde3rZ0m9wnA1z7f4AizgjQXE0qOGUzj8y OcCNCt4Z06BtJriIrOhO+HTX8w== X-Google-Smtp-Source: APXvYqz22w/Dp1ng4MbDcVe0jj0oKrXCtULrtvn0ZItIJ3I28vJleVZ/qJy8mW/1dKQeNIWBuWe68w== X-Received: by 2002:ac8:234b:: with SMTP id b11mr105576qtb.40.1551241183924; Tue, 26 Feb 2019 20:19:43 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id p64sm1497093qkc.62.2019.02.26.20.19.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 20:19:43 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next 2/5] nfp: nsp: use fractional size of the buffer Date: Tue, 26 Feb 2019 20:19:30 -0800 Message-Id: <20190227041933.15194-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190227041933.15194-1-jakub.kicinski@netronome.com> References: <20190227041933.15194-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org NSP expresses the buffer size in MB and 4 kB blocks. For small buffers the kB part may make a difference, so count it in. Signed-off-by: Jakub Kicinski Reviewed-by: Dirk van der Merwe --- .../net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index a9d53df0070c..22208b03ff49 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -49,6 +49,7 @@ #define NSP_DFLT_BUFFER_ADDRESS GENMASK_ULL(39, 0) #define NSP_DFLT_BUFFER_CONFIG 0x20 +#define NSP_DFLT_BUFFER_SIZE_4KB GENMASK_ULL(15, 8) #define NSP_DFLT_BUFFER_SIZE_MB GENMASK_ULL(7, 0) #define NSP_MAGIC 0xab10 @@ -413,8 +414,8 @@ static int nfp_nsp_command(struct nfp_nsp *state, u16 code) static int nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) { + unsigned int def_size, max_size; struct nfp_cpp *cpp = nsp->cpp; - unsigned int max_size; u64 reg, cpp_buf; int ret, err; u32 cpp_id; @@ -433,11 +434,11 @@ nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) return err; max_size = max(arg->in_size, arg->out_size); - if (FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M < max_size) { - nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%llu < %u)\n", - arg->arg.code, - FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M, - max_size); + def_size = FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M + + FIELD_GET(NSP_DFLT_BUFFER_SIZE_4KB, reg) * SZ_4K; + if (def_size < max_size) { + nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%u < %u)\n", + arg->arg.code, def_size, max_size); return -EINVAL; } From patchwork Wed Feb 27 04:19:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1048663 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="mBTMUTm4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 448MsP48wvz9s5c for ; Wed, 27 Feb 2019 15:19:53 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729714AbfB0ETr (ORCPT ); Tue, 26 Feb 2019 23:19:47 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:35953 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729659AbfB0ETq (ORCPT ); Tue, 26 Feb 2019 23:19:46 -0500 Received: by mail-qt1-f194.google.com with SMTP id p25so17787806qtb.3 for ; Tue, 26 Feb 2019 20:19:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BNDRj883PAoPcbLmmGpTX7wE5tuAtlfV9P5l7ODeldw=; b=mBTMUTm4xZHzCi/jz8Tll9sBy6Eql4oTB3QgChD/smxPg+1Njisu4M9C18FQvktskI /cnbbdOE+74effChQ/jtHact/mjyKnbLSLp8tUDgR1QJnWJmtAbawjBf6xexS468MUp8 xp0g81FEIRVmnZnlEalcik+y2s7maJ6ZABZEFOcr8sZohSabIPEG95SRuM+cmyT0Ipyh edIY3axQ6rcpYj49dGV805WW5imREMo0z4hPBQWQNWPF6b/3J+M2JenX1wO0IhuV0JZ5 0fpE024JENpgXkhoxtThPVyHgwwkVilxf830+BUjMglCZQ72YQkbbejTgYnT6OqK7+rJ pkXQ== 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=BNDRj883PAoPcbLmmGpTX7wE5tuAtlfV9P5l7ODeldw=; b=BUJ2MpC0cJYqTloyTPCtI+9VqOmvXvbFdhZcaeGiTg96NYyA1KftEiOdf7PxLZYdty 1EAJVYf3DxTm6ha+sy+JSK6i1bZ8NGuTmFPkTPsqt8S/66KfRSSSKjat0WeTxqY9QMFy t+EAHb3vaKQgSpSVXawVjny/9O0xzWWrhxqdcw4HGApxjSjuIsxr5RW3wButSPi0W8nf fN0RA0MngOkO0J10SHkSv3cAFkqtXSVTfeXvjy4Ns0JEmgXzotVuUOiMwRoyN135nJAQ u1EWznfPuL0seS6sQfbsMuTbSKlvSECKbib/YcqeynWiQ1sAfkmxMod+dsEgabU+UJdz A7iA== X-Gm-Message-State: AHQUAuaRxRhjo8dITxn/CiZ+AVybnJ3lNiNzDC2sdofXdgk6Ttrorzqs 0NFduqoYRgEazvPbVlhUNvI4SA== X-Google-Smtp-Source: APXvYqyQNLPqEcw3/DMZACxt47e4jlWDjLnRck766QKmF8GD9AjLZgQSD2KWAguL1rO2KV/rldY6EA== X-Received: by 2002:aed:2a56:: with SMTP id k22mr76853qtf.85.1551241185081; Tue, 26 Feb 2019 20:19:45 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id p64sm1497093qkc.62.2019.02.26.20.19.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 20:19:44 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next 3/5] nfp: nsp: move default buffer handling into its own function Date: Tue, 26 Feb 2019 20:19:31 -0800 Message-Id: <20190227041933.15194-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190227041933.15194-1-jakub.kicinski@netronome.com> References: <20190227041933.15194-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DMA version of NSP communication is coming, move the code which copies data into the NFP buffer into a separate function. Signed-off-by: Jakub Kicinski Reviewed-by: Dirk van der Merwe --- .../ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 93 ++++++++++--------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index 22208b03ff49..28262b0fc89a 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -122,16 +122,14 @@ struct nfp_nsp { * @code: NFP SP Command Code * @timeout_sec:Timeout value to wait for completion in seconds * @option: NFP SP Command Argument - * @buff_cpp: NFP SP Buffer CPP Address info - * @buff_addr: NFP SP Buffer Host address + * @buf: NFP SP Buffer Address * @error_cb: Callback for interpreting option if error occurred */ struct nfp_nsp_command_arg { u16 code; unsigned int timeout_sec; u32 option; - u32 buff_cpp; - u64 buff_addr; + u64 buf; void (*error_cb)(struct nfp_nsp *state, u32 ret_val); }; @@ -345,16 +343,7 @@ __nfp_nsp_command(struct nfp_nsp *state, const struct nfp_nsp_command_arg *arg) if (err) return err; - if (!FIELD_FIT(NSP_BUFFER_CPP, arg->buff_cpp >> 8) || - !FIELD_FIT(NSP_BUFFER_ADDRESS, arg->buff_addr)) { - nfp_err(cpp, "Host buffer out of reach %08x %016llx\n", - arg->buff_cpp, arg->buff_addr); - return -EINVAL; - } - - err = nfp_cpp_writeq(cpp, nsp_cpp, nsp_buffer, - FIELD_PREP(NSP_BUFFER_CPP, arg->buff_cpp >> 8) | - FIELD_PREP(NSP_BUFFER_ADDRESS, arg->buff_addr)); + err = nfp_cpp_writeq(cpp, nsp_cpp, nsp_buffer, arg->buf); if (err < 0) return err; @@ -412,36 +401,14 @@ static int nfp_nsp_command(struct nfp_nsp *state, u16 code) } static int -nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) +nfp_nsp_command_buf_def(struct nfp_nsp *nsp, + struct nfp_nsp_command_buf_arg *arg) { - unsigned int def_size, max_size; struct nfp_cpp *cpp = nsp->cpp; u64 reg, cpp_buf; - int ret, err; + int err, ret; u32 cpp_id; - if (nsp->ver.minor < 13) { - nfp_err(cpp, "NSP: Code 0x%04x with buffer not supported (ABI %hu.%hu)\n", - arg->arg.code, nsp->ver.major, nsp->ver.minor); - return -EOPNOTSUPP; - } - - err = nfp_cpp_readq(cpp, nfp_resource_cpp_id(nsp->res), - nfp_resource_address(nsp->res) + - NSP_DFLT_BUFFER_CONFIG, - ®); - if (err < 0) - return err; - - max_size = max(arg->in_size, arg->out_size); - def_size = FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M + - FIELD_GET(NSP_DFLT_BUFFER_SIZE_4KB, reg) * SZ_4K; - if (def_size < max_size) { - nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%u < %u)\n", - arg->arg.code, def_size, max_size); - return -EINVAL; - } - err = nfp_cpp_readq(cpp, nfp_resource_cpp_id(nsp->res), nfp_resource_address(nsp->res) + NSP_DFLT_BUFFER, @@ -460,15 +427,21 @@ nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) } /* Zero out remaining part of the buffer */ if (arg->out_buf && arg->out_size && arg->out_size > arg->in_size) { - memset(arg->out_buf, 0, arg->out_size - arg->in_size); err = nfp_cpp_write(cpp, cpp_id, cpp_buf + arg->in_size, arg->out_buf, arg->out_size - arg->in_size); if (err < 0) return err; } - arg->arg.buff_cpp = cpp_id; - arg->arg.buff_addr = cpp_buf; + if (!FIELD_FIT(NSP_BUFFER_CPP, cpp_id >> 8) || + !FIELD_FIT(NSP_BUFFER_ADDRESS, cpp_buf)) { + nfp_err(cpp, "Buffer out of reach %08x %016llx\n", + cpp_id, cpp_buf); + return -EINVAL; + } + + arg->arg.buf = FIELD_PREP(NSP_BUFFER_CPP, cpp_id >> 8) | + FIELD_PREP(NSP_BUFFER_ADDRESS, cpp_buf); ret = __nfp_nsp_command(nsp, &arg->arg); if (ret < 0) return ret; @@ -483,6 +456,42 @@ nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) return ret; } +static int +nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) +{ + unsigned int def_size, max_size; + struct nfp_cpp *cpp = nsp->cpp; + u64 reg; + int err; + + if (nsp->ver.minor < 13) { + nfp_err(cpp, "NSP: Code 0x%04x with buffer not supported (ABI %hu.%hu)\n", + arg->arg.code, nsp->ver.major, nsp->ver.minor); + return -EOPNOTSUPP; + } + + err = nfp_cpp_readq(cpp, nfp_resource_cpp_id(nsp->res), + nfp_resource_address(nsp->res) + + NSP_DFLT_BUFFER_CONFIG, + ®); + if (err < 0) + return err; + + /* Zero out undefined part of the out buffer */ + if (arg->out_buf && arg->out_size && arg->out_size > arg->in_size) + memset(arg->out_buf, 0, arg->out_size - arg->in_size); + + max_size = max(arg->in_size, arg->out_size); + def_size = FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M + + FIELD_GET(NSP_DFLT_BUFFER_SIZE_4KB, reg) * SZ_4K; + if (def_size >= max_size) + return nfp_nsp_command_buf_def(nsp, arg); + + nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%u < %u)\n", + arg->arg.code, def_size, max_size); + return -EINVAL; +} + int nfp_nsp_wait(struct nfp_nsp *state) { const unsigned long wait_until = jiffies + NFP_NSP_TIMEOUT_BOOT * HZ; From patchwork Wed Feb 27 04:19:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1048664 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="B9G4dukl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 448MsQ2PrMz9s55 for ; Wed, 27 Feb 2019 15:19:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729734AbfB0ETs (ORCPT ); Tue, 26 Feb 2019 23:19:48 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:40557 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729689AbfB0ETr (ORCPT ); Tue, 26 Feb 2019 23:19:47 -0500 Received: by mail-qt1-f193.google.com with SMTP id j36so17746573qta.7 for ; Tue, 26 Feb 2019 20:19:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iUOAvPx18FHUcp57jBYaX8XVlhJizoIE53GalDj0QbI=; b=B9G4dukluwVpS74nFbQM6Er31Hm8EOM2bjtk8BYW3XiCVR6xFq7vQucLdapF+2YZEL uut3DpEgilRYYSdxgovIGR6rAQx0Z2SKqWodTJYlyVqooosDjRjYOofNmFdqSDKqz0ek wSx1v4RPrGvK+CUGLiniINQya2ON3bs2+ykJiCtAmN1uQOorbh+FQysNsLgNtKw5EtPD bc3DpRiJjHYTVW0UVsGxsP++dfgCpfpbG+kTosD5vk3tE2ubLtRq37OC03kdlf1m0inY Dmny+yhQOYi0Uf2njUtFUFNDu8Bu+/Jzau/Km3KBuX6ofL7NX+AiGm1E5XLzsaqy2sRi 6b1A== 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=iUOAvPx18FHUcp57jBYaX8XVlhJizoIE53GalDj0QbI=; b=EuSEgrFhXCkyfA9TZlAR9AtD5GU0/BrmfAMx3PPYlN0IyC4UNFpG5skMYvPy8dJKvy W0qGDNqx7EHJQI3kj+npfXgxM52Oa9nU+JzzC+xrhwW4ZtZpg31LsRERswr1MoOI+dm3 VDQkMbagefKPxng1De+avFag6cwChPZOQUWnQ+alDllGfFIKl4XdN2gpNzwVNhelLYtj WLGH2JlzACpA3o2YXSzITC7VNEjSvTBJmzNqqpRMUbmHVlwz1HFYfZovy/mstaS9Qpnq RPpHlUVG7tpYYhkJ+2ZaUfEcwAvqG7qQuh+m9q5GxGaonaW/mJdH59D1Yt7Fgboab9W3 ELIA== X-Gm-Message-State: APjAAAXkVR5P8d0wBDrDPjCQOtsGf9pWRnVzWF8LWMpzPx/GVa0ZfaiU EAx6lOr6HytHT3AfYLdCDFpKJg== X-Google-Smtp-Source: APXvYqxBw4p//MFKHf08ItKTf7hbSxN8kDAx0fAjlq2nWwk0SbyBWQaCScGnPLcUpTamkPA78tAmhg== X-Received: by 2002:ac8:372b:: with SMTP id o40mr78058qtb.73.1551241186289; Tue, 26 Feb 2019 20:19:46 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id p64sm1497093qkc.62.2019.02.26.20.19.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 20:19:45 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next 4/5] nfp: nsp: allow the use of DMA buffer Date: Tue, 26 Feb 2019 20:19:32 -0800 Message-Id: <20190227041933.15194-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190227041933.15194-1-jakub.kicinski@netronome.com> References: <20190227041933.15194-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Newer versions of NSP can access host memory. Simplest access type requires all data to be in one contiguous area. Since we don't have the guarantee on where callers of the NSP ABI will allocate their buffers we allocate a bounce buffer and copy the data in and out. Signed-off-by: Jakub Kicinski Reviewed-by: Dirk van der Merwe --- .../ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 196 +++++++++++++++++- 1 file changed, 191 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index 28262b0fc89a..dd6256841a37 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -37,6 +38,7 @@ #define NSP_COMMAND 0x08 #define NSP_COMMAND_OPTION GENMASK_ULL(63, 32) #define NSP_COMMAND_CODE GENMASK_ULL(31, 16) +#define NSP_COMMAND_DMA_BUF BIT_ULL(1) #define NSP_COMMAND_START BIT_ULL(0) /* CPP address to retrieve the data from */ @@ -49,9 +51,12 @@ #define NSP_DFLT_BUFFER_ADDRESS GENMASK_ULL(39, 0) #define NSP_DFLT_BUFFER_CONFIG 0x20 +#define NSP_DFLT_BUFFER_DMA_CHUNK_ORDER GENMASK_ULL(63, 58) #define NSP_DFLT_BUFFER_SIZE_4KB GENMASK_ULL(15, 8) #define NSP_DFLT_BUFFER_SIZE_MB GENMASK_ULL(7, 0) +#define NFP_CAP_CMD_DMA_SG 0x28 + #define NSP_MAGIC 0xab10 #define NSP_MAJOR 0 #define NSP_MINOR 8 @@ -92,6 +97,16 @@ enum nfp_nsp_cmd { SPCODE_VERSIONS = 21, /* Report FW versions */ }; +struct nfp_nsp_dma_buf { + __le32 chunk_cnt; + __le32 reserved[3]; + struct { + __le32 size; + __le32 reserved; + __le64 addr; + } descs[]; +}; + static const struct { int code; const char *msg; @@ -120,6 +135,7 @@ struct nfp_nsp { /** * struct nfp_nsp_command_arg - NFP command argument structure * @code: NFP SP Command Code + * @dma: @buf points to a host buffer, not NSP buffer * @timeout_sec:Timeout value to wait for completion in seconds * @option: NFP SP Command Argument * @buf: NFP SP Buffer Address @@ -127,6 +143,7 @@ struct nfp_nsp { */ struct nfp_nsp_command_arg { u16 code; + bool dma; unsigned int timeout_sec; u32 option; u64 buf; @@ -350,6 +367,7 @@ __nfp_nsp_command(struct nfp_nsp *state, const struct nfp_nsp_command_arg *arg) err = nfp_cpp_writeq(cpp, nsp_cpp, nsp_command, FIELD_PREP(NSP_COMMAND_OPTION, arg->option) | FIELD_PREP(NSP_COMMAND_CODE, arg->code) | + FIELD_PREP(NSP_COMMAND_DMA_BUF, arg->dma) | FIELD_PREP(NSP_COMMAND_START, 1)); if (err < 0) return err; @@ -456,10 +474,174 @@ nfp_nsp_command_buf_def(struct nfp_nsp *nsp, return ret; } +static int +nfp_nsp_command_buf_dma_sg(struct nfp_nsp *nsp, + struct nfp_nsp_command_buf_arg *arg, + unsigned int max_size, unsigned int chunk_order, + unsigned int dma_order) +{ + struct nfp_cpp *cpp = nsp->cpp; + struct nfp_nsp_dma_buf *desc; + struct { + dma_addr_t dma_addr; + unsigned long len; + void *chunk; + } *chunks; + size_t chunk_size, dma_size; + dma_addr_t dma_desc; + struct device *dev; + unsigned long off; + int i, ret, nseg; + size_t desc_sz; + + chunk_size = BIT_ULL(chunk_order); + dma_size = BIT_ULL(dma_order); + nseg = DIV_ROUND_UP(max_size, chunk_size); + + chunks = kzalloc(array_size(sizeof(*chunks), nseg), GFP_KERNEL); + if (!chunks) + return -ENOMEM; + + off = 0; + ret = -ENOMEM; + for (i = 0; i < nseg; i++) { + unsigned long coff; + + chunks[i].chunk = kmalloc(chunk_size, + GFP_KERNEL | __GFP_NOWARN); + if (!chunks[i].chunk) + goto exit_free_prev; + + chunks[i].len = min_t(u64, chunk_size, max_size - off); + + coff = 0; + if (arg->in_size > off) { + coff = min_t(u64, arg->in_size - off, chunk_size); + memcpy(chunks[i].chunk, arg->in_buf + off, coff); + } + memset(chunks[i].chunk + coff, 0, chunk_size - coff); + + off += chunks[i].len; + } + + dev = nfp_cpp_device(cpp)->parent; + + for (i = 0; i < nseg; i++) { + dma_addr_t addr; + + addr = dma_map_single(dev, chunks[i].chunk, chunks[i].len, + DMA_BIDIRECTIONAL); + chunks[i].dma_addr = addr; + + ret = dma_mapping_error(dev, addr); + if (ret) + goto exit_unmap_prev; + + if (WARN_ONCE(round_down(addr, dma_size) != + round_down(addr + chunks[i].len - 1, dma_size), + "unaligned DMA address: %pad %lu %zd\n", + &addr, chunks[i].len, dma_size)) { + ret = -EFAULT; + i++; + goto exit_unmap_prev; + } + } + + desc_sz = struct_size(desc, descs, nseg); + desc = kmalloc(desc_sz, GFP_KERNEL); + if (!desc) { + ret = -ENOMEM; + goto exit_unmap_all; + } + + desc->chunk_cnt = cpu_to_le32(nseg); + for (i = 0; i < nseg; i++) { + desc->descs[i].size = cpu_to_le32(chunks[i].len); + desc->descs[i].addr = cpu_to_le64(chunks[i].dma_addr); + } + + dma_desc = dma_map_single(dev, desc, desc_sz, DMA_TO_DEVICE); + ret = dma_mapping_error(dev, dma_desc); + if (ret) + goto exit_free_desc; + + arg->arg.dma = true; + arg->arg.buf = dma_desc; + ret = __nfp_nsp_command(nsp, &arg->arg); + if (ret < 0) + goto exit_unmap_desc; + + i = 0; + off = 0; + while (off < arg->out_size) { + unsigned int len; + + len = min_t(u64, chunks[i].len, arg->out_size - off); + memcpy(arg->out_buf + off, chunks[i].chunk, len); + off += len; + i++; + } + +exit_unmap_desc: + dma_unmap_single(dev, dma_desc, desc_sz, DMA_TO_DEVICE); +exit_free_desc: + kfree(desc); +exit_unmap_all: + i = nseg; +exit_unmap_prev: + while (--i >= 0) + dma_unmap_single(dev, chunks[i].dma_addr, chunks[i].len, + DMA_BIDIRECTIONAL); + i = nseg; +exit_free_prev: + while (--i >= 0) + kfree(chunks[i].chunk); + kfree(chunks); + if (ret < 0) + nfp_err(cpp, "NSP: SG DMA failed for command 0x%04x: %d (sz:%d cord:%d)\n", + arg->arg.code, ret, max_size, chunk_order); + return ret; +} + +static int +nfp_nsp_command_buf_dma(struct nfp_nsp *nsp, + struct nfp_nsp_command_buf_arg *arg, + unsigned int max_size, unsigned int dma_order) +{ + unsigned int chunk_order, buf_order; + struct nfp_cpp *cpp = nsp->cpp; + bool sg_ok; + u64 reg; + int err; + + buf_order = order_base_2(roundup_pow_of_two(max_size)); + + err = nfp_cpp_readq(cpp, nfp_resource_cpp_id(nsp->res), + nfp_resource_address(nsp->res) + NFP_CAP_CMD_DMA_SG, + ®); + if (err < 0) + return err; + sg_ok = reg & BIT_ULL(arg->arg.code - 1); + + if (!sg_ok) { + if (buf_order > dma_order) { + nfp_err(cpp, "NSP: can't service non-SG DMA for command 0x%04x\n", + arg->arg.code); + return -ENOMEM; + } + chunk_order = buf_order; + } else { + chunk_order = min_t(unsigned int, dma_order, PAGE_SHIFT); + } + + return nfp_nsp_command_buf_dma_sg(nsp, arg, max_size, chunk_order, + dma_order); +} + static int nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) { - unsigned int def_size, max_size; + unsigned int dma_order, def_size, max_size; struct nfp_cpp *cpp = nsp->cpp; u64 reg; int err; @@ -484,12 +666,16 @@ nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) max_size = max(arg->in_size, arg->out_size); def_size = FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M + FIELD_GET(NSP_DFLT_BUFFER_SIZE_4KB, reg) * SZ_4K; - if (def_size >= max_size) + dma_order = FIELD_GET(NSP_DFLT_BUFFER_DMA_CHUNK_ORDER, reg); + if (def_size >= max_size) { return nfp_nsp_command_buf_def(nsp, arg); + } else if (!dma_order) { + nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%u < %u)\n", + arg->arg.code, def_size, max_size); + return -EINVAL; + } - nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%u < %u)\n", - arg->arg.code, def_size, max_size); - return -EINVAL; + return nfp_nsp_command_buf_dma(nsp, arg, max_size, dma_order); } int nfp_nsp_wait(struct nfp_nsp *state) From patchwork Wed Feb 27 04:19:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1048665 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="lbSowFlM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 448MsR19DVz9s5c for ; Wed, 27 Feb 2019 15:19:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729746AbfB0ETv (ORCPT ); Tue, 26 Feb 2019 23:19:51 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:33947 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729716AbfB0ETs (ORCPT ); Tue, 26 Feb 2019 23:19:48 -0500 Received: by mail-qk1-f194.google.com with SMTP id a15so9094613qkc.1 for ; Tue, 26 Feb 2019 20:19:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PzQSuHOz4xWf2ao1o0XjfLpWE5SnRJgB8EhObL75+Jg=; b=lbSowFlMbZXj83HOarqme1y471lsp7vxZEvfO5YwlQ/GzrY0pukwtAtrcQcEoAXlIC 0dD+kxW4h4xpHE8GBD6zbsaxPKPhECHTyEc8uCodLO0c2fa8JSeFeI/XneWBY2dfbLWJ kh14o8cwbiAPLJzXNsSNWryK9RHQk4MEqx2j8sJvOrcTQc/N9ZTi1EA3r7BHrongUEqk brjvTyCifORproruwp/ezRiLu28PgXMTXZV9kHHcJZvzOZJzWJi5tLWxDLcMgj9coaCH pfl7TcMXPpwyQKsXboSAppA4dXsn1Pafekh+fZ1VRAY02i+0fVlrmvmoBbTUGU53KSW8 rwBA== 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=PzQSuHOz4xWf2ao1o0XjfLpWE5SnRJgB8EhObL75+Jg=; b=mrvmAJrQNK14XEW9+Aqz8id9F0ix89DpeZA2ORJYmfnziqz3DCKy/jEIXpALzqc3V3 3Sn5e+ISh+Y0hBOq6tKWD7sLLlqziRkptWA75kbFK71r4Gw8cLeTTajZPhGuSKan4Ukt +RZWg6QuiwSuAY46mO+JJtk+1+49ZTIHKaKDSUpYaeK6ODkO1Ynmc+rcS63mw0QjMN2+ NlLRXfjVf/PC6Ie7SBzcnpRIsOrmJyiUcN3PFqb4CU7K/ewpASLlj5PsS9ql3uxB48OT 1xbqyZ3bjGQc/7W5Ge7tuXz5gXDMlyIVDSBi2QKdqW8Jk2P9Ei67NcafAGerG17AV8NQ GBqA== X-Gm-Message-State: APjAAAWSEsMenxx9DtnBna3rS6Dry08caYLsAo0euofwAGcLLD7j/mlP te0dqxA8pCJKIobjK2limMxgkEyEJ3I= X-Google-Smtp-Source: AHgI3IaEktuiq8tOJgvOLVztu9eKasWFRoJRwzB7t79mkIhQKUZb0kUlRLIqIJKGPn7S6aS2EFiuXw== X-Received: by 2002:a37:c04a:: with SMTP id o71mr729631qki.234.1551241187471; Tue, 26 Feb 2019 20:19:47 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id p64sm1497093qkc.62.2019.02.26.20.19.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 20:19:47 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Dirk van der Merwe Subject: [PATCH net-next 5/5] nfp: nsp: set higher timeout for flash bundle Date: Tue, 26 Feb 2019 20:19:33 -0800 Message-Id: <20190227041933.15194-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190227041933.15194-1-jakub.kicinski@netronome.com> References: <20190227041933.15194-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dirk van der Merwe The management firmware now supports being passed a bundle with multiple components to be stored in flash at once. This makes it easier to update all components to a known state with a single user command, however, this also has the potential to increase the time required to perform the update significantly. The management firmware only updates the components out of a bundle which are outdated, however, we need to make sure we can handle the absolute worst case where a CPLD update can take a long time to perform. We set a very conservative total timeout of 900s which already adds a contingency. Signed-off-by: Dirk van der Merwe Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 5 +---- 1 file changed, 1 insertion(+), 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 dd6256841a37..3a4e224a64b7 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -799,10 +799,7 @@ int nfp_nsp_write_flash(struct nfp_nsp *state, const struct firmware *fw) { .code = SPCODE_NSP_WRITE_FLASH, .option = fw->size, - /* The flash time is specified to take a maximum of 70s - * so we add an additional factor to this spec time. - */ - .timeout_sec = 2.5 * 70, + .timeout_sec = 900, }, .in_buf = fw->data, .in_size = fw->size,