The main reason why I started this work is that deleting the bridge mdb entries fails when the bridge is deleted, as described here: https://lore.kernel.org/netdev/20201015173355.564934-1-vladimir.olt...@nxp.com/
In short, that happens because the bridge mdb entries are added with a vid of 1, but deletion is attempted with a vid of 0. So the deletion code fails to find the mdb entries. The solution is to make ocelot use a pvid of 0 when it is under a bridge with vlan_filtering 0. When vlan_filtering is 1, the pvid of the bridge is what is programmed into the hardware. The patch series also uncovers more bugs and does some more cleanup, but the above is the main idea behind it. Vladimir Oltean (7): net: mscc: ocelot: use the pvid of zero when bridged with vlan_filtering=0 net: mscc: ocelot: don't reset the pvid to 0 when deleting it net: mscc: ocelot: transform the pvid and native vlan values into a structure net: mscc: ocelot: add a "valid" boolean to struct ocelot_vlan net: mscc: ocelot: move the logic to drop 802.1p traffic to the pvid deletion net: mscc: ocelot: deny changing the native VLAN from the prepare phase net: dsa: felix: improve the workaround for multiple native VLANs on NPI port drivers/net/dsa/ocelot/felix.c | 27 ++++- drivers/net/ethernet/mscc/ocelot.c | 147 +++++++++++++------------ drivers/net/ethernet/mscc/ocelot_net.c | 38 +++++-- include/soc/mscc/ocelot.h | 17 ++- 4 files changed, 138 insertions(+), 91 deletions(-) -- 2.25.1