mirror_ubuntu-kernels/drivers/net/dsa/sja1105
Vladimir Oltean b6ad86e6ad net: dsa: sja1105: add bridge TX data plane offload based on tag_8021q
The main desire for having this feature in sja1105 is to support network
stack termination for traffic coming from a VLAN-aware bridge.

For sja1105, offloading the bridge data plane means sending packets
as-is, with the proper VLAN tag, to the chip. The chip will look up its
FDB and forward them to the correct destination port.

But we support bridge data plane offload even for VLAN-unaware bridges,
and the implementation there is different. In fact, VLAN-unaware
bridging is governed by tag_8021q, so it makes sense to have the
.bridge_fwd_offload_add() implementation fully within tag_8021q.
The key difference is that we only support 1 VLAN-aware bridge, but we
support multiple VLAN-unaware bridges. So we need to make sure that the
forwarding domain is not crossed by packets injected from the stack.

For this, we introduce the concept of a tag_8021q TX VLAN for bridge
forwarding offload. As opposed to the regular TX VLANs which contain
only 2 ports (the user port and the CPU port), a bridge data plane TX
VLAN is "multicast" (or "imprecise"): it contains all the ports that are
part of a certain bridge, and the hardware will select where the packet
goes within this "imprecise" forwarding domain.

Each VLAN-unaware bridge has its own "imprecise" TX VLAN, so we make use
of the unique "bridge_num" provided by DSA for the data plane offload.
We use the same 3 bits from the tag_8021q VLAN ID format to encode this
bridge number.

Note that these 3 bit positions have been used before for sub-VLANs in
best-effort VLAN filtering mode. The difference is that for best-effort,
the sub-VLANs were only valid on RX (and it was documented that the
sub-VLAN field needed to be transmitted as zero). Whereas for the bridge
data plane offload, these 3 bits are only valid on TX.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-07-26 22:35:22 +01:00
..
Kconfig net: dsa: sja1105: document the SJA1110 in the Kconfig 2021-06-24 12:55:57 -07:00
Makefile net: dsa: sja1105: register the MDIO buses for 100base-T1 and 100base-TX 2021-06-08 14:37:16 -07:00
sja1105_clocking.c net: dsa: sja1105: properly power down the microcontroller clock for SJA1110 2021-06-18 12:26:17 -07:00
sja1105_devlink.c net: dsa: sja1105: delete the best_effort_vlan_filtering mode 2021-07-20 06:36:42 -07:00
sja1105_dynamic_config.c net: dsa: sja1105: fix dynamic access to L2 Address Lookup table for SJA1110 2021-06-28 15:49:05 -07:00
sja1105_dynamic_config.h net: dsa: sja1105: add support for the SJA1110 switch family 2021-06-08 14:37:16 -07:00
sja1105_ethtool.c net: dsa: sja1105: don't use burst SPI reads for port statistics 2021-05-21 14:01:41 -07:00
sja1105_flower.c net: dsa: sja1105: dimension the data structures for a larger port count 2021-05-24 13:59:03 -07:00
sja1105_main.c net: dsa: sja1105: add bridge TX data plane offload based on tag_8021q 2021-07-26 22:35:22 +01:00
sja1105_mdio.c net: dsa: sja1105: plug in support for 2500base-x 2021-06-11 13:43:56 -07:00
sja1105_ptp.c net: dsa: sja1105: implement TX timestamping for SJA1110 2021-06-11 12:45:38 -07:00
sja1105_ptp.h net: dsa: sja1105: implement TX timestamping for SJA1110 2021-06-11 12:45:38 -07:00
sja1105_spi.c net: dsa: sja1105: properly power down the microcontroller clock for SJA1110 2021-06-18 12:26:17 -07:00
sja1105_static_config.c net: dsa: sja1105: allow the TTEthernet configuration in the static config for SJA1110 2021-06-18 12:26:17 -07:00
sja1105_static_config.h net: dsa: add support for the SJA1110 native tagging protocol 2021-06-11 12:45:38 -07:00
sja1105_tas.c net: dsa: sja1105: parameterize the number of ports 2021-05-24 13:59:03 -07:00
sja1105_tas.h net: dsa: sja1105: dimension the data structures for a larger port count 2021-05-24 13:59:03 -07:00
sja1105_vl.c net: dsa: sja1105: delete the best_effort_vlan_filtering mode 2021-07-20 06:36:42 -07:00
sja1105_vl.h net: dsa: sja1105: suppress -Wmissing-prototypes in sja1105_vl.c 2020-06-01 12:13:47 -07:00
sja1105.h net: dsa: sja1105: delete vlan delta save/restore logic 2021-07-26 22:35:22 +01:00