Thread (36 messages) 36 messages, 6 authors, 2019-11-17

Re: [PATCH V4 11/11] clk: imx: lpcg: add suspend/resume support

From: Dong Aisheng <hidden>
Date: 2019-09-09 11:49:46
Also in: linux-clk

On Sat, Sep 7, 2019 at 9:22 PM Stephen Boyd [off-list ref] wrote:
Quoting Dong Aisheng (2019-08-20 04:13:25)
quoted
diff --git a/drivers/clk/imx/clk-lpcg-scu.c b/drivers/clk/imx/clk-lpcg-scu.c
index 3c092a0..4df0818 100644
--- a/drivers/clk/imx/clk-lpcg-scu.c
+++ b/drivers/clk/imx/clk-lpcg-scu.c
@@ -33,6 +33,9 @@ struct clk_lpcg_scu {
        void __iomem *reg;
        u8 bit_idx;
        bool hw_gate;
+
+       /* for state save&restore */
+       u32 state;
 };

 #define to_clk_lpcg_scu(_hw) container_of(_hw, struct clk_lpcg_scu, hw)
@@ -112,5 +115,35 @@ struct clk_hw *__imx_clk_lpcg_scu(struct device *dev, const char *name,
                hw = ERR_PTR(ret);
        }

+       if (dev)
+               dev_set_drvdata(dev, clk);
+
        return hw;
 }
+
+int __maybe_unused imx_clk_lpcg_scu_suspend(struct device *dev)
static?
quoted
+{
+       struct clk_lpcg_scu *clk = dev_get_drvdata(dev);
+
+       clk->state = readl_relaxed(clk->reg);
+       dev_dbg(dev, "save lpcg state 0x%x\n", clk->state);
+
+       return 0;
+}
+
+int __maybe_unused imx_clk_lpcg_scu_resume(struct device *dev)
static?
Will fix.
quoted
+{
+       struct clk_lpcg_scu *clk = dev_get_drvdata(dev);
+
+       /* FIXME: double write in case a failure */
What does this mean? Sometimes writes don't work unless the CPU issues
them twice?
Yes, it's a hardware timing issues.

Regards
Aisheng
quoted
+       writel(clk->state, clk->reg);
+       writel(clk->state, clk->reg);
+       dev_dbg(dev, "restore lpcg state 0x%x\n", clk->state);
+
+       return 0;
+}
+
+const struct dev_pm_ops imx_clk_lpcg_scu_pm_ops = {
+       SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(imx_clk_lpcg_scu_suspend,
+                                     imx_clk_lpcg_scu_resume)
+};
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help