u16 pvid;
        int err;
 
-       if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_VTU))
+       if (!chip->info->max_vid)
                return -EOPNOTSUPP;
 
        mutex_lock(&chip->reg_lock);
                err = cb(&vlan->obj);
                if (err)
                        break;
-       } while (next.vid < GLOBAL_VTU_VID_MASK);
+       } while (next.vid < chip->info->max_vid);
 
 unlock:
        mutex_unlock(&chip->reg_lock);
                        break;
 
                set_bit(vlan.fid, fid_bitmap);
-       } while (vlan.vid < GLOBAL_VTU_VID_MASK);
+       } while (vlan.vid < chip->info->max_vid);
 
        /* The reset value 0x000 is used to indicate that multiple address
         * databases are not needed. Return the next positive available.
                PORT_CONTROL_2_8021Q_DISABLED;
        int err;
 
-       if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_VTU))
+       if (!chip->info->max_vid)
                return -EOPNOTSUPP;
 
        mutex_lock(&chip->reg_lock);
        struct mv88e6xxx_chip *chip = ds->priv;
        int err;
 
-       if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_VTU))
+       if (!chip->info->max_vid)
                return -EOPNOTSUPP;
 
        /* If the requested port doesn't belong to the same bridge as the VLAN
        bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
        u16 vid;
 
-       if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_VTU))
+       if (!chip->info->max_vid)
                return;
 
        mutex_lock(&chip->reg_lock);
        u16 pvid, vid;
        int err = 0;
 
-       if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_VTU))
+       if (!chip->info->max_vid)
                return -EOPNOTSUPP;
 
        mutex_lock(&chip->reg_lock);
                                  int (*cb)(struct switchdev_obj *obj))
 {
        struct mv88e6xxx_vtu_entry vlan = {
-               .vid = GLOBAL_VTU_VID_MASK, /* all ones */
+               .vid = chip->info->max_vid,
        };
        u16 fid;
        int err;
                                                 obj, cb);
                if (err)
                        return err;
-       } while (vlan.vid < GLOBAL_VTU_VID_MASK);
+       } while (vlan.vid < chip->info->max_vid);
 
        return err;
 }
                .name = "Marvell 88E6085",
                .num_databases = 4096,
                .num_ports = 10,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6095/88E6095F",
                .num_databases = 256,
                .num_ports = 11,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6097/88E6097F",
                .num_databases = 4096,
                .num_ports = 11,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6123",
                .num_databases = 4096,
                .num_ports = 3,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6131",
                .num_databases = 256,
                .num_ports = 8,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6341",
                .num_databases = 4096,
                .num_ports = 6,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 3750,
                .name = "Marvell 88E6161",
                .num_databases = 4096,
                .num_ports = 6,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6165",
                .num_databases = 4096,
                .num_ports = 6,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6171",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6172",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6175",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6176",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6185",
                .num_databases = 256,
                .num_ports = 10,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6240",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6320",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6321",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6341",
                .num_databases = 4096,
                .num_ports = 6,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 3750,
                .name = "Marvell 88E6350",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6351",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
                .name = "Marvell 88E6352",
                .num_databases = 4096,
                .num_ports = 7,
+               .max_vid = 4095,
                .port_base_addr = 0x10,
                .global1_addr = 0x1b,
                .age_time_coeff = 15000,
 
 #define MV88E6XXX_FLAG_G2_POT          BIT_ULL(MV88E6XXX_CAP_G2_POT)
 
 #define MV88E6XXX_FLAG_STU             BIT_ULL(MV88E6XXX_CAP_STU)
-#define MV88E6XXX_FLAG_VTU             BIT_ULL(MV88E6XXX_CAP_VTU)
 
 /* Ingress Rate Limit unit */
 #define MV88E6XXX_FLAGS_IRL            \
 #define MV88E6XXX_FLAGS_FAMILY_6095    \
        (MV88E6XXX_FLAG_GLOBAL2 |       \
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_MULTI_CHIP)
 
 #define MV88E6XXX_FLAGS_FAMILY_6097    \
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
         MV88E6XXX_FLAG_G2_POT |        \
         MV88E6XXX_FLAG_STU |           \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP)
 
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
         MV88E6XXX_FLAG_G2_POT |        \
         MV88E6XXX_FLAG_STU |           \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP)
 
        (MV88E6XXX_FLAG_GLOBAL2 |       \
         MV88E6XXX_FLAG_G2_INT |        \
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
-        MV88E6XXX_FLAGS_MULTI_CHIP |   \
-        MV88E6XXX_FLAG_VTU)
+        MV88E6XXX_FLAGS_MULTI_CHIP)
 
 #define MV88E6XXX_FLAGS_FAMILY_6320    \
        (MV88E6XXX_FLAG_EEE |           \
         MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
         MV88E6XXX_FLAG_G2_POT |        \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP)
 
         MV88E6XXX_FLAG_G2_INT |        \
         MV88E6XXX_FLAG_G2_POT |        \
         MV88E6XXX_FLAG_STU |           \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP |   \
         MV88E6XXX_FLAGS_SERDES)
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
         MV88E6XXX_FLAG_G2_POT |        \
         MV88E6XXX_FLAG_STU |           \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP)
 
         MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
         MV88E6XXX_FLAG_G2_POT |        \
         MV88E6XXX_FLAG_STU |           \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP |   \
         MV88E6XXX_FLAGS_SERDES)
         MV88E6XXX_FLAG_GLOBAL2 |       \
         MV88E6XXX_FLAG_G2_INT |        \
         MV88E6XXX_FLAG_STU |           \
-        MV88E6XXX_FLAG_VTU |           \
         MV88E6XXX_FLAGS_IRL |          \
         MV88E6XXX_FLAGS_MULTI_CHIP)
 
        const char *name;
        unsigned int num_databases;
        unsigned int num_ports;
+       unsigned int max_vid;
        unsigned int port_base_addr;
        unsigned int global1_addr;
        unsigned int age_time_coeff;