]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: felix: fix tagging protocol changes with multiple CPU ports
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 12 Apr 2022 17:22:09 +0000 (20:22 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 14 Apr 2022 06:52:26 +0000 (08:52 +0200)
commit3e6c6eddd03f2cb6b2d57d6e5eb466b93479ddfb
treea063642d6a487532fb7a42be63389b923745087c
parent507a7d3636752c558749f57600c17d426b13638a
net: dsa: felix: fix tagging protocol changes with multiple CPU ports

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: c48d21180d7c ("net: dsa: felix: convert to the new .change_tag_protocol DSA API")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20220412172209.2531865-1-vladimir.oltean@nxp.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/dsa/ocelot/felix.c