aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clk/tegra/clk-tegra114.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/tegra/clk-tegra114.c')
-rw-r--r--drivers/clk/tegra/clk-tegra114.c36
1 files changed, 4 insertions, 32 deletions
diff --git a/drivers/clk/tegra/clk-tegra114.c b/drivers/clk/tegra/clk-tegra114.c
index d0766423a5d6..8237d16b4075 100644
--- a/drivers/clk/tegra/clk-tegra114.c
+++ b/drivers/clk/tegra/clk-tegra114.c
@@ -940,36 +940,6 @@ static struct clk **clks;
940static unsigned long osc_freq; 940static unsigned long osc_freq;
941static unsigned long pll_ref_freq; 941static unsigned long pll_ref_freq;
942 942
943static int __init tegra114_osc_clk_init(void __iomem *clk_base)
944{
945 struct clk *clk;
946 u32 val, pll_ref_div;
947
948 val = readl_relaxed(clk_base + OSC_CTRL);
949
950 osc_freq = tegra114_input_freq[val >> OSC_CTRL_OSC_FREQ_SHIFT];
951 if (!osc_freq) {
952 WARN_ON(1);
953 return -EINVAL;
954 }
955
956 /* clk_m */
957 clk = clk_register_fixed_rate(NULL, "clk_m", NULL, CLK_IS_ROOT,
958 osc_freq);
959 clks[TEGRA114_CLK_CLK_M] = clk;
960
961 /* pll_ref */
962 val = (val >> OSC_CTRL_PLL_REF_DIV_SHIFT) & 3;
963 pll_ref_div = 1 << val;
964 clk = clk_register_fixed_factor(NULL, "pll_ref", "clk_m",
965 CLK_SET_RATE_PARENT, 1, pll_ref_div);
966 clks[TEGRA114_CLK_PLL_REF] = clk;
967
968 pll_ref_freq = osc_freq / pll_ref_div;
969
970 return 0;
971}
972
973static void __init tegra114_fixed_clk_init(void __iomem *clk_base) 943static void __init tegra114_fixed_clk_init(void __iomem *clk_base)
974{ 944{
975 struct clk *clk; 945 struct clk *clk;
@@ -1263,6 +1233,7 @@ static void tegra114_wait_cpu_in_reset(u32 cpu)
1263 cpu_relax(); 1233 cpu_relax();
1264 } while (!(reg & (1 << cpu))); /* check CPU been reset or not */ 1234 } while (!(reg & (1 << cpu))); /* check CPU been reset or not */
1265} 1235}
1236
1266static void tegra114_disable_cpu_clock(u32 cpu) 1237static void tegra114_disable_cpu_clock(u32 cpu)
1267{ 1238{
1268 /* flow controller would take care in the power sequence. */ 1239 /* flow controller would take care in the power sequence. */
@@ -1351,7 +1322,6 @@ static void __init tegra114_clock_apply_init_table(void)
1351 tegra_init_from_table(init_table, clks, TEGRA114_CLK_CLK_MAX); 1322 tegra_init_from_table(init_table, clks, TEGRA114_CLK_CLK_MAX);
1352} 1323}
1353 1324
1354
1355/** 1325/**
1356 * tegra114_car_barrier - wait for pending writes to the CAR to complete 1326 * tegra114_car_barrier - wait for pending writes to the CAR to complete
1357 * 1327 *
@@ -1505,7 +1475,9 @@ static void __init tegra114_clock_init(struct device_node *np)
1505 if (!clks) 1475 if (!clks)
1506 return; 1476 return;
1507 1477
1508 if (tegra114_osc_clk_init(clk_base) < 0) 1478 if (tegra_osc_clk_init(clk_base, tegra114_clks, tegra114_input_freq,
1479 ARRAY_SIZE(tegra114_input_freq), 1, &osc_freq,
1480 &pll_ref_freq) < 0)
1509 return; 1481 return;
1510 1482
1511 tegra114_fixed_clk_init(clk_base); 1483 tegra114_fixed_clk_init(clk_base);