From patchwork Mon Apr 15 14:55:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1085676 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="pPjZS6yY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWm51fHHz9sBF for ; Tue, 16 Apr 2019 00:56:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727808AbfDOO4T (ORCPT ); Mon, 15 Apr 2019 10:56:19 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:44360 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727608AbfDOO4R (ORCPT ); Mon, 15 Apr 2019 10:56:17 -0400 Received: by mail-ed1-f67.google.com with SMTP id i13so4273226edf.11 for ; Mon, 15 Apr 2019 07:56:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mu1XjfLZ6ajnif4dDscKngCOI1kjIJQT1p2qmUNZOSM=; b=pPjZS6yYaPrzFxPuCDXA5wdHzFzegNGx32jyN/PGxpV9vyVmgxnTeMND9wcrW7wod8 1B9DsfjUx/BMXHVeDJDdlCWnKVjvT5V7xXkEkWWjsmyeOycVuExNgiP95LMRtb8RHOe0 ZSGWp4c1HrxsQzzqwGRpYWMJNZ0bvyJCaaLKo3k/w66/4l6cd/cxsAGsVcJGs4/uCjPb 4vNoNB2dYIzsfwz/vGxoLHtEsL7rEzgUsT8ncV2mi3Mk3E9iPf07ITvi50FIq8Qeky/i 4SSzjRhJSW4VaKzJcpE6PBtMcy0Juk+q/vzs8g8apxjoilajyQHzo/9D4va+NoMsgDZ+ kUuA== 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=mu1XjfLZ6ajnif4dDscKngCOI1kjIJQT1p2qmUNZOSM=; b=NRGQeLArQq8BTpMiXIYdYqChsa8cL4S7G+Ww92XfLF6RKc/sQ3/ifbkWUfcz4Ylr7N d1Jrx4AIrS9IyQUmufajSeuSHWzN9asdx7CKQrV6D/Ons16SfPjGfN+Raf2VwlTwGXv1 uli0okg/Y5CliSDYdzf96QUf+fdIxUO8uh2mhxxZeCUO6b2MozuMtgTskuprFU/9Xzn0 +Clib67hsOLchnbrv3FMmtmrqNEPAxsqp/FZ1uCyQKY7/KyFkWs2zv/rXsTKEkH9oX77 Ek2EOgsgWFtbc0OMgOuCu59lscgNGOY6Us+jG2xQCQHqBrf3GkR3s9ZMPn9aJZXArV7E qvgA== X-Gm-Message-State: APjAAAXrriEyDzhra0BbvBTT2dEZ4VIMkMam80zTZKIBzMdkbIAtIycQ wscsCcjNoCwr/nTYPkmjIXGv15ww92aYFhrw X-Google-Smtp-Source: APXvYqyqNb9UoJknf2snlEQnSapn7BpgU6D5ca4e04JjhZuoixAbTnJfvqeO+jobfgNI1wgH7qa/PQ== X-Received: by 2002:a50:ca88:: with SMTP id x8mr22336057edh.139.1555340175165; Mon, 15 Apr 2019 07:56:15 -0700 (PDT) Received: from reginn.horms.nl ([2001:982:756:703:d63d:7eff:fe99:ac9d]) by smtp.gmail.com with ESMTPSA id c38sm2540023ede.61.2019.04.15.07.56.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:56:14 -0700 (PDT) From: Simon Horman To: David Miller , Jakub Kicinski Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, John Hurley , Simon Horman Subject: [PATCH net-next 01/11] nfp: flower: turn on recirc and merge hint support in firmware Date: Mon, 15 Apr 2019 16:55:53 +0200 Message-Id: <20190415145603.32491-2-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190415145603.32491-1-simon.horman@netronome.com> References: <20190415145603.32491-1-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: John Hurley Write to a FW symbol to indicate that the driver supports flow merging. If this symbol does not exist then flow merging and recirculation is not supported on the FW. If support is available, add a stub to deal with FW to kernel merge hint messages. Full flow merging requires the firmware to support of flow mods. If it does not, then do not attempt to 'turn on' flow merging. Signed-off-by: John Hurley Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/flower/cmsg.c | 5 +++++ drivers/net/ethernet/netronome/nfp/flower/cmsg.h | 1 + drivers/net/ethernet/netronome/nfp/flower/main.c | 17 +++++++++++++++++ drivers/net/ethernet/netronome/nfp/flower/main.h | 2 ++ 4 files changed, 25 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/flower/cmsg.c b/drivers/net/ethernet/netronome/nfp/flower/cmsg.c index cf9e1118ee8f..e1ffbce3357b 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/cmsg.c +++ b/drivers/net/ethernet/netronome/nfp/flower/cmsg.c @@ -222,6 +222,10 @@ nfp_flower_cmsg_process_one_rx(struct nfp_app *app, struct sk_buff *skb) case NFP_FLOWER_CMSG_TYPE_PORT_MOD: nfp_flower_cmsg_portmod_rx(app, skb); break; + case NFP_FLOWER_CMSG_TYPE_MERGE_HINT: + if (app_priv->flower_ext_feats & NFP_FL_FEATS_FLOW_MERGE) + break; + goto err_default; case NFP_FLOWER_CMSG_TYPE_NO_NEIGH: nfp_tunnel_request_route(app, skb); break; @@ -235,6 +239,7 @@ nfp_flower_cmsg_process_one_rx(struct nfp_app *app, struct sk_buff *skb) } /* fall through */ default: +err_default: nfp_flower_cmsg_warn(app, "Cannot handle invalid repr control type %u\n", type); goto out; diff --git a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h index 0ed51e79db00..cf4ab10a614d 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h +++ b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h @@ -407,6 +407,7 @@ enum nfp_flower_cmsg_type_port { NFP_FLOWER_CMSG_TYPE_PORT_REIFY = 6, NFP_FLOWER_CMSG_TYPE_MAC_REPR = 7, NFP_FLOWER_CMSG_TYPE_PORT_MOD = 8, + NFP_FLOWER_CMSG_TYPE_MERGE_HINT = 9, NFP_FLOWER_CMSG_TYPE_NO_NEIGH = 10, NFP_FLOWER_CMSG_TYPE_TUN_MAC = 11, NFP_FLOWER_CMSG_TYPE_ACTIVE_TUNS = 12, diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c index 408089133599..1569fb6c2c36 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/main.c +++ b/drivers/net/ethernet/netronome/nfp/flower/main.c @@ -641,11 +641,28 @@ static int nfp_flower_init(struct nfp_app *app) goto err_cleanup_metadata; } + if (app_priv->flower_ext_feats & NFP_FL_FEATS_FLOW_MOD) { + /* Tell the firmware that the driver supports flow merging. */ + err = nfp_rtsym_write_le(app->pf->rtbl, + "_abi_flower_merge_hint_enable", 1); + if (!err) + app_priv->flower_ext_feats |= NFP_FL_FEATS_FLOW_MERGE; + else if (err == -ENOENT) + nfp_warn(app->cpp, "Flow merge not supported by FW.\n"); + else + goto err_lag_clean; + } else { + nfp_warn(app->cpp, "Flow mod/merge not supported by FW.\n"); + } + INIT_LIST_HEAD(&app_priv->indr_block_cb_priv); INIT_LIST_HEAD(&app_priv->non_repr_priv); return 0; +err_lag_clean: + if (app_priv->flower_ext_feats & NFP_FL_FEATS_LAG) + nfp_flower_lag_cleanup(&app_priv->nfp_lag); err_cleanup_metadata: nfp_flower_metadata_cleanup(app); err_free_app_priv: diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.h b/drivers/net/ethernet/netronome/nfp/flower/main.h index f6ca8dc9cc92..f5570080b505 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/main.h +++ b/drivers/net/ethernet/netronome/nfp/flower/main.h @@ -39,6 +39,8 @@ struct nfp_app; #define NFP_FL_NBI_MTU_SETTING BIT(1) #define NFP_FL_FEATS_GENEVE_OPT BIT(2) #define NFP_FL_FEATS_VLAN_PCP BIT(3) +#define NFP_FL_FEATS_FLOW_MOD BIT(5) +#define NFP_FL_FEATS_FLOW_MERGE BIT(30) #define NFP_FL_FEATS_LAG BIT(31) struct nfp_fl_mask_id {