Re: [PATCH net-next v5 06/16] net: dsa: vsc73xx: add port_stp_state_set function

From: Simon Horman
Date: Tue Feb 27 2024 - 14:46:02 EST


On Fri, Feb 23, 2024 at 10:00:36PM +0100, Pawel Dembicki wrote:
> This isn't a fully functional implementation of 802.1D, but
> port_stp_state_set is required for a future tag8021q operations.
>
> This implementation handles properly all states, but vsc73xx doesn't
> forward STP packets.
>
> Signed-off-by: Pawel Dembicki <paweldembicki@xxxxxxxxx>

..

> diff --git a/drivers/net/dsa/vitesse-vsc73xx-core.c b/drivers/net/dsa/vitesse-vsc73xx-core.c

..

> @@ -1036,6 +1029,89 @@ static void vsc73xx_phylink_get_caps(struct dsa_switch *dsa, int port,
> config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100 | MAC_1000;
> }
>
> +static void vsc73xx_refresh_fwd_map(struct dsa_switch *ds, int port, u8 state)
> +{
> + struct dsa_port *other_dp, *dp = dsa_to_port(ds, port);
> + struct vsc73xx *vsc = ds->priv;
> + u16 mask;
> +
> + if (state != BR_STATE_FORWARDING) {
> + /* Ports that aren't in the forwarding state must not
> + * forward packets anywhere.
> + */
> + vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0,
> + VSC73XX_SRCMASKS + port,
> + VSC73XX_SRCMASKS_PORTS_MASK, 0);
> +
> + dsa_switch_for_each_available_port(other_dp, ds) {
> + if (other_dp == dp)
> + continue;
> + vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0,
> + VSC73XX_SRCMASKS + other_dp->index,
> + BIT(port), 0);
> + }
> +
> + return;

Nit: the line above should be indented by one more tab.

> + }

..