net: ethernet: mediatek: add controlling power domain the ethernet belongs to
authorSean Wang <sean.wang@mediatek.com>
Wed, 14 Sep 2016 15:13:18 +0000 (23:13 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Sep 2016 06:22:57 +0000 (02:22 -0400)
introduce power domain control which the digital circuit of
the ethernet belongs to inside the flow of hardware initialization
and deinitialization which helps the entire ethernet hardware block
could restart cleanly and completely as being back to the initial
state when the whole machine reboot.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mediatek/mtk_eth_soc.c

index 1272316a7d7b89698cd6d10354fad3c4d2624c3a..01f59115132cf5721ce59167dfff27322c36ae2e 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/mfd/syscon.h>
 #include <linux/regmap.h>
 #include <linux/clk.h>
+#include <linux/pm_runtime.h>
 #include <linux/if_vlan.h>
 #include <linux/reset.h>
 #include <linux/tcp.h>
@@ -1417,6 +1418,9 @@ static int __init mtk_hw_init(struct mtk_eth *eth)
 {
        int i;
 
+       pm_runtime_enable(eth->dev);
+       pm_runtime_get_sync(eth->dev);
+
        clk_prepare_enable(eth->clks[MTK_CLK_ETHIF]);
        clk_prepare_enable(eth->clks[MTK_CLK_ESW]);
        clk_prepare_enable(eth->clks[MTK_CLK_GP1]);
@@ -1484,6 +1488,9 @@ static int mtk_hw_deinit(struct mtk_eth *eth)
        clk_disable_unprepare(eth->clks[MTK_CLK_ESW]);
        clk_disable_unprepare(eth->clks[MTK_CLK_ETHIF]);
 
+       pm_runtime_put_sync(eth->dev);
+       pm_runtime_disable(eth->dev);
+
        return 0;
 }