mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-24 23:34:00 +00:00
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 <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
787799a9d5
commit
2defda1f4b
3 changed files with 25 additions and 11 deletions
|
@ -3293,8 +3293,8 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
||||||
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
||||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||||
.serdes_power = mv88e6390x_serdes_power,
|
.serdes_power = mv88e6390x_serdes_power,
|
||||||
.serdes_irq_setup = mv88e6390_serdes_irq_setup,
|
.serdes_irq_setup = mv88e6390x_serdes_irq_setup,
|
||||||
.serdes_irq_free = mv88e6390_serdes_irq_free,
|
.serdes_irq_free = mv88e6390x_serdes_irq_free,
|
||||||
.gpio_ops = &mv88e6352_gpio_ops,
|
.gpio_ops = &mv88e6352_gpio_ops,
|
||||||
.phylink_validate = mv88e6390x_phylink_validate,
|
.phylink_validate = mv88e6390x_phylink_validate,
|
||||||
};
|
};
|
||||||
|
@ -3780,8 +3780,8 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
||||||
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
.vtu_getnext = mv88e6390_g1_vtu_getnext,
|
||||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||||
.serdes_power = mv88e6390x_serdes_power,
|
.serdes_power = mv88e6390x_serdes_power,
|
||||||
.serdes_irq_setup = mv88e6390_serdes_irq_setup,
|
.serdes_irq_setup = mv88e6390x_serdes_irq_setup,
|
||||||
.serdes_irq_free = mv88e6390_serdes_irq_free,
|
.serdes_irq_free = mv88e6390x_serdes_irq_free,
|
||||||
.gpio_ops = &mv88e6352_gpio_ops,
|
.gpio_ops = &mv88e6352_gpio_ops,
|
||||||
.avb_ops = &mv88e6390_avb_ops,
|
.avb_ops = &mv88e6390_avb_ops,
|
||||||
.ptp_ops = &mv88e6352_ptp_ops,
|
.ptp_ops = &mv88e6352_ptp_ops,
|
||||||
|
|
|
@ -619,15 +619,11 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
|
int mv88e6390x_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
|
||||||
{
|
{
|
||||||
int lane;
|
int lane;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Only support ports 9 and 10 at the moment */
|
|
||||||
if (port < 9)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
lane = mv88e6390x_serdes_get_lane(chip, port);
|
lane = mv88e6390x_serdes_get_lane(chip, port);
|
||||||
|
|
||||||
if (lane == -ENODEV)
|
if (lane == -ENODEV)
|
||||||
|
@ -663,11 +659,19 @@ int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
|
||||||
return mv88e6390_serdes_irq_enable(chip, port, lane);
|
return mv88e6390_serdes_irq_enable(chip, port, lane);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
|
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
{
|
||||||
|
if (port < 9)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mv88e6390_serdes_irq_setup(chip, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mv88e6390x_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
|
||||||
{
|
{
|
||||||
int lane = mv88e6390x_serdes_get_lane(chip, port);
|
int lane = mv88e6390x_serdes_get_lane(chip, port);
|
||||||
|
|
||||||
if (port < 9)
|
if (lane == -ENODEV)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (lane < 0)
|
if (lane < 0)
|
||||||
|
@ -685,6 +689,14 @@ void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
|
||||||
chip->ports[port].serdes_irq = 0;
|
chip->ports[port].serdes_irq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
{
|
||||||
|
if (port < 9)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mv88e6390x_serdes_irq_free(chip, port);
|
||||||
|
}
|
||||||
|
|
||||||
int mv88e6341_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on)
|
int mv88e6341_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on)
|
||||||
{
|
{
|
||||||
u8 cmode = chip->ports[port].cmode;
|
u8 cmode = chip->ports[port].cmode;
|
||||||
|
|
|
@ -77,6 +77,8 @@ int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
|
||||||
int mv88e6390x_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
|
int mv88e6390x_serdes_power(struct mv88e6xxx_chip *chip, int port, bool on);
|
||||||
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port);
|
int mv88e6390_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port);
|
||||||
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port);
|
void mv88e6390_serdes_irq_free(struct mv88e6xxx_chip *chip, int port);
|
||||||
|
int mv88e6390x_serdes_irq_setup(struct mv88e6xxx_chip *chip, int port);
|
||||||
|
void mv88e6390x_serdes_irq_free(struct mv88e6xxx_chip *chip, int port);
|
||||||
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port);
|
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port);
|
||||||
int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip,
|
int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip,
|
||||||
int port, uint8_t *data);
|
int port, uint8_t *data);
|
||||||
|
|
Loading…
Add table
Reference in a new issue