net: dsa: sja1105: Make vid 1 the default pvid
In SJA1105 there is no concept of 'default values' per se, everything needs to be driver-supplied through the static configuration tables. The issue is that the hardware manual says that 'at least the default untagging VLAN' is mandatory to be provided through the static config. But VLAN 0 isn't a very good initial pvid - its use is reserved for priority-tagged frames, and the layers of the stack that care about those already make sure that this VLAN is installed, as can be seen in the message below: 8021q: adding VLAN 0 to HW filter on device swp2 So change the pvid provided through the static configuration to 1, which matches the bridge core's defaults. Signed-off-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
29dd908d35
commit
e3502b8297
@ -80,7 +80,7 @@ static int sja1105_init_mac_settings(struct sja1105_private *priv)
|
||||
.maxage = 0xFF,
|
||||
/* Internal VLAN (pvid) to apply to untagged ingress */
|
||||
.vlanprio = 0,
|
||||
.vlanid = 0,
|
||||
.vlanid = 1,
|
||||
.ing_mirr = false,
|
||||
.egr_mirr = false,
|
||||
/* Don't drop traffic with other EtherType than ETH_P_IP */
|
||||
@ -264,20 +264,15 @@ static int sja1105_init_static_vlan(struct sja1105_private *priv)
|
||||
.vmemb_port = 0,
|
||||
.vlan_bc = 0,
|
||||
.tag_port = 0,
|
||||
.vlanid = 0,
|
||||
.vlanid = 1,
|
||||
};
|
||||
int i;
|
||||
|
||||
table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP];
|
||||
|
||||
/* The static VLAN table will only contain the initial pvid of 0.
|
||||
/* The static VLAN table will only contain the initial pvid of 1.
|
||||
* All other VLANs are to be configured through dynamic entries,
|
||||
* and kept in the static configuration table as backing memory.
|
||||
* The pvid of 0 is sufficient to pass traffic while the ports are
|
||||
* standalone and when vlan_filtering is disabled. When filtering
|
||||
* gets enabled, the switchdev core sets up the VLAN ID 1 and sets
|
||||
* it as the new pvid. Actually 'pvid 1' still comes up in 'bridge
|
||||
* vlan' even when vlan_filtering is off, but it has no effect.
|
||||
*/
|
||||
if (table->entry_count) {
|
||||
kfree(table->entries);
|
||||
@ -291,7 +286,7 @@ static int sja1105_init_static_vlan(struct sja1105_private *priv)
|
||||
|
||||
table->entry_count = 1;
|
||||
|
||||
/* VLAN ID 0: all DT-defined ports are members; no restrictions on
|
||||
/* VLAN 1: all DT-defined ports are members; no restrictions on
|
||||
* forwarding; always transmit priority-tagged frames as untagged.
|
||||
*/
|
||||
for (i = 0; i < SJA1105_NUM_PORTS; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user