From patchwork Mon Mar 30 20:40:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264297 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=dwNCqbal; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkqy0vD7z9sRR for ; Tue, 31 Mar 2020 07:40:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729223AbgC3Ukp (ORCPT ); Mon, 30 Mar 2020 16:40:45 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:33562 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728047AbgC3Uko (ORCPT ); Mon, 30 Mar 2020 16:40:44 -0400 Received: by mail-wr1-f66.google.com with SMTP id a25so23391852wrd.0 for ; Mon, 30 Mar 2020 13:40:43 -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=dwNCqbalJH4kC4ncw3fAc73PkjLK8sPpsJpIU9oogobL9+YoTB09aZ8udF2CoGz5qz qmcDYFfu7uvWC5BKx0Foz/+1F5vPL8ath5R9K034NFR5ys7TBdpMDuFWoD4xjpbtolYe KM6i6ADLvKvJ8coxsTCyiFjPdZ1Kfipnu9vIqZcGtZpf79WHj0vxigWXTDgXokjh1k7R GWWJV4lBKo1GgduN3r3iZkwJuwGhnapaDi81Xi+bpaAcKTU/XEyLXWIeDgOHBhXa7Rf6 e6x3wBRCKI5me6XbcNDWbBf/K33EMgxLaLixaZCzSsnK72AHC0GWu4gPpdY+N2/AZyQ3 oWcQ== 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=Mjcw488qQWCLwv7408M/jQmHCVZoDFhJaPCNltKI2/H6U3fPgNWxfkYxDAgHCnTe0/ Ihpa12HkSZnAEWNZ0/Ob/TGJUgs9EUj5wkVabI1+3k9vtOmG26suFcmqElMTFKNgZFNu NruVLwEyUJsan9z5Dwg4f0Ui4spsiktCESLYY6uhWsukIeYHdGJXwqtIKv2ruKP9rXOA KrkCiMT0KhoENzunV1tBbvB14iSZp+2WnDJJjCabHnaqym2/trOqKHAN399tdfSUqu5f tOe2qDhsm04JM3Y5IPIlfRTs6JxZzKHTVQWAwyj6xGh2H00hMS76crFHzG6vhuJHlHFd ozlA== X-Gm-Message-State: ANhLgQ1catg0YhflQCwWWRpzZYVYHdrHMQnFyY8rYvRu3Mjv8lpN/3De 7jF/dx8grjDuy04kJwffsvSYFoI3 X-Google-Smtp-Source: ADFU+vslbKfBv8aC00VjuwhNweinHXSULqOFm93NJhvvyMO2NzEaa7GOEJetS8EU+y8cEyMwCwSffA== X-Received: by 2002:a5d:4081:: with SMTP id o1mr17341500wrp.114.1585600842532; Mon, 30 Mar 2020 13:40:42 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:42 -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 1/9] net: dsa: bcm_sf2: Fix overflow checks Date: Mon, 30 Mar 2020 13:40:24 -0700 Message-Id: <20200330204032.26313-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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 20:40:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264298 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=U0Yxdpos; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkr108crz9sRR for ; Tue, 31 Mar 2020 07:40:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729258AbgC3Uks (ORCPT ); Mon, 30 Mar 2020 16:40:48 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36825 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728047AbgC3Ukr (ORCPT ); Mon, 30 Mar 2020 16:40:47 -0400 Received: by mail-wm1-f65.google.com with SMTP id g62so322463wme.1 for ; Mon, 30 Mar 2020 13:40:45 -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=U0Yxdpos0iSRNJLHt+4crgex7qmMuBuOV9IGuugJrlXEWr1WW2OND9nH46veyawvgq Fb3ljVH8saxAPIATTlayEHJ2l9y215pPJOBFZ6DkVNr3OcnfpbUAHVSIfmaTjrGugISK qltenYX5AKt1aYWgHBewedLqiYUFoYY781cn6rAYL5a16XQt7RL4PwH30Sv8pu9OLgl5 8KVSwVtCMSNKzYsMcVFv/ZOQPFxwGE9LuakvZxCBLVjh3n0oqNrqIcoOQ/8CiSLhStMB 8QxViOy+pa6icy/rYoYlRq0ktezKQsG1ada7bza9DxOnvUBXTu0EF7oOoqsQcUIS99jv Uhjw== 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=WWAnKkapJGB6WXyTety7MxCoEDVnjzc8rOxf0RivrShI/SoGhQIuC8kwPqdkZPuACM 6ln5saFLaG53rKDHrPdji7/kAn7J8m4Ky7GgBvnhSLLtHIBKHntTLPIm95CBJEJT9mPp B3VNuzEBLATNpamQ4ecDOnjDTZUes07pxBwQxXeSkzlvu/dKlwSDE19LrAo2xlcJeZ3C gzpXh9n/bA8QFovRkzIC+trDQu1yPMO/h13dmzNSTZn3+1fCH5/bEu8C7u5iUSbiFQtF oRP8vvxao5CpCK//DWlly4XLf9KMc+ELwKQiu+wjISBxbq5FiheFzapJQ6K0Nvpds2dl X8jg== X-Gm-Message-State: ANhLgQ3nnAnV8W3DcAQCb/8rHNDfGnwj9z7IR2Qc7XiU/9M/K68R9h4F YC4vdpXBMM6tV45Ao0RaAIRpCeiW X-Google-Smtp-Source: ADFU+vtrrVGiFoRhxkxQX2Sa67KF0gubkUZVvVNJAPJgxTnSA3uJShMhIBqzCBP3MCL40jsyE4O/DQ== X-Received: by 2002:a7b:c004:: with SMTP id c4mr1068627wmb.108.1585600844727; Mon, 30 Mar 2020 13:40:44 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:44 -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 2/9] net: dsa: b53: Restore VLAN entries upon (re)configuration Date: Mon, 30 Mar 2020 13:40:25 -0700 Message-Id: <20200330204032.26313-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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 20:40:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264299 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=TvWAgqjf; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkr34hpGz9sRR for ; Tue, 31 Mar 2020 07:40:51 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729273AbgC3Uku (ORCPT ); Mon, 30 Mar 2020 16:40:50 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:35181 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729239AbgC3Ukt (ORCPT ); Mon, 30 Mar 2020 16:40:49 -0400 Received: by mail-wm1-f68.google.com with SMTP id i19so328053wmb.0 for ; Mon, 30 Mar 2020 13:40:48 -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=qT+47dcAyE4FeqNRbbRmYfLu9VafKPGS/umwRMdzQd8=; b=TvWAgqjfGC9/SFkLRXQL/B+1MEeCyMUVQc89SZc6fjJ6VSXZq6ZAJv6FkCAF9xMMMe x1MkTTea/WI1a2pEc+qWdgMz0JJoDvvdeqPHUg6oe/F6EswW+oiCCrjk55XfCH0nHP77 BsKmVnsbx7Tat/n0VHAi5m9g/8vSCrLW4Gtzbcj2Z4BTywS3TF64wcs1r2nzmJ6rVXn6 9HZTUulRpfUQM3Bpkp4vBIhuF5vczOleldSaP/jKK6Neal208y4z0CMuHHpA4ZWPXlc2 gvE4lfhRLQV4J/hF+7pknsSIP+kY9a5dbf0xcaw8p/fIyFL86yvH8qSgXPK0aJ5Isaf5 PCeg== 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=qT+47dcAyE4FeqNRbbRmYfLu9VafKPGS/umwRMdzQd8=; b=CygDkEKsOaNADh2ko6z0saHr1TzOTZrpP3nS8WArO9bXKGcJSaek2rJE4JMKB3ib2D 4PsMBgYLCsErFrf9VL6rn7C/u2t4j51tdT/vt/4VZTnpfQw4vnJ5+OPf9XO/1X6Opbx5 hUezAXHM7qSKYOOcsst8btFIXjArmC4ZRQoAxhOtR66/FAbuziaKZ2ORiahd7V97HRwF n8lTKzdV4DoPTckdcyvqtTZIRO+GWl1zKM1azXlLznTgx0YHY58vlhZcmhiK33Rebb/X E/xFT4bRt+hB0ibNAR4W53nAt/Ps3FGO7aPO7rh5ab2SI5RoBPrqaj0XWudaK/pQjy08 0XYw== X-Gm-Message-State: ANhLgQ3uRLzdIQQxf+oC+Fkiw2okkp1d87jkdvcnB7ex27lmEu+XU2fh PyGCW6wmTwua+NZuNR+oL3+cXdYq X-Google-Smtp-Source: ADFU+vt/lpWUjJ37PCWzoDzdoMmhaELQcKkqpV9FRo2WlDvfrK+zqAuEMlimPv5Ufgo+kwa+8NgIJA== X-Received: by 2002:a7b:c1da:: with SMTP id a26mr1064524wmj.89.1585600846981; Mon, 30 Mar 2020 13:40:46 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:46 -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 3/9] net: dsa: b53: Prevent tagged VLAN on port 7 for 7278 Date: Mon, 30 Mar 2020 13:40:26 -0700 Message-Id: <20200330204032.26313-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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, 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 20:40:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264300 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=jLWl3OQ2; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkr63vr7z9sRR for ; Tue, 31 Mar 2020 07:40:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729284AbgC3Ukx (ORCPT ); Mon, 30 Mar 2020 16:40:53 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:55736 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728494AbgC3Ukv (ORCPT ); Mon, 30 Mar 2020 16:40:51 -0400 Received: by mail-wm1-f65.google.com with SMTP id r16so269253wmg.5 for ; Mon, 30 Mar 2020 13:40:50 -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=jLWl3OQ2xJ6UZIPQKsIXcNBti+Uxd3OvQ6mMriWgs5l7d4T+j1RKoq+8KJrDpmA8Q3 sStRwPRDDcQlXh4uL73/vVawiO8ZuiqNWizVv7ECzkrjWQOMmi29X2kqA8Mdm+QY9nwn Q5f+o2YWIMXGwjW+lhdcj5UrCnK5eYeYBNPvKGYryZGaDB2c7ZCCZiXxn3WcQafc7+if lt0dBwGmh/v497kqUThpN0V3q66O412MG7p/kz1LAvp2VqXTsqz/ZosB+nt5YqseT/lO pAZLZk0UaQxV4CbHTj8q3MvhelnUJVZj6O7ZWz0fL49uFlc/38Ct2ggDwnEPqf00KWs/ /LuA== 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=N8Sz9HtkHd1Fo1Mf49zHyyY/jYO0Zv+EAQj+R9QD54HXnLt/ZBUAjAL73mmczvh056 L/HS+Y3TBmCtJ2hdwr/knhSBPFN5V33pILnRJTQ/Cg5UoPF/SRPs0Ern9mzhTCgLOjC5 ZJ0MrkvfPakLH2pHgBhn+QYu0n79SpAoADZe6XhEP1LQtNqaJYawIpdZeVzXKxufMPBH MWWJuzwvBgWNHlsRM3ma4rmyzNnAmSBwM34Tnl1b3dW95saj13R6JZ0NqeXGMRDQzZn2 8Y1jK2jc3n90PptaqM3O0CE+dY1T4w6vJJZpSapXDkRgYehKbbPdU8NeRUTelfh1GIBx Ij6g== X-Gm-Message-State: ANhLgQ2+06wjNTEd+ZSqm59wsR8Br3qFDqsd2QWpJnZFlbz4SDKSonmr PO5Y9LdgOdA8G+jpF1nt4G84wGfO X-Google-Smtp-Source: ADFU+vs5QK78xGFx05bMsLdo1WCyAWcj5HBSr/DvJ9D42hCQ4Cn8fbCQ9YdtAjCz5MmfzcjKFlPnHQ== X-Received: by 2002:a1c:56d5:: with SMTP id k204mr1131432wmb.13.1585600849172; Mon, 30 Mar 2020 13:40:49 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:48 -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 4/9] net: dsa: b53: Deny enslaving port 7 for 7278 into a bridge Date: Mon, 30 Mar 2020 13:40:27 -0700 Message-Id: <20200330204032.26313-5-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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 20:40:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264301 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=b4/AEemU; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkr81VrXz9sRf for ; Tue, 31 Mar 2020 07:40:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729298AbgC3Ukz (ORCPT ); Mon, 30 Mar 2020 16:40:55 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:34059 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728967AbgC3Ukx (ORCPT ); Mon, 30 Mar 2020 16:40:53 -0400 Received: by mail-wr1-f65.google.com with SMTP id 65so23366243wrl.1 for ; Mon, 30 Mar 2020 13:40:52 -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=giEMc61bicslVarNKIkFWDcPwaj0NQvQj2GlOUKRs20=; b=b4/AEemUMctrQx84/dWCGocrLI/UM38ReeworbUSmRSEoCw8JCK0w41MjTuCl6L6+3 FhBCp4GRTdIsQl9CyGnlrWJ0tgo6EOzB5E+M772nGf74AxzB7IjkozrEWV+dakcWYRMi jCoheIUKEi51FX90tKWiMLoxpBWhHSxQHJyIPTdF43Hb2lBARnLFL3sqDWthOQRwMvvi YKzVSsy9j3rvi3T0qvLWMBjvyrTsCZj2+KOO4o3R77XrDQi02GwerRRcDMd4v48+I7JC XSmoNAnBCtIuUAP5i426z7bDYYGd4sHwKyMDvdHfwx7gnCQsM8qJE8ZBVgnEw1XPL+98 QCWQ== 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=giEMc61bicslVarNKIkFWDcPwaj0NQvQj2GlOUKRs20=; b=dspYoQD/h7JQ3c8EkMsVKlyClDWoYoB4jY4YqwNiO4S0b8V41vHvsSgZwytV1mgDaA Cijwa0+0izvI55T/gR6sbDmALCN6IF5P+xTgYG8wg1DIPjTo5O3QXjO8eyJVvandiWnV 7+xMIsEp7QDhl/Lmsw1Vc6ZkiDNssucdniR2vV8iuh/jrHgCg27x/MmTZFCe3hpEsgne 1/6oNTfp/HGZ6Oln/+ignJlFyeJO/e6SdvLrCgBk5ppDMxrWlaOdnntMr6K/BnkEJh4b axo4uZVPVy2YdAfi5ZFYPnUF8rYTU/5ywZMgSkMc7B/z+brrkPrsmWYqUrC4PPJhy8qR R6GA== X-Gm-Message-State: ANhLgQ20vK+6YZVMCc8UHtii5Izu2jChIrk/Qjh5//iolnUafCSmW1ur 0994iETHYn62O3ERX6FYLp96ZBqd X-Google-Smtp-Source: ADFU+vvXdCV28azhMdoxOgOA9bLPL4Pvrr8wbaMebRhLrJmm1Pxj0MG8rCWLT9cPdGIjSAFW0drzIw== X-Received: by 2002:a5d:53c8:: with SMTP id a8mr16218858wrw.242.1585600851746; Mon, 30 Mar 2020 13:40:51 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:51 -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 5/9] net: dsa: bcm_sf2: Disable learning for ASP port Date: Mon, 30 Mar 2020 13:40:28 -0700 Message-Id: <20200330204032.26313-6-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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 just received 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 20:40:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264302 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=aO0qjK0q; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkrB0Dxkz9sRR for ; Tue, 31 Mar 2020 07:40:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729311AbgC3Uk5 (ORCPT ); Mon, 30 Mar 2020 16:40:57 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:46801 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729285AbgC3Ukz (ORCPT ); Mon, 30 Mar 2020 16:40:55 -0400 Received: by mail-wr1-f68.google.com with SMTP id j17so23260415wru.13 for ; Mon, 30 Mar 2020 13:40:54 -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=dDCxEQUMx7omsUPWXKxd3IbegM/d//gGYNCpsBduu7o=; b=aO0qjK0qVrhBTUXjPXLfO3/Znc5QD+VufQU9P3QpohSmsOSwFQsXp7yLOLmiR/osRt I56vVtcHak/yTkxhBEzcbMSIm6/EOY/rMAqdd8sYHOYimQ8skCUsqiBYrCtNYRusFvhZ YS2OQHEtvWw8lr5YwbFdhda6gi2B8Fv58DUQoAyqoT4N6c/1ZYytkNJRtgRSKAgxaPop AmigK+Z1Nn6CERFF1TaKmpr1qzok/mlT4rVYabepjtLmT+h/opcYluk9Z1yzSAhBg/8H cYQxg4AcqABTEUKuu0yO3U59A/4zvh3cwkmNRDJ68WYLVqaFdKSyoHFczk4H4RZLEUv9 nbPw== 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=dDCxEQUMx7omsUPWXKxd3IbegM/d//gGYNCpsBduu7o=; b=JKKrGS3vqUzO4YCYsp0NnrW11ujY2Tn7Z8fL9JOqoYOZTQz0O120lt2XzT9WXm2BCt P0IJSs+rVmnv52lrknqd2uTR6O57XiYV2bifoqIXkw3cnSF/wEC/9Sz36n1MJoCg/yC5 OW5k4MfgI8+E0l5H5Rg8KBdVjb3EyYI8K9H7oFvAUhM50fHYUnORUQ9C9erNEWBrGt1f cHvIm9wDNW80yBInKUaLqgIlcopwjw15VvAinllATVpp57dUENGQlWbLOceQx9+KXu9j +w3dh9bpIeti0cJtCZjd2jLxtSHwK7Q4UnbTFilGewvk1qJLouCDcbo0I4JyntUT6Xav 6RDw== X-Gm-Message-State: ANhLgQ2TqxUKmSWi3ADN0wc2l6E4KqfnFSrgb2udB4ymDe3owezhFjXV oCEL5BWXgyq3CK5xGr9V8+tZVWyk X-Google-Smtp-Source: ADFU+vvMYwn6ilqSfdgo2y9BcnF9dOCNJuW4yMRUKofSvcGDrsLUJpfibYOi62jOzFi2FC97lC/BYQ== X-Received: by 2002:a5d:630e:: with SMTP id i14mr16774157wru.260.1585600853971; Mon, 30 Mar 2020 13:40:53 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:53 -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 6/9] net: dsa: bcm_sf2: Check earlier for FLOW_EXT and FLOW_MAC_EXT Date: Mon, 30 Mar 2020 13:40:29 -0700 Message-Id: <20200330204032.26313-7-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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. Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index f9785027c096..6e26a9083d32 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -878,8 +878,8 @@ 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 || FLOW_MAC_EXT)) || + fs->m_ext.data[1]) return -EINVAL; if (fs->location != RX_CLS_LOC_ANY && From patchwork Mon Mar 30 20:40:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264303 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=h6pni5FO; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkrD2Dfrz9sRR for ; Tue, 31 Mar 2020 07:41:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729358AbgC3Uk7 (ORCPT ); Mon, 30 Mar 2020 16:40:59 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:41159 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729299AbgC3Uk6 (ORCPT ); Mon, 30 Mar 2020 16:40:58 -0400 Received: by mail-wr1-f65.google.com with SMTP id h9so23306490wrc.8 for ; Mon, 30 Mar 2020 13:40:57 -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=5fTzqD4esUnQM58E92fBf9owJkzz6PLEUVp+C+0vBss=; b=h6pni5FOQxGWRsJIEGwwwWnioMKlEPpUS57+00UivvQSTw2v/81CID5abc7Op2Lg++ yAG9Kg84EOJTUCRhXrD9sc6BRYnjZE8I8Nx3KMKgMcZGWVA+4vr0itVDjqUYxgzJdXr5 00j0wdWL9g4FXR+jMHkiyw4gM48GBMMB2e+bBd7iIhAipZCKUEJsPA7Mf253qsDVA5UC ph9kYCgwrFEhcLamydqXMSEIzdhaLdgMmw/5F/bgDyKTmmr3IcdYDZ8myC7k5twXTR7/ Gho/5qDeW4EogZN6lv3++OJM0iPlGuQ6HmV+Df1jQGPqpd92yk98mgiSFkdI3aAK3FrX 7xWQ== 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=5fTzqD4esUnQM58E92fBf9owJkzz6PLEUVp+C+0vBss=; b=aBHEpw9CwNI4mqPippcdufqjYgMX4s0EDBkJcilkyJtxy/6Ckn53jJEqk+i3d21P3D 5Ffrop3zzF4BKdxDJXCGdC7bcLrnsE06ylZw3K/F8kUamXlx1Qt4GLG5RoKjpZVJKGZb exFAUiY28tRsJvHjynQBENbvYAgquJW2GkvYzUzhei1EjYoZt3f0A4WV/GkOuYN3HGqZ n/h9Z1RM6zYKattxMLOncQKPVj+WF+UFkrnOaWzP0y+Akf4QZOL8VCzt4mIrAsYLYUzO GI9hIQyATwMVXcs6WWMgmB7pl1sIdPQeevEt3n1F8y2oQRQIyK++ziwS3TmU0kDmn51b vI5A== X-Gm-Message-State: ANhLgQ2ANgSWiUNR5FVBiL2uGHtBaepFKRstMCnOKv47XvkmEAkBUUrp LGYVEt7S+fa2rEhEfoS6JJ8jvoWK X-Google-Smtp-Source: ADFU+vuWDsWfHLwTxTJHpnp30QpLx4o2dwyqPUffrK5YarliB54XGGnD8uv0ypwgXjQVLua0A3lA7A== X-Received: by 2002:a5d:54cb:: with SMTP id x11mr17692679wrv.179.1585600856075; Mon, 30 Mar 2020 13:40:56 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:55 -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 7/9] net: dsa: bcm_sf2: Move writing of CFP_DATA(5) into slicing functions Date: Mon, 30 Mar 2020 13:40:30 -0700 Message-Id: <20200330204032.26313-8-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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 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 6e26a9083d32..8529f55a4d1f 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 20:40:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264304 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=VZIIAfkT; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkrH3RJdz9sRR for ; Tue, 31 Mar 2020 07:41:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729373AbgC3UlC (ORCPT ); Mon, 30 Mar 2020 16:41:02 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:45334 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729299AbgC3UlC (ORCPT ); Mon, 30 Mar 2020 16:41:02 -0400 Received: by mail-wr1-f66.google.com with SMTP id t7so23307094wrw.12 for ; Mon, 30 Mar 2020 13:40:59 -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=+tGIG6SQUzoIjfO4WQZB6NRMG2/a22HH7D+VatxbZMY=; b=VZIIAfkToEXAlJH29tZkatAj/G/ICOLghfx/cdhzlgC4yKQGpwGwav4cgQZhJFtd5H pNdpfIKHpyYRzSTkcxkoe/vBy0MeVYvIap6StxdDXVZyAvXptf0WNh35O4jTSDM/mD/g iC+3G3NRv2ofXwcaxaWtrnOZaTIqJmLTELfbTA4es9dux0+gtxH1GQ+sXvksKvdeJku+ cniyFSNCKZ0PuorrtmdmO7wmK68xvhimFGuK3oj18h0fpI/PAnuez/FnJ9CJboqaAq/z DSCsRz9z4DLNTHxi30/F07ImXDIw24Pzcb93wR8Iy0k3YoScIKaG4Job/JEpoLpxdhVh vrGQ== 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=+tGIG6SQUzoIjfO4WQZB6NRMG2/a22HH7D+VatxbZMY=; b=bAH40GPUaU5R+AJ+/+8WqXxM4z5MejyrkmJC+rUJosXjaJei/oAv3Qan7LfExQsH1M cm8U92n8Mpv1SQgvrfkK4kXr80Z3/kBysW+JdmE5Qmr40bPycvTlEY55Hy9JUOep7nd2 GYmtlUsED+wx6um4lFNB6b2+l44MR0ljICcfqPDDgPEXs3u9iQaSEsIcr4bLEs0NftJU 2aM44giIhoe7u1iYUiyfyXG77dbxXflfwwoZwqrwyr8WQWNLq8ZvWPDIAW9Zgsm9ID5R TB9aJjMI+KXsHteZmqFDTmQXegEIHXdU092nD2tk3QJYPN+wmH1pzwCxWR5wderwSSDE iFbA== X-Gm-Message-State: ANhLgQ356Cnxe7LK5QBh+b9wd454RB2+8YmCV0nTRMqUOH18FIvi4aUz azFcQ9u21B5WxrgyRmyYiFJJ0KPL X-Google-Smtp-Source: ADFU+vuIExxRnwnkFnsSVNz3JOxk9ORo1GM9EPqhN4mS7YMO8imXJNILZ+lbqC8z4JH2G7QEyruJiA== X-Received: by 2002:a5d:5687:: with SMTP id f7mr15973672wrv.425.1585600858286; Mon, 30 Mar 2020 13:40:58 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:57 -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 8/9] net: dsa: bcm_sf2: Add support for matching VLAN TCI Date: Mon, 30 Mar 2020 13:40:31 -0700 Message-Id: <20200330204032.26313-9-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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 | 52 +++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index 8529f55a4d1f..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,7 +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 || FLOW_MAC_EXT)) || + if ((fs->flow_type & FLOW_MAC_EXT) || fs->m_ext.data[1]) return -EINVAL; From patchwork Mon Mar 30 20:40:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1264306 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=W+ATFBA6; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48rkrQ0t0zz9sSJ for ; Tue, 31 Mar 2020 07:41:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729391AbgC3UlE (ORCPT ); Mon, 30 Mar 2020 16:41:04 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:34082 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729362AbgC3UlC (ORCPT ); Mon, 30 Mar 2020 16:41:02 -0400 Received: by mail-wr1-f68.google.com with SMTP id 65so23366657wrl.1 for ; Mon, 30 Mar 2020 13:41:01 -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=wqNx6CCTVOyAKkUzrI3jqaOAfiE0T7tCB7uuiyvXY3Q=; b=W+ATFBA6VA6Ta8p45mFZ6qkNIf2d0UYzZclHKR9/SA3bLurMbJK8K1dsU6Z6myPfy4 cC+/4mntbmmPAdhdYGCZMyZ4eNWvLYtpKFtVkJN01WHUDIXz/kQxqMkbLUAMHAbxbZa2 w006Lax3V2+XcpPY3xhABFeqf4COh08+eYt+24NuAvxXdt37vON7D1o8Z5WjW/8GCbwV K3ub/L0RxNuHC/2af68ElLDYnGLslDpiCs8ZOAiuPWXtD1zj+qRAymb4FIpWyNXtFZ+6 JpDApzG1/ZNY0WSxcKitb4Po/Ku+EJYpSWFIUbL09Wp//gTOACOTw+tRHwLXWQ8WHGuy Dr2Q== 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=wqNx6CCTVOyAKkUzrI3jqaOAfiE0T7tCB7uuiyvXY3Q=; b=oKPb/Rs28r1O7+Yv76PoH7CKBwy5xpYH0VGb6iqsBkf6gp8A+yqpeMKe72Ud4HrPl0 K73leFe/3qlciQaMWa4jTN9jIv0AbcgfZWbRscOSxoK6z2/Y9/TLfKjsKqyFDWXFnQPh m6x2V8UjkkE1wxcwyp8nzSqZ2nFfDLzt6yhDgpBJXnc5aPFKzTdGh7jNujeJ/zgtGJgb l4JLk78d0hIdugyAY33OfXbU7F8V0oUU5rYpdW1aZ9VVcHbZEao3BjnAXo1CiWDrh7KV tLY7LTl2ak06F2O4661VcZh0cg2hOTLEcGkk42tPq3qw1FtlT1eR9nycor1faCRVGMVk AYSg== X-Gm-Message-State: ANhLgQ3zp4Q/I5A+nwwjG0ERSzbybrVPxuhK3ByjJfv2o6Qxfg85Zqe8 VBE8/zk1PydHeIuXb1ckOFsNbiKR X-Google-Smtp-Source: ADFU+vv/8SY1k09MKrb2uHI3cJjx9dcx/kQEYst3zmM9AgJBigZmaEcKHjlDEfZ7c9MSbIvq3bdK9w== X-Received: by 2002:a5d:460f:: with SMTP id t15mr16787165wrq.413.1585600860401; Mon, 30 Mar 2020 13:41:00 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id o16sm23371109wrs.44.2020.03.30.13.40.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2020 13:40:59 -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 9/9] net: dsa: bcm_sf2: Support specifying VLAN tag egress rule Date: Mon, 30 Mar 2020 13:40:32 -0700 Message-Id: <20200330204032.26313-10-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200330204032.26313-1-f.fainelli@gmail.com> References: <20200330204032.26313-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=untagged, 1=tagged. 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..1a26232ecd47 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 tagged, + * a 0 means untagged. + */ + 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;