net: dsa: remove cross-chip support from the MRP notifiers
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 21 Jun 2021 16:42:19 +0000 (19:42 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 21 Jun 2021 19:50:20 +0000 (12:50 -0700)
With MRP hardware assist being supported only by the ocelot switch
family, which by design does not support cross-chip bridging, the
current match functions are at best a guess and have not been confirmed
in any way to do anything relevant in a multi-switch topology.

Drop the code and make the notifiers match only on the targeted switch
port.

Cc: Horatiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/switch.c

index 75f567390a6b60e1717586d4174d5556a2164d61..c1e5afafe63325290179aee08b5cbcba0c91c7f0 100644 (file)
@@ -346,36 +346,16 @@ static int dsa_switch_change_tag_proto(struct dsa_switch *ds,
        return 0;
 }
 
-static bool dsa_switch_mrp_match(struct dsa_switch *ds, int port,
-                                struct dsa_notifier_mrp_info *info)
-{
-       if (ds->index == info->sw_index && port == info->port)
-               return true;
-
-       if (dsa_is_dsa_port(ds, port))
-               return true;
-
-       return false;
-}
-
 static int dsa_switch_mrp_add(struct dsa_switch *ds,
                              struct dsa_notifier_mrp_info *info)
 {
-       int err = 0;
-       int port;
-
        if (!ds->ops->port_mrp_add)
                return -EOPNOTSUPP;
 
-       for (port = 0; port < ds->num_ports; port++) {
-               if (dsa_switch_mrp_match(ds, port, info)) {
-                       err = ds->ops->port_mrp_add(ds, port, info->mrp);
-                       if (err)
-                               break;
-               }
-       }
+       if (ds->index == info->sw_index)
+               return ds->ops->port_mrp_add(ds, info->port, info->mrp);
 
-       return err;
+       return 0;
 }
 
 static int dsa_switch_mrp_del(struct dsa_switch *ds,
@@ -390,39 +370,18 @@ static int dsa_switch_mrp_del(struct dsa_switch *ds,
        return 0;
 }
 
-static bool
-dsa_switch_mrp_ring_role_match(struct dsa_switch *ds, int port,
-                              struct dsa_notifier_mrp_ring_role_info *info)
-{
-       if (ds->index == info->sw_index && port == info->port)
-               return true;
-
-       if (dsa_is_dsa_port(ds, port))
-               return true;
-
-       return false;
-}
-
 static int
 dsa_switch_mrp_add_ring_role(struct dsa_switch *ds,
                             struct dsa_notifier_mrp_ring_role_info *info)
 {
-       int err = 0;
-       int port;
-
        if (!ds->ops->port_mrp_add)
                return -EOPNOTSUPP;
 
-       for (port = 0; port < ds->num_ports; port++) {
-               if (dsa_switch_mrp_ring_role_match(ds, port, info)) {
-                       err = ds->ops->port_mrp_add_ring_role(ds, port,
-                                                             info->mrp);
-                       if (err)
-                               break;
-               }
-       }
+       if (ds->index == info->sw_index)
+               return ds->ops->port_mrp_add_ring_role(ds, info->port,
+                                                      info->mrp);
 
-       return err;
+       return 0;
 }
 
 static int