Skip to content

Commit 5dcbeca

Browse files
mszyprowbebarino
authored andcommitted
clk: samsung: exynos4: Enable VPLL and EPLL clocks for suspend/resume cycle
Commit 6edfa11 ("clk: samsung: Add enable/disable operation for PLL36XX clocks") added enable/disable operations to PLL clocks. Prior that VPLL and EPPL clocks were always enabled because the enable bit was never touched. Those clocks have to be enabled during suspend/resume cycle, because otherwise board fails to enter sleep mode. This patch enables them unconditionally before entering system suspend state. System restore function will set them to the previous state saved in the register cache done before that unconditional enable. Fixes: 6edfa11 ("clk: samsung: Add enable/disable operation for PLL36XX clocks") CC: stable@vger.kernel.org # v4.13 Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
1 parent 79765e9 commit 5dcbeca

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

drivers/clk/samsung/clk-exynos4.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,18 @@ static const struct samsung_clk_reg_dump src_mask_suspend_e4210[] = {
294294
#define PLL_ENABLED (1 << 31)
295295
#define PLL_LOCKED (1 << 29)
296296

297+
static void exynos4_clk_enable_pll(u32 reg)
298+
{
299+
u32 pll_con = readl(reg_base + reg);
300+
pll_con |= PLL_ENABLED;
301+
writel(pll_con, reg_base + reg);
302+
303+
while (!(pll_con & PLL_LOCKED)) {
304+
cpu_relax();
305+
pll_con = readl(reg_base + reg);
306+
}
307+
}
308+
297309
static void exynos4_clk_wait_for_pll(u32 reg)
298310
{
299311
u32 pll_con;
@@ -315,6 +327,9 @@ static int exynos4_clk_suspend(void)
315327
samsung_clk_save(reg_base, exynos4_save_pll,
316328
ARRAY_SIZE(exynos4_clk_pll_regs));
317329

330+
exynos4_clk_enable_pll(EPLL_CON0);
331+
exynos4_clk_enable_pll(VPLL_CON0);
332+
318333
if (exynos4_soc == EXYNOS4210) {
319334
samsung_clk_save(reg_base, exynos4_save_soc,
320335
ARRAY_SIZE(exynos4210_clk_save));

0 commit comments

Comments
 (0)