• Vladimir Oltean's avatar
    net: dsa: sja1105: avoid invalid state in sja1105_vlan_filtering · aef31718
    Vladimir Oltean authored
    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: 3f01c91a ("net: dsa: sja1105: implement VLAN retagging for dsa_8021q sub-VLANs")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aef31718
sja1105_main.c 99.2 KB