[PATCH net] net: dsa: microchip: fix initial port flush problem

From: Tristram.Ha
Date: Tue May 28 2024 - 17:33:07 EST


From: Tristram Ha <tristram.ha@xxxxxxxxxxxxx>

The very first flush in any port will flush all learned addresses in all
ports. This can be observed by unplugging a cable from one port while
additional ports are connected and dumping the fdb entries.

This problem is caused by the initially wrong value programmed to the
register. After the first flush the value is reset back to the normal so
the next port flush will not cause such problem again.

Fixes: b987e98e50ab ("dsa: add DSA switch driver for Microchip KSZ9477")
Signed-off-by: Tristram Ha <tristram.ha@xxxxxxxxxxxxx>
---
drivers/net/dsa/microchip/ksz9477.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
index f8ad7833f5d9..7cc92b90ffea 100644
--- a/drivers/net/dsa/microchip/ksz9477.c
+++ b/drivers/net/dsa/microchip/ksz9477.c
@@ -356,8 +356,7 @@ int ksz9477_reset_switch(struct ksz_device *dev)

/* default configuration */
ksz_read8(dev, REG_SW_LUE_CTRL_1, &data8);
- data8 = SW_AGING_ENABLE | SW_LINK_AUTO_AGING |
- SW_SRC_ADDR_FILTER | SW_FLUSH_STP_TABLE | SW_FLUSH_MSTP_TABLE;
+ data8 |= SW_AGING_ENABLE | SW_LINK_AUTO_AGING | SW_SRC_ADDR_FILTER;
ksz_write8(dev, REG_SW_LUE_CTRL_1, data8);

/* disable interrupts */
--
2.34.1