From: Tristram Ha <redacted>
ksz9477_hsr_join() is called once to setup the HSR port membership, but
the port can be enabled later, or disabled and enabled back and the port
membership is not set correctly inside ksz_update_port_member(). The
added code always use the correct HSR port membership for HSR port that
is enabled.
Fixes: 2d61298fdd7b ("net: dsa: microchip: Enable HSR offloading for KSZ9477")
Reported-by: Frieder Schrempf <redacted>
Signed-off-by: Tristram Ha <redacted>
---
drivers/net/dsa/microchip/ksz_common.c | 6 ++++++
1 file changed, 6 insertions(+)
@@ -2457,6 +2457,12 @@ static void ksz_update_port_member(struct ksz_device *dev, int port)dev->dev_ops->cfg_port_member(dev,i,val|cpu_port);}+/* HSR ports are setup once so need to use the assigned membership+*whentheportisenabled.+*/+if(!port_member&&p->stp_state==BR_STATE_FORWARDING&&+(dev->hsr_ports&BIT(port)))+port_member=dev->hsr_ports;dev->dev_ops->cfg_port_member(dev,port,port_member|cpu_port);}
On Mon, 18 Aug 2025 18:04:57 -0700
[off-list ref] wrote:
quoted hunk
From: Tristram Ha <redacted>
ksz9477_hsr_join() is called once to setup the HSR port membership,
but the port can be enabled later, or disabled and enabled back and
the port membership is not set correctly inside
ksz_update_port_member(). The added code always use the correct HSR
port membership for HSR port that is enabled.
Fixes: 2d61298fdd7b ("net: dsa: microchip: Enable HSR offloading for
KSZ9477") Reported-by: Frieder Schrempf [off-list ref]
Signed-off-by: Tristram Ha <redacted>
---
drivers/net/dsa/microchip/ksz_common.c | 6 ++++++
1 file changed, 6 insertions(+)
b/drivers/net/dsa/microchip/ksz_common.c index
4cb14288ff0f..9568cc391fe3 100644 ---
a/drivers/net/dsa/microchip/ksz_common.c +++
b/drivers/net/dsa/microchip/ksz_common.c @@ -2457,6 +2457,12 @@
static void ksz_update_port_member(struct ksz_device *dev, int port)
dev->dev_ops->cfg_port_member(dev, i, val | cpu_port); }
+ /* HSR ports are setup once so need to use the assigned
membership
+ * when the port is enabled.
+ */
+ if (!port_member && p->stp_state == BR_STATE_FORWARDING &&
+ (dev->hsr_ports & BIT(port)))
+ port_member = dev->hsr_ports;
dev->dev_ops->cfg_port_member(dev, port, port_member |
cpu_port); }
Am 19.08.25 um 03:04 schrieb Tristram.Ha@microchip.com:
From: Tristram Ha <redacted>
ksz9477_hsr_join() is called once to setup the HSR port membership, but
the port can be enabled later, or disabled and enabled back and the port
membership is not set correctly inside ksz_update_port_member(). The
added code always use the correct HSR port membership for HSR port that
is enabled.
Fixes: 2d61298fdd7b ("net: dsa: microchip: Enable HSR offloading for KSZ9477")
Reported-by: Frieder Schrempf <redacted>
Signed-off-by: Tristram Ha <redacted>
@@ -2457,6 +2457,12 @@ static void ksz_update_port_member(struct ksz_device *dev, int port)dev->dev_ops->cfg_port_member(dev,i,val|cpu_port);}+/* HSR ports are setup once so need to use the assigned membership+*whentheportisenabled.+*/+if(!port_member&&p->stp_state==BR_STATE_FORWARDING&&+(dev->hsr_ports&BIT(port)))+port_member=dev->hsr_ports;dev->dev_ops->cfg_port_member(dev,port,port_member|cpu_port);}
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski [off-list ref]:
On Mon, 18 Aug 2025 18:04:57 -0700 you wrote:
From: Tristram Ha <redacted>
ksz9477_hsr_join() is called once to setup the HSR port membership, but
the port can be enabled later, or disabled and enabled back and the port
membership is not set correctly inside ksz_update_port_member(). The
added code always use the correct HSR port membership for HSR port that
is enabled.
[...]