The DPLL has fixed frequency left by the bootloader and it is not possible to change it. With this patch the DPLL gets rate table the same for the whole PLL family (similar as APLL, KPLL according to RM) so the frequency might be changed to one of the values defined there. It is needed for further patches which change the DPLL frequency to feed the clocks with proper base. It also sets CLK_IS_CRITICAL for SCLK_DPLL due to some drivers which could disable master clock, which is then populated higher and tries to disable PLL, which casues system crash. The flag is needed for this kind of use cases. Signed-off-by: Lukasz Luba <l.luba@xxxxxxxxxxxxxxxxxxx> --- drivers/clk/samsung/clk-exynos5420.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c index 7f8221527633..2395b02ce8c5 100644 --- a/drivers/clk/samsung/clk-exynos5420.c +++ b/drivers/clk/samsung/clk-exynos5420.c @@ -694,7 +694,8 @@ static const struct samsung_mux_clock exynos5x_mux_clks[] __initconst = { MUX(0, "mout_sclk_rpll", mout_rpll_p, SRC_TOP6, 16, 1), MUX_F(CLK_MOUT_EPLL, "mout_sclk_epll", mout_epll_p, SRC_TOP6, 20, 1, CLK_SET_RATE_PARENT, 0), - MUX(0, "mout_sclk_dpll", mout_dpll_p, SRC_TOP6, 24, 1), + MUX_F(CLK_MOUT_SCLK_DPLL, "mout_sclk_dpll", mout_dpll_p, + SRC_TOP6, 24, 1, CLK_IS_CRITICAL, 0), MUX(0, "mout_sclk_cpll", mout_cpll_p, SRC_TOP6, 28, 1), MUX(CLK_MOUT_SW_ACLK400_ISP, "mout_sw_aclk400_isp", @@ -1514,6 +1515,7 @@ static void __init exynos5x_clk_init(struct device_node *np, if (_get_rate("fin_pll") == 24 * MHZ) { exynos5x_plls[apll].rate_table = exynos5420_pll2550x_24mhz_tbl; + exynos5x_plls[dpll].rate_table = exynos5420_pll2550x_24mhz_tbl; exynos5x_plls[epll].rate_table = exynos5420_epll_24mhz_tbl; exynos5x_plls[kpll].rate_table = exynos5420_pll2550x_24mhz_tbl; } -- 2.17.1