net: dsa: mt7530: iterate using dsa_switch_for_each_user_port in bridging ops
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 6 Dec 2021 16:57:49 +0000 (18:57 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 8 Dec 2021 22:31:14 +0000 (14:31 -0800)
Avoid repeated calls to dsa_to_port() (some hidden behind dsa_is_user_port
and some in plain sight) by keeping two struct dsa_port references: one
to the port passed as argument, and another to the other ports of the
switch that we're iterating over.

dsa_to_port(ds, i) gets replaced by other_dp, i gets replaced by
other_port which is derived from other_dp->index, dsa_is_user_port is
handled by the DSA iterator.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/mt7530.c

index 9890672..f7238f0 100644 (file)
@@ -1188,27 +1188,31 @@ static int
 mt7530_port_bridge_join(struct dsa_switch *ds, int port,
                        struct net_device *bridge)
 {
-       struct mt7530_priv *priv = ds->priv;
+       struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
        u32 port_bitmap = BIT(MT7530_CPU_PORT);
-       int i;
+       struct mt7530_priv *priv = ds->priv;
 
        mutex_lock(&priv->reg_mutex);
 
-       for (i = 0; i < MT7530_NUM_PORTS; i++) {
+       dsa_switch_for_each_user_port(other_dp, ds) {
+               int other_port = other_dp->index;
+
+               if (dp == other_dp)
+                       continue;
+
                /* Add this port to the port matrix of the other ports in the
                 * same bridge. If the port is disabled, port matrix is kept
                 * and not being setup until the port becomes enabled.
                 */
-               if (dsa_is_user_port(ds, i) && i != port) {
-                       if (dsa_to_port(ds, i)->bridge_dev != bridge)
-                               continue;
-                       if (priv->ports[i].enable)
-                               mt7530_set(priv, MT7530_PCR_P(i),
-                                          PCR_MATRIX(BIT(port)));
-                       priv->ports[i].pm |= PCR_MATRIX(BIT(port));
+               if (other_dp->bridge_dev != bridge)
+                       continue;
 
-                       port_bitmap |= BIT(i);
-               }
+               if (priv->ports[other_port].enable)
+                       mt7530_set(priv, MT7530_PCR_P(other_port),
+                                  PCR_MATRIX(BIT(port)));
+               priv->ports[other_port].pm |= PCR_MATRIX(BIT(port));
+
+               port_bitmap |= BIT(other_port);
        }
 
        /* Add the all other ports to this port matrix. */
@@ -1301,24 +1305,28 @@ static void
 mt7530_port_bridge_leave(struct dsa_switch *ds, int port,
                         struct net_device *bridge)
 {
+       struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
        struct mt7530_priv *priv = ds->priv;
-       int i;
 
        mutex_lock(&priv->reg_mutex);
 
-       for (i = 0; i < MT7530_NUM_PORTS; i++) {
+       dsa_switch_for_each_user_port(other_dp, ds) {
+               int other_port = other_dp->index;
+
+               if (dp == other_dp)
+                       continue;
+
                /* Remove this port from the port matrix of the other ports
                 * in the same bridge. If the port is disabled, port matrix
                 * is kept and not being setup until the port becomes enabled.
                 */
-               if (dsa_is_user_port(ds, i) && i != port) {
-                       if (dsa_to_port(ds, i)->bridge_dev != bridge)
-                               continue;
-                       if (priv->ports[i].enable)
-                               mt7530_clear(priv, MT7530_PCR_P(i),
-                                            PCR_MATRIX(BIT(port)));
-                       priv->ports[i].pm &= ~PCR_MATRIX(BIT(port));
-               }
+               if (other_dp->bridge_dev != bridge)
+                       continue;
+
+               if (priv->ports[other_port].enable)
+                       mt7530_clear(priv, MT7530_PCR_P(other_port),
+                                    PCR_MATRIX(BIT(port)));
+               priv->ports[other_port].pm &= ~PCR_MATRIX(BIT(port));
        }
 
        /* Set the cpu port to be the only one in the port matrix of