]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Mar 2021 10:49:08 +0000 (11:49 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Mar 2021 10:49:08 +0000 (11:49 +0100)
added patches:
net-dsa-b53-support-setting-learning-on-port.patch
net-dsa-tag_mtk-fix-802.1ad-vlan-egress.patch

queue-4.19/net-dsa-b53-support-setting-learning-on-port.patch [new file with mode: 0644]
queue-4.19/net-dsa-tag_mtk-fix-802.1ad-vlan-egress.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/net-dsa-b53-support-setting-learning-on-port.patch b/queue-4.19/net-dsa-b53-support-setting-learning-on-port.patch
new file mode 100644 (file)
index 0000000..0b1f5fa
--- /dev/null
@@ -0,0 +1,107 @@
+From f9b3827ee66cfcf297d0acd6ecf33653a5f297ef Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <f.fainelli@gmail.com>
+Date: Mon, 22 Feb 2021 14:30:10 -0800
+Subject: net: dsa: b53: Support setting learning on port
+
+From: Florian Fainelli <f.fainelli@gmail.com>
+
+commit f9b3827ee66cfcf297d0acd6ecf33653a5f297ef upstream.
+
+Add support for being able to set the learning attribute on port, and
+make sure that the standalone ports start up with learning disabled.
+
+We can remove the code in bcm_sf2 that configured the ports learning
+attribute because we want the standalone ports to have learning disabled
+by default and port 7 cannot be bridged, so its learning attribute will
+not change past its initial configuration.
+
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/dsa/b53/b53_common.c |   19 +++++++++++++++++++
+ drivers/net/dsa/b53/b53_regs.h   |    1 +
+ drivers/net/dsa/bcm_sf2.c        |    5 -----
+ 3 files changed, 20 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/dsa/b53/b53_common.c
++++ b/drivers/net/dsa/b53/b53_common.c
+@@ -507,12 +507,27 @@ void b53_imp_vlan_setup(struct dsa_switc
+ }
+ EXPORT_SYMBOL(b53_imp_vlan_setup);
++static void b53_port_set_learning(struct b53_device *dev, int port,
++                                bool learning)
++{
++      u16 reg;
++
++      b53_read16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, &reg);
++      if (learning)
++              reg &= ~BIT(port);
++      else
++              reg |= BIT(port);
++      b53_write16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, reg);
++}
++
+ int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy)
+ {
+       struct b53_device *dev = ds->priv;
+       unsigned int cpu_port = ds->ports[port].cpu_dp->index;
+       u16 pvlan;
++      b53_port_set_learning(dev, port, false);
++
+       /* Clear the Rx and Tx disable bits and set to no spanning tree */
+       b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), 0);
+@@ -620,6 +635,7 @@ static void b53_enable_cpu_port(struct b
+       b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), port_ctrl);
+       b53_brcm_hdr_setup(dev->ds, port);
++      b53_port_set_learning(dev, port, false);
+ }
+ static void b53_enable_mib(struct b53_device *dev)
+@@ -1517,6 +1533,8 @@ int b53_br_join(struct dsa_switch *ds, i
+       b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan);
+       dev->ports[port].vlan_ctl_mask = pvlan;
++      b53_port_set_learning(dev, port, true);
++
+       return 0;
+ }
+ EXPORT_SYMBOL(b53_br_join);
+@@ -1564,6 +1582,7 @@ void b53_br_leave(struct dsa_switch *ds,
+               vl->untag |= BIT(port) | BIT(cpu_port);
+               b53_set_vlan_entry(dev, pvid, vl);
+       }
++      b53_port_set_learning(dev, port, false);
+ }
+ EXPORT_SYMBOL(b53_br_leave);
+--- a/drivers/net/dsa/b53/b53_regs.h
++++ b/drivers/net/dsa/b53/b53_regs.h
+@@ -115,6 +115,7 @@
+ #define B53_UC_FLOOD_MASK             0x32
+ #define B53_MC_FLOOD_MASK             0x34
+ #define B53_IPMC_FLOOD_MASK           0x36
++#define B53_DIS_LEARNING              0x3c
+ /*
+  * Override Ports 0-7 State on devices with xMII interfaces (8 bit)
+--- a/drivers/net/dsa/bcm_sf2.c
++++ b/drivers/net/dsa/bcm_sf2.c
+@@ -173,11 +173,6 @@ static int bcm_sf2_port_setup(struct dsa
+       reg &= ~P_TXQ_PSM_VDD(port);
+       core_writel(priv, reg, CORE_MEM_PSM_VDD_CTRL);
+-      /* Enable learning */
+-      reg = core_readl(priv, CORE_DIS_LEARN);
+-      reg &= ~BIT(port);
+-      core_writel(priv, reg, CORE_DIS_LEARN);
+-
+       /* Enable Broadcom tags for that port if requested */
+       if (priv->brcm_tag_mask & BIT(port))
+               b53_brcm_hdr_setup(ds, port);
diff --git a/queue-4.19/net-dsa-tag_mtk-fix-802.1ad-vlan-egress.patch b/queue-4.19/net-dsa-tag_mtk-fix-802.1ad-vlan-egress.patch
new file mode 100644 (file)
index 0000000..6b774ec
--- /dev/null
@@ -0,0 +1,83 @@
+From 9200f515c41f4cbaeffd8fdd1d8b6373a18b1b67 Mon Sep 17 00:00:00 2001
+From: DENG Qingfang <dqfext@gmail.com>
+Date: Tue, 2 Mar 2021 00:01:59 +0800
+Subject: net: dsa: tag_mtk: fix 802.1ad VLAN egress
+
+From: DENG Qingfang <dqfext@gmail.com>
+
+commit 9200f515c41f4cbaeffd8fdd1d8b6373a18b1b67 upstream.
+
+A different TPID bit is used for 802.1ad VLAN frames.
+
+Reported-by: Ilario Gelmetti <iochesonome@gmail.com>
+Fixes: f0af34317f4b ("net: dsa: mediatek: combine MediaTek tag with VLAN tag")
+Signed-off-by: DENG Qingfang <dqfext@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/dsa/tag_mtk.c |   19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+--- a/net/dsa/tag_mtk.c
++++ b/net/dsa/tag_mtk.c
+@@ -20,6 +20,7 @@
+ #define MTK_HDR_LEN           4
+ #define MTK_HDR_XMIT_UNTAGGED         0
+ #define MTK_HDR_XMIT_TAGGED_TPID_8100 1
++#define MTK_HDR_XMIT_TAGGED_TPID_88A8 2
+ #define MTK_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0)
+ #define MTK_HDR_XMIT_DP_BIT_MASK      GENMASK(5, 0)
+ #define MTK_HDR_XMIT_SA_DIS           BIT(6)
+@@ -28,8 +29,8 @@ static struct sk_buff *mtk_tag_xmit(stru
+                                   struct net_device *dev)
+ {
+       struct dsa_port *dp = dsa_slave_to_port(dev);
++      u8 xmit_tpid;
+       u8 *mtk_tag;
+-      bool is_vlan_skb = true;
+       unsigned char *dest = eth_hdr(skb)->h_dest;
+       bool is_multicast_skb = is_multicast_ether_addr(dest) &&
+                               !is_broadcast_ether_addr(dest);
+@@ -40,13 +41,20 @@ static struct sk_buff *mtk_tag_xmit(stru
+        * the both special and VLAN tag at the same time and then look up VLAN
+        * table with VID.
+        */
+-      if (!skb_vlan_tagged(skb)) {
++      switch (skb->protocol) {
++      case htons(ETH_P_8021Q):
++              xmit_tpid = MTK_HDR_XMIT_TAGGED_TPID_8100;
++              break;
++      case htons(ETH_P_8021AD):
++              xmit_tpid = MTK_HDR_XMIT_TAGGED_TPID_88A8;
++              break;
++      default:
+               if (skb_cow_head(skb, MTK_HDR_LEN) < 0)
+                       return NULL;
++              xmit_tpid = MTK_HDR_XMIT_UNTAGGED;
+               skb_push(skb, MTK_HDR_LEN);
+               memmove(skb->data, skb->data + MTK_HDR_LEN, 2 * ETH_ALEN);
+-              is_vlan_skb = false;
+       }
+       mtk_tag = skb->data + 2 * ETH_ALEN;
+@@ -54,8 +62,7 @@ static struct sk_buff *mtk_tag_xmit(stru
+       /* Mark tag attribute on special tag insertion to notify hardware
+        * whether that's a combined special tag with 802.1Q header.
+        */
+-      mtk_tag[0] = is_vlan_skb ? MTK_HDR_XMIT_TAGGED_TPID_8100 :
+-                   MTK_HDR_XMIT_UNTAGGED;
++      mtk_tag[0] = xmit_tpid;
+       mtk_tag[1] = (1 << dp->index) & MTK_HDR_XMIT_DP_BIT_MASK;
+       /* Disable SA learning for multicast frames */
+@@ -63,7 +70,7 @@ static struct sk_buff *mtk_tag_xmit(stru
+               mtk_tag[1] |= MTK_HDR_XMIT_SA_DIS;
+       /* Tag control information is kept for 802.1Q */
+-      if (!is_vlan_skb) {
++      if (xmit_tpid == MTK_HDR_XMIT_UNTAGGED) {
+               mtk_tag[2] = 0;
+               mtk_tag[3] = 0;
+       }
index 342c993c7bbf165c959c4cb828408765caa76fc7..d21042fb09a4a5df390df9f9ed99e79bef4a4fe6 100644 (file)
@@ -4,3 +4,5 @@ bpf-prohibit-alu-ops-for-pointer-types-not-defining-ptr_limit.patch
 bpf-fix-off-by-one-for-area-size-in-creating-mask-to-left.patch
 bpf-simplify-alu_limit-masking-for-pointer-arithmetic.patch
 bpf-add-sanity-check-for-upper-ptr_limit.patch
+net-dsa-tag_mtk-fix-802.1ad-vlan-egress.patch
+net-dsa-b53-support-setting-learning-on-port.patch