Skip to content

Commit 6e7ffa1

Browse files
Steffen BätzPaolo Abeni
authored andcommitted
net: dsa: mv88e6xxx: read cmode on mv88e6320/21 serdes only ports
On the mv88e6320 and 6321 switch family, port 0/1 are serdes only ports. Modified the mv88e6352_get_port4_serdes_cmode function to pass a port number since the register set of the 6352 is equal on the 6320/21. Signed-off-by: Steffen Bätz <steffen@innosonix.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Fabio Estevam <festevam@gmail.com> Link: https://lore.kernel.org/r/20240508072944.54880-3-steffen@innosonix.de Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent f39bf3c commit 6e7ffa1

File tree

1 file changed

+17
-6
lines changed
  • drivers/net/dsa/mv88e6xxx

1 file changed

+17
-6
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -637,12 +637,12 @@ static void mv88e6351_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
637637
MAC_1000FD;
638638
}
639639

640-
static int mv88e6352_get_port4_serdes_cmode(struct mv88e6xxx_chip *chip)
640+
static int mv88e63xx_get_port_serdes_cmode(struct mv88e6xxx_chip *chip, int port)
641641
{
642642
u16 reg, val;
643643
int err;
644644

645-
err = mv88e6xxx_port_read(chip, 4, MV88E6XXX_PORT_STS, &reg);
645+
err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, &reg);
646646
if (err)
647647
return err;
648648

@@ -651,16 +651,16 @@ static int mv88e6352_get_port4_serdes_cmode(struct mv88e6xxx_chip *chip)
651651
return 0xf;
652652

653653
val = reg & ~MV88E6XXX_PORT_STS_PHY_DETECT;
654-
err = mv88e6xxx_port_write(chip, 4, MV88E6XXX_PORT_STS, val);
654+
err = mv88e6xxx_port_write(chip, port, MV88E6XXX_PORT_STS, val);
655655
if (err)
656656
return err;
657657

658-
err = mv88e6xxx_port_read(chip, 4, MV88E6XXX_PORT_STS, &val);
658+
err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, &val);
659659
if (err)
660660
return err;
661661

662662
/* Restore PHY_DETECT value */
663-
err = mv88e6xxx_port_write(chip, 4, MV88E6XXX_PORT_STS, reg);
663+
err = mv88e6xxx_port_write(chip, port, MV88E6XXX_PORT_STS, reg);
664664
if (err)
665665
return err;
666666

@@ -688,7 +688,7 @@ static void mv88e6352_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
688688
if (err <= 0)
689689
return;
690690

691-
cmode = mv88e6352_get_port4_serdes_cmode(chip);
691+
cmode = mv88e63xx_get_port_serdes_cmode(chip, port);
692692
if (cmode < 0)
693693
dev_err(chip->dev, "p%d: failed to read serdes cmode\n",
694694
port);
@@ -701,12 +701,23 @@ static void mv88e632x_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
701701
struct phylink_config *config)
702702
{
703703
unsigned long *supported = config->supported_interfaces;
704+
int cmode;
704705

705706
/* Translate the default cmode */
706707
mv88e6xxx_translate_cmode(chip->ports[port].cmode, supported);
707708

708709
config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100 |
709710
MAC_1000FD;
711+
712+
/* Port 0/1 are serdes only ports */
713+
if (port == 0 || port == 1) {
714+
cmode = mv88e63xx_get_port_serdes_cmode(chip, port);
715+
if (cmode < 0)
716+
dev_err(chip->dev, "p%d: failed to read serdes cmode\n",
717+
port);
718+
else
719+
mv88e6xxx_translate_cmode(cmode, supported);
720+
}
710721
}
711722

712723
static void mv88e6341_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,

0 commit comments

Comments
 (0)