]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Dec 2021 12:17:27 +0000 (13:17 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Dec 2021 12:17:27 +0000 (13:17 +0100)
added patches:
net-dsa-mv88e6xxx-fix-don-t-use-phy_detect-on-internal-phy-s.patch

queue-5.15/net-dsa-mv88e6xxx-allow-use-of-phys-on-cpu-and-dsa-ports.patch
queue-5.15/net-dsa-mv88e6xxx-fix-don-t-use-phy_detect-on-internal-phy-s.patch [new file with mode: 0644]
queue-5.15/series

index 8aa7ee81dcac33738afaa3c81f0c8adda1e4652b..a8fd5427844489570b4257ecfc492569ed507aeb 100644 (file)
@@ -35,7 +35,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
 --- a/drivers/net/dsa/mv88e6xxx/chip.c
 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -693,44 +693,48 @@ static void mv88e6xxx_mac_config(struct
+@@ -699,44 +699,48 @@ static void mv88e6xxx_mac_config(struct
  {
        struct mv88e6xxx_chip *chip = ds->priv;
        struct mv88e6xxx_port *p;
diff --git a/queue-5.15/net-dsa-mv88e6xxx-fix-don-t-use-phy_detect-on-internal-phy-s.patch b/queue-5.15/net-dsa-mv88e6xxx-fix-don-t-use-phy_detect-on-internal-phy-s.patch
new file mode 100644 (file)
index 0000000..8828b40
--- /dev/null
@@ -0,0 +1,99 @@
+From 2b29cb9e3f7f038c7f50ad2583b47caf5cb1eaf2 Mon Sep 17 00:00:00 2001
+From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
+Date: Tue, 7 Dec 2021 10:32:43 +0000
+Subject: net: dsa: mv88e6xxx: fix "don't use PHY_DETECT on internal PHY's"
+
+From: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
+
+commit 2b29cb9e3f7f038c7f50ad2583b47caf5cb1eaf2 upstream.
+
+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>
+Link: https://lore.kernel.org/r/E1muXm7-00EwJB-7n@rmk-PC.armlinux.org.uk
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/dsa/mv88e6xxx/chip.c |   21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/dsa/mv88e6xxx/chip.c
++++ b/drivers/net/dsa/mv88e6xxx/chip.c
+@@ -471,6 +471,12 @@ static int mv88e6xxx_port_ppu_updates(st
+       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,
+@@ -753,11 +759,10 @@ static void mv88e6xxx_mac_link_down(stru
+       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);
+@@ -780,11 +785,11 @@ static void mv88e6xxx_mac_link_up(struct
+       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
index 20d421947c37d9609b08444515e50df55f403fff..f9ba4873b4d01f934a4e08a0d8b162a15201c086 100644 (file)
@@ -26,6 +26,7 @@ can-m_can-m_can_read_fifo-fix-memory-leak-in-error-branch.patch
 can-m_can-pci-fix-incorrect-reference-clock-rate.patch
 can-m_can-pci-fix-iomap_read_fifo-and-iomap_write_fifo.patch
 can-m_can-disable-and-ignore-elo-interrupt.patch
+net-dsa-mv88e6xxx-fix-don-t-use-phy_detect-on-internal-phy-s.patch
 net-dsa-mv88e6xxx-allow-use-of-phys-on-cpu-and-dsa-ports.patch
 x86-sme-explicitly-map-new-efi-memmap-table-as-encrypted.patch
 platform-x86-amd-pmc-fix-s2idle-failures-on-certain-amd-laptops.patch