+++ /dev/null
-From b0b33b048dcfbd7da82c3cde4fab02751dfab4d6 Mon Sep 17 00:00:00 2001
-From: Vladimir Oltean <vladimir.oltean@nxp.com>
-Date: Tue, 13 Jul 2021 12:37:19 +0300
-Subject: net: dsa: sja1105: fix address learning getting disabled on the CPU port
-
-From: Vladimir Oltean <vladimir.oltean@nxp.com>
-
-commit b0b33b048dcfbd7da82c3cde4fab02751dfab4d6 upstream.
-
-In May 2019 when commit 640f763f98c2 ("net: dsa: sja1105: Add support
-for Spanning Tree Protocol") was introduced, the comment that "STP does
-not get called for the CPU port" was true. This changed after commit
-0394a63acfe2 ("net: dsa: enable and disable all ports") in August 2019
-and went largely unnoticed, because the sja1105_bridge_stp_state_set()
-method did nothing different compared to the static setup done by
-sja1105_init_mac_settings().
-
-With the ability to turn address learning off introduced by the blamed
-commit, there is a new priv->learn_ena port mask in the driver. When
-sja1105_bridge_stp_state_set() gets called and we are in
-BR_STATE_LEARNING or later, address learning is enabled or not depending
-on priv->learn_ena & BIT(port).
-
-So what happens is that priv->learn_ena is not being set from anywhere
-for the CPU port, and the static configuration done by
-sja1105_init_mac_settings() is being overwritten.
-
-To solve this, acknowledge that the static configuration of STP state is
-no longer necessary because the STP state is being set by the DSA core
-now, but what is necessary is to set priv->learn_ena for the CPU port.
-
-Fixes: 4d9423549501 ("net: dsa: sja1105: offload bridge port flags to device")
-Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/net/dsa/sja1105/sja1105_main.c | 14 ++++++--------
- 1 file changed, 6 insertions(+), 8 deletions(-)
-
---- a/drivers/net/dsa/sja1105/sja1105_main.c
-+++ b/drivers/net/dsa/sja1105/sja1105_main.c
-@@ -129,14 +129,12 @@ static int sja1105_init_mac_settings(str
-
- for (i = 0; i < SJA1105_NUM_PORTS; i++) {
- mac[i] = default_mac;
-- if (i == dsa_upstream_port(priv->ds, i)) {
-- /* STP doesn't get called for CPU port, so we need to
-- * set the I/O parameters statically.
-- */
-- mac[i].dyn_learn = true;
-- mac[i].ingress = true;
-- mac[i].egress = true;
-- }
-+
-+ /* Let sja1105_bridge_stp_state_set() keep address learning
-+ * enabled for the CPU port.
-+ */
-+ if (dsa_is_cpu_port(ds, i))
-+ priv->learn_ena |= BIT(i);
- }
-
- return 0;