* [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing
@ 2023-11-24 4:15 Greg Ungerer
2023-11-24 4:15 ` [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Ungerer
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Greg Ungerer @ 2023-11-24 4:15 UTC (permalink / raw)
To: rmk+kernel, andrew, hkallweit1
Cc: davem, edumazet, kuba, pabeni, netdev, Greg Ungerer
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 <gerg@kernel.org>
---
drivers/net/dsa/mv88e6xxx/chip.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
v2: rename to mv88e6351_phylink_get_caps
set phylink_get_caps for 6171, 6175, 6350 and 6351
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 42b1acaca33a..d8a67bf4e595 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -577,6 +577,18 @@ static void mv88e6250_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
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;
@@ -4340,7 +4352,7 @@ static const struct mv88e6xxx_ops mv88e6171_ops = {
.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 = {
@@ -4440,7 +4452,7 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
.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 = {
@@ -5069,7 +5081,7 @@ static const struct mv88e6xxx_ops mv88e6350_ops = {
.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 = {
@@ -5117,7 +5129,7 @@ static const struct mv88e6xxx_ops mv88e6351_ops = {
.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 = {
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash
2023-11-24 4:15 [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Ungerer
@ 2023-11-24 4:15 ` Greg Ungerer
2023-11-24 15:55 ` Andrew Lunn
2023-11-24 15:54 ` [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Andrew Lunn
2023-11-26 11:40 ` patchwork-bot+netdevbpf
2 siblings, 1 reply; 5+ messages in thread
From: Greg Ungerer @ 2023-11-24 4:15 UTC (permalink / raw)
To: rmk+kernel, andrew, hkallweit1
Cc: davem, edumazet, kuba, pabeni, netdev, Greg Ungerer
As of commit b92143d4420f ("net: dsa: mv88e6xxx: add infrastructure for
phylink_pcs") probing of a Marvell 88e6350 switch causes a NULL pointer
de-reference like this example:
...
mv88e6085 d0072004.mdio-mii:11: switch 0x3710 detected: Marvell 88E6350, revision 2
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 00000000 when read
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1] ARM
Modules linked in:
CPU: 0 PID: 8 Comm: kworker/u2:0 Not tainted 6.7.0-rc2-dirty #26
Hardware name: Marvell Armada 370/XP (Device Tree)
Workqueue: events_unbound deferred_probe_work_func
PC is at mv88e6xxx_port_setup+0x1c/0x44
LR is at dsa_port_devlink_setup+0x74/0x154
pc : [<c057ea24>] lr : [<c0819598>] psr: a0000013
sp : c184fce0 ip : c542b8f4 fp : 00000000
r10: 00000001 r9 : c542a540 r8 : c542bc00
r7 : c542b838 r6 : c5244580 r5 : 00000005 r4 : c5244580
r3 : 00000000 r2 : c542b840 r1 : 00000005 r0 : c1a02040
...
The Marvell 6350 switch has no SERDES interface and so has no
corresponding pcs_ops defined for it. But during probing a call is made
to mv88e6xxx_port_setup() which unconditionally expects pcs_ops to exist -
though the presence of the pcs_ops->pcs_init function is optional.
Modify code to check for pcs_ops first, before checking for and calling
pcs_ops->pcs_init. Modify checking and use of pcs_ops->pcs_teardown
which may potentially suffer the same problem.
Fixes: b92143d4420f ("net: dsa: mv88e6xxx: add infrastructure for phylink_pcs")
Signed-off-by: Greg Ungerer <gerg@kernel.org>
---
drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
v2: apply same change to use of pcs_ops->teardown
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index d8a67bf4e595..07a22c74fe81 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3892,7 +3892,8 @@ static int mv88e6xxx_port_setup(struct dsa_switch *ds, int port)
struct mv88e6xxx_chip *chip = ds->priv;
int err;
- if (chip->info->ops->pcs_ops->pcs_init) {
+ if (chip->info->ops->pcs_ops &&
+ chip->info->ops->pcs_ops->pcs_init) {
err = chip->info->ops->pcs_ops->pcs_init(chip, port);
if (err)
return err;
@@ -3907,7 +3908,8 @@ static void mv88e6xxx_port_teardown(struct dsa_switch *ds, int port)
mv88e6xxx_teardown_devlink_regions_port(ds, port);
- if (chip->info->ops->pcs_ops->pcs_teardown)
+ if (chip->info->ops->pcs_ops &&
+ chip->info->ops->pcs_ops->pcs_teardown)
chip->info->ops->pcs_ops->pcs_teardown(chip, port);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing
2023-11-24 4:15 [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Ungerer
2023-11-24 4:15 ` [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Ungerer
@ 2023-11-24 15:54 ` Andrew Lunn
2023-11-26 11:40 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2023-11-24 15:54 UTC (permalink / raw)
To: Greg Ungerer
Cc: rmk+kernel, hkallweit1, davem, edumazet, kuba, pabeni, netdev
On Fri, Nov 24, 2023 at 02:15:28PM +1000, Greg Ungerer wrote:
> 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 <gerg@kernel.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash
2023-11-24 4:15 ` [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Ungerer
@ 2023-11-24 15:55 ` Andrew Lunn
0 siblings, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2023-11-24 15:55 UTC (permalink / raw)
To: Greg Ungerer
Cc: rmk+kernel, hkallweit1, davem, edumazet, kuba, pabeni, netdev
On Fri, Nov 24, 2023 at 02:15:29PM +1000, Greg Ungerer wrote:
> As of commit b92143d4420f ("net: dsa: mv88e6xxx: add infrastructure for
> phylink_pcs") probing of a Marvell 88e6350 switch causes a NULL pointer
> de-reference like this example:
>
> ...
> mv88e6085 d0072004.mdio-mii:11: switch 0x3710 detected: Marvell 88E6350, revision 2
> 8<--- cut here ---
> Unable to handle kernel NULL pointer dereference at virtual address 00000000 when read
> [00000000] *pgd=00000000
> Internal error: Oops: 5 [#1] ARM
> Modules linked in:
> CPU: 0 PID: 8 Comm: kworker/u2:0 Not tainted 6.7.0-rc2-dirty #26
> Hardware name: Marvell Armada 370/XP (Device Tree)
> Workqueue: events_unbound deferred_probe_work_func
> PC is at mv88e6xxx_port_setup+0x1c/0x44
> LR is at dsa_port_devlink_setup+0x74/0x154
> pc : [<c057ea24>] lr : [<c0819598>] psr: a0000013
> sp : c184fce0 ip : c542b8f4 fp : 00000000
> r10: 00000001 r9 : c542a540 r8 : c542bc00
> r7 : c542b838 r6 : c5244580 r5 : 00000005 r4 : c5244580
> r3 : 00000000 r2 : c542b840 r1 : 00000005 r0 : c1a02040
> ...
>
> The Marvell 6350 switch has no SERDES interface and so has no
> corresponding pcs_ops defined for it. But during probing a call is made
> to mv88e6xxx_port_setup() which unconditionally expects pcs_ops to exist -
> though the presence of the pcs_ops->pcs_init function is optional.
>
> Modify code to check for pcs_ops first, before checking for and calling
> pcs_ops->pcs_init. Modify checking and use of pcs_ops->pcs_teardown
> which may potentially suffer the same problem.
>
> Fixes: b92143d4420f ("net: dsa: mv88e6xxx: add infrastructure for phylink_pcs")
> Signed-off-by: Greg Ungerer <gerg@kernel.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing
2023-11-24 4:15 [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Ungerer
2023-11-24 4:15 ` [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Ungerer
2023-11-24 15:54 ` [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Andrew Lunn
@ 2023-11-26 11:40 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-11-26 11:40 UTC (permalink / raw)
To: Greg Ungerer
Cc: rmk+kernel, andrew, hkallweit1, davem, edumazet, kuba, pabeni,
netdev
Hello:
This series was applied to netdev/net.git (main)
by David S. Miller <davem@davemloft.net>:
On Fri, 24 Nov 2023 14:15:28 +1000 you wrote:
> 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
> ...
>
> [...]
Here is the summary with links:
- [PATCHv2,1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing
https://git.kernel.org/netdev/net/c/b3f1a164c7f7
- [PATCHv2,2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash
https://git.kernel.org/netdev/net/c/a524eabcd72d
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-11-26 11:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-24 4:15 [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Ungerer
2023-11-24 4:15 ` [PATCHv2 2/2] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Ungerer
2023-11-24 15:55 ` Andrew Lunn
2023-11-24 15:54 ` [PATCHv2 1/2] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Andrew Lunn
2023-11-26 11:40 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).