realtek: add IGMP/MLD snooping support
authorBirger Koblitz <git@birger-koblitz.de>
Thu, 29 Apr 2021 20:59:55 +0000 (22:59 +0200)
committerPetr Štetiar <ynezz@true.cz>
Fri, 7 May 2021 05:05:16 +0000 (07:05 +0200)
This adds snooping support for IGMP and MLD on RTL8380/90/9300
by trapping IGMP and MLD packets to the CPU.

Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.c
target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.h

index 38b2901652b1728a377f0afb3240c881d8d2d54c..c5c6e3b6b7e9be4bbc79f0412bc84cbf709f7b08 100644 (file)
@@ -897,28 +897,30 @@ static int rtl838x_eth_open(struct net_device *ndev)
        switch (priv->family_id) {
        case RTL8380_FAMILY_ID:
                rtl838x_hw_en_rxtx(priv);
-               /* Trap IGMP traffic to CPU-Port */
+               /* Trap IGMP/MLD traffic to CPU-Port */
                sw_w32(0x3, RTL838X_SPCL_TRAP_IGMP_CTRL);
                /* Flush learned FDB entries on link down of a port */
                sw_w32_mask(0, BIT(7), RTL838X_L2_CTRL_0);
                break;
+
        case RTL8390_FAMILY_ID:
                rtl839x_hw_en_rxtx(priv);
+               // Trap MLD and IGMP messages to CPU_PORT
                sw_w32(0x3, RTL839X_SPCL_TRAP_IGMP_CTRL);
                /* Flush learned FDB entries on link down of a port */
                sw_w32_mask(0, BIT(7), RTL839X_L2_CTRL_0);
                break;
+
        case RTL9300_FAMILY_ID:
                rtl93xx_hw_en_rxtx(priv);
                /* Flush learned FDB entries on link down of a port */
                sw_w32_mask(0, BIT(7), RTL930X_L2_CTRL);
-               sw_w32_mask(BIT(28), 0, RTL930X_L2_PORT_SABLK_CTRL);
-               sw_w32_mask(BIT(28), 0, RTL930X_L2_PORT_DABLK_CTRL);
+               // Trap MLD and IGMP messages to CPU_PORT
+               sw_w32((0x2 << 3) | 0x2,  RTL930X_VLAN_APP_PKT_CTRL);
                break;
 
        case RTL9310_FAMILY_ID:
                rtl93xx_hw_en_rxtx(priv);
-//             TODO: Add trapping of IGMP frames to CPU-port
                break;
        }
 
index d7b4317cbb52a93f7c379787d24b491229d95516..c7e97057b332740a5db22dbf1ab6f5d62f95ccd2 100644 (file)
 #define RTL839X_RMA_CTRL_2                     (0x1208)
 #define RTL839X_RMA_CTRL_3                     (0x120C)
 
+#define RTL930X_VLAN_APP_PKT_CTRL              (0xA23C)
 #define RTL930X_RMA_CTRL_0                     (0x9E60)
 #define RTL930X_RMA_CTRL_1                     (0x9E64)
 #define RTL930X_RMA_CTRL_2                     (0x9E68)