net: dsa: felix: tag_8021q preparation for multiple CPU ports
authorVladimir Oltean <vladimir.oltean@nxp.com>
Sat, 21 May 2022 21:37:43 +0000 (00:37 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 23 May 2022 09:39:55 +0000 (10:39 +0100)
commita4e044dc4c5b1e03f4195224c47108dc44122917
tree41b0ac849a21733f9e405d2623c0f77db876ea5b
parentc295f9831f1db12330d6a28a1cb2bd2562535e37
net: dsa: felix: tag_8021q preparation for multiple CPU ports

Update the VCAP filters to support multiple tag_8021q CPU ports.

TX works using a filter for VLAN ID on the ingress of the CPU port, with
a redirect and a VLAN pop action. This can be updated trivially by
amending the ingress port mask of this rule to match on all tag_8021q
CPU ports.

RX works using a filter for ingress port on the egress of the CPU port,
with a VLAN push action. Here we need to replicate these filters for
each tag_8021q CPU port, and let them all have the same action.
This means that the OCELOT_VCAP_ES0_TAG_8021Q_RXVLAN() cookie needs to
encode a unique value for every {user port, CPU port} pair it's given.
Do this by encoding the CPU port in the upper 16 bits of the cookie, and
the user port in the lower 16 bits.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/ocelot/felix.c
include/soc/mscc/ocelot_vcap.h