|
@@ -1440,7 +1440,7 @@ static int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port,
|
|
|
u16 pvid;
|
|
|
int err;
|
|
|
|
|
|
- if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_VTU))
|
|
|
+ if (!chip->info->max_vid)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
mutex_lock(&chip->reg_lock);
|
|
@@ -1478,7 +1478,7 @@ static int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port,
|
|
|
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);
|
|
@@ -1640,7 +1640,7 @@ static int mv88e6xxx_atu_new(struct mv88e6xxx_chip *chip, u16 *fid)
|
|
|
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.
|
|
@@ -1799,7 +1799,7 @@ static int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
|
|
|
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);
|
|
@@ -1817,7 +1817,7 @@ mv88e6xxx_port_vlan_prepare(struct dsa_switch *ds, int port,
|
|
|
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
|
|
@@ -1860,7 +1860,7 @@ static void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
|
|
|
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);
|
|
@@ -1921,7 +1921,7 @@ static int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port,
|
|
|
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);
|
|
@@ -2090,7 +2090,7 @@ static int mv88e6xxx_port_db_dump(struct mv88e6xxx_chip *chip, int port,
|
|
|
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;
|
|
@@ -2121,7 +2121,7 @@ static int mv88e6xxx_port_db_dump(struct mv88e6xxx_chip *chip, int port,
|
|
|
obj, cb);
|
|
|
if (err)
|
|
|
return err;
|
|
|
- } while (vlan.vid < GLOBAL_VTU_VID_MASK);
|
|
|
+ } while (vlan.vid < chip->info->max_vid);
|
|
|
|
|
|
return err;
|
|
|
}
|
|
@@ -3685,6 +3685,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6085",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 10,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3702,6 +3703,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6095/88E6095F",
|
|
|
.num_databases = 256,
|
|
|
.num_ports = 11,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3718,6 +3720,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6097/88E6097F",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 11,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3735,6 +3738,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6123",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 3,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3752,6 +3756,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6131",
|
|
|
.num_databases = 256,
|
|
|
.num_ports = 8,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3768,6 +3773,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6341",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 6,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 3750,
|
|
@@ -3784,6 +3790,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6161",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 6,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3801,6 +3808,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6165",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 6,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3818,6 +3826,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6171",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3835,6 +3844,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6172",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3852,6 +3862,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6175",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3869,6 +3880,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6176",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3886,6 +3898,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6185",
|
|
|
.num_databases = 256,
|
|
|
.num_ports = 10,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3953,6 +3966,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6240",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -3987,6 +4001,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6320",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -4004,6 +4019,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6321",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -4020,6 +4036,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6341",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 6,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 3750,
|
|
@@ -4036,6 +4053,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6350",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -4053,6 +4071,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6351",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|
|
@@ -4070,6 +4089,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.name = "Marvell 88E6352",
|
|
|
.num_databases = 4096,
|
|
|
.num_ports = 7,
|
|
|
+ .max_vid = 4095,
|
|
|
.port_base_addr = 0x10,
|
|
|
.global1_addr = 0x1b,
|
|
|
.age_time_coeff = 15000,
|