net: dsa: mv88e6xxx: use mv88e6185_g1_vtu_getnext() for the 6250
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>
Mon, 25 Jan 2021 15:04:48 +0000 (16:04 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 27 Jan 2021 01:58:28 +0000 (17:58 -0800)
mv88e6250_g1_vtu_getnext is almost identical to
mv88e6185_g1_vtu_getnext, except for the 6250 only having 64 databases
instead of 256. We can reduce code duplication by simply masking off
the extra two garbage bits when assembling the fid from VTU op [3:0]
and [11:8].

Reviewed-by: Tobias Waldekranz <tobias@waldekranz.com>
Tested-by: Tobias Waldekranz <tobias@waldekranz.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/mv88e6xxx/global1.h
drivers/net/dsa/mv88e6xxx/global1_vtu.c

index 2f976050a0d71d781c095aaaf683385107c36266..a579518d733327f3bfe06b9256551d5dfcff8b33 100644 (file)
@@ -4049,7 +4049,7 @@ static const struct mv88e6xxx_ops mv88e6250_ops = {
        .mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
        .pot_clear = mv88e6xxx_g2_pot_clear,
        .reset = mv88e6250_g1_reset,
-       .vtu_getnext = mv88e6250_g1_vtu_getnext,
+       .vtu_getnext = mv88e6185_g1_vtu_getnext,
        .vtu_loadpurge = mv88e6250_g1_vtu_loadpurge,
        .avb_ops = &mv88e6352_avb_ops,
        .ptp_ops = &mv88e6250_ptp_ops,
index 80a182c5b98aff9c23d32961e29c4ce352d78a00..d2dd2f4e4730d994c5736479f4e017a6f493cc51 100644 (file)
@@ -336,8 +336,6 @@ int mv88e6185_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
                             struct mv88e6xxx_vtu_entry *entry);
 int mv88e6185_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
                               struct mv88e6xxx_vtu_entry *entry);
-int mv88e6250_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
-                            struct mv88e6xxx_vtu_entry *entry);
 int mv88e6250_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
                               struct mv88e6xxx_vtu_entry *entry);
 int mv88e6352_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
index 7b96396be609e7bb1331d63c6fd11a403922e0b7..519ae48ba96e947e9b7927bbc759873b01c23672 100644 (file)
@@ -336,39 +336,6 @@ int mv88e6xxx_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
        return mv88e6xxx_g1_vtu_vid_read(chip, entry);
 }
 
-int mv88e6250_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
-                            struct mv88e6xxx_vtu_entry *entry)
-{
-       u16 val;
-       int err;
-
-       err = mv88e6xxx_g1_vtu_getnext(chip, entry);
-       if (err)
-               return err;
-
-       if (entry->valid) {
-               err = mv88e6185_g1_vtu_data_read(chip, entry);
-               if (err)
-                       return err;
-
-               err = mv88e6185_g1_stu_data_read(chip, entry);
-               if (err)
-                       return err;
-
-               /* VTU DBNum[3:0] are located in VTU Operation 3:0
-                * VTU DBNum[5:4] are located in VTU Operation 9:8
-                */
-               err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_OP, &val);
-               if (err)
-                       return err;
-
-               entry->fid = val & 0x000f;
-               entry->fid |= (val & 0x0300) >> 4;
-       }
-
-       return 0;
-}
-
 int mv88e6185_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
                             struct mv88e6xxx_vtu_entry *entry)
 {
@@ -389,7 +356,7 @@ int mv88e6185_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
                        return err;
 
                /* VTU DBNum[3:0] are located in VTU Operation 3:0
-                * VTU DBNum[7:4] are located in VTU Operation 11:8
+                * VTU DBNum[7:4] ([5:4] for 6250) are located in VTU Operation 11:8 (9:8)
                 */
                err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_OP, &val);
                if (err)
@@ -397,6 +364,7 @@ int mv88e6185_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
 
                entry->fid = val & 0x000f;
                entry->fid |= (val & 0x0f00) >> 4;
+               entry->fid &= mv88e6xxx_num_databases(chip) - 1;
        }
 
        return 0;