[openwrt/openwrt] realtek: remove rtl83xx vlan 1 special cases

LEDE Commits lede-commits at lists.infradead.org
Sun Jul 25 04:58:52 PDT 2021


hauke pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/ad712c71cea3b26d8a7c53200c742181d1d040e7

commit ad712c71cea3b26d8a7c53200c742181d1d040e7
Author: Thomas Nixon <tom at tomn.co.uk>
AuthorDate: Sat Jun 26 12:50:12 2021 +0000

    realtek: remove rtl83xx vlan 1 special cases
    
    On reset, the PVID of all ports is set to 1; if this is reset to 0,
    the special cases for VLAN 1 are no longer required.
    
    port_vlan_add is called with vid=0 when the DSA port interfaces are
    enabled with no VLAN; previously the VLAN was not configured in this
    case, relying on VLAN 1 being present, but with the PVID set to 0,
    configuring VLAN 0 as normal works as expected.
    
    Signed-off-by: Thomas Nixon <tom at tomn.co.uk>
---
 target/linux/realtek/files-5.4/drivers/net/dsa/rtl83xx/dsa.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/target/linux/realtek/files-5.4/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-5.4/drivers/net/dsa/rtl83xx/dsa.c
index c5f243c55a..c2a230c4cb 100644
--- a/target/linux/realtek/files-5.4/drivers/net/dsa/rtl83xx/dsa.c
+++ b/target/linux/realtek/files-5.4/drivers/net/dsa/rtl83xx/dsa.c
@@ -134,6 +134,10 @@ static void rtl83xx_vlan_setup(struct rtl838x_switch_priv *priv)
 	for (i = 0; i < MAX_VLANS; i ++)
 		priv->r->vlan_set_tagged(i, &info);
 
+	// reset PVIDs; defaults to 1 on reset
+	for (i = 0; i <= priv->ds->num_ports; i++)
+		sw_w32(0, priv->r->vlan_port_pb + (i << 2));
+
 	// Set forwarding action based on inner VLAN tag
 	for (i = 0; i < priv->cpu_port; i++)
 		priv->r->vlan_fwd_on_inner(i, true);
@@ -909,9 +913,6 @@ static void rtl83xx_vlan_add(struct dsa_switch *ds, int port,
 	}
 
 	for (v = vlan->vid_begin; v <= vlan->vid_end; v++) {
-		if (!v)
-			continue;
-
 		/* Get port memberships of this vlan */
 		priv->r->vlan_tables_read(v, &info);
 
@@ -971,9 +972,7 @@ static int rtl83xx_vlan_del(struct dsa_switch *ds, int port,
 
 		/* remove port from both tables */
 		info.untagged_ports &= (~BIT_ULL(port));
-		/* always leave vid 1 */
-		if (v != 1)
-			info.tagged_ports &= (~BIT_ULL(port));
+		info.tagged_ports &= (~BIT_ULL(port));
 
 		priv->r->vlan_set_untagged(v, info.untagged_ports);
 		pr_debug("Untagged ports, VLAN %d: %llx\n", v, info.untagged_ports);



More information about the lede-commits mailing list