From patchwork Fri Oct 6 08:21:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 822261 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="VWy5Bv0z"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y7jKC3Xb4z9t5C for ; Fri, 6 Oct 2017 19:21:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751459AbdJFIVe (ORCPT ); Fri, 6 Oct 2017 04:21:34 -0400 Received: from mail-wm0-f48.google.com ([74.125.82.48]:54382 "EHLO mail-wm0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750868AbdJFIVc (ORCPT ); Fri, 6 Oct 2017 04:21:32 -0400 Received: by mail-wm0-f48.google.com with SMTP id i124so6347085wmf.3 for ; Fri, 06 Oct 2017 01:21:31 -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=VJzl9cGsnI1b5258Gr9zijKs6Fy5AlUW4ewxcpu4Wrc=; b=VWy5Bv0z/Uvapn8r8VkZOD3W15QFow3e/9EFihZucydn0AgET1m/VMfoPRbbeoqN7j gVQXRT3b4t3FZeZ5VNLzGnskwZd0etcFrYM7CP6H6Xw/01VxfioESkM4rgutZlOK0ZDT MRXmKB7nIPFaQXxXcjRTE5K10yTiToOLEuXCPUJ6cuJsWmYt/tLuJdUtGa/4dbkamQsz eOSalBqNP1ty+Jk82Sc3S4KyUfR+G7MHwQo1fdcCHY7iVNMqp+gLiMrp04Dz9Sa8ON5o NyYHimCQfk1qepXhhZmZpbljPB/SGGqaU1DkWpQ7aHq+cPFBXaKsMHmX/ZHyAcDTo8Cj yY/Q== 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=VJzl9cGsnI1b5258Gr9zijKs6Fy5AlUW4ewxcpu4Wrc=; b=Qp3TV6z/nNJ65PBhMZnRZL5YGsDG1ApKKK3BRVXj+tQpfKJdHQjnKPLjJ0CEAqALSP PYUmJDGoz/ZJ+k1Un75Q/VgX4avPOkn1IZogUW77/P8WoSEQ/fRoWS1SHTdrIkFC9Btt Ivtpl2rYpNHPc82hGo1HNlKXEt3U1IVCP45NbceRA8c8kHYAsEnWLxh4jEtrMLzjR7Wd KokmVcWIt9N868Cl6MYVehezffefrEAN3CiCQkTNcdALiaSNRSRBzhN0JM4WfrTTrZew xFkCXyypN518lyK7ONRzoJ7iDRQQmoVZnW/MOkyxBE/PT/P+s7rilUV/Ubg7o65KYXzs a4bA== X-Gm-Message-State: AMCzsaWU5E9HBy1L3zbyQM3kn/WMeJwdLHjoQHyX+QmvuXTUEur1Xu69 Y7MK8GwGF0F/mtQ5EyuJWXezO4lua/I= X-Google-Smtp-Source: AOwi7QBQyb8Aw4Xf3gISiQppAopNs1Y4eneYCYyzbz1ujV2vAQH3s+pIJvbDPEAcedSUC1tAWNY9HA== X-Received: by 10.28.125.139 with SMTP id y133mr1020857wmc.25.1507278090834; Fri, 06 Oct 2017 01:21:30 -0700 (PDT) Received: from penelope.horms.nl ([217.111.208.18]) by smtp.gmail.com with ESMTPSA id s123sm885419wmd.29.2017.10.06.01.21.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 06 Oct 2017 01:21:30 -0700 (PDT) From: Simon Horman To: David Miller , Jakub Kicinski Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Pieter Jansen van Vuuren , Simon Horman Subject: [PATCH net-next 1/7] nfp: add mpls match offloading support Date: Fri, 6 Oct 2017 10:21:20 +0200 Message-Id: <1507278086-3102-2-git-send-email-simon.horman@netronome.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1507278086-3102-1-git-send-email-simon.horman@netronome.com> References: <1507278086-3102-1-git-send-email-simon.horman@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Pieter Jansen van Vuuren Previously MPLS match offloading was not supported. This patch enables MPLS match offloading support for label, bos and tc fields. Signed-off-by: Pieter Jansen van Vuuren Reviewed-by: Jakub Kicinski Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/flower/cmsg.h | 5 +++++ drivers/net/ethernet/netronome/nfp/flower/match.c | 17 +++++++++++++++-- drivers/net/ethernet/netronome/nfp/flower/offload.c | 6 +----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h index 504ddaa21701..fe4751607b2b 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h +++ b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h @@ -57,6 +57,11 @@ #define NFP_FLOWER_MASK_VLAN_CFI BIT(12) #define NFP_FLOWER_MASK_VLAN_VID GENMASK(11, 0) +#define NFP_FLOWER_MASK_MPLS_LB GENMASK(31, 12) +#define NFP_FLOWER_MASK_MPLS_TC GENMASK(11, 9) +#define NFP_FLOWER_MASK_MPLS_BOS BIT(8) +#define NFP_FLOWER_MASK_MPLS_Q BIT(0) + #define NFP_FL_SC_ACT_DROP 0x80000000 #define NFP_FL_SC_ACT_USER 0x7D000000 #define NFP_FL_SC_ACT_POPV 0x6A000000 diff --git a/drivers/net/ethernet/netronome/nfp/flower/match.c b/drivers/net/ethernet/netronome/nfp/flower/match.c index 865a815ab92a..e35ade9cd3d5 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/match.c +++ b/drivers/net/ethernet/netronome/nfp/flower/match.c @@ -111,8 +111,21 @@ nfp_flower_compile_mac(struct nfp_flower_mac_mpls *frame, ether_addr_copy(frame->mac_src, &addr->src[0]); } - if (mask_version) - frame->mpls_lse = cpu_to_be32(~0); + if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_MPLS)) { + struct flow_dissector_key_mpls *mpls; + u32 t_mpls; + + mpls = skb_flow_dissector_target(flow->dissector, + FLOW_DISSECTOR_KEY_MPLS, + target); + + t_mpls = FIELD_PREP(NFP_FLOWER_MASK_MPLS_LB, mpls->mpls_label) | + FIELD_PREP(NFP_FLOWER_MASK_MPLS_TC, mpls->mpls_tc) | + FIELD_PREP(NFP_FLOWER_MASK_MPLS_BOS, mpls->mpls_bos) | + NFP_FLOWER_MASK_MPLS_Q; + + frame->mpls_lse = cpu_to_be32(t_mpls); + } } static void diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c index 3d9537ebdea4..a721a00a2bcc 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c @@ -57,6 +57,7 @@ BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \ BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \ BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) | \ + BIT(FLOW_DISSECTOR_KEY_MPLS) | \ BIT(FLOW_DISSECTOR_KEY_IP)) #define NFP_FLOWER_WHITELIST_TUN_DISSECTOR \ @@ -238,11 +239,6 @@ nfp_flower_calculate_key_layers(struct nfp_fl_key_ls *ret_key_ls, case cpu_to_be16(ETH_P_ARP): return -EOPNOTSUPP; - /* Currently we do not offload MPLS. */ - case cpu_to_be16(ETH_P_MPLS_UC): - case cpu_to_be16(ETH_P_MPLS_MC): - return -EOPNOTSUPP; - /* Will be included in layer 2. */ case cpu_to_be16(ETH_P_8021Q): break;