clk: tegra20: Check whether direct PLLM sourcing is turned off for EMC
authorDmitry Osipenko <digetx@gmail.com>
Sun, 21 Oct 2018 18:30:51 +0000 (21:30 +0300)
committerThierry Reding <treding@nvidia.com>
Thu, 8 Nov 2018 11:47:18 +0000 (12:47 +0100)
Ensure that direct PLLM sourcing is turned off for EMC as we don't support
that configuration in the clk driver.

Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Acked-by: Peter De Schrijver <pdeschrijver@nvidia.com>
Acked-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/clk/tegra/clk-tegra20.c

index 68551effb5ca2f3956080953226289ea9886f78f..c71b61162a32f3706fcfb79c9eed4dd2e9f613d5 100644 (file)
@@ -800,7 +800,9 @@ static struct tegra_periph_init_data tegra_periph_nodiv_clk_list[] = {
 
 static void __init tegra20_emc_clk_init(void)
 {
+       const u32 use_pllm_ud = BIT(29);
        struct clk *clk;
+       u32 emc_reg;
 
        clk = clk_register_mux(NULL, "emc_mux", mux_pllmcp_clkm,
                               ARRAY_SIZE(mux_pllmcp_clkm),
@@ -812,6 +814,14 @@ static void __init tegra20_emc_clk_init(void)
                                    &emc_lock);
        clks[TEGRA20_CLK_MC] = clk;
 
+       /* un-divided pll_m_out0 is currently unsupported */
+       emc_reg = readl_relaxed(clk_base + CLK_SOURCE_EMC);
+       if (emc_reg & use_pllm_ud) {
+               pr_err("%s: un-divided PllM_out0 used as clock source\n",
+                      __func__);
+               return;
+       }
+
        /*
         * Note that 'emc_mux' source and 'emc' rate shouldn't be changed at
         * the same time due to a HW bug, this won't happen because we're