From: Sven Eckelmann Date: Thu, 9 Oct 2025 14:28:47 +0000 (+0200) Subject: realtek: dsa: Simplify port member handling X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=77ce3f1a728cc6f1338d898beaca52a7d9bf3031;p=openwrt%2Fstaging%2Fnbd.git realtek: dsa: Simplify port member handling It is not necessary to read the back the current port members for a specific port for enabling/disabling a port. All these members which are expected to be in the HW port matrix of an active port are already stored in the port specific member "pm". And when a port is disabled, the port must no longer forwarding traffic to any other port. Just writing 0 to the members is therefore good enough and no read-back of the old HW state is necessary. Signed-off-by: Sven Eckelmann Link: https://github.com/openwrt/openwrt/pull/20360 Signed-off-by: Robert Marko --- diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c index d97283065f..74cd728de5 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c @@ -1428,7 +1428,6 @@ static int rtl83xx_port_enable(struct dsa_switch *ds, int port, struct phy_device *phydev) { struct rtl838x_switch_priv *priv = ds->priv; - u64 v; pr_debug("%s: %x %d", __func__, (u32) priv, port); priv->ports[port].enable = true; @@ -1448,9 +1447,7 @@ static int rtl83xx_port_enable(struct dsa_switch *ds, int port, } /* add all other ports in the same bridge to switch mask of port */ - v = priv->r->traffic_get(port); - v |= priv->ports[port].pm; - priv->r->traffic_set(port, v); + priv->r->traffic_set(port, priv->ports[port].pm); /* TODO: Figure out if this is necessary */ if (priv->family_id == RTL9300_FAMILY_ID) { @@ -1467,7 +1464,6 @@ static int rtl83xx_port_enable(struct dsa_switch *ds, int port, static void rtl83xx_port_disable(struct dsa_switch *ds, int port) { struct rtl838x_switch_priv *priv = ds->priv; - u64 v; pr_debug("%s %x: %d", __func__, (u32)priv, port); /* you can only disable user ports */ @@ -1478,10 +1474,8 @@ static void rtl83xx_port_disable(struct dsa_switch *ds, int port) /* remove port from switch mask of CPU_PORT */ priv->r->traffic_disable(priv->cpu_port, port); - /* remove all other ports in the same bridge from switch mask of port */ - v = priv->r->traffic_get(port); - v &= ~priv->ports[port].pm; - priv->r->traffic_set(port, v); + /* remove all other ports from switch mask of port */ + priv->r->traffic_set(port, 0); priv->ports[port].enable = false; }