Messages in this thread | | | Date | Fri, 10 Feb 2023 20:56:29 +0200 | From | Vladimir Oltean <> | Subject | Re: [PATCH net-next] net: dsa: mt7530: add support for changing DSA master |
| |
On Fri, Feb 10, 2023 at 08:29:43PM +0300, arinc9.unal@gmail.com wrote: > From: Richard van Schagen <richard@routerhints.com> > > Add support for changing the master of a port on the MT7530 DSA subdriver. > > [ arinc.unal@arinc9.com: Wrote subject and changelog ] > > Tested-by: Arınç ÜNAL <arinc.unal@arinc9.com> > Signed-off-by: Richard van Schagen <richard@routerhints.com> > Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> > --- > drivers/net/dsa/mt7530.c | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > index b5ad4b4fc00c..04bb4986454e 100644 > --- a/drivers/net/dsa/mt7530.c > +++ b/drivers/net/dsa/mt7530.c > @@ -1072,6 +1072,38 @@ mt7530_port_disable(struct dsa_switch *ds, int port) > mutex_unlock(&priv->reg_mutex); > } > > +static int > +mt7530_port_change_master(struct dsa_switch *ds, int port, > + struct net_device *master, > + struct netlink_ext_ack *extack)
alignment
> +{ > + struct mt7530_priv *priv = ds->priv; > + struct dsa_port *dp = dsa_to_port(ds, port); > + struct dsa_port *cpu_dp = master->dsa_ptr; > + int old_cpu = dp->cpu_dp->index; > + int new_cpu = cpu_dp->index;
I believe you need to reject LAG DSA masters.
> + > + mutex_lock(&priv->reg_mutex); > + > + /* Move old to new cpu on User port */ > + priv->ports[port].pm &= ~PCR_MATRIX(BIT(old_cpu)); > + priv->ports[port].pm |= PCR_MATRIX(BIT(new_cpu)); > + > + mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, > + priv->ports[port].pm); > + > + /* Move user port from old cpu to new cpu */ > + priv->ports[old_cpu].pm &= ~PCR_MATRIX(BIT(port)); > + priv->ports[new_cpu].pm |= PCR_MATRIX(BIT(port)); > + > + mt7530_write(priv, MT7530_PCR_P(old_cpu), priv->ports[old_cpu].pm); > + mt7530_write(priv, MT7530_PCR_P(new_cpu), priv->ports[new_cpu].pm);
- who writes to the "pm" field of CPU ports? - how does this line up with your other patch which said (AFAIU) that the port matrix of CPU ports should be 0 and that should be fine? - read/modify/write (rmw) using PCR_MATRIX_MASK rather than mt7530_write(). That overwrites the other PCR fields.
> + > + mutex_unlock(&priv->reg_mutex); > + > + return 0; > +} > + > static int > mt7530_port_change_mtu(struct dsa_switch *ds, int port, int new_mtu) > { > @@ -3157,6 +3189,7 @@ static const struct dsa_switch_ops mt7530_switch_ops = { > .set_ageing_time = mt7530_set_ageing_time, > .port_enable = mt7530_port_enable, > .port_disable = mt7530_port_disable, > + .port_change_master = mt7530_port_change_master, > .port_change_mtu = mt7530_port_change_mtu, > .port_max_mtu = mt7530_port_max_mtu, > .port_stp_state_set = mt7530_stp_state_set, > -- > 2.37.2 >
| |