diff options
Diffstat (limited to 'drivers/clk/tegra/clk-tegra114.c')
| -rw-r--r-- | drivers/clk/tegra/clk-tegra114.c | 36 |
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; | |||
| 940 | static unsigned long osc_freq; | 940 | static unsigned long osc_freq; |
| 941 | static unsigned long pll_ref_freq; | 941 | static unsigned long pll_ref_freq; |
| 942 | 942 | ||
| 943 | static 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 | |||
| 973 | static void __init tegra114_fixed_clk_init(void __iomem *clk_base) | 943 | static 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 | |||
| 1266 | static void tegra114_disable_cpu_clock(u32 cpu) | 1237 | static 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); |
