Skip to content

Commit 5bafeb6

Browse files
elkablodavem330
authored andcommitted
net: dsa: mv88e6xxx: 88E6141/6341 SERDES support
The 88E6141/6341 switches (also known as Topaz) have 1 SGMII lane, which can be configured the same way as the SERDES lane on 88E6390. Signed-off-by: Marek Behun <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4dbbe8d commit 5bafeb6

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2529,6 +2529,7 @@ static const struct mv88e6xxx_ops mv88e6085_ops = {
25292529
.reset = mv88e6185_g1_reset,
25302530
.vtu_getnext = mv88e6352_g1_vtu_getnext,
25312531
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
2532+
.serdes_power = mv88e6341_serdes_power,
25322533
};
25332534

25342535
static const struct mv88e6xxx_ops mv88e6095_ops = {
@@ -2848,6 +2849,7 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
28482849
.reset = mv88e6352_g1_reset,
28492850
.vtu_getnext = mv88e6352_g1_vtu_getnext,
28502851
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
2852+
.serdes_power = mv88e6341_serdes_power,
28512853
};
28522854

28532855
static const struct mv88e6xxx_ops mv88e6176_ops = {

drivers/net/dsa/mv88e6xxx/serdes.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,23 @@ int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on)
326326

327327
return 0;
328328
}
329+
330+
int mv88e6341_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on)
331+
{
332+
int err;
333+
u8 cmode;
334+
335+
if (port != 5)
336+
return 0;
337+
338+
err = mv88e6xxx_port_get_cmode(chip, port, &cmode);
339+
if (err)
340+
return err;
341+
342+
if (cmode == MV88E6XXX_PORT_STS_CMODE_1000BASE_X ||
343+
cmode == MV88E6XXX_PORT_STS_CMODE_SGMII ||
344+
cmode == MV88E6XXX_PORT_STS_CMODE_2500BASEX)
345+
return mv88e6390_serdes_sgmii(chip, MV88E6341_ADDR_SERDES, on);
346+
347+
return 0;
348+
}

drivers/net/dsa/mv88e6xxx/serdes.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#define MV88E6352_ADDR_SERDES 0x0f
2020
#define MV88E6352_SERDES_PAGE_FIBER 0x01
2121

22+
#define MV88E6341_ADDR_SERDES 0x15
23+
2224
#define MV88E6390_PORT9_LANE0 0x09
2325
#define MV88E6390_PORT9_LANE1 0x12
2426
#define MV88E6390_PORT9_LANE2 0x13
@@ -42,6 +44,7 @@
4244
#define MV88E6390_SGMII_CONTROL_LOOPBACK BIT(14)
4345
#define MV88E6390_SGMII_CONTROL_PDOWN BIT(11)
4446

47+
int mv88e6341_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
4548
int mv88e6352_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
4649
int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
4750
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port);

0 commit comments

Comments
 (0)