All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
@ 2021-12-07 10:32 Russell King (Oracle)
  2021-12-07 13:22 ` Maarten Zanders
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Russell King (Oracle) @ 2021-12-07 10:32 UTC (permalink / raw)
  To: Maarten Zanders
  Cc: Andrew Lunn, Vivien Didelot, Florian Fainelli, Vladimir Oltean,
	David S. Miller, Jakub Kicinski, Maxime Chevallier, netdev

This commit fixes a misunderstanding in commit 4a3e0aeddf09 ("net: dsa:
mv88e6xxx: don't use PHY_DETECT on internal PHY's").

For Marvell DSA switches with the PHY_DETECT bit (for non-6250 family
devices), controls whether the PPU polls the PHY to retrieve the link,
speed, duplex and pause status to update the port configuration. This
applies for both internal and external PHYs.

For some switches such as 88E6352 and 88E6390X, PHY_DETECT has an
additional function of enabling auto-media mode between the internal
PHY and SERDES blocks depending on which first gains link.

The original intention of commit 5d5b231da7ac (net: dsa: mv88e6xxx: use
PHY_DETECT in mac_link_up/mac_link_down) was to allow this bit to be
used to detect when this propagation is enabled, and allow software to
update the port configuration. This has found to be necessary for some
switches which do not automatically propagate status from the SERDES to
the port, which includes the 88E6390. However, commit 4a3e0aeddf09
("net: dsa: mv88e6xxx: don't use PHY_DETECT on internal PHY's") breaks
this assumption.

Maarten Zanders has confirmed that the issue he was addressing was for
an 88E6250 switch, which does not have a PHY_DETECT bit in bit 12, but
instead a link status bit. Therefore, mv88e6xxx_port_ppu_updates() does
not report correctly.

This patch resolves the above issues by reverting Maarten's change and
instead making mv88e6xxx_port_ppu_updates() indicate whether the port
is internal for the 88E6250 family of switches.

  Yes, you're right, I'm targeting the 6250 family. And yes, your
  suggestion would solve my case and is a better implementation for
  the other devices (as far as I can see).

Fixes: 4a3e0aeddf09 ("net: dsa: mv88e6xxx: don't use PHY_DETECT on internal PHY's")
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
 drivers/net/dsa/mv88e6xxx/chip.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index f00cbf5753b9..9f675464efc3 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -471,6 +471,12 @@ static int mv88e6xxx_port_ppu_updates(struct mv88e6xxx_chip *chip, int port)
 	u16 reg;
 	int err;
 
+	/* The 88e6250 family does not have the PHY detect bit. Instead,
+	 * report whether the port is internal.
+	 */
+	if (chip->info->family == MV88E6XXX_FAMILY_6250)
+		return port < chip->info->num_internal_phys;
+
 	err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, &reg);
 	if (err) {
 		dev_err(chip->dev,
@@ -752,11 +758,10 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port,
 	ops = chip->info->ops;
 
 	mv88e6xxx_reg_lock(chip);
-	/* Internal PHYs propagate their configuration directly to the MAC.
-	 * External PHYs depend on whether the PPU is enabled for this port.
+	/* Force the link down if we know the port may not be automatically
+	 * updated by the switch or if we are using fixed-link mode.
 	 */
-	if (((!mv88e6xxx_phy_is_internal(ds, port) &&
-	      !mv88e6xxx_port_ppu_updates(chip, port)) ||
+	if ((!mv88e6xxx_port_ppu_updates(chip, port) ||
 	     mode == MLO_AN_FIXED) && ops->port_sync_link)
 		err = ops->port_sync_link(chip, port, mode, false);
 	mv88e6xxx_reg_unlock(chip);
@@ -779,11 +784,11 @@ static void mv88e6xxx_mac_link_up(struct dsa_switch *ds, int port,
 	ops = chip->info->ops;
 
 	mv88e6xxx_reg_lock(chip);
-	/* Internal PHYs propagate their configuration directly to the MAC.
-	 * External PHYs depend on whether the PPU is enabled for this port.
+	/* Configure and force the link up if we know that the port may not
+	 * automatically updated by the switch or if we are using fixed-link
+	 * mode.
 	 */
-	if ((!mv88e6xxx_phy_is_internal(ds, port) &&
-	     !mv88e6xxx_port_ppu_updates(chip, port)) ||
+	if (!mv88e6xxx_port_ppu_updates(chip, port) ||
 	    mode == MLO_AN_FIXED) {
 		/* FIXME: for an automedia port, should we force the link
 		 * down here - what if the link comes up due to "other" media
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
  2021-12-07 10:32 [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's" Russell King (Oracle)
@ 2021-12-07 13:22 ` Maarten Zanders
  2021-12-07 13:24   ` Russell King (Oracle)
  2021-12-07 13:41 ` Maarten Zanders
  2021-12-08 23:00 ` patchwork-bot+netdevbpf
  2 siblings, 1 reply; 5+ messages in thread
From: Maarten Zanders @ 2021-12-07 13:22 UTC (permalink / raw)
  To: Russell King (Oracle)
  Cc: Andrew Lunn, Vivien Didelot, Florian Fainelli, Vladimir Oltean,
	David S. Miller, Jakub Kicinski, Maxime Chevallier, netdev

On 12/7/21 11:32, Russell King (Oracle) wrote:
> Maarten Zanders has confirmed that the issue he was addressing was for
> an 88E6250 switch, which does not have a PHY_DETECT bit in bit 12, but
> instead a link status bit. Therefore, mv88e6xxx_port_ppu_updates() does
> not report correctly.
...>    Yes, you're right, I'm targeting the 6250 family. And yes, your
>    suggestion would solve my case and is a better implementation for
>    the other devices (as far as I can see).

I confirm that this patch works on my hardware, which uses an 88E6071 
(88E6250 family).

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
  2021-12-07 13:22 ` Maarten Zanders
@ 2021-12-07 13:24   ` Russell King (Oracle)
  0 siblings, 0 replies; 5+ messages in thread
From: Russell King (Oracle) @ 2021-12-07 13:24 UTC (permalink / raw)
  To: Maarten Zanders
  Cc: Andrew Lunn, Vivien Didelot, Florian Fainelli, Vladimir Oltean,
	David S. Miller, Jakub Kicinski, Maxime Chevallier, netdev

On Tue, Dec 07, 2021 at 02:22:56PM +0100, Maarten Zanders wrote:
> On 12/7/21 11:32, Russell King (Oracle) wrote:
> > Maarten Zanders has confirmed that the issue he was addressing was for
> > an 88E6250 switch, which does not have a PHY_DETECT bit in bit 12, but
> > instead a link status bit. Therefore, mv88e6xxx_port_ppu_updates() does
> > not report correctly.
> ...>    Yes, you're right, I'm targeting the 6250 family. And yes, your
> >    suggestion would solve my case and is a better implementation for
> >    the other devices (as far as I can see).
> 
> I confirm that this patch works on my hardware, which uses an 88E6071
> (88E6250 family).

Thanks for testing! Would you be able to supply a Tested-by:
attributation for the patch, so your confirmation can be recorded in
the commit please?

Thanks again.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
  2021-12-07 10:32 [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's" Russell King (Oracle)
  2021-12-07 13:22 ` Maarten Zanders
@ 2021-12-07 13:41 ` Maarten Zanders
  2021-12-08 23:00 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 5+ messages in thread
From: Maarten Zanders @ 2021-12-07 13:41 UTC (permalink / raw)
  To: Russell King (Oracle)
  Cc: Andrew Lunn, Vivien Didelot, Florian Fainelli, Vladimir Oltean,
	David S. Miller, Jakub Kicinski, Maxime Chevallier, netdev

On 12/7/21 11:32, Russell King (Oracle) wrote:
> This commit fixes a misunderstanding in commit 4a3e0aeddf09 ("net: dsa:
> mv88e6xxx: don't use PHY_DETECT on internal PHY's").
> 
> For Marvell DSA switches with the PHY_DETECT bit (for non-6250 family
> devices), controls whether the PPU polls the PHY to retrieve the link,
> speed, duplex and pause status to update the port configuration. This
> applies for both internal and external PHYs.
> 
> For some switches such as 88E6352 and 88E6390X, PHY_DETECT has an
> additional function of enabling auto-media mode between the internal
> PHY and SERDES blocks depending on which first gains link.
> 
> The original intention of commit 5d5b231da7ac (net: dsa: mv88e6xxx: use
> PHY_DETECT in mac_link_up/mac_link_down) was to allow this bit to be
> used to detect when this propagation is enabled, and allow software to
> update the port configuration. This has found to be necessary for some
> switches which do not automatically propagate status from the SERDES to
> the port, which includes the 88E6390. However, commit 4a3e0aeddf09
> ("net: dsa: mv88e6xxx: don't use PHY_DETECT on internal PHY's") breaks
> this assumption.
> 
> Maarten Zanders has confirmed that the issue he was addressing was for
> an 88E6250 switch, which does not have a PHY_DETECT bit in bit 12, but
> instead a link status bit. Therefore, mv88e6xxx_port_ppu_updates() does
> not report correctly.
> 
> This patch resolves the above issues by reverting Maarten's change and
> instead making mv88e6xxx_port_ppu_updates() indicate whether the port
> is internal for the 88E6250 family of switches.
> 
>    Yes, you're right, I'm targeting the 6250 family. And yes, your
>    suggestion would solve my case and is a better implementation for
>    the other devices (as far as I can see).
> 
> Fixes: 4a3e0aeddf09 ("net: dsa: mv88e6xxx: don't use PHY_DETECT on internal PHY's")
> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>

Tested-by: Maarten Zanders <maarten.zanders@mind.be>

Thanks Russell

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
  2021-12-07 10:32 [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's" Russell King (Oracle)
  2021-12-07 13:22 ` Maarten Zanders
  2021-12-07 13:41 ` Maarten Zanders
@ 2021-12-08 23:00 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-12-08 23:00 UTC (permalink / raw)
  To: Russell King
  Cc: maarten.zanders, andrew, vivien.didelot, f.fainelli, olteanv,
	davem, kuba, maxime.chevallier, netdev

Hello:

This patch was applied to netdev/net.git (master)
by Jakub Kicinski <kuba@kernel.org>:

On Tue, 07 Dec 2021 10:32:43 +0000 you wrote:
> This commit fixes a misunderstanding in commit 4a3e0aeddf09 ("net: dsa:
> mv88e6xxx: don't use PHY_DETECT on internal PHY's").
> 
> For Marvell DSA switches with the PHY_DETECT bit (for non-6250 family
> devices), controls whether the PPU polls the PHY to retrieve the link,
> speed, duplex and pause status to update the port configuration. This
> applies for both internal and external PHYs.
> 
> [...]

Here is the summary with links:
  - [net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
    https://git.kernel.org/netdev/net/c/2b29cb9e3f7f

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:[~2021-12-08 23:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-07 10:32 [PATCH net] net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's" Russell King (Oracle)
2021-12-07 13:22 ` Maarten Zanders
2021-12-07 13:24   ` Russell King (Oracle)
2021-12-07 13:41 ` Maarten Zanders
2021-12-08 23:00 ` patchwork-bot+netdevbpf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.