• Vladimir Oltean's avatar
    net: dsa: felix: fix tagging protocol changes with multiple CPU ports · 00fa91bc
    Vladimir Oltean authored
    When the device tree has 2 CPU ports defined, a single one is active
    (has any dp->cpu_dp pointers point to it). Yet the second one is still a
    CPU port, and DSA still calls ->change_tag_protocol on it.
    
    On the NXP LS1028A, the CPU ports are ports 4 and 5. Port 4 is the
    active CPU port and port 5 is inactive.
    
    After the following commands:
    
     # Initial setting
     cat /sys/class/net/eno2/dsa/tagging
     ocelot
     echo ocelot-8021q > /sys/class/net/eno2/dsa/tagging
     echo ocelot > /sys/class/net/eno2/dsa/tagging
    
    traffic is now broken, because the driver has moved the NPI port from
    port 4 to port 5, unbeknown to DSA.
    
    The problem can be avoided by detecting that the second CPU port is
    unused, and not doing anything for it. Further rework will be needed
    when proper support for multiple CPU ports is added.
    
    Treat this as a bug and prepare current kernels to work in single-CPU
    mode with multiple-CPU DT blobs.
    
    Fixes: adb3dccf ("net: dsa: felix: convert to the new .change_tag_protocol DSA API")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20220412172209.2531865-1-vladimir.oltean@nxp.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    00fa91bc
felix.c 52.9 KB