Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5e136a2 authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Tomasz Figa
Browse files

clk: samsung: Register clk provider only after registering its all clocks



Ensure the clock provider is not registered until after all its related
clocks were created and are ready to use. Currently there are races
possible and any (of_)clk_get() call right after a clock provider's
clk_init_cb callback call may fail.

Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarTomasz Figa <t.figa@samsung.com>
parent bdfcdf18
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -776,5 +776,7 @@ static void __init exynos3250_cmu_init(struct device_node *np)
	samsung_clk_register_gate(ctx, gate_clks, ARRAY_SIZE(gate_clks));

	exynos3250_clk_sleep_init();

	samsung_clk_of_add_provider(np, ctx);
}
CLK_OF_DECLARE(exynos3250_cmu, "samsung,exynos3250-cmu", exynos3250_cmu_init);
+2 −0
Original line number Diff line number Diff line
@@ -1252,6 +1252,8 @@ static void __init exynos4_clk_init(struct device_node *np,

	exynos4_clk_sleep_init();

	samsung_clk_of_add_provider(np, ctx);

	pr_info("%s clocks: sclk_apll = %ld, sclk_mpll = %ld\n"
		"\tsclk_epll = %ld, sclk_vpll = %ld, arm_clk = %ld\n",
		exynos4_soc == EXYNOS4210 ? "Exynos4210" : "Exynos4x12",
+2 −0
Original line number Diff line number Diff line
@@ -820,6 +820,8 @@ static void __init exynos5250_clk_init(struct device_node *np)

	exynos5250_clk_sleep_init();

	samsung_clk_of_add_provider(np, ctx);

	pr_info("Exynos5250: clock setup completed, armclk=%ld\n",
			_get_rate("div_arm2"));
}
+2 −0
Original line number Diff line number Diff line
@@ -206,6 +206,8 @@ void __init exynos5260_cmu_register_one(struct device_node *np,
	if (cmu->clk_regs)
		exynos5260_clk_sleep_init(reg_base, cmu->clk_regs,
			cmu->nr_clk_regs);

	samsung_clk_of_add_provider(np, ctx);
}


+2 −0
Original line number Diff line number Diff line
@@ -204,6 +204,8 @@ static void __init exynos5410_clk_init(struct device_node *np)
	samsung_clk_register_gate(ctx, exynos5410_gate_clks,
			ARRAY_SIZE(exynos5410_gate_clks));

	samsung_clk_of_add_provider(np, ctx);

	pr_debug("Exynos5410: clock setup completed.\n");
}
CLK_OF_DECLARE(exynos5410_clk, "samsung,exynos5410-clock", exynos5410_clk_init);
Loading