|
@@ -119,37 +119,17 @@ int mv88e6352_g2_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip)
|
|
|
|
|
|
/* Offset 0x06: Device Mapping Table register */
|
|
|
|
|
|
-static int mv88e6xxx_g2_device_mapping_write(struct mv88e6xxx_chip *chip,
|
|
|
- int target, int port)
|
|
|
+int mv88e6xxx_g2_device_mapping_write(struct mv88e6xxx_chip *chip, int target,
|
|
|
+ int port)
|
|
|
{
|
|
|
- u16 val = (target << 8) | (port & 0xf);
|
|
|
+ u16 val = (target << 8) | (port & 0x1f);
|
|
|
+ /* Modern chips use 5 bits to define a device mapping port,
|
|
|
+ * but bit 4 is reserved on older chips, so it is safe to use.
|
|
|
+ */
|
|
|
|
|
|
return mv88e6xxx_g2_update(chip, MV88E6XXX_G2_DEVICE_MAPPING, val);
|
|
|
}
|
|
|
|
|
|
-static int mv88e6xxx_g2_set_device_mapping(struct mv88e6xxx_chip *chip)
|
|
|
-{
|
|
|
- int target, port;
|
|
|
- int err;
|
|
|
-
|
|
|
- /* Initialize the routing port to the 32 possible target devices */
|
|
|
- for (target = 0; target < 32; ++target) {
|
|
|
- port = 0xf;
|
|
|
-
|
|
|
- if (target < DSA_MAX_SWITCHES) {
|
|
|
- port = chip->ds->rtable[target];
|
|
|
- if (port == DSA_RTABLE_NONE)
|
|
|
- port = 0xf;
|
|
|
- }
|
|
|
-
|
|
|
- err = mv88e6xxx_g2_device_mapping_write(chip, target, port);
|
|
|
- if (err)
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return err;
|
|
|
-}
|
|
|
-
|
|
|
/* Offset 0x07: Trunk Mask Table register */
|
|
|
|
|
|
static int mv88e6xxx_g2_trunk_mask_write(struct mv88e6xxx_chip *chip, int num,
|
|
@@ -1154,10 +1134,5 @@ int mv88e6xxx_g2_setup(struct mv88e6xxx_chip *chip)
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- /* Program the DSA routing table. */
|
|
|
- err = mv88e6xxx_g2_set_device_mapping(chip);
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
-
|
|
|
return 0;
|
|
|
}
|