1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- From b3f1a164c7f742503dc7159011f7ad6b092b660e Mon Sep 17 00:00:00 2001
- From: Greg Ungerer <[email protected]>
- Date: Fri, 24 Nov 2023 14:15:28 +1000
- Subject: [PATCH] net: dsa: mv88e6xxx: fix marvell 6350 switch probing
- As of commit de5c9bf40c45 ("net: phylink: require supported_interfaces to
- be filled") Marvell 88e6350 switches fail to be probed:
- ...
- mv88e6085 d0072004.mdio-mii:11: switch 0x3710 detected: Marvell 88E6350, revision 2
- mv88e6085 d0072004.mdio-mii:11: phylink: error: empty supported_interfaces
- error creating PHYLINK: -22
- mv88e6085: probe of d0072004.mdio-mii:11 failed with error -22
- ...
- The problem stems from the use of mv88e6185_phylink_get_caps() to get
- the device capabilities. Create a new dedicated phylink_get_caps for the
- 6351 family (which the 6350 is one of) to properly support their set of
- capabilities.
- According to chip.h the 6351 switch family includes the 6171, 6175, 6350
- and 6351 switches, so update each of these to use the correct
- phylink_get_caps.
- Fixes: de5c9bf40c45 ("net: phylink: require supported_interfaces to be filled")
- Signed-off-by: Greg Ungerer <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- drivers/net/dsa/mv88e6xxx/chip.c | 20 ++++++++++++++++----
- 1 file changed, 16 insertions(+), 4 deletions(-)
- --- a/drivers/net/dsa/mv88e6xxx/chip.c
- +++ b/drivers/net/dsa/mv88e6xxx/chip.c
- @@ -652,6 +652,18 @@ static void mv88e6250_phylink_get_caps(s
- config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100;
- }
-
- +static void mv88e6351_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
- + struct phylink_config *config)
- +{
- + unsigned long *supported = config->supported_interfaces;
- +
- + /* Translate the default cmode */
- + mv88e6xxx_translate_cmode(chip->ports[port].cmode, supported);
- +
- + config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100 |
- + MAC_1000FD;
- +}
- +
- static int mv88e6352_get_port4_serdes_cmode(struct mv88e6xxx_chip *chip)
- {
- u16 reg, val;
- @@ -4498,7 +4510,7 @@ static const struct mv88e6xxx_ops mv88e6
- .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
- .stu_getnext = mv88e6352_g1_stu_getnext,
- .stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- - .phylink_get_caps = mv88e6185_phylink_get_caps,
- + .phylink_get_caps = mv88e6351_phylink_get_caps,
- };
-
- static const struct mv88e6xxx_ops mv88e6172_ops = {
- @@ -4599,7 +4611,7 @@ static const struct mv88e6xxx_ops mv88e6
- .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
- .stu_getnext = mv88e6352_g1_stu_getnext,
- .stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- - .phylink_get_caps = mv88e6185_phylink_get_caps,
- + .phylink_get_caps = mv88e6351_phylink_get_caps,
- };
-
- static const struct mv88e6xxx_ops mv88e6176_ops = {
- @@ -5256,7 +5268,7 @@ static const struct mv88e6xxx_ops mv88e6
- .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
- .stu_getnext = mv88e6352_g1_stu_getnext,
- .stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- - .phylink_get_caps = mv88e6185_phylink_get_caps,
- + .phylink_get_caps = mv88e6351_phylink_get_caps,
- };
-
- static const struct mv88e6xxx_ops mv88e6351_ops = {
- @@ -5302,7 +5314,7 @@ static const struct mv88e6xxx_ops mv88e6
- .stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- .avb_ops = &mv88e6352_avb_ops,
- .ptp_ops = &mv88e6352_ptp_ops,
- - .phylink_get_caps = mv88e6185_phylink_get_caps,
- + .phylink_get_caps = mv88e6351_phylink_get_caps,
- };
-
- static const struct mv88e6xxx_ops mv88e6352_ops = {
|