Hello!
The current R-Car S4 rswitch driver only supports basic HW offloading
for L2 switching/bridgeing. This patchset extends the driver with
support for VLAN aware switching.
1. For every port mode change from configuration to operation and
vice-versa you need to change to disabled mode first. The
functions rswitch_<port>_change_mode now take care of this.
2. In upcomming changes for adding vlan support struct net_device
will not be available in all cases, therefore use struct device
instead.
3. Fix typo in register define macro and remove duplicate macro.
4. Add register definitions needed fo vlan support.
5. Add exception path for packets with unknown destitination MAC
addresses.
6. Make the helper functions rswitch_reg_wait(),
rswitch_etha_change_mode() and rswitch_etha_change_mode()
available to the whole driver.
7. Add locking to protect CREC and RCDC clock register from concurent
accesses.
8. Add basic start-up time initialization needed to support VLANs.
9. Update ETHA and GWCA port HW initializations.
10. Clean up is_rdev() rswitch_device checking.
11. Provide struct rswitch_private to notifiers.
12. Add handler for FDB notifications to configure bridge MAC address
to GWCA registers and update static MAC table entry.
13. Add vlan support to L2 HW bridge.
Configuration example:
ip link add name br0 type bridge vlan_filtering 1
ip link set dev tsn0 master br0
ip link set dev tsn1 master br0
ip link set dev br0 up
ip link set dev tsn0 up
ip link set dev tsn1 up
bridge vlan add dev tsn0 vid 4
bridge vlan add dev tsn1 vid 4
bridge vlan add dev br0 vid 4 self
ip a a 192.168.1.20/24 dev br0
ip l a link br0 name br0.1 type vlan id 1
ip l a link br0 name br0.4 type vlan id 4
ip a a 192.168.2.20/24 dev br0.1
ip a a 192.168.4.20/24 dev br0.4
ip link set dev br0.1 up
ip link set dev br0.4 up
Signed-off-by: Michael Dege <michael.dege@renesas.com>
---
Changes in v5:
- Added NULL checking for calls to skb_free_frag() and revoked hw ownership
by clearing desc.die_dt.
- Added locking for queue swapping in the rx interrupt and bounds checking
for spn reading.
- Added locking for clock registers.
- Fixed initialization of GWVCC.
- Fixed return codes of rswitch_switchdev_blocking_event().
- Added clean-up should rswitch_register_notifiers() fail.
- Reworked reference tracking.
- Added flushing of work from system_long_wq.
- Link to v4: https://lore.kernel.org/r/20260511-rswitch_add_vlans-v4-0-a5a225f8faae@renesas.com
Changes in v4:
- fixed error checking in rswitch_gwca_change_mode() and rswitch_etha_change_mode().
- fixed typo in use of GENMASK macro.
- fixed comments from // to /* */.
- fixed shared queue ussage in rx interrupt.
- fixed assingment of fwpc2_clr in false branch.
- moved PORT_ATR_SET to rswitch_switchdev_blocking_event() to remove dead code.
- changed from dev_put/dev_hold to netdev_put/netdev_hold.
- reordered code to make sure the correct type is accessed with info->obj->id in
rswitch_port_obj_add()/rswitch_port_obj_del().
- Link to v3: https://lore.kernel.org/r/20260331-rswitch_add_vlans-v3-0-c37f41b1c556@renesas.com
Changes in v3:
- Fixed findings made by coccicheck
- Fixed missing 'depends on BRIDGE' in Kconfig found by test robot.
- Link to v2: https://lore.kernel.org/r/20260327-rswitch_add_vlans-v2-0-d7f4358ca57a@renesas.com
Changes in v2:
- Reworked reswitch_update_l2_hw_forwarding_gwca() as suggested.
- Fixed missing initialization found by test robot.
- Link to v1: https://lore.kernel.org/r/20260317-rswitch_add_vlans-v1-0-3a57bfa0f2d1@renesas.com
---
Michael Dege (14):
net: renesas: rswitch: improve port change mode functions
net: renesas: rswitch: use device instead of net_device
net: renesas: rswitch: fix FWPC2 register access macros
net: renesas: rswitch: add register definitions for vlan support
net: renesas: rswitch: add exception path for packets with unknown dst MAC
net: renesas: rswitch: add forwarding rules for gwca
net: renesas: rswitch: make helper functions available to whole driver
net: renesas: rswitch: add locking for agent clock control
net: renesas: rswitch: add basic vlan init to rswitch_fwd_init
net: renesas: rswitch: update port HW init
net: renesas: rswitch: clean up is_rdev rswitch_device checking
net: renesas: rswitch: add passing of rswitch_private into notifiers
net: renesas: rswitch: add handler for FDB notification
net: renesas: rswitch: add vlan aware switching
drivers/net/ethernet/renesas/Kconfig | 1 +
drivers/net/ethernet/renesas/rswitch.h | 187 +++++++-
drivers/net/ethernet/renesas/rswitch_l2.c | 649 ++++++++++++++++++++++++----
drivers/net/ethernet/renesas/rswitch_l2.h | 6 +-
drivers/net/ethernet/renesas/rswitch_main.c | 320 ++++++++++----
5 files changed, 975 insertions(+), 188 deletions(-)
---
base-commit: c26d7040520c4341b719063378d0bb6d7bc2d67f
change-id: 20260120-rswitch_add_vlans-39488bfb296c
Best regards,
--
Michael Dege <michael.dege@renesas.com>