Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 704e06b9 authored by Steffen Bätz's avatar Steffen Bätz Committed by Greg Kroah-Hartman
Browse files

net: dsa: mv88e6xxx: Enable IGMP snooping on user ports only



[ Upstream commit 7bcad0f0e6fbc1d613e49e0ee35c8e5f2e685bb0 ]

Do not set the MV88E6XXX_PORT_CTL0_IGMP_MLD_SNOOP bit on CPU or DSA ports.

This allows the host CPU port to be a regular IGMP listener by sending out
IGMP Membership Reports, which would otherwise not be forwarded by the
mv88exxx chip, but directly looped back to the CPU port itself.

Fixes: 54d792f2 ("net: dsa: Centralise global and port setup code into mv88e6xxx.")
Signed-off-by: default avatarSteffen Bätz <steffen@innosonix.de>
Signed-off-by: default avatarFabio Estevam <festevam@denx.de>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Link: https://lore.kernel.org/r/20230329150140.701559-1-festevam@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent fd7cff50
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -2433,9 +2433,14 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
	 * If this is the upstream port for this switch, enable
	 * forwarding of unknown unicasts and multicasts.
	 */
	reg = MV88E6XXX_PORT_CTL0_IGMP_MLD_SNOOP |
		MV88E6185_PORT_CTL0_USE_TAG | MV88E6185_PORT_CTL0_USE_IP |
	reg = MV88E6185_PORT_CTL0_USE_TAG | MV88E6185_PORT_CTL0_USE_IP |
		MV88E6XXX_PORT_CTL0_STATE_FORWARDING;
	/* Forward any IPv4 IGMP or IPv6 MLD frames received
	 * by a USER port to the CPU port to allow snooping.
	 */
	if (dsa_is_user_port(ds, port))
		reg |= MV88E6XXX_PORT_CTL0_IGMP_MLD_SNOOP;

	err = mv88e6xxx_port_write(chip, port, MV88E6XXX_PORT_CTL0, reg);
	if (err)
		return err;