net: dsa: felix: use PGID_CPU for FDB entry migration on NPI port
authorVladimir Oltean <vladimir.oltean@nxp.com>
Thu, 5 May 2022 16:22:10 +0000 (19:22 +0300)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 May 2022 04:00:11 +0000 (21:00 -0700)
ocelot_fdb_add() redirects FDB entries installed on the NPI port towards
the special reserved PGID_CPU used for host-filtered addresses. PGID_CPU
contains BIT(ocelot->num_phys_ports) in the destination port mask, which
is code name for the CPU port module.

Whereas felix_migrate_fdbs_to_*_port() uses the ocelot->num_phys_ports
PGID directly, and it appears that this works too. Even if this PGID is
set to zero, apparently its number is special and packets still reach
the CPU port module.

Nonetheless, in the end, these addresses end up in the same place
regardless of whether they go through an extra indirection layer or not.
Use PGID_CPU across to have more uniformity.

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

index 33cb124..8abe48a 100644 (file)
@@ -49,14 +49,13 @@ static int felix_migrate_fdbs_to_npi_port(struct dsa_switch *ds, int port,
 {
        struct net_device *bridge_dev = felix_classify_db(db);
        struct ocelot *ocelot = ds->priv;
-       int cpu = ocelot->num_phys_ports;
        int err;
 
        err = ocelot_fdb_del(ocelot, port, addr, vid, bridge_dev);
        if (err)
                return err;
 
-       return ocelot_fdb_add(ocelot, cpu, addr, vid, bridge_dev);
+       return ocelot_fdb_add(ocelot, PGID_CPU, addr, vid, bridge_dev);
 }
 
 static int felix_migrate_mdbs_to_npi_port(struct dsa_switch *ds, int port,
@@ -128,10 +127,9 @@ felix_migrate_fdbs_to_tag_8021q_port(struct dsa_switch *ds, int port,
 {
        struct net_device *bridge_dev = felix_classify_db(db);
        struct ocelot *ocelot = ds->priv;
-       int cpu = ocelot->num_phys_ports;
        int err;
 
-       err = ocelot_fdb_del(ocelot, cpu, addr, vid, bridge_dev);
+       err = ocelot_fdb_del(ocelot, PGID_CPU, addr, vid, bridge_dev);
        if (err)
                return err;