net: dsa: mt7530: sort link settings ops and force link down on all ports
authorArınç ÜNAL <arinc.unal@arinc9.com>
Fri, 1 Mar 2024 10:43:04 +0000 (12:43 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 5 Mar 2024 11:23:43 +0000 (12:23 +0100)
port_enable and port_disable clears the link settings. Move that to
mt7530_setup() and mt7531_setup_common() which set up the switches. This
way, the link settings are cleared on all ports at setup, and then only
once with phylink_mac_link_down() when a link goes down.

Enable force mode at setup to apply the force part of the link settings.
This ensures that disabled ports will have their link down.

Suggested-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/dsa/mt7530.c

index 5c8ad41ce8cda09281752054fc204b688da6d666..91d927bb49f743971e700266c046949bbf335b9c 100644 (file)
@@ -1018,7 +1018,6 @@ mt7530_port_enable(struct dsa_switch *ds, int port,
        priv->ports[port].enable = true;
        mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
                   priv->ports[port].pm);
-       mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK);
 
        mutex_unlock(&priv->reg_mutex);
 
@@ -1038,7 +1037,6 @@ mt7530_port_disable(struct dsa_switch *ds, int port)
        priv->ports[port].enable = false;
        mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
                   PCR_MATRIX_CLR);
-       mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK);
 
        mutex_unlock(&priv->reg_mutex);
 }
@@ -2257,6 +2255,12 @@ mt7530_setup(struct dsa_switch *ds)
        mt7530_mib_reset(ds);
 
        for (i = 0; i < MT7530_NUM_PORTS; i++) {
+               /* Clear link settings and enable force mode to force link down
+                * on all ports until they're enabled later.
+                */
+               mt7530_rmw(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK |
+                          PMCR_FORCE_MODE, PMCR_FORCE_MODE);
+
                /* Disable forwarding by default on all ports */
                mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK,
                           PCR_MATRIX_CLR);
@@ -2359,6 +2363,12 @@ mt7531_setup_common(struct dsa_switch *ds)
                     UNU_FFP_MASK);
 
        for (i = 0; i < MT7530_NUM_PORTS; i++) {
+               /* Clear link settings and enable force mode to force link down
+                * on all ports until they're enabled later.
+                */
+               mt7530_rmw(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK |
+                          MT7531_FORCE_MODE, MT7531_FORCE_MODE);
+
                /* Disable forwarding by default on all ports */
                mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK,
                           PCR_MATRIX_CLR);