--- /dev/null
+From stable+bounces-45203-greg=kroah.com@vger.kernel.org Wed May 15 19:03:16 2024
+From: Florian Fainelli <florian.fainelli@broadcom.com>
+Date: Wed, 15 May 2024 10:02:24 -0700
+Subject: net: bcmgenet: Clear RGMII_LINK upon link down
+To: linux-kernel@vger.kernel.org
+Cc: broonie@kernel.org, Florian Fainelli <f.fainelli@gmail.com>, Jakub Kicinski <kuba@kernel.org>, Florian Fainelli <florian.fainelli@broadcom.com>, Doug Berger <opendmb@gmail.com>, Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>, "David S. Miller" <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Paolo Abeni <pabeni@redhat.com>, netdev@vger.kernel.org (open list:BROADCOM GENET ETHERNET DRIVER), stable@vger.kernel.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20240515170227.1679927-2-florian.fainelli@broadcom.com>
+
+From: Florian Fainelli <f.fainelli@gmail.com>
+
+commit 696450c05181559a35d4d5bee55c465b1ac6fe2e upstream
+
+Clear the RGMII_LINK bit upon detecting link down to be consistent with
+setting the bit upon link up. We also move the clearing of the
+out-of-band disable to the runtime initialization rather than for each
+link up/down transition.
+
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Link: https://lore.kernel.org/r/20221118213754.1383364-1-f.fainelli@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/broadcom/genet/bcmmii.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
++++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
+@@ -72,7 +72,6 @@ static void bcmgenet_mac_config(struct n
+ * Receive clock is provided by the PHY.
+ */
+ reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
+- reg &= ~OOB_DISABLE;
+ reg |= RGMII_LINK;
+ bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
+
+@@ -100,10 +99,18 @@ static void bcmgenet_mac_config(struct n
+ */
+ void bcmgenet_mii_setup(struct net_device *dev)
+ {
++ struct bcmgenet_priv *priv = netdev_priv(dev);
+ struct phy_device *phydev = dev->phydev;
++ u32 reg;
+
+- if (phydev->link)
++ if (phydev->link) {
+ bcmgenet_mac_config(dev);
++ } else {
++ reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
++ reg &= ~RGMII_LINK;
++ bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
++ }
++
+ phy_print_status(phydev);
+ }
+
+@@ -264,18 +271,20 @@ int bcmgenet_mii_config(struct net_devic
+ (priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
+
+ /* This is an external PHY (xMII), so we need to enable the RGMII
+- * block for the interface to work
++ * block for the interface to work, unconditionally clear the
++ * Out-of-band disable since we do not need it.
+ */
++ reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
++ reg &= ~OOB_DISABLE;
+ if (priv->ext_phy) {
+- reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
+ reg &= ~ID_MODE_DIS;
+ reg |= id_mode_dis;
+ if (GENET_IS_V1(priv) || GENET_IS_V2(priv) || GENET_IS_V3(priv))
+ reg |= RGMII_MODE_EN_V123;
+ else
+ reg |= RGMII_MODE_EN;
+- bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
+ }
++ bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
+
+ if (init)
+ dev_info(kdev, "configuring instance for %s\n", phy_name);
-From d85cf67a339685beae1d0aee27b7f61da95455be Mon Sep 17 00:00:00 2001
-From: Doug Berger <opendmb@gmail.com>
-Date: Thu, 25 Apr 2024 15:27:19 -0700
+From stable+bounces-45204-greg=kroah.com@vger.kernel.org Wed May 15 19:03:18 2024
+From: Florian Fainelli <florian.fainelli@broadcom.com>
+Date: Wed, 15 May 2024 10:02:25 -0700
Subject: net: bcmgenet: synchronize EXT_RGMII_OOB_CTRL access
+To: linux-kernel@vger.kernel.org
+Cc: broonie@kernel.org, Doug Berger <opendmb@gmail.com>, stable@vger.kernel.org, Florian Fainelli <florian.fainelli@broadcom.com>, "David S . Miller" <davem@davemloft.net>, Florian Fainelli <f.fainelli@gmail.com>, Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, netdev@vger.kernel.org (open list:BROADCOM GENET ETHERNET DRIVER), Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20240515170227.1679927-3-florian.fainelli@broadcom.com>
From: Doug Berger <opendmb@gmail.com>
-commit d85cf67a339685beae1d0aee27b7f61da95455be upstream.
+commit d85cf67a339685beae1d0aee27b7f61da95455be upstream
The EXT_RGMII_OOB_CTRL register can be written from different
contexts. It is predominantly written from the adjust_link
Signed-off-by: Doug Berger <opendmb@gmail.com>
Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/broadcom/genet/bcmmii.c | 4 +++-
*/
#include <linux/acpi.h>
-@@ -71,10 +71,12 @@ static void bcmgenet_mac_config(struct n
- * transmit -- 25MHz(100Mbps) or 125MHz(1Gbps).
- * Receive clock is provided by the PHY.
+@@ -274,6 +274,7 @@ int bcmgenet_mii_config(struct net_devic
+ * block for the interface to work, unconditionally clear the
+ * Out-of-band disable since we do not need it.
*/
+ mutex_lock(&phydev->lock);
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
reg &= ~OOB_DISABLE;
- reg |= RGMII_LINK;
+ if (priv->ext_phy) {
+@@ -285,6 +286,7 @@ int bcmgenet_mii_config(struct net_devic
+ reg |= RGMII_MODE_EN;
+ }
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
+ mutex_unlock(&phydev->lock);
- reg = bcmgenet_umac_readl(priv, UMAC_CMD);
- reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) |
+ if (init)
+ dev_info(kdev, "configuring instance for %s\n", phy_name);
-From 0d5e2a82232605b337972fb2c7d0cbc46898aca1 Mon Sep 17 00:00:00 2001
-From: Doug Berger <opendmb@gmail.com>
-Date: Thu, 25 Apr 2024 15:27:21 -0700
+From stable+bounces-45206-greg=kroah.com@vger.kernel.org Wed May 15 19:03:43 2024
+From: Florian Fainelli <florian.fainelli@broadcom.com>
+Date: Wed, 15 May 2024 10:02:27 -0700
Subject: net: bcmgenet: synchronize UMAC_CMD access
+To: linux-kernel@vger.kernel.org
+Cc: broonie@kernel.org, Doug Berger <opendmb@gmail.com>, stable@vger.kernel.org, Florian Fainelli <florian.fainelli@broadcom.com>, "David S . Miller" <davem@davemloft.net>, Florian Fainelli <f.fainelli@gmail.com>, Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, netdev@vger.kernel.org (open list:BROADCOM GENET ETHERNET DRIVER), Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20240515170227.1679927-5-florian.fainelli@broadcom.com>
From: Doug Berger <opendmb@gmail.com>
-commit 0d5e2a82232605b337972fb2c7d0cbc46898aca1 upstream.
+commit 0d5e2a82232605b337972fb2c7d0cbc46898aca1 upstream
The UMAC_CMD register is written from different execution
contexts and has insufficient synchronization protections to
Signed-off-by: Doug Berger <opendmb@gmail.com>
Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 12 +++++++++++-
}
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
-@@ -78,6 +78,7 @@ static void bcmgenet_mac_config(struct n
+@@ -75,6 +75,7 @@ static void bcmgenet_mac_config(struct n
+ reg |= RGMII_LINK;
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
- mutex_unlock(&phydev->lock);
+ spin_lock_bh(&priv->reg_lock);
reg = bcmgenet_umac_readl(priv, UMAC_CMD);
reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) |
CMD_HD_EN |
-@@ -90,6 +91,7 @@ static void bcmgenet_mac_config(struct n
+@@ -87,6 +88,7 @@ static void bcmgenet_mac_config(struct n
reg |= CMD_TX_EN | CMD_RX_EN;
}
bcmgenet_umac_writel(priv, reg, UMAC_CMD);
-From 2dbe5f19368caae63b1f59f5bc2af78c7d522b3a Mon Sep 17 00:00:00 2001
-From: Doug Berger <opendmb@gmail.com>
-Date: Thu, 25 Apr 2024 15:27:20 -0700
+From stable+bounces-45205-greg=kroah.com@vger.kernel.org Wed May 15 19:03:49 2024
+From: Florian Fainelli <florian.fainelli@broadcom.com>
+Date: Wed, 15 May 2024 10:02:26 -0700
Subject: net: bcmgenet: synchronize use of bcmgenet_set_rx_mode()
+To: linux-kernel@vger.kernel.org
+Cc: broonie@kernel.org, Doug Berger <opendmb@gmail.com>, stable@vger.kernel.org, Florian Fainelli <florian.fainelli@broadcom.com>, "David S . Miller" <davem@davemloft.net>, Florian Fainelli <f.fainelli@gmail.com>, Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, netdev@vger.kernel.org (open list:BROADCOM GENET ETHERNET DRIVER), Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20240515170227.1679927-4-florian.fainelli@broadcom.com>
From: Doug Berger <opendmb@gmail.com>
-commit 2dbe5f19368caae63b1f59f5bc2af78c7d522b3a upstream.
+commit 2dbe5f19368caae63b1f59f5bc2af78c7d522b3a upstream
The ndo_set_rx_mode function is synchronized with the
netif_addr_lock spinlock and BHs disabled. Since this
Signed-off-by: Doug Berger <opendmb@gmail.com>
Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +++-
iio-accel-mxc4005-interrupt-handling-fixes.patch
kmsan-compiler_types-declare-__no_sanitize_or_inline.patch
tipc-fix-uaf-in-error-path.patch
-net-bcmgenet-synchronize-ext_rgmii_oob_ctrl-access.patch
-net-bcmgenet-synchronize-use-of-bcmgenet_set_rx_mode.patch
-net-bcmgenet-synchronize-umac_cmd-access.patch
asoc-tegra-fix-dspk-16-bit-playback.patch
asoc-ti-davinci-mcasp-fix-race-condition-during-probe.patch
dyndbg-fix-old-bug_on-in-control-parser.patch
mm-hugetlb-fix-debug_locks_warn_on-1-when-dissolve_free_hugetlb_folio.patch
mm-swapops-update-check-in-is_pfn_swap_entry-for-hwpoison-entries.patch
md-fix-kmemleak-of-rdev-serial.patch
+net-bcmgenet-clear-rgmii_link-upon-link-down.patch
+net-bcmgenet-synchronize-ext_rgmii_oob_ctrl-access.patch
+net-bcmgenet-synchronize-use-of-bcmgenet_set_rx_mode.patch
+net-bcmgenet-synchronize-umac_cmd-access.patch