Message ID | 20230329150140.701559-1-festevam@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 7bcad0f0e6fbc1d613e49e0ee35c8e5f2e685bb0 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: dsa: mv88e6xxx: Enable IGMP snooping on user ports only | expand |
On Wed, Mar 29, 2023 at 12:01:40PM -0300, Fabio Estevam wrote: > From: Steffen Bätz <steffen@innosonix.de> > > 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: 54d792f257c6 ("net: dsa: Centralise global and port setup code into mv88e6xxx.") > Signed-off-by: Steffen Bätz <steffen@innosonix.de> > Signed-off-by: Fabio Estevam <festevam@denx.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
On Wed, Mar 29, 2023 at 12:01:40PM -0300, Fabio Estevam wrote: > From: Steffen Bätz <steffen@innosonix.de> > > 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: 54d792f257c6 ("net: dsa: Centralise global and port setup code into mv88e6xxx.") I checked to see if the Fixes tag is correct, and... it's complicated. That patch comes from the consolidation of multiple drivers (mv88e6123_61_65.c, mv88e6131.c, mv88e6171.c, mv88e6352.c into what later became the common mv88e6xxx driver. In principle, each of the above drivers had their own buggy pre-existing logic to enable IGMP/MLD snooping on all ports, but it seems a pointless exercise to add individual Fixes: tags for all drivers prior to an unification process that took place in 2015. So this gets my: Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
On 3/29/2023 8:01 AM, Fabio Estevam wrote: > From: Steffen Bätz <steffen@innosonix.de> > > 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: 54d792f257c6 ("net: dsa: Centralise global and port setup code into mv88e6xxx.") > Signed-off-by: Steffen Bätz <steffen@innosonix.de> > Signed-off-by: Fabio Estevam <festevam@denx.de> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Wed, 29 Mar 2023 12:01:40 -0300 you wrote: > From: Steffen Bätz <steffen@innosonix.de> > > 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. > > [...] Here is the summary with links: - [net] net: dsa: mv88e6xxx: Enable IGMP snooping on user ports only https://git.kernel.org/netdev/net/c/7bcad0f0e6fb You are awesome, thank you!
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index b73d1d6747b7..62a126402983 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -3354,9 +3354,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;