From: Birger Koblitz Date: Thu, 29 Apr 2021 20:59:55 +0000 (+0200) Subject: realtek: add IGMP/MLD snooping support X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=cf4edabefd649f4126b8150c01adec81a6c17410;p=openwrt%2Fstaging%2Fnbd.git realtek: add IGMP/MLD snooping support 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 --- diff --git a/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.c index 38b2901652..c5c6e3b6b7 100644 --- a/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.c +++ b/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.c @@ -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; } diff --git a/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.h b/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.h index d7b4317cbb..c7e97057b3 100644 --- a/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.h +++ b/target/linux/realtek/files-5.4/drivers/net/ethernet/rtl838x_eth.h @@ -177,6 +177,7 @@ #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)