realtek: dsa: Sync CIST with MSTI state for unbridged ports
authorSven Eckelmann <[email protected]>
Mon, 27 Oct 2025 16:19:24 +0000 (17:19 +0100)
committerHauke Mehrtens <[email protected]>
Sat, 15 Nov 2025 15:21:16 +0000 (16:21 +0100)
The VLANs and their MSTIs are shared on the realtek switch HW between
bridged and unbridged ports. But the MSTI state cannot be updated for an
unbridged port via DSA. To ensure that the port is still configured
correctly after leaving a bridge, the CIST state updates via DSA must also
be propagated to the MSTI states.

Suggested-by: Jonas Gorski <[email protected]>
Signed-off-by: Sven Eckelmann <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/20421
Signed-off-by: Hauke Mehrtens <[email protected]>
target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c

index 0312ee413db20ffdf867a764e4b9d03db9fdc2bc..e595df93baf0d409226fe6c4bcac3faddd59870a 100644 (file)
@@ -1597,9 +1597,20 @@ static void rtldsa_port_xstp_state_set(struct rtl838x_switch_priv *priv, int por
 void rtl83xx_port_stp_state_set(struct dsa_switch *ds, int port, u8 state)
 {
        struct rtl838x_switch_priv *priv = ds->priv;
+       struct dsa_port *dp = dsa_to_port(ds, port);
+       unsigned int i;
 
        mutex_lock(&priv->reg_mutex);
        rtldsa_port_xstp_state_set(priv, port, state, 0);
+
+       if (dp->bridge)
+               goto unlock;
+
+       /* for unbridged ports, also force the same state to the MSTIs */
+       for (i = 1; i < priv->n_mst; i++)
+               rtldsa_port_xstp_state_set(priv, port, state, i);
+
+unlock:
        mutex_unlock(&priv->reg_mutex);
 }