|
@@ -1046,6 +1046,17 @@ static int mv88e6xxx_devmap_setup(struct mv88e6xxx_chip *chip)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+ if (chip->info->ops->set_cascade_port) {
|
|
|
+ port = MV88E6XXX_CASCADE_PORT_MULTIPLE;
|
|
|
+ err = chip->info->ops->set_cascade_port(chip, port);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = mv88e6xxx_g1_set_device_number(chip, chip->ds->index);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1058,6 +1069,14 @@ static int mv88e6xxx_trunk_setup(struct mv88e6xxx_chip *chip)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int mv88e6xxx_rmu_setup(struct mv88e6xxx_chip *chip)
|
|
|
+{
|
|
|
+ if (chip->info->ops->rmu_disable)
|
|
|
+ return chip->info->ops->rmu_disable(chip);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int mv88e6xxx_pot_setup(struct mv88e6xxx_chip *chip)
|
|
|
{
|
|
|
if (chip->info->ops->pot_clear)
|
|
@@ -2153,16 +2172,8 @@ static int mv88e6xxx_set_ageing_time(struct dsa_switch *ds,
|
|
|
|
|
|
static int mv88e6xxx_g1_setup(struct mv88e6xxx_chip *chip)
|
|
|
{
|
|
|
- struct dsa_switch *ds = chip->ds;
|
|
|
int err;
|
|
|
|
|
|
- /* Disable remote management, and set the switch's DSA device number. */
|
|
|
- err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL2,
|
|
|
- MV88E6XXX_G1_CTL2_MULTIPLE_CASCADE |
|
|
|
- (ds->index & 0x1f));
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
-
|
|
|
/* Configure the IP ToS mapping registers. */
|
|
|
err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_IP_PRI_0, 0x0000);
|
|
|
if (err)
|
|
@@ -2260,6 +2271,10 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)
|
|
|
if (err)
|
|
|
goto unlock;
|
|
|
|
|
|
+ err = mv88e6xxx_rmu_setup(chip);
|
|
|
+ if (err)
|
|
|
+ goto unlock;
|
|
|
+
|
|
|
err = mv88e6xxx_rsvd2cpu_setup(chip);
|
|
|
if (err)
|
|
|
goto unlock;
|
|
@@ -2527,6 +2542,7 @@ static const struct mv88e6xxx_ops mv88e6085_ops = {
|
|
|
.ppu_enable = mv88e6185_g1_ppu_enable,
|
|
|
.ppu_disable = mv88e6185_g1_ppu_disable,
|
|
|
.reset = mv88e6185_g1_reset,
|
|
|
+ .rmu_disable = mv88e6085_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6341_serdes_power,
|
|
@@ -2585,6 +2601,7 @@ static const struct mv88e6xxx_ops mv88e6097_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6085_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
|
|
};
|
|
@@ -2643,6 +2660,7 @@ static const struct mv88e6xxx_ops mv88e6131_ops = {
|
|
|
.watchdog_ops = &mv88e6097_watchdog_ops,
|
|
|
.mgmt_rsvd2cpu = mv88e6185_g2_mgmt_rsvd2cpu,
|
|
|
.ppu_enable = mv88e6185_g1_ppu_enable,
|
|
|
+ .set_cascade_port = mv88e6185_g1_set_cascade_port,
|
|
|
.ppu_disable = mv88e6185_g1_ppu_disable,
|
|
|
.reset = mv88e6185_g1_reset,
|
|
|
.vtu_getnext = mv88e6185_g1_vtu_getnext,
|
|
@@ -2811,6 +2829,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6352_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6352_serdes_power,
|
|
@@ -2884,6 +2903,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6352_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6352_serdes_power,
|
|
@@ -2911,6 +2931,7 @@ static const struct mv88e6xxx_ops mv88e6185_ops = {
|
|
|
.set_egress_port = mv88e6095_g1_set_egress_port,
|
|
|
.watchdog_ops = &mv88e6097_watchdog_ops,
|
|
|
.mgmt_rsvd2cpu = mv88e6185_g2_mgmt_rsvd2cpu,
|
|
|
+ .set_cascade_port = mv88e6185_g1_set_cascade_port,
|
|
|
.ppu_enable = mv88e6185_g1_ppu_enable,
|
|
|
.ppu_disable = mv88e6185_g1_ppu_disable,
|
|
|
.reset = mv88e6185_g1_reset,
|
|
@@ -2948,6 +2969,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6390_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6390_serdes_power,
|
|
@@ -2984,6 +3006,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6390_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6390_serdes_power,
|
|
@@ -3020,6 +3043,7 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6390_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6390_serdes_power,
|
|
@@ -3057,6 +3081,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6352_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6352_serdes_power,
|
|
@@ -3095,6 +3120,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6390_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6390_serdes_power,
|
|
@@ -3311,6 +3337,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6352_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6352_serdes_power,
|
|
@@ -3354,6 +3381,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6390_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6390_serdes_power,
|
|
@@ -3394,6 +3422,7 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
|
|
.mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
.pot_clear = mv88e6xxx_g2_pot_clear,
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
+ .rmu_disable = mv88e6390_g1_rmu_disable,
|
|
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
|
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
|
|
.serdes_power = mv88e6390_serdes_power,
|