From patchwork Mon Mar 30 21:38:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264347 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=O/rJfnzx; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7G6lG1z9sPF for ; Tue, 31 Mar 2020 08:39:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729247AbgC3VjG (ORCPT ); Mon, 30 Mar 2020 17:39:06 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:40651 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728626AbgC3VjF (ORCPT ); Mon, 30 Mar 2020 17:39:05 -0400 Received: by mail-wm1-f67.google.com with SMTP id a81so434067wmf.5 for ; Mon, 30 Mar 2020 14:39:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=R8sj6WVyZB8rITepGXiyyokfdAE916pRlQveHEX+0jU=; b=O/rJfnzxLnx5pQ3QVzbk5BvnbuYLoXCuJ/XImWwW/5zDgBhjll4iwiaLzw7PTDEaXP LZUeRqLBwQ2MOMT3yWO3PX4PNqp9FEcIXs7/EFKQnhlcSjNyxKcV/qwgjesUhxY+0imW bcLFTZCDLLsrV2ytqTZCEq5Z9bXYRH/lF+oESmG5YhljBJBp0LObkdrFE7Ui1UoIHADv kmIa6DyfAbnqT8pbiNsOH4jurLm3keoj7YauQbLm+PzIWozzRp2OtWnp/N8rmpyDbn0J ZClUbUXcXaZhqD5WuNQgXzzttfASP/BkgRZFqj+YgV7JkBQHsbcjAIU2X4Ejqb6dH9ov uq0Q== 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=R8sj6WVyZB8rITepGXiyyokfdAE916pRlQveHEX+0jU=; b=Q5rv8aN9Dz4O8GSI9lPrnFh1i3KB8J1vFynRkJg7hRS8KQkct8jpnA39QwgDR3eatV OZ06s/AgcHmXSON2+Yh2l+441jRWCRdb+X8DghSjLtrgfHIVPw+YkAzoKcssqsQiGNlY 8Eqzli1A5db4UXK8ZOGM+4+7KiJJcrWRn3STy/xK6Vh29plm13fHF+5ATUW29yndV70B 2DD/kT9QJWznUwSCI7LfBN0Exgs14H2PBGEyftIVBIlYmn2bHGMM3P2R3gd+XA2U0hFi MyMXD4bbT0iAe7Tck8vs96MBPtCOjK7KnST1lcIaIk9usnheJdCORBe3Xm5HxHlZobLq bEmQ== X-Gm-Message-State: ANhLgQ27VilQZ4ZGvEAqMCn/fISYtcclgIwpCTCo0Vk2OQ2qwrxX4Gsf wWx+LKy/THzztgqJGNtNtnSiY+59 X-Google-Smtp-Source: ADFU+vuqmEejl2lFHdjUjOWHDEhvHL+sFtMQR46o4fc1jA+UDKMGdZcJSvk2Qpn+51A3va1tVxZVFA== X-Received: by 2002:a1c:dfd5:: with SMTP id w204mr83775wmg.153.1585604342067; Mon, 30 Mar 2020 14:39:02 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:01 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 1/9] net: dsa: bcm_sf2: Fix overflow checks Date: Mon, 30 Mar 2020 14:38:46 -0700 Message-Id: <20200330213854.4856-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit f949a12fd697 ("net: dsa: bcm_sf2: fix buffer overflow doing set_rxnfc") tried to fix the some user controlled buffer overflows in bcm_sf2_cfp_rule_set() and bcm_sf2_cfp_rule_del() but the fix was using CFP_NUM_RULES, which while it is correct not to overflow the bitmaps, is not representative of what the device actually supports. Correct that by using bcm_sf2_cfp_rule_size() instead. The latter subtracts the number of rules by 1, so change the checks from greater than or equal to greater than accordingly. Fixes: f949a12fd697 ("net: dsa: bcm_sf2: fix buffer overflow doing set_rxnfc") Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index 1962c8330daa..f9785027c096 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -882,17 +882,14 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port, fs->m_ext.data[1])) return -EINVAL; - if (fs->location != RX_CLS_LOC_ANY && fs->location >= CFP_NUM_RULES) + if (fs->location != RX_CLS_LOC_ANY && + fs->location > bcm_sf2_cfp_rule_size(priv)) return -EINVAL; if (fs->location != RX_CLS_LOC_ANY && test_bit(fs->location, priv->cfp.used)) return -EBUSY; - if (fs->location != RX_CLS_LOC_ANY && - fs->location > bcm_sf2_cfp_rule_size(priv)) - return -EINVAL; - ret = bcm_sf2_cfp_rule_cmp(priv, port, fs); if (ret == 0) return -EEXIST; @@ -973,7 +970,7 @@ static int bcm_sf2_cfp_rule_del(struct bcm_sf2_priv *priv, int port, u32 loc) struct cfp_rule *rule; int ret; - if (loc >= CFP_NUM_RULES) + if (loc > bcm_sf2_cfp_rule_size(priv)) return -EINVAL; /* Refuse deleting unused rules, and those that are not unique since From patchwork Mon Mar 30 21:38:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264348 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=FNwuV9kU; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7H5GRKz9sPJ for ; Tue, 31 Mar 2020 08:39:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729273AbgC3VjG (ORCPT ); Mon, 30 Mar 2020 17:39:06 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:32984 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728819AbgC3VjG (ORCPT ); Mon, 30 Mar 2020 17:39:06 -0400 Received: by mail-wm1-f66.google.com with SMTP id z14so592916wmf.0 for ; Mon, 30 Mar 2020 14:39:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bl0yu2j4T+LH6lKOM5xoWi5HPF7bOq1CzLFkv/S3kcI=; b=FNwuV9kUyjIa/kmWbrt6eViGagkaBYgbU4BItZuNdQ5emO8d7ETIZv3siYpnbL6m8K cYsv1xWqL/kvqAmzCJQbk+c/KthtDanFl9peB9G4OUik8NgsrM21rSYasCAp72SB9hbT Wohoj76B/tqcxsvWynTI/LCBm8EJTAoYYftTJRY7PKY3twRhbU3OT3AIwMCvbfa6IS28 UGJiwgSnZJ9mpsuSD1VCwmckrWsZWJTpUct41vbRD2T6pLHw22vB5XJuHxegfRlg5aqR 9Od00kXh3vVAhQUv2KDbVe7t5w4M0hAa+CmmPvK63fqpRrfouV4BTj7aYa+jniBxjG90 cuug== 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=bl0yu2j4T+LH6lKOM5xoWi5HPF7bOq1CzLFkv/S3kcI=; b=PgdZWgERddfcwMK5n1WXkhYBlGhGNn8QgZp/jA+P06bFf5hg391y6cQqvoLFl4kO2a xuswWtrA0ABrPd33X97tRYSlFo9MYur9noM0upujSi3UkN01kwBGCUaq0bgOS9V5+XIt lD4iTfvQH6/r32yI8vEPGv7G/p809MJgqSyZDFWznhsgK1OUCXUJjuYzNoTicaZKY3if li5oUZ3ZOHIoZmR/AVebiPuWAHF0XuPWBnGMVlueRQz654sb745nwmVUz0sbdzjQhy5g eKImCn28fr0J6ymnjzinuQJUVe87mCAx/BxFidusvgy3CTaHt9vvr9/KEoTmJzzxZl55 +3+A== X-Gm-Message-State: ANhLgQ2IS5bU8iUmeCex8Az09Vr0wsKZkWD+Q3RiZT1rM0aAir9r0iF3 F3igUijwR3nmJnw6OAGAziwYm5JI X-Google-Smtp-Source: ADFU+vv8GWRPh32K5UKNfhYrJzph0MWtcYHOY4y+UBLRqmx5cLVIR3+5LLkUQi/WmuXsW1hq7uQr5Q== X-Received: by 2002:a05:600c:24a:: with SMTP id 10mr130907wmj.98.1585604344304; Mon, 30 Mar 2020 14:39:04 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:03 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 2/9] net: dsa: b53: Restore VLAN entries upon (re)configuration Date: Mon, 30 Mar 2020 14:38:47 -0700 Message-Id: <20200330213854.4856-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The first time b53_configure_vlan() is called we have not configured any VLAN entries yet, since that happens later when interfaces get brought up. When b53_configure_vlan() is called again from suspend/resume we need to restore all VLAN entries though. Signed-off-by: Florian Fainelli --- drivers/net/dsa/b53/b53_common.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 39ae4ed87d1d..5cb678e8b9cd 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -681,7 +681,9 @@ int b53_configure_vlan(struct dsa_switch *ds) { struct b53_device *dev = ds->priv; struct b53_vlan vl = { 0 }; + struct b53_vlan *v; int i, def_vid; + u16 vid; def_vid = b53_default_pvid(dev); @@ -699,6 +701,19 @@ int b53_configure_vlan(struct dsa_switch *ds) b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(i), def_vid); + /* Upon initial call we have not set-up any VLANs, but upon + * system resume, we need to restore all VLAN entries. + */ + for (vid = def_vid; vid < dev->num_vlans; vid++) { + v = &dev->vlans[vid]; + + if (!v->members) + continue; + + b53_set_vlan_entry(dev, vid, v); + b53_fast_age_vlan(dev, vid); + } + return 0; } EXPORT_SYMBOL(b53_configure_vlan); From patchwork Mon Mar 30 21:38:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264349 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Oj++YXXe; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7M27spz9sPF for ; Tue, 31 Mar 2020 08:39:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729293AbgC3VjK (ORCPT ); Mon, 30 Mar 2020 17:39:10 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:32987 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728819AbgC3VjJ (ORCPT ); Mon, 30 Mar 2020 17:39:09 -0400 Received: by mail-wm1-f67.google.com with SMTP id z14so592953wmf.0 for ; Mon, 30 Mar 2020 14:39:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9l0Ih2VJwaJR/ECIPbrLbF6cSuvdlebPe9+sYSdSc1k=; b=Oj++YXXeSC+YIE9JXNEs1UlCBpe/RdP281rlBHXiXTlQBEle2z/r/RKFdGzORsRGSv 0Fgvxz1ZNotK1YC0u0DBLXLE+H4te+/ZTgdpWO1OeoL2A6VylYXeaSTzldm/ZKeI523t 26JQHMHtaF1475OD4Vxf/ACGJnqlc4HQhqPtSK41wf9Adtj65CkLntpAaHmSxzUK6fLx KaPV3zoC3Em+4QrSogZrGo9d21PI/U20HLINvlobGXZy8MantzbgJ5u1fgItRh0HXTf6 ywpaA/dU/picIHHZviVVbpdvVAFM05OZ37/SeOCGwbLoaBt3jBUdAztjhe8P7mSSkTzA t+EQ== 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=9l0Ih2VJwaJR/ECIPbrLbF6cSuvdlebPe9+sYSdSc1k=; b=bFTc7dtsQPnYlM5jxO1hvfii9tb/3hpXdETzwREScmEVs4SYEhKf9PRgdItynihj/l PS0yND0vdkF/ZyGlZNu6g8geBcKiuh20UV9BmIFYcA1kHQ12hKMCpG9cMYU+Z5gt4IJD Ep8A6GWyRCRs3UKFBPuQ3dcOlyf/caXC8ItC/cUejTG9qOIJjkL0R2gVG/F1AwQ3eT+6 tDyLPg1Wl22wElZh13+IkzltzMyatAxDH51OB95CpefgXvbruldFs5uQSFJtoUwBtLxm 1HzgZgoBAUjYS2uNDow/uJDx6gNuG1NsvoFlt7GGX1gim+juLUIZcXdN2FDOnPOVDwpn 0Mgg== X-Gm-Message-State: ANhLgQ2hC036zswbtx7FDmGnJ89IiS8wFaFdJ1B9UNtTcC1Aas0zjLON wF+mMGyrYbTzZjWnvaPqSXZB5mn7 X-Google-Smtp-Source: ADFU+vt+2/GUihvRgc+L0mNvbF2eE++7jsLQHc24/a5gF3wsyJk3YOTeLeerli1wrlldYoyfhqESTA== X-Received: by 2002:a1c:dc8b:: with SMTP id t133mr92232wmg.99.1585604346472; Mon, 30 Mar 2020 14:39:06 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:05 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 3/9] net: dsa: b53: Prevent tagged VLAN on port 7 for 7278 Date: Mon, 30 Mar 2020 14:38:48 -0700 Message-Id: <20200330213854.4856-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 7278, port 7 of the switch connects to the ASP UniMAC which is not capable of processing VLAN tagged frames. We can still allow the port to be part of a VLAN entry, and we may want it to be untagged on egress on that VLAN because of that limitation. Signed-off-by: Florian Fainelli --- drivers/net/dsa/b53/b53_common.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 5cb678e8b9cd..42c41b091682 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -1355,6 +1355,14 @@ int b53_vlan_prepare(struct dsa_switch *ds, int port, if ((is5325(dev) || is5365(dev)) && vlan->vid_begin == 0) return -EOPNOTSUPP; + /* Port 7 on 7278 connects to the ASP's UniMAC which is not capable of + * receiving VLAN tagged frames at all, we can still allow the port to + * be configured for egress untagged. + */ + if (dev->chip_id == BCM7278_DEVICE_ID && port == 7 && + !(vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED)) + return -EINVAL; + if (vlan->vid_end > dev->num_vlans) return -ERANGE; From patchwork Mon Mar 30 21:38:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264350 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=BjQhtIf1; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7N2DZgz9sPF for ; Tue, 31 Mar 2020 08:39:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729319AbgC3VjL (ORCPT ); Mon, 30 Mar 2020 17:39:11 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:33842 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729279AbgC3VjK (ORCPT ); Mon, 30 Mar 2020 17:39:10 -0400 Received: by mail-wm1-f65.google.com with SMTP id 26so588514wmk.1 for ; Mon, 30 Mar 2020 14:39:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=TLSkwbkBmT9mvdGuUe/8YRoz6F0Zjj10CnTJyh7civM=; b=BjQhtIf13chJUOY9M790edfFWtH0pLW8dsehVzdjgxoTt4t4t9RSkXpcIEgXsMhy9W 99nRegVKCkNdj2cNTR8WpR0AsoABUC/8Y8TF3S+w/o2NISMC7Ws+cVttV4iiVnYqGmJD mbLg1tkJ/Eko3bKj7z7uxmba3QfvbGVRg6VOSSxCYxDaimQ9vnVM2G3emsHu2jqJy2yI ej2pXW945548CnJPqYxh5rt+sNY3KRMAdG26HUSDV5jWvEhPvQAe6j34fwIktsmlG5yD P3RMtvo+SVmrdMeY8xDbW/UwIQ/7Vy+SNVimUuCkQBMc06Ppyr0ij6qOMNp1aexjCBFw PS7g== 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=TLSkwbkBmT9mvdGuUe/8YRoz6F0Zjj10CnTJyh7civM=; b=FPxSoe8S56IZp8m/Ppx+9s/zigU+9+m6vaS90G0f/mRvOiNoLbdam/ZcXS57/PoMUd UF+xBELNjK33RCxdSnrOgEN76xB686GdVeCS1m9/gKfFxZDRJCsjSngPVAzPErtDszjb uY9au1ybHgX8IaDATMDyu1slBU5VX0h7igaZtE+BZ2i1E27vS+OrnzaU1dG4SHQoMpzT Ut/xOGOWZ3UEfXznyqGptJs+Tm5vkBauuWyNzb8teHrGQEYwWZUYrb28uB9uCdeIH1qn yNrJfVachjC0er28VLk0TKV6sCVIHqqyHe7mKQHXz95MKJk9ESbcPuEObOqWPOdbZwUR UrUA== X-Gm-Message-State: ANhLgQ3oqEdIJLaRGVAFR5QbcTXrHACG+HJIWykfy3iOzmVETgHKv+NG pZyVZpFV9M3QyNteYNR6zX3i/wpS X-Google-Smtp-Source: ADFU+vtazTDFLeFjLvyR12r2nX95fLWkM9JLselUFE8G46okF7wlEufna5rIMqif9dhNGyE4GU356Q== X-Received: by 2002:a7b:c205:: with SMTP id x5mr87312wmi.189.1585604348759; Mon, 30 Mar 2020 14:39:08 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:08 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 4/9] net: dsa: b53: Deny enslaving port 7 for 7278 into a bridge Date: Mon, 30 Mar 2020 14:38:49 -0700 Message-Id: <20200330213854.4856-5-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 7278, port 7 connects to the ASP which should only receive frames through the use of CFP rules, it is not desirable to have it be part of a bridge at all since that would make it pick up unwanted traffic that it may not even be able to filter or sustain. Signed-off-by: Florian Fainelli --- drivers/net/dsa/b53/b53_common.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 42c41b091682..68e2381694b9 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -1728,6 +1728,12 @@ int b53_br_join(struct dsa_switch *ds, int port, struct net_device *br) u16 pvlan, reg; unsigned int i; + /* On 7278, port 7 which connects to the ASP should only receive + * traffic from matching CFP rules. + */ + if (dev->chip_id == BCM7278_DEVICE_ID && port == 7) + return -EINVAL; + /* Make this port leave the all VLANs join since we will have proper * VLAN entries from now on */ From patchwork Mon Mar 30 21:38:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264351 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=RWCSEfwQ; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7S6Dqlz9sPF for ; Tue, 31 Mar 2020 08:39:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729360AbgC3VjP (ORCPT ); Mon, 30 Mar 2020 17:39:15 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:34544 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729335AbgC3VjM (ORCPT ); Mon, 30 Mar 2020 17:39:12 -0400 Received: by mail-wr1-f66.google.com with SMTP id 65so23534797wrl.1 for ; Mon, 30 Mar 2020 14:39:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=H2a/hDQCPDT4q++d11lo8Qlh4ZxoshhA5o4y1evMiik=; b=RWCSEfwQLutFQL9Z0YgUoS3LTnAf/YJ11FGBq76BQsu6TB4jOkfKyk4Sga0oxh8vyP 01PCnqauWRMBGPHdz5Keo3RRv6TNarnVnJMrJfxtVl62LssNeJz5kEmmzIxYrC1gpv6r Dq28aYC8RyBSYPu4CWPUdEAn8zZZ15BYxsW6SkgHbc20S61DOXoQ+h/VOasM4xkv9Gcu /fLgcEOAMVnIcmOkaKxeVY1Wk6zAAXvn/5XDxBAZXjXhKn4lQZtr/tRk1+rDXCDZRg2B niM3RDhK91KLsWzzHCn2fRv53GaLnVhwuhQSFb7/EH4ib38TO6/CPE6mgB5tEuFYFvoA xbnA== 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=H2a/hDQCPDT4q++d11lo8Qlh4ZxoshhA5o4y1evMiik=; b=RpaGF24XG15ipAEvTNFqyymBB/39db6e5cu2qmNFrhAE97lfFOyiytuM4V7dlFkGrP Q+jL30yRSmrGVMtxhuwngxHtRXdRYZUjuorSVdxkPVK/Z97U6CFLCpi095h2fkikybeM u+3Gpsmaye7kNytYplohOrEv7pN0luZKxl42NInzhxlnAwKL9aelDOm8nDUJ2Y9STuDY EKEKMu7RDiqnCmJggf/X03uvrBOmHjc2a3Nt7+LxX9pQ9Q+Pfjvv0o6PNJXZ61cJJd0M bT8TysfHDDPDbCATsBH36RC8DF2s3be++Mf6jaksfOasXlEN7oCeQD2Frc+OhiEgdhNT cQOw== X-Gm-Message-State: ANhLgQ0mm/fNCqU/A2N00eiRSaH5yFyS78+TNtsQ8mSIGqhKXLXPViTR 8Pe3WDTlPm/4JTky9orOEhDwCnzL X-Google-Smtp-Source: ADFU+vsS/nX5/cCTeaUtQ/yvLu4l+9vGZlkrHbKRXKgzozDYiz3n9z31mQgsjSj14rrJNZBu5DAfKA== X-Received: by 2002:adf:9346:: with SMTP id 64mr16530843wro.174.1585604350879; Mon, 30 Mar 2020 14:39:10 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:10 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 5/9] net: dsa: bcm_sf2: Disable learning for ASP port Date: Mon, 30 Mar 2020 14:38:50 -0700 Message-Id: <20200330213854.4856-6-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We don't want to enable learning for the ASP port since it only receives directed traffic, this allows us to bypass ARL-driven forwarding rules which could conflict with Broadcom tags and/or CFP forwarding. Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 368ead87e07a..affa5c6e135c 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -178,9 +178,17 @@ static int bcm_sf2_port_setup(struct dsa_switch *ds, int port, core_writel(priv, reg, CORE_DIS_LEARN); /* Enable Broadcom tags for that port if requested */ - if (priv->brcm_tag_mask & BIT(port)) + if (priv->brcm_tag_mask & BIT(port)) { b53_brcm_hdr_setup(ds, port); + /* Disable learning on ASP port */ + if (port == 7) { + reg = core_readl(priv, CORE_DIS_LEARN); + reg |= BIT(port); + core_writel(priv, reg, CORE_DIS_LEARN); + } + } + /* Configure Traffic Class to QoS mapping, allow each priority to map * to a different queue number */ From patchwork Mon Mar 30 21:38:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264352 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=U8NfGzr4; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7W32f5z9sPF for ; Tue, 31 Mar 2020 08:39:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729381AbgC3VjS (ORCPT ); Mon, 30 Mar 2020 17:39:18 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:34931 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729335AbgC3VjR (ORCPT ); Mon, 30 Mar 2020 17:39:17 -0400 Received: by mail-wr1-f68.google.com with SMTP id d5so23573464wrn.2 for ; Mon, 30 Mar 2020 14:39:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uisaVSbt+AjqZJIhEGd05nS3aQ/c+8p2XMpEluonO5o=; b=U8NfGzr4KRjcEg7EmMrMzVRVAhGKRHLhkhNUyu33G4tpjAl0/tPcuMYzfekLVo1z4y 368CCQQD6DwREOqjQE15V/Ud58E8u9slKdgjIBcEweKU9M/bwoKRsBCiV+SPw6wp9WE5 p4otrg601vBB9Tf+tWaL6peX81h3xHmRGX+PF+iz+Cmx0pZP86IrTeDHNCs5HfPwAifB 2/zBVV504x3Zg+c00s2Fs2NBy5XlgiroMe4GYd8dzk02s7g7W4/v2jNX1G24v44IOX4R 2J4jApst4cGsefWZyZYjHne30Bk6z+JVro9BbPNy5M4qGc6hrXqwneXQ4vXvv5IkKnjd S37A== 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=uisaVSbt+AjqZJIhEGd05nS3aQ/c+8p2XMpEluonO5o=; b=DFMxXDP0u+dMGz0vBaTMOlnTt8yxpZEUCyD5l/Zfbbcszp6tM4LtjIaOPxSQ9Guj2E EMiW036n7zcaOkdiUqKVthLMxBqcKBqhhH1bnoyykurzi5n0vYvSCaivN1NTP2lZm0Ye mhUanumHveZ00hWzN7N/i4OPWjmBb1PfGWTm7BzsL8k5auqMAXgGQxlbwPgwyvpqRIAi MctGwYFy9C3pdsk/3MC0s172lrKaTf+ollK8tojUHxXoE9usmwPU+PKm8QKv8JmN8kLy cEAloPd5XYTBYfE8CuMnlC8IpI/p9k62ojVf4fVg8xHxlQhtyaLUwpX3oxZTyvEhebzV gSMA== X-Gm-Message-State: ANhLgQ1qdR8PgW9O/i7QBNczIpwgkwWEsgRaJyJNLDqpece8tnxsbhKB 7YH//8vWKtfb0nuX8HP1EuCGXOiz X-Google-Smtp-Source: ADFU+vtBTX3LOJy/LCbG55wv7xYQDKzDMxR75StZ6mt1fqkgouwdQ6/E/KAw35/m3XbfvyS+oElmCQ== X-Received: by 2002:adf:8187:: with SMTP id 7mr17719315wra.358.1585604353506; Mon, 30 Mar 2020 14:39:13 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:12 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 6/9] net: dsa: bcm_sf2: Check earlier for FLOW_EXT and FLOW_MAC_EXT Date: Mon, 30 Mar 2020 14:38:51 -0700 Message-Id: <20200330213854.4856-7-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We do not currently support matching on FLOW_EXT or FLOW_MAC_EXT, but we were not checking for those bits being set in the flow specification. The check for FLOW_EXT and FLOW_MAC_EXT are separated out because a subsequent commit will add support for matching VLAN TCI which are covered by FLOW_EXT. Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index f9785027c096..40ea88c304de 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -878,8 +878,9 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port, int ret = -EINVAL; /* Check for unsupported extensions */ - if ((fs->flow_type & FLOW_EXT) && (fs->m_ext.vlan_etype || - fs->m_ext.data[1])) + if ((fs->flow_type & FLOW_EXT) || + (fs->flow_type & FLOW_MAC_EXT) || + fs->m_ext.data[1]) return -EINVAL; if (fs->location != RX_CLS_LOC_ANY && From patchwork Mon Mar 30 21:38:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264353 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=vNa1K8/q; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7Y4Svyz9sPF for ; Tue, 31 Mar 2020 08:39:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729391AbgC3VjV (ORCPT ); Mon, 30 Mar 2020 17:39:21 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:34551 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729373AbgC3VjT (ORCPT ); Mon, 30 Mar 2020 17:39:19 -0400 Received: by mail-wr1-f66.google.com with SMTP id 65so23534982wrl.1 for ; Mon, 30 Mar 2020 14:39:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XYmBphqrTY7r+OJWuQCYlMHXS/NTMbVuboYc8JF6NAY=; b=vNa1K8/qBfXWUfpbeLzadUHxldzxuxsB0lHHVbS+YyqDIvm+U3D84crGCx2ZuVZpKA 1bjMkfEzHA1kj1BUPVJGTwGXIQQCGIaLfWe+H7lpIajhoU6Y7dfVgZEEdvV8/lBwQnYG nP3Ga3x1PHwUlB4fyXFGzUj2QX2qjaTcZWW4lnE+unV64V3jnbXmeeClU5U6fidUAyaY mwHdAouXD4USViwGnhRL7CuguOq09toVq3vogzJ5LkkRzss1nKNFsSxAGbiX2tye9ycm 1Qiwj3zV0yvHl7gGeOSR6fsp5guH0cYp3XN/AkC5KLtGsY49Eg8dSsMCJEChYGvrjNRL MECg== 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=XYmBphqrTY7r+OJWuQCYlMHXS/NTMbVuboYc8JF6NAY=; b=osD9hCyq2DUQfq4sigmU0J+h8YZT9BSOPyS9LVXcH9SC0UZ0J8JHi8cCFXQWValADh 9rFMS4EaH1YwCP84v0hExGxpPCo5s5/2rqlvFB2hyW1huFBcpk+Lyx62Wm7NjIBH+WFO 0RX8hIvykYoso3aoftpyDlMiZ9+D9bAXRzoqBdJWCMHz2l++9xO4ogs3G2CyoL/xRBbg 2mHLY9mla3Gog6c7uligylkLTmDkjc2dd2iZfWmPQmhc7x3lGCT3lLSuqEWOynMCBqdq qksbDM5+Ecj9xP/Z/NrLTsLWGG9DlKfIv8X68+YLpGdil0ANywhBOaaeab4ZuSCeoS1u B0Vg== X-Gm-Message-State: ANhLgQ0x6R5SVEARKtX6t2hRhhOp4kzzNUlaWc9GLhKkrnDxBJWBBZRL giG0Nrf47H8IKAsd/JoxokiaDF+Y X-Google-Smtp-Source: ADFU+vve37dh3zuVS5IsCr1VNa2+XU6Zuoc3GIQBMWDvoEAHxqjvLFNjwd716gf/YQPn1yIhuPXbRA== X-Received: by 2002:a5d:468c:: with SMTP id u12mr18015500wrq.394.1585604355643; Mon, 30 Mar 2020 14:39:15 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:15 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 7/9] net: dsa: bcm_sf2: Move writing of CFP_DATA(5) into slicing functions Date: Mon, 30 Mar 2020 14:38:52 -0700 Message-Id: <20200330213854.4856-8-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In preparation for matching VLANs, move the writing of CFP_DATA(5) into the IPv4 and IPv6 slicing logic since they are part of the per-flow configuration. Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 64 +++++++++++++++++------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index 40ea88c304de..a6cc076f1a67 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -261,11 +261,20 @@ static int bcm_sf2_cfp_act_pol_set(struct bcm_sf2_priv *priv, static void bcm_sf2_cfp_slice_ipv4(struct bcm_sf2_priv *priv, struct flow_dissector_key_ipv4_addrs *addrs, struct flow_dissector_key_ports *ports, - unsigned int slice_num, + unsigned int slice_num, u8 num_udf, bool mask) { u32 reg, offset; + /* UDF_Valid[7:0] [31:24] + * S-Tag [23:8] + * C-Tag [7:0] + */ + if (mask) + core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_MASK_PORT(5)); + else + core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_DATA_PORT(5)); + /* C-Tag [31:24] * UDF_n_A8 [23:8] * UDF_n_A7 [7:0] @@ -421,18 +430,11 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, core_writel(priv, layout->udfs[slice_num].mask_value | udf_upper_bits(num_udf), CORE_CFP_MASK_PORT(6)); - /* UDF_Valid[7:0] [31:24] - * S-Tag [23:8] - * C-Tag [7:0] - */ - core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_DATA_PORT(5)); - - /* Mask all but valid UDFs */ - core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_MASK_PORT(5)); - /* Program the match and the mask */ - bcm_sf2_cfp_slice_ipv4(priv, ipv4.key, ports.key, slice_num, false); - bcm_sf2_cfp_slice_ipv4(priv, ipv4.mask, ports.mask, SLICE_NUM_MASK, true); + bcm_sf2_cfp_slice_ipv4(priv, ipv4.key, ports.key, slice_num, + num_udf, false); + bcm_sf2_cfp_slice_ipv4(priv, ipv4.mask, ports.mask, SLICE_NUM_MASK, + num_udf, true); /* Insert into TCAM now */ bcm_sf2_cfp_rule_addr_set(priv, rule_index); @@ -468,11 +470,20 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, static void bcm_sf2_cfp_slice_ipv6(struct bcm_sf2_priv *priv, const __be32 *ip6_addr, const __be16 port, - unsigned int slice_num, + unsigned int slice_num, u32 udf_bits, bool mask) { u32 reg, tmp, val, offset; + /* UDF_Valid[7:0] [31:24] + * S-Tag [23:8] + * C-Tag [7:0] + */ + if (mask) + core_writel(priv, udf_bits << 24, CORE_CFP_MASK_PORT(5)); + else + core_writel(priv, udf_bits << 24, CORE_CFP_DATA_PORT(5)); + /* C-Tag [31:24] * UDF_n_B8 [23:8] (port) * UDF_n_B7 (upper) [7:0] (addr[15:8]) @@ -704,20 +715,13 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, reg = layout->udfs[slice_num].mask_value | udf_upper_bits(num_udf); core_writel(priv, reg, CORE_CFP_MASK_PORT(6)); - /* UDF_Valid[7:0] [31:24] - * S-Tag [23:8] - * C-Tag [7:0] - */ - core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_DATA_PORT(5)); - - /* Mask all but valid UDFs */ - core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_MASK_PORT(5)); - /* Slice the IPv6 source address and port */ bcm_sf2_cfp_slice_ipv6(priv, ipv6.key->src.in6_u.u6_addr32, - ports.key->src, slice_num, false); + ports.key->src, slice_num, + udf_lower_bits(num_udf), false); bcm_sf2_cfp_slice_ipv6(priv, ipv6.mask->src.in6_u.u6_addr32, - ports.mask->src, SLICE_NUM_MASK, true); + ports.mask->src, SLICE_NUM_MASK, + udf_lower_bits(num_udf), true); /* Insert into TCAM now because we need to insert a second rule */ bcm_sf2_cfp_rule_addr_set(priv, rule_index[0]); @@ -768,16 +772,12 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, udf_lower_bits(num_udf) << 8; core_writel(priv, reg, CORE_CFP_MASK_PORT(6)); - /* Don't care */ - core_writel(priv, 0, CORE_CFP_DATA_PORT(5)); - - /* Mask all */ - core_writel(priv, 0, CORE_CFP_MASK_PORT(5)); - bcm_sf2_cfp_slice_ipv6(priv, ipv6.key->dst.in6_u.u6_addr32, - ports.key->dst, slice_num, false); + ports.key->dst, slice_num, + 0, false); bcm_sf2_cfp_slice_ipv6(priv, ipv6.mask->dst.in6_u.u6_addr32, - ports.key->dst, SLICE_NUM_MASK, true); + ports.key->dst, SLICE_NUM_MASK, + 0, true); /* Insert into TCAM now */ bcm_sf2_cfp_rule_addr_set(priv, rule_index[1]); From patchwork Mon Mar 30 21:38:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264354 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=OVbYbMmU; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7b39s6z9sPF for ; Tue, 31 Mar 2020 08:39:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729406AbgC3VjW (ORCPT ); Mon, 30 Mar 2020 17:39:22 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:42693 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729129AbgC3VjU (ORCPT ); Mon, 30 Mar 2020 17:39:20 -0400 Received: by mail-wr1-f65.google.com with SMTP id h15so23473948wrx.9 for ; Mon, 30 Mar 2020 14:39:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Tnxi8udtjZOHkoTyT8NFuYHW6nmYNu3gQRUZG88+tNI=; b=OVbYbMmUYIHFklHhjA8GgDdouDawzA4+2MOEBI43O3WfIuSthL2xP58EE7VjuwSZz8 Ly6VuzqqNCpf5C9PkDHA7zZ/g9cBDlErUoXl0jsVJCrhcDN8qyNmSPz+BVGll+Z8AGmB thzcQJHWIuINiOxmdpRjYES7CnkJRKp1ae9nmMGEoYWCHEFbKQexeyWmOQEpAv08Y7NT ZWTEhXvct0quzP72SdcBkwnPMRui3o0EO4yJQa0YsTPFMbB90C361WVdli2nmVZEWPN8 Kxi0dPc7FiFlG/oKhnUmRVsuA/af7AN07dCdlMzgKDDqaUqZrc0MNRWbx4dbdbKevopq dLcw== 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=Tnxi8udtjZOHkoTyT8NFuYHW6nmYNu3gQRUZG88+tNI=; b=AC1h93r1Qd6BlBDsvNxSp+Svnt4nWAWph99tfLJr3EAfjdNDEUWxN1DmnNB1NLmePI G6pJ7xxLGdNMTnSk258XXtdVYXtISW6zECCCpVAV/iKghFpia/JikDA2l6+jhDtkgtId Wmx1bPUtRPfJrppSRahubtU5eimUbkzdwmqE9QPfJ+6orlqmvw0BoPH5x1fySqAOTFea ZB9c5hYu5wY1YNlKnnztc2LoBvMz50zyGr0WWWkt5fx/JM4AaZDjPzRbHHg/lyr4/tWE XGGlrS1qClz6UUUUC3gN1BWd8ZWfGIBUy0LO9nIZoTQoNmebkJW8ymQHHhr3JXsoVshw h4aw== X-Gm-Message-State: ANhLgQ3pDFnoFqW4S3DzMMafMImxKLAXRJnL/P2kN192o3pv+cS1/XCg K1xuF2R/f1E2YVaagkZcC/eJWDND X-Google-Smtp-Source: ADFU+vsMQiyYCe+51RhcglSexY+U0hu5wp71ICw8Pz5eRBeLRNztYHHmsiV48KLA2vE/2jzAkQW3aQ== X-Received: by 2002:a05:6000:1205:: with SMTP id e5mr17977334wrx.73.1585604357797; Mon, 30 Mar 2020 14:39:17 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:17 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 8/9] net: dsa: bcm_sf2: Add support for matching VLAN TCI Date: Mon, 30 Mar 2020 14:38:53 -0700 Message-Id: <20200330213854.4856-9-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Update relevant code paths to support the programming and matching of VLAN TCI, this is the only member of the ethtool_flow_ext that we can match, the switch does not permit matching the VLAN Ethernet Type field. Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 53 +++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index a6cc076f1a67..7b10a9f31538 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -261,6 +261,7 @@ static int bcm_sf2_cfp_act_pol_set(struct bcm_sf2_priv *priv, static void bcm_sf2_cfp_slice_ipv4(struct bcm_sf2_priv *priv, struct flow_dissector_key_ipv4_addrs *addrs, struct flow_dissector_key_ports *ports, + const __be16 vlan_tci, unsigned int slice_num, u8 num_udf, bool mask) { @@ -270,16 +271,17 @@ static void bcm_sf2_cfp_slice_ipv4(struct bcm_sf2_priv *priv, * S-Tag [23:8] * C-Tag [7:0] */ + reg = udf_lower_bits(num_udf) << 24 | be16_to_cpu(vlan_tci) >> 8; if (mask) - core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_MASK_PORT(5)); + core_writel(priv, reg, CORE_CFP_MASK_PORT(5)); else - core_writel(priv, udf_lower_bits(num_udf) << 24, CORE_CFP_DATA_PORT(5)); + core_writel(priv, reg, CORE_CFP_DATA_PORT(5)); /* C-Tag [31:24] * UDF_n_A8 [23:8] * UDF_n_A7 [7:0] */ - reg = 0; + reg = (u32)(be16_to_cpu(vlan_tci) & 0xff) << 24; if (mask) offset = CORE_CFP_MASK_PORT(4); else @@ -345,6 +347,7 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, struct ethtool_rx_flow_spec *fs) { struct ethtool_rx_flow_spec_input input = {}; + __be16 vlan_tci = 0 , vlan_m_tci = 0xffff; const struct cfp_udf_layout *layout; unsigned int slice_num, rule_index; struct ethtool_rx_flow_rule *flow; @@ -369,6 +372,12 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, ip_frag = !!(be32_to_cpu(fs->h_ext.data[0]) & 1); + /* Extract VLAN TCI */ + if (fs->flow_type & FLOW_EXT) { + vlan_tci = fs->h_ext.vlan_tci; + vlan_m_tci = fs->m_ext.vlan_tci; + } + /* Locate the first rule available */ if (fs->location == RX_CLS_LOC_ANY) rule_index = find_first_zero_bit(priv->cfp.used, @@ -431,10 +440,10 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, udf_upper_bits(num_udf), CORE_CFP_MASK_PORT(6)); /* Program the match and the mask */ - bcm_sf2_cfp_slice_ipv4(priv, ipv4.key, ports.key, slice_num, - num_udf, false); - bcm_sf2_cfp_slice_ipv4(priv, ipv4.mask, ports.mask, SLICE_NUM_MASK, - num_udf, true); + bcm_sf2_cfp_slice_ipv4(priv, ipv4.key, ports.key, vlan_tci, + slice_num, num_udf, false); + bcm_sf2_cfp_slice_ipv4(priv, ipv4.mask, ports.mask, vlan_m_tci, + SLICE_NUM_MASK, num_udf, true); /* Insert into TCAM now */ bcm_sf2_cfp_rule_addr_set(priv, rule_index); @@ -470,6 +479,7 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, static void bcm_sf2_cfp_slice_ipv6(struct bcm_sf2_priv *priv, const __be32 *ip6_addr, const __be16 port, + const __be16 vlan_tci, unsigned int slice_num, u32 udf_bits, bool mask) { @@ -479,10 +489,11 @@ static void bcm_sf2_cfp_slice_ipv6(struct bcm_sf2_priv *priv, * S-Tag [23:8] * C-Tag [7:0] */ + reg = udf_bits << 24 | be16_to_cpu(vlan_tci) >> 8; if (mask) - core_writel(priv, udf_bits << 24, CORE_CFP_MASK_PORT(5)); + core_writel(priv, reg, CORE_CFP_MASK_PORT(5)); else - core_writel(priv, udf_bits << 24, CORE_CFP_DATA_PORT(5)); + core_writel(priv, reg, CORE_CFP_DATA_PORT(5)); /* C-Tag [31:24] * UDF_n_B8 [23:8] (port) @@ -490,6 +501,7 @@ static void bcm_sf2_cfp_slice_ipv6(struct bcm_sf2_priv *priv, */ reg = be32_to_cpu(ip6_addr[3]); val = (u32)be16_to_cpu(port) << 8 | ((reg >> 8) & 0xff); + val |= (u32)(be16_to_cpu(vlan_tci) & 0xff) << 24; if (mask) offset = CORE_CFP_MASK_PORT(4); else @@ -598,6 +610,11 @@ static int bcm_sf2_cfp_rule_cmp(struct bcm_sf2_priv *priv, int port, ret = memcmp(&rule->fs.h_u, &fs->h_u, fs_size); ret |= memcmp(&rule->fs.m_u, &fs->m_u, fs_size); + /* Compare VLAN TCI values as well */ + if (rule->fs.flow_type & FLOW_EXT) { + ret |= rule->fs.h_ext.vlan_tci != fs->h_ext.vlan_tci; + ret |= rule->fs.m_ext.vlan_tci != fs->m_ext.vlan_tci; + } if (ret == 0) break; } @@ -611,6 +628,7 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, struct ethtool_rx_flow_spec *fs) { struct ethtool_rx_flow_spec_input input = {}; + __be16 vlan_tci = 0, vlan_m_tci = 0xffff; unsigned int slice_num, rule_index[2]; const struct cfp_udf_layout *layout; struct ethtool_rx_flow_rule *flow; @@ -634,6 +652,12 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, ip_frag = !!(be32_to_cpu(fs->h_ext.data[0]) & 1); + /* Extract VLAN TCI */ + if (fs->flow_type & FLOW_EXT) { + vlan_tci = fs->h_ext.vlan_tci; + vlan_m_tci = fs->m_ext.vlan_tci; + } + layout = &udf_tcpip6_layout; slice_num = bcm_sf2_get_slice_number(layout, 0); if (slice_num == UDF_NUM_SLICES) @@ -717,10 +741,10 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, /* Slice the IPv6 source address and port */ bcm_sf2_cfp_slice_ipv6(priv, ipv6.key->src.in6_u.u6_addr32, - ports.key->src, slice_num, + ports.key->src, vlan_tci, slice_num, udf_lower_bits(num_udf), false); bcm_sf2_cfp_slice_ipv6(priv, ipv6.mask->src.in6_u.u6_addr32, - ports.mask->src, SLICE_NUM_MASK, + ports.mask->src, vlan_m_tci, SLICE_NUM_MASK, udf_lower_bits(num_udf), true); /* Insert into TCAM now because we need to insert a second rule */ @@ -773,10 +797,10 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, core_writel(priv, reg, CORE_CFP_MASK_PORT(6)); bcm_sf2_cfp_slice_ipv6(priv, ipv6.key->dst.in6_u.u6_addr32, - ports.key->dst, slice_num, + ports.key->dst, 0, slice_num, 0, false); bcm_sf2_cfp_slice_ipv6(priv, ipv6.mask->dst.in6_u.u6_addr32, - ports.key->dst, SLICE_NUM_MASK, + ports.key->dst, 0, SLICE_NUM_MASK, 0, true); /* Insert into TCAM now */ @@ -878,8 +902,7 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port, int ret = -EINVAL; /* Check for unsupported extensions */ - if ((fs->flow_type & FLOW_EXT) || - (fs->flow_type & FLOW_MAC_EXT) || + if ((fs->flow_type & FLOW_MAC_EXT) || fs->m_ext.data[1]) return -EINVAL; From patchwork Mon Mar 30 21:38:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264355 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 (no SPF record) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=UD7TUcqM; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rm7d4zbKz9sPF for ; Tue, 31 Mar 2020 08:39:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729416AbgC3VjY (ORCPT ); Mon, 30 Mar 2020 17:39:24 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:39047 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728864AbgC3VjX (ORCPT ); Mon, 30 Mar 2020 17:39:23 -0400 Received: by mail-wr1-f65.google.com with SMTP id p10so23514473wrt.6 for ; Mon, 30 Mar 2020 14:39:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QEGvlFHuJ++PMVP/Qb8PdtLYj0yJN3KYNQKnA8iFVT8=; b=UD7TUcqMYVqpISE7dKh2J2yC3BesD1noY41M4uk3hY/gMEsn49iZu/Ot+01oV5wmzH s0UmTmjbm+Ktoqmv/anGO5Zo7J67786G6fE2zksMVx5Skw5MD7WFOcwlKE74ywxi/hwv kGFojDKdZJgwCBmmmL3BOxAEi5Tjw35EeNV9Yr4w57gbSJffs7gCSpCwMd9cN3mullwj nMzZUv2uw8IjAegjSEybtTKiBNTKQF1JWweAEjGCxK8vo6/BwuKJTJQcg/oNzN3R8XgP 0m1kPmlg80kP7K9ODQcSBLIF5GTSzEDmlYFhRgTDTvig8K2nCPOKLlSEBYWo+HJsW6hw uApA== 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=QEGvlFHuJ++PMVP/Qb8PdtLYj0yJN3KYNQKnA8iFVT8=; b=m3gaTN+fjPisZBy0V6O35Sdd32unyr+WWNFlDIMzmH5M7Ybd2tyVULHoU8VUws1+le 4IGq3vbn9pOZbwQYhCnKcpoiW2vaUQRUMGsYPkOgNb9uNjmk5R+vH/N0V6+4cRFycX+k 4PRyOe1L4OluBQWhZP3I9a9+k/5pP0ryh8OdkahPUfihynof0tmiE96yoBfbgB3eDXI/ Q0vRYxuYuDu5Aw1DcLZu8D4/RRPSKhpJVhSSBEv2S1F6aNRxrybdaRDRWjj3vjq1Isl1 Fi97V4rNkI2fUKgyDC7SzGcwa+fbqoC310J8FLnP48o5K7okkCxKsT/h5E5x5H9+5aN2 YVHA== X-Gm-Message-State: ANhLgQ3GvS0N3HB65RaXCzS2wCKQrZINvxF7v7ird91xec6yyvyqUSMt PF/bW67/VaEVqVuxliejvmZMwSan X-Google-Smtp-Source: ADFU+vt7wRFhng2vaJ+yoWsO4ogeQ1MODchVgir9qBx8N59EBBZnsMlLz8hHVssk/9rFULqjASANIA== X-Received: by 2002:a5d:4611:: with SMTP id t17mr17737091wrq.16.1585604360622; Mon, 30 Mar 2020 14:39:20 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r17sm23600853wrx.46.2020.03.30.14.39.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 14:39:19 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, kuba@kernel.org, dan.carpenter@oracle.com Subject: [PATCH net-next v2 9/9] net: dsa: bcm_sf2: Support specifying VLAN tag egress rule Date: Mon, 30 Mar 2020 14:38:54 -0700 Message-Id: <20200330213854.4856-10-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330213854.4856-1-f.fainelli@gmail.com> References: <20200330213854.4856-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The port to which the ASP is connected on 7278 is not capable of processing VLAN tags as part of the Ethernet frame, so allow an user to configure the egress VLAN policy they want to see applied by purposing the h_ext.data[1] field. Bit 0 is used to indicate that 0=tagged, 1=untagged. Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 40 +++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index 7b10a9f31538..f707edc641cf 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include "bcm_sf2.h" #include "bcm_sf2_regs.h" @@ -847,7 +849,9 @@ static int bcm_sf2_cfp_rule_insert(struct dsa_switch *ds, int port, struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); s8 cpu_port = dsa_to_port(ds, port)->cpu_dp->index; __u64 ring_cookie = fs->ring_cookie; + struct switchdev_obj_port_vlan vlan; unsigned int queue_num, port_num; + u16 vid; int ret; /* This rule is a Wake-on-LAN filter and we must specifically @@ -867,6 +871,34 @@ static int bcm_sf2_cfp_rule_insert(struct dsa_switch *ds, int port, dsa_is_cpu_port(ds, port_num)) || port_num >= priv->hw_params.num_ports) return -EINVAL; + + /* If the rule is matching a particular VLAN, make sure that we honor + * the matching and have it tagged or untagged on the destination port, + * we do this on egress with a VLAN entry. The egress tagging attribute + * is expected to be provided in h_ext.data[1] bit 0. A 1 means untagged, + * a 0 means tagged. + */ + if (fs->flow_type & FLOW_EXT) { + /* We cannot support matching multiple VLAN IDs yet */ + if ((be16_to_cpu(fs->m_ext.vlan_tci) & VLAN_VID_MASK) != + VLAN_VID_MASK) + return -EINVAL; + + vid = be16_to_cpu(fs->h_ext.vlan_tci) & VLAN_VID_MASK; + vlan.vid_begin = vid; + vlan.vid_end = vid; + if (cpu_to_be32(fs->h_ext.data[1]) & 1) + vlan.flags = BRIDGE_VLAN_INFO_UNTAGGED; + else + vlan.flags = 0; + + ret = ds->ops->port_vlan_prepare(ds, port_num, &vlan); + if (ret) + return ret; + + ds->ops->port_vlan_add(ds, port_num, &vlan); + } + /* * We have a small oddity where Port 6 just does not have a * valid bit here (so we substract by one). @@ -902,14 +934,18 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port, int ret = -EINVAL; /* Check for unsupported extensions */ - if ((fs->flow_type & FLOW_MAC_EXT) || - fs->m_ext.data[1]) + if (fs->flow_type & FLOW_MAC_EXT) return -EINVAL; if (fs->location != RX_CLS_LOC_ANY && fs->location > bcm_sf2_cfp_rule_size(priv)) return -EINVAL; + if ((fs->flow_type & FLOW_EXT) && + !(ds->ops->port_vlan_prepare || ds->ops->port_vlan_add || + ds->ops->port_vlan_del)) + return -EOPNOTSUPP; + if (fs->location != RX_CLS_LOC_ANY && test_bit(fs->location, priv->cfp.used)) return -EBUSY;