]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Jul 2021 09:27:40 +0000 (11:27 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Jul 2021 09:27:40 +0000 (11:27 +0200)
added patches:
net-bcmgenet-ensure-ext_energy_det_mask-is-clear.patch

queue-4.4/net-bcmgenet-ensure-ext_energy_det_mask-is-clear.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/net-bcmgenet-ensure-ext_energy_det_mask-is-clear.patch b/queue-4.4/net-bcmgenet-ensure-ext_energy_det_mask-is-clear.patch
new file mode 100644 (file)
index 0000000..0ea5b55
--- /dev/null
@@ -0,0 +1,90 @@
+From 5a3c680aa2c12c90c44af383fe6882a39875ab81 Mon Sep 17 00:00:00 2001
+From: Doug Berger <opendmb@gmail.com>
+Date: Tue, 29 Jun 2021 17:14:19 -0700
+Subject: net: bcmgenet: ensure EXT_ENERGY_DET_MASK is clear
+
+From: Doug Berger <opendmb@gmail.com>
+
+commit 5a3c680aa2c12c90c44af383fe6882a39875ab81 upstream.
+
+Setting the EXT_ENERGY_DET_MASK bit allows the port energy detection
+logic of the internal PHY to prevent the system from sleeping. Some
+internal PHYs will report that energy is detected when the network
+interface is closed which can prevent the system from going to sleep
+if WoL is enabled when the interface is brought down.
+
+Since the driver does not support waking the system on this logic,
+this commit clears the bit whenever the internal PHY is powered up
+and the other logic for manipulating the bit is removed since it
+serves no useful function.
+
+Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file")
+Signed-off-by: Doug Berger <opendmb@gmail.com>
+Acked-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/broadcom/genet/bcmgenet.c     |   15 +--------------
+ drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c |    6 ------
+ 2 files changed, 1 insertion(+), 20 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
++++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+@@ -1094,7 +1094,7 @@ static void bcmgenet_power_up(struct bcm
+       switch (mode) {
+       case GENET_POWER_PASSIVE:
+               reg &= ~(EXT_PWR_DOWN_DLL | EXT_PWR_DOWN_PHY |
+-                              EXT_PWR_DOWN_BIAS);
++                       EXT_PWR_DOWN_BIAS | EXT_ENERGY_DET_MASK);
+               /* fallthrough */
+       case GENET_POWER_CABLE_SENSE:
+               /* enable APD */
+@@ -2908,12 +2908,6 @@ static int bcmgenet_open(struct net_devi
+       bcmgenet_set_hw_addr(priv, dev->dev_addr);
+-      if (priv->internal_phy) {
+-              reg = bcmgenet_ext_readl(priv, EXT_EXT_PWR_MGMT);
+-              reg |= EXT_ENERGY_DET_MASK;
+-              bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT);
+-      }
+-
+       /* Disable RX/TX DMA and flush TX queues */
+       dma_ctrl = bcmgenet_dma_disable(priv);
+@@ -3601,7 +3595,6 @@ static int bcmgenet_resume(struct device
+       struct bcmgenet_priv *priv = netdev_priv(dev);
+       unsigned long dma_ctrl;
+       int ret;
+-      u32 reg;
+       if (!netif_running(dev))
+               return 0;
+@@ -3636,12 +3629,6 @@ static int bcmgenet_resume(struct device
+       bcmgenet_set_hw_addr(priv, dev->dev_addr);
+-      if (priv->internal_phy) {
+-              reg = bcmgenet_ext_readl(priv, EXT_EXT_PWR_MGMT);
+-              reg |= EXT_ENERGY_DET_MASK;
+-              bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT);
+-      }
+-
+       if (priv->wolopts)
+               bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC);
+--- a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c
++++ b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c
+@@ -167,12 +167,6 @@ int bcmgenet_wol_power_down_cfg(struct b
+       reg |= CMD_RX_EN;
+       bcmgenet_umac_writel(priv, reg, UMAC_CMD);
+-      if (priv->hw_params->flags & GENET_HAS_EXT) {
+-              reg = bcmgenet_ext_readl(priv, EXT_EXT_PWR_MGMT);
+-              reg &= ~EXT_ENERGY_DET_MASK;
+-              bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT);
+-      }
+-
+       /* Enable the MPD interrupt */
+       cpu_mask_clear = UMAC_IRQ_MPD_R;
index d816001c837bd21106e47aa226f9f6cf83869438..153ee307eccf288f5a91fdbb6dfdb1423fc8246a 100644 (file)
@@ -41,3 +41,4 @@ usb-serial-cp210x-fix-comments-for-ge-cs1000.patch
 usb-serial-cp210x-add-id-for-cel-em3588-usb-zigbee-stick.patch
 tracing-fix-bug-in-rb_per_cpu_empty-that-might-cause-deadloop.patch
 media-ngene-fix-out-of-bounds-bug-in-ngene_command_config_free_buf.patch
+net-bcmgenet-ensure-ext_energy_det_mask-is-clear.patch