Messages in this thread Patch in this message | | | From | arinc9.unal@gmail ... | Subject | [PATCH net-next] net: dsa: mt7530: add support for changing DSA master | Date | Fri, 10 Feb 2023 20:29:43 +0300 |
| |
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) +{ + 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; + + 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); + + 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
| |