rtl93xx: dsa: Fix 802.1QinQ for trunk ports
authorHarshal Gohel <hg@simonwunderlich.de>
Wed, 3 Jan 2024 14:53:47 +0000 (15:53 +0100)
committerSander Vanheule <sander@svanheule.net>
Tue, 9 Jan 2024 20:19:41 +0000 (21:19 +0100)
Fix incorrect register value being set for VLAN_PORT_FWD

Before, the 0b1111 would be set for the register which means outgoing
packets would receive an extra tag, corresponding to the PVID of the
port.

On untagged ports, this meant outgoing packets with a single tag.

On tagged ports, this meant outgoing QinQ packets, where the inner tag
was either the PVID of the untagged ingress port, or the already
assigned original (single) tag.

Acked-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Harshal Gohel <hg@simonwunderlich.de>
target/linux/realtek/files-5.15/drivers/net/dsa/rtl83xx/rtl930x.c
target/linux/realtek/files-5.15/drivers/net/dsa/rtl83xx/rtl931x.c

index 4a4a926bb21e1dd0f84bf70cc2065bab3c594241..793d7624897db0530ac5d4f146b5c8bf486fe0bb 100644 (file)
@@ -258,9 +258,9 @@ static void rtl930x_vlan_fwd_on_inner(int port, bool is_set)
 {
        /* Always set all tag modes to fwd based on either inner or outer tag */
        if (is_set)
-               sw_w32_mask(0, 0xf, RTL930X_VLAN_PORT_FWD + (port << 2));
-       else
                sw_w32_mask(0xf, 0, RTL930X_VLAN_PORT_FWD + (port << 2));
+       else
+               sw_w32_mask(0, 0xf, RTL930X_VLAN_PORT_FWD + (port << 2));
 }
 
 static void rtl930x_vlan_profile_setup(int profile)
index 3221109c1804cae744bf325a3282d1ef25d39cda..0e82d79d4cbe069090ae8cdd0018eb50dce4f828 100644 (file)
@@ -827,9 +827,9 @@ static void rtl931x_vlan_fwd_on_inner(int port, bool is_set)
 {
        /* Always set all tag modes to fwd based on either inner or outer tag */
        if (is_set)
-               sw_w32_mask(0, 0xf, RTL931X_VLAN_PORT_FWD + (port << 2));
-       else
                sw_w32_mask(0xf, 0, RTL931X_VLAN_PORT_FWD + (port << 2));
+       else
+               sw_w32_mask(0, 0xf, RTL931X_VLAN_PORT_FWD + (port << 2));
 }
 
 static void rtl931x_vlan_profile_setup(int profile)