]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Dec 2019 07:15:38 +0000 (08:15 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Dec 2019 07:15:38 +0000 (08:15 +0100)
added patches:
net-fec-fix-clock-count-mis-match.patch

queue-4.19/net-fec-fix-clock-count-mis-match.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/net-fec-fix-clock-count-mis-match.patch b/queue-4.19/net-fec-fix-clock-count-mis-match.patch
new file mode 100644 (file)
index 0000000..f476c24
--- /dev/null
@@ -0,0 +1,68 @@
+From a31eda65ba210741b598044d045480494d0ed52a Mon Sep 17 00:00:00 2001
+From: Chuhong Yuan <hslester96@gmail.com>
+Date: Wed, 20 Nov 2019 09:25:13 +0800
+Subject: net: fec: fix clock count mis-match
+
+From: Chuhong Yuan <hslester96@gmail.com>
+
+commit a31eda65ba210741b598044d045480494d0ed52a upstream.
+
+pm_runtime_put_autosuspend in probe will call runtime suspend to
+disable clks automatically if CONFIG_PM is defined. (If CONFIG_PM
+is not defined, its implementation will be empty, then runtime
+suspend will not be called.)
+
+Therefore, we can call pm_runtime_get_sync to runtime resume it
+first to enable clks, which matches the runtime suspend. (Only when
+CONFIG_PM is defined, otherwise pm_runtime_get_sync will also be
+empty, then runtime resume will not be called.)
+
+Then it is fine to disable clks without causing clock count mis-match.
+
+Fixes: c43eab3eddb4 ("net: fec: add missed clk_disable_unprepare in remove")
+Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
+Acked-by: Fugang Duan <fugang.duan@nxp.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/freescale/fec_main.c |   15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/freescale/fec_main.c
++++ b/drivers/net/ethernet/freescale/fec_main.c
+@@ -3597,6 +3597,11 @@ fec_drv_remove(struct platform_device *p
+       struct net_device *ndev = platform_get_drvdata(pdev);
+       struct fec_enet_private *fep = netdev_priv(ndev);
+       struct device_node *np = pdev->dev.of_node;
++      int ret;
++
++      ret = pm_runtime_get_sync(&pdev->dev);
++      if (ret < 0)
++              return ret;
+       cancel_work_sync(&fep->tx_timeout_work);
+       fec_ptp_stop(pdev);
+@@ -3604,15 +3609,17 @@ fec_drv_remove(struct platform_device *p
+       fec_enet_mii_remove(fep);
+       if (fep->reg_phy)
+               regulator_disable(fep->reg_phy);
+-      pm_runtime_put(&pdev->dev);
+-      pm_runtime_disable(&pdev->dev);
+-      clk_disable_unprepare(fep->clk_ahb);
+-      clk_disable_unprepare(fep->clk_ipg);
++
+       if (of_phy_is_fixed_link(np))
+               of_phy_deregister_fixed_link(np);
+       of_node_put(fep->phy_node);
+       free_netdev(ndev);
++      clk_disable_unprepare(fep->clk_ahb);
++      clk_disable_unprepare(fep->clk_ipg);
++      pm_runtime_put_noidle(&pdev->dev);
++      pm_runtime_disable(&pdev->dev);
++
+       return 0;
+ }
index b60efae86f6e47a1b72898aa113357c1413ffc21..208d513c88aa4fddc4a7f2919cabee738e747a18 100644 (file)
@@ -319,3 +319,4 @@ asoc-stm32-sai-add-missing-put_device.patch
 dmaengine-stm32-dma-check-whether-length-is-aligned-on-fifo-threshold.patch
 platform-x86-hp-wmi-fix-acpi-errors-caused-by-too-small-buffer.patch
 platform-x86-hp-wmi-fix-acpi-errors-caused-by-passing-0-as-input-size.patch
+net-fec-fix-clock-count-mis-match.patch