Skip to content

Commit

Permalink
realtek: add IGMP/MLD snooping support
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Birger Koblitz authored and ynezz committed May 7, 2021
1 parent 9e8d62e commit cf4edab
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 4 deletions.
Expand Up @@ -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;
}

Expand Down
Expand Up @@ -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)
Expand Down

0 comments on commit cf4edab

Please sign in to comment.