• V
    net: dsa: sja1105: fix address learning getting disabled on the CPU port · b0b33b04
    Vladimir Oltean 提交于
    In May 2019 when commit 640f763f ("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
    0394a63a ("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: 4d942354 ("net: dsa: sja1105: offload bridge port flags to device")
    Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    b0b33b04
sja1105_main.c 107.5 KB