It will fail when you have an uci network config (swconfig part) like this:
``` config switch option name 'switch0' option reset '1' option enable_vlan '1' config switch_vlan option device 'switch0' option vlan '15' option vid '1' option ports '0 6t' config switch_port option name 'switch0' option port '0' option pvid '1' ``` It will be good until you run: $ swconfig dev switch0 vlan 1 set vid 333 So it seems that when REG_ESW_VLAN_VAWD1_VALID is unset, it will still take effect for VTU matching when two VTU entries have a same VID. Signed-off-by: Xiongfei Guo <xf...@credosemi.com> --- .../files/drivers/net/ethernet/ralink/mt7530.c | 26 ++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c index 1352b25..27fc51a 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c @@ -408,6 +408,22 @@ mt7530_apply_config(struct switch_dev *dev) u8 etags = priv->vlan_entries[i].etags; u32 val; + + /* vlan port membership */ + if (member) + mt7530_w32(priv, REG_ESW_VLAN_VAWD1, REG_ESW_VLAN_VAWD1_IVL_MAC | + REG_ESW_VLAN_VAWD1_VTAG_EN | (member << 16) | + REG_ESW_VLAN_VAWD1_VALID); + else { + mt7530_w32(priv, REG_ESW_VLAN_VAWD1, 0); + + /* ignore vid (just set it to 0) when the ports is empty, + * because even the REG_ESW_VLAN_VAWD1_VALID is set to disable, + * it will still take effect to other vlan when they have + * a same vid. */ + vid = 0; + } + /* vid of vlan */ val = mt7530_r32(priv, REG_ESW_VLAN_VTIM(i)); if (i % 2 == 0) { @@ -417,16 +433,8 @@ mt7530_apply_config(struct switch_dev *dev) val &= 0xfff; val |= (vid << 12); } - mt7530_w32(priv, REG_ESW_VLAN_VTIM(i), val); - - /* vlan port membership */ - if (member) - mt7530_w32(priv, REG_ESW_VLAN_VAWD1, REG_ESW_VLAN_VAWD1_IVL_MAC | - REG_ESW_VLAN_VAWD1_VTAG_EN | (member << 16) | - REG_ESW_VLAN_VAWD1_VALID); - else - mt7530_w32(priv, REG_ESW_VLAN_VAWD1, 0); + mt7530_w32(priv, REG_ESW_VLAN_VTIM(i), val); /* egress mode */ val = 0; for (j = 0; j < MT7530_NUM_PORTS; j++) { -- 1.9.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel