net: dsa: mv88e6xxx: implement mv88e6352_serdes_get_lane
Even though 88E6352 has no dedicated lane for SERDES interfaces, it uses a similar code as the other .serdes_get_lane implementations to check the port's CMODE and ensure that SERDES operations are doable. For consistency, implement mv88e6352_serdes_get_lane for the 88E6352 and similar switches which simply returns an unused 0xff lane address. Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5122d4ec9e
commit
9db4a7257e
@ -3093,6 +3093,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
|
||||
.rmu_disable = mv88e6352_g1_rmu_disable,
|
||||
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
||||
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
||||
.serdes_get_lane = mv88e6352_serdes_get_lane,
|
||||
.serdes_power = mv88e6352_serdes_power,
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.phylink_validate = mv88e6352_phylink_validate,
|
||||
@ -3178,6 +3179,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
|
||||
.rmu_disable = mv88e6352_g1_rmu_disable,
|
||||
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
||||
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
||||
.serdes_get_lane = mv88e6352_serdes_get_lane,
|
||||
.serdes_power = mv88e6352_serdes_power,
|
||||
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
|
||||
.serdes_irq_setup = mv88e6352_serdes_irq_setup,
|
||||
@ -3407,6 +3409,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
|
||||
.rmu_disable = mv88e6352_g1_rmu_disable,
|
||||
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
||||
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
||||
.serdes_get_lane = mv88e6352_serdes_get_lane,
|
||||
.serdes_power = mv88e6352_serdes_power,
|
||||
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
|
||||
.serdes_irq_setup = mv88e6352_serdes_irq_setup,
|
||||
@ -3767,6 +3770,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
|
||||
.rmu_disable = mv88e6352_g1_rmu_disable,
|
||||
.vtu_getnext = mv88e6352_g1_vtu_getnext,
|
||||
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
||||
.serdes_get_lane = mv88e6352_serdes_get_lane,
|
||||
.serdes_power = mv88e6352_serdes_power,
|
||||
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
|
||||
.serdes_irq_setup = mv88e6352_serdes_irq_setup,
|
||||
|
@ -69,13 +69,22 @@ static int mv88e6352_serdes_power_set(struct mv88e6xxx_chip *chip, bool on)
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool mv88e6352_port_has_serdes(struct mv88e6xxx_chip *chip, int port)
|
||||
u8 mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
|
||||
{
|
||||
u8 cmode = chip->ports[port].cmode;
|
||||
u8 lane = 0;
|
||||
|
||||
if ((cmode == MV88E6XXX_PORT_STS_CMODE_100BASEX) ||
|
||||
(cmode == MV88E6XXX_PORT_STS_CMODE_1000BASEX) ||
|
||||
(cmode == MV88E6XXX_PORT_STS_CMODE_SGMII))
|
||||
lane = 0xff; /* Unused */
|
||||
|
||||
return lane;
|
||||
}
|
||||
|
||||
static bool mv88e6352_port_has_serdes(struct mv88e6xxx_chip *chip, int port)
|
||||
{
|
||||
if (mv88e6xxx_serdes_get_lane(chip, port))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -75,6 +75,7 @@
|
||||
#define MV88E6390_SGMII_PHY_STATUS_LINK BIT(10)
|
||||
|
||||
u8 mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
|
||||
u8 mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
|
||||
u8 mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
|
||||
u8 mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
|
||||
unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
|
||||
|
Loading…
Reference in New Issue
Block a user