Message ID | 20200527172038.1142072-1-olteanv@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: dsa: sja1105: avoid invalid state in sja1105_vlan_filtering | expand |
From: Vladimir Oltean <olteanv@gmail.com> Date: Wed, 27 May 2020 20:20:38 +0300 > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > Be there 2 switches spi/spi2.0 and spi/spi2.1 in a cross-chip setup, > both under the same VLAN-filtering bridge, both in the > SJA1105_VLAN_BEST_EFFORT state. > > If we try to change the VLAN state of one of the switches (to > SJA1105_VLAN_FILTERING_FULL) we get the following error: > > devlink dev param set spi/spi2.1 name best_effort_vlan_filtering value > false cmode runtime > [ 38.325683] sja1105 spi2.1: Not allowed to overcommit frame memory. > L2 memory partitions and VL memory partitions share the > same space. The sum of all 16 memory partitions is not > allowed to be larger than 929 128-byte blocks (or 910 > with retagging). Please adjust > l2-forwarding-parameters-table.part_spc and/or > vl-forwarding-parameters-table.partspc. > [ 38.356803] sja1105 spi2.1: Invalid config, cannot upload > > This is because the spi/spi2.1 switch doesn't support tagging anymore in > the SJA1105_VLAN_FILTERING_FULL state, so it doesn't need to have any > retagging rules defined. Great, so it can use more frame memory > (retagging consumes extra memory). > > But the built-in low-level static config checker from the sja1105 driver > says "not so fast, you've increased the frame memory to non-retagging > values, but you still kept the retagging rules in the static config". > > So we need to rebuild the VLAN table immediately before re-uploading the > static config, operation which will take care, based on the new VLAN > state, of removing the retagging rules. > > Fixes: 3f01c91aab92 ("net: dsa: sja1105: implement VLAN retagging for dsa_8021q sub-VLANs") > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Applied, thanks.
diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 44ce7882dfb1..bfef6c120f9d 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -2656,6 +2656,10 @@ static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled) sja1105_frame_memory_partitioning(priv); + rc = sja1105_build_vlan_table(priv, false); + if (rc) + return rc; + rc = sja1105_static_config_reload(priv, SJA1105_VLAN_FILTERING); if (rc) dev_err(ds->dev, "Failed to change VLAN Ethertype\n");