]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: sja1105: fix address learning getting disabled on the CPU port
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 13 Jul 2021 09:37:19 +0000 (12:37 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Jul 2021 16:32:41 +0000 (09:32 -0700)
commit7ac838b3da07974980b8b7a5f5b1f8d0d351eb3b
treede3dbb8667d09b9e30d0bfe93a7a4a4dd39e10f1
parent8b25b0a7b77eec579570ade5c94b81a960f4d6e4
net: dsa: sja1105: fix address learning getting disabled on the CPU port

In May 2019 when commit fda22416db5b ("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
bbb21750feeb ("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: 9a62de0b1b43 ("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>
drivers/net/dsa/sja1105/sja1105_main.c