OSDN Git Service

net: dsa: mv88e6xxx: set device number
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Wed, 9 May 2018 15:38:50 +0000 (11:38 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 10 May 2018 20:12:31 +0000 (16:12 -0400)
All Marvell switches supported by mv88e6xxx have to set their device
number in the Global Control 2 register. Extract this in a read then
write function, called from the device mapping setup code.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/mv88e6xxx/global1.c
drivers/net/dsa/mv88e6xxx/global1.h

index 9b61d5b..ef753ed 100644 (file)
@@ -1053,6 +1053,10 @@ static int mv88e6xxx_devmap_setup(struct mv88e6xxx_chip *chip)
                        return err;
        }
 
+       err = mv88e6xxx_g1_set_device_number(chip, chip->ds->index);
+       if (err)
+               return err;
+
        return 0;
 }
 
@@ -2160,15 +2164,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,
-                                (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)
index 6eb4eca..89c6330 100644 (file)
@@ -389,6 +389,13 @@ int mv88e6390_g1_stats_set_histogram(struct mv88e6xxx_chip *chip)
        return err;
 }
 
+int mv88e6xxx_g1_set_device_number(struct mv88e6xxx_chip *chip, int index)
+{
+       return mv88e6xxx_g1_ctl2_mask(chip,
+                                     MV88E6XXX_G1_CTL2_DEVICE_NUMBER_MASK,
+                                     index);
+}
+
 /* Offset 0x1d: Statistics Operation 2 */
 
 int mv88e6xxx_g1_stats_wait(struct mv88e6xxx_chip *chip)
index bcbb804..8b043e8 100644 (file)
 #define MV88E6185_G1_CTL2_CASCADE_PORT_MASK    0xf000
 #define MV88E6185_G1_CTL2_CASCADE_PORT_NONE    0xe000
 #define MV88E6185_G1_CTL2_CASCADE_PORT_MULTI   0xf000
+#define MV88E6XXX_G1_CTL2_DEVICE_NUMBER_MASK   0x001f
 
 /* Offset 0x1D: Stats Operation Register */
 #define MV88E6XXX_G1_STATS_OP                  0x1d
@@ -256,6 +257,8 @@ int mv88e6390_g1_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip);
 
 int mv88e6185_g1_set_cascade_port(struct mv88e6xxx_chip *chip, int port);
 
+int mv88e6xxx_g1_set_device_number(struct mv88e6xxx_chip *chip, int index);
+
 int mv88e6xxx_g1_atu_set_learn2all(struct mv88e6xxx_chip *chip, bool learn2all);
 int mv88e6xxx_g1_atu_set_age_time(struct mv88e6xxx_chip *chip,
                                  unsigned int msecs);