realtek: Trap all frames with switch as destination to CPU-port
authorBirger Koblitz <git@birger-koblitz.de>
Sun, 24 Apr 2022 18:37:33 +0000 (20:37 +0200)
committerSander Vanheule <sander@svanheule.net>
Sun, 8 May 2022 08:05:14 +0000 (10:05 +0200)
This fixes a bug where frames sent to the switch itself were
flooded to all ports unless the MAC address of the CPU-port
was learned otherwise.

Tested-by: Wenli Looi <wlooi@ucalgary.ca>
Tested-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
[fix code formatting]
Signed-off-by: Sander Vanheule <sander@svanheule.net>
target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/dsa.c

index 47806329835d80f848979cb7ca6c606ea39b1085..2e3ab4a805720848d15f5dc2b762bb339d1fd65f 100644 (file)
@@ -205,6 +205,15 @@ static int rtl83xx_setup(struct dsa_switch *ds)
 
        priv->r->l2_learning_setup();
 
+       /*
+        *  Make sure all frames sent to the switch's MAC are trapped to the CPU-port
+        *  0: FWD, 1: DROP, 2: TRAP2CPU
+        */
+       if (priv->family_id == RTL8380_FAMILY_ID)
+               sw_w32(0x2, RTL838X_SPCL_TRAP_SWITCH_MAC_CTRL);
+       else
+               sw_w32(0x2, RTL839X_SPCL_TRAP_SWITCH_MAC_CTRL);
+
        /* Enable MAC Polling PHY again */
        rtl83xx_enable_phy_polling(priv);
        pr_debug("Please wait until PHY is settled\n");