Skip to content

Commit 2defda1

Browse files
lunndavem330
authored andcommitted
net: dsa: mv88e6xxx: Add support for SERDES on ports 2-8 for 6390X
The 6390X family has 8 SERDES interfaces. When ports 9 and 10 are not using all their SERDES interfaces, the unused ones can be assigned to ports 2-8. Add support for interrupts from SERDES interfaces connected to these lower ports. Signed-off-by: Andrew Lunn <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 787799a commit 2defda1

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3293,8 +3293,8 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
32933293
.vtu_getnext = mv88e6390_g1_vtu_getnext,
32943294
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
32953295
.serdes_power = mv88e6390x_serdes_power,
3296-
.serdes_irq_setup = mv88e6390_serdes_irq_setup,
3297-
.serdes_irq_free = mv88e6390_serdes_irq_free,
3296+
.serdes_irq_setup = mv88e6390x_serdes_irq_setup,
3297+
.serdes_irq_free = mv88e6390x_serdes_irq_free,
32983298
.gpio_ops = &mv88e6352_gpio_ops,
32993299
.phylink_validate = mv88e6390x_phylink_validate,
33003300
};
@@ -3780,8 +3780,8 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
37803780
.vtu_getnext = mv88e6390_g1_vtu_getnext,
37813781
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
37823782
.serdes_power = mv88e6390x_serdes_power,
3783-
.serdes_irq_setup = mv88e6390_serdes_irq_setup,
3784-
.serdes_irq_free = mv88e6390_serdes_irq_free,
3783+
.serdes_irq_setup = mv88e6390x_serdes_irq_setup,
3784+
.serdes_irq_free = mv88e6390x_serdes_irq_free,
37853785
.gpio_ops = &mv88e6352_gpio_ops,
37863786
.avb_ops = &mv88e6390_avb_ops,
37873787
.ptp_ops = &mv88e6352_ptp_ops,

drivers/net/dsa/mv88e6xxx/serdes.c

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -619,15 +619,11 @@ static irqreturn_t mv88e6390_serdes_thread_fn(int irq, void *dev_id)
619619
return ret;
620620
}
621621

622-
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
622+
int mv88e6390x_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
623623
{
624624
int lane;
625625
int err;
626626

627-
/* Only support ports 9 and 10 at the moment */
628-
if (port < 9)
629-
return 0;
630-
631627
lane = mv88e6390x_serdes_get_lane(chip, port);
632628

633629
if (lane == -ENODEV)
@@ -663,11 +659,19 @@ int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
663659
return mv88e6390_serdes_irq_enable(chip, port, lane);
664660
}
665661

666-
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
662+
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
663+
{
664+
if (port < 9)
665+
return 0;
666+
667+
return mv88e6390_serdes_irq_setup(chip, port);
668+
}
669+
670+
void mv88e6390x_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
667671
{
668672
int lane = mv88e6390x_serdes_get_lane(chip, port);
669673

670-
if (port < 9)
674+
if (lane == -ENODEV)
671675
return;
672676

673677
if (lane < 0)
@@ -685,6 +689,14 @@ void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
685689
chip->ports[port].serdes_irq = 0;
686690
}
687691

692+
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
693+
{
694+
if (port < 9)
695+
return;
696+
697+
mv88e6390x_serdes_irq_free(chip, port);
698+
}
699+
688700
int mv88e6341_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on)
689701
{
690702
u8 cmode = chip->ports[port].cmode;

drivers/net/dsa/mv88e6xxx/serdes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
7777
int mv88e6390x_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
7878
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port);
7979
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port);
80+
int mv88e6390x_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port);
81+
void mv88e6390x_serdes_irq_free(struct mv88e6xxx_chip *chip, int port);
8082
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port);
8183
int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip,
8284
int port, uint8_t *data);

0 commit comments

Comments
 (0)