|
@@ -2293,12 +2293,19 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
|
|
bus->write = mv88e6xxx_mdio_write;
|
|
bus->write = mv88e6xxx_mdio_write;
|
|
bus->parent = chip->dev;
|
|
bus->parent = chip->dev;
|
|
|
|
|
|
|
|
+ if (!external) {
|
|
|
|
+ err = mv88e6xxx_g2_irq_mdio_setup(chip, bus);
|
|
|
|
+ if (err)
|
|
|
|
+ return err;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (np)
|
|
if (np)
|
|
err = of_mdiobus_register(bus, np);
|
|
err = of_mdiobus_register(bus, np);
|
|
else
|
|
else
|
|
err = mdiobus_register(bus);
|
|
err = mdiobus_register(bus);
|
|
if (err) {
|
|
if (err) {
|
|
dev_err(chip->dev, "Cannot register MDIO bus (%d)\n", err);
|
|
dev_err(chip->dev, "Cannot register MDIO bus (%d)\n", err);
|
|
|
|
+ mv88e6xxx_g2_irq_mdio_free(chip, bus);
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2325,6 +2332,9 @@ static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip)
|
|
list_for_each_entry(mdio_bus, &chip->mdios, list) {
|
|
list_for_each_entry(mdio_bus, &chip->mdios, list) {
|
|
bus = mdio_bus->bus;
|
|
bus = mdio_bus->bus;
|
|
|
|
|
|
|
|
+ if (!mdio_bus->external)
|
|
|
|
+ mv88e6xxx_g2_irq_mdio_free(chip, bus);
|
|
|
|
+
|
|
mdiobus_unregister(bus);
|
|
mdiobus_unregister(bus);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -3319,6 +3329,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6085",
|
|
.name = "Marvell 88E6085",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 10,
|
|
.num_ports = 10,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3339,6 +3350,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6095/88E6095F",
|
|
.name = "Marvell 88E6095/88E6095F",
|
|
.num_databases = 256,
|
|
.num_databases = 256,
|
|
.num_ports = 11,
|
|
.num_ports = 11,
|
|
|
|
+ .num_internal_phys = 0,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3357,6 +3369,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6097/88E6097F",
|
|
.name = "Marvell 88E6097/88E6097F",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11,
|
|
.num_ports = 11,
|
|
|
|
+ .num_internal_phys = 8,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3377,6 +3390,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6123",
|
|
.name = "Marvell 88E6123",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 3,
|
|
.num_ports = 3,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3397,6 +3411,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6131",
|
|
.name = "Marvell 88E6131",
|
|
.num_databases = 256,
|
|
.num_databases = 256,
|
|
.num_ports = 8,
|
|
.num_ports = 8,
|
|
|
|
+ .num_internal_phys = 0,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3415,6 +3430,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6341",
|
|
.name = "Marvell 88E6341",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 6,
|
|
.num_ports = 6,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 11,
|
|
.num_gpio = 11,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3422,6 +3438,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global2_addr = 0x1c,
|
|
.global2_addr = 0x1c,
|
|
.age_time_coeff = 3750,
|
|
.age_time_coeff = 3750,
|
|
.atu_move_port_mask = 0x1f,
|
|
.atu_move_port_mask = 0x1f,
|
|
|
|
+ .g1_irqs = 9,
|
|
.g2_irqs = 10,
|
|
.g2_irqs = 10,
|
|
.pvt = true,
|
|
.pvt = true,
|
|
.multi_chip = true,
|
|
.multi_chip = true,
|
|
@@ -3435,6 +3452,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6161",
|
|
.name = "Marvell 88E6161",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 6,
|
|
.num_ports = 6,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3455,6 +3473,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6165",
|
|
.name = "Marvell 88E6165",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 6,
|
|
.num_ports = 6,
|
|
|
|
+ .num_internal_phys = 0,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3475,6 +3494,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6171",
|
|
.name = "Marvell 88E6171",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3495,6 +3515,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6172",
|
|
.name = "Marvell 88E6172",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 15,
|
|
.num_gpio = 15,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3516,6 +3537,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6175",
|
|
.name = "Marvell 88E6175",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3536,6 +3558,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6176",
|
|
.name = "Marvell 88E6176",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 15,
|
|
.num_gpio = 15,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3557,6 +3580,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6185",
|
|
.name = "Marvell 88E6185",
|
|
.num_databases = 256,
|
|
.num_databases = 256,
|
|
.num_ports = 10,
|
|
.num_ports = 10,
|
|
|
|
+ .num_internal_phys = 0,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3575,6 +3599,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6190",
|
|
.name = "Marvell 88E6190",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
|
|
+ .num_internal_phys = 11,
|
|
.num_gpio = 16,
|
|
.num_gpio = 16,
|
|
.max_vid = 8191,
|
|
.max_vid = 8191,
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
@@ -3596,6 +3621,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6190X",
|
|
.name = "Marvell 88E6190X",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
|
|
+ .num_internal_phys = 11,
|
|
.num_gpio = 16,
|
|
.num_gpio = 16,
|
|
.max_vid = 8191,
|
|
.max_vid = 8191,
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
@@ -3617,6 +3643,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6191",
|
|
.name = "Marvell 88E6191",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
|
|
+ .num_internal_phys = 11,
|
|
.max_vid = 8191,
|
|
.max_vid = 8191,
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3638,6 +3665,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6240",
|
|
.name = "Marvell 88E6240",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 15,
|
|
.num_gpio = 15,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3660,6 +3688,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6290",
|
|
.name = "Marvell 88E6290",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
|
|
+ .num_internal_phys = 11,
|
|
.num_gpio = 16,
|
|
.num_gpio = 16,
|
|
.max_vid = 8191,
|
|
.max_vid = 8191,
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
@@ -3682,6 +3711,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6320",
|
|
.name = "Marvell 88E6320",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 15,
|
|
.num_gpio = 15,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3689,6 +3719,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global2_addr = 0x1c,
|
|
.global2_addr = 0x1c,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .g2_irqs = 10,
|
|
.atu_move_port_mask = 0xf,
|
|
.atu_move_port_mask = 0xf,
|
|
.pvt = true,
|
|
.pvt = true,
|
|
.multi_chip = true,
|
|
.multi_chip = true,
|
|
@@ -3703,6 +3734,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6321",
|
|
.name = "Marvell 88E6321",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 15,
|
|
.num_gpio = 15,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3710,6 +3742,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global2_addr = 0x1c,
|
|
.global2_addr = 0x1c,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .g2_irqs = 10,
|
|
.atu_move_port_mask = 0xf,
|
|
.atu_move_port_mask = 0xf,
|
|
.multi_chip = true,
|
|
.multi_chip = true,
|
|
.tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
@@ -3722,6 +3755,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.family = MV88E6XXX_FAMILY_6341,
|
|
.family = MV88E6XXX_FAMILY_6341,
|
|
.name = "Marvell 88E6341",
|
|
.name = "Marvell 88E6341",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_ports = 6,
|
|
.num_ports = 6,
|
|
.num_gpio = 11,
|
|
.num_gpio = 11,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
@@ -3730,6 +3764,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global2_addr = 0x1c,
|
|
.global2_addr = 0x1c,
|
|
.age_time_coeff = 3750,
|
|
.age_time_coeff = 3750,
|
|
.atu_move_port_mask = 0x1f,
|
|
.atu_move_port_mask = 0x1f,
|
|
|
|
+ .g1_irqs = 9,
|
|
.g2_irqs = 10,
|
|
.g2_irqs = 10,
|
|
.pvt = true,
|
|
.pvt = true,
|
|
.multi_chip = true,
|
|
.multi_chip = true,
|
|
@@ -3744,6 +3779,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6350",
|
|
.name = "Marvell 88E6350",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3764,6 +3800,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6351",
|
|
.name = "Marvell 88E6351",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
@@ -3784,6 +3821,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6352",
|
|
.name = "Marvell 88E6352",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 7,
|
|
.num_ports = 7,
|
|
|
|
+ .num_internal_phys = 5,
|
|
.num_gpio = 15,
|
|
.num_gpio = 15,
|
|
.max_vid = 4095,
|
|
.max_vid = 4095,
|
|
.port_base_addr = 0x10,
|
|
.port_base_addr = 0x10,
|
|
@@ -3805,6 +3843,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6390",
|
|
.name = "Marvell 88E6390",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
|
|
+ .num_internal_phys = 11,
|
|
.num_gpio = 16,
|
|
.num_gpio = 16,
|
|
.max_vid = 8191,
|
|
.max_vid = 8191,
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
@@ -3826,6 +3865,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.name = "Marvell 88E6390X",
|
|
.name = "Marvell 88E6390X",
|
|
.num_databases = 4096,
|
|
.num_databases = 4096,
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
|
|
+ .num_internal_phys = 11,
|
|
.num_gpio = 16,
|
|
.num_gpio = 16,
|
|
.max_vid = 8191,
|
|
.max_vid = 8191,
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|