aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>2016-05-24 09:19:15 -0400
committerSylwester Nawrocki <s.nawrocki@samsung.com>2016-06-02 05:18:19 -0400
commit0c0cd59a4c31aa0dccb49450fca5e36d1759f1ca (patch)
tree58c79d19af2fbc45ad7aa793da8f6b98a461104f
parentf4f4dd0c45676fa3fc7683046f3acc862a088fed (diff)
clk: samsung: exynos5433: prepare for adding CPU clocks
Open-code samsung_cmu_register_one() calls for CMU_APOLLO and CMU_ATLAS setup code as a preparation for adding CPU clocks support for Exynos5433. There should be no functional change resulting from this patch. Cc: Kukjin Kim <kgene@kernel.org> CC: Krzysztof Kozlowski <k.kozlowski@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
-rw-r--r--drivers/clk/samsung/clk-exynos5433.c85
-rw-r--r--drivers/clk/samsung/clk.c12
-rw-r--r--drivers/clk/samsung/clk.h4
3 files changed, 65 insertions, 36 deletions
diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
index 5993bd5ac6ba..70e1df6fc825 100644
--- a/drivers/clk/samsung/clk-exynos5433.c
+++ b/drivers/clk/samsung/clk-exynos5433.c
@@ -11,6 +11,7 @@
11 11
12#include <linux/clk-provider.h> 12#include <linux/clk-provider.h>
13#include <linux/of.h> 13#include <linux/of.h>
14#include <linux/of_address.h>
14 15
15#include <dt-bindings/clock/exynos5433.h> 16#include <dt-bindings/clock/exynos5433.h>
16 17
@@ -3594,23 +3595,35 @@ static const struct samsung_gate_clock apollo_gate_clks[] __initconst = {
3594 CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), 3595 CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
3595}; 3596};
3596 3597
3597static const struct samsung_cmu_info apollo_cmu_info __initconst = {
3598 .pll_clks = apollo_pll_clks,
3599 .nr_pll_clks = ARRAY_SIZE(apollo_pll_clks),
3600 .mux_clks = apollo_mux_clks,
3601 .nr_mux_clks = ARRAY_SIZE(apollo_mux_clks),
3602 .div_clks = apollo_div_clks,
3603 .nr_div_clks = ARRAY_SIZE(apollo_div_clks),
3604 .gate_clks = apollo_gate_clks,
3605 .nr_gate_clks = ARRAY_SIZE(apollo_gate_clks),
3606 .nr_clk_ids = APOLLO_NR_CLK,
3607 .clk_regs = apollo_clk_regs,
3608 .nr_clk_regs = ARRAY_SIZE(apollo_clk_regs),
3609};
3610
3611static void __init exynos5433_cmu_apollo_init(struct device_node *np) 3598static void __init exynos5433_cmu_apollo_init(struct device_node *np)
3612{ 3599{
3613 samsung_cmu_register_one(np, &apollo_cmu_info); 3600 void __iomem *reg_base;
3601 struct samsung_clk_provider *ctx;
3602
3603 reg_base = of_iomap(np, 0);
3604 if (!reg_base) {
3605 panic("%s: failed to map registers\n", __func__);
3606 return;
3607 }
3608
3609 ctx = samsung_clk_init(np, reg_base, APOLLO_NR_CLK);
3610 if (!ctx) {
3611 panic("%s: unable to allocate ctx\n", __func__);
3612 return;
3613 }
3614
3615 samsung_clk_register_pll(ctx, apollo_pll_clks,
3616 ARRAY_SIZE(apollo_pll_clks), reg_base);
3617 samsung_clk_register_mux(ctx, apollo_mux_clks,
3618 ARRAY_SIZE(apollo_mux_clks));
3619 samsung_clk_register_div(ctx, apollo_div_clks,
3620 ARRAY_SIZE(apollo_div_clks));
3621 samsung_clk_register_gate(ctx, apollo_gate_clks,
3622 ARRAY_SIZE(apollo_gate_clks));
3623 samsung_clk_sleep_init(reg_base, apollo_clk_regs,
3624 ARRAY_SIZE(apollo_clk_regs));
3625
3626 samsung_clk_of_add_provider(np, ctx);
3614} 3627}
3615CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo", 3628CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo",
3616 exynos5433_cmu_apollo_init); 3629 exynos5433_cmu_apollo_init);
@@ -3806,23 +3819,35 @@ static const struct samsung_gate_clock atlas_gate_clks[] __initconst = {
3806 CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), 3819 CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
3807}; 3820};
3808 3821
3809static const struct samsung_cmu_info atlas_cmu_info __initconst = {
3810 .pll_clks = atlas_pll_clks,
3811 .nr_pll_clks = ARRAY_SIZE(atlas_pll_clks),
3812 .mux_clks = atlas_mux_clks,
3813 .nr_mux_clks = ARRAY_SIZE(atlas_mux_clks),
3814 .div_clks = atlas_div_clks,
3815 .nr_div_clks = ARRAY_SIZE(atlas_div_clks),
3816 .gate_clks = atlas_gate_clks,
3817 .nr_gate_clks = ARRAY_SIZE(atlas_gate_clks),
3818 .nr_clk_ids = ATLAS_NR_CLK,
3819 .clk_regs = atlas_clk_regs,
3820 .nr_clk_regs = ARRAY_SIZE(atlas_clk_regs),
3821};
3822
3823static void __init exynos5433_cmu_atlas_init(struct device_node *np) 3822static void __init exynos5433_cmu_atlas_init(struct device_node *np)
3824{ 3823{
3825 samsung_cmu_register_one(np, &atlas_cmu_info); 3824 void __iomem *reg_base;
3825 struct samsung_clk_provider *ctx;
3826
3827 reg_base = of_iomap(np, 0);
3828 if (!reg_base) {
3829 panic("%s: failed to map registers\n", __func__);
3830 return;
3831 }
3832
3833 ctx = samsung_clk_init(np, reg_base, ATLAS_NR_CLK);
3834 if (!ctx) {
3835 panic("%s: unable to allocate ctx\n", __func__);
3836 return;
3837 }
3838
3839 samsung_clk_register_pll(ctx, atlas_pll_clks,
3840 ARRAY_SIZE(atlas_pll_clks), reg_base);
3841 samsung_clk_register_mux(ctx, atlas_mux_clks,
3842 ARRAY_SIZE(atlas_mux_clks));
3843 samsung_clk_register_div(ctx, atlas_div_clks,
3844 ARRAY_SIZE(atlas_div_clks));
3845 samsung_clk_register_gate(ctx, atlas_gate_clks,
3846 ARRAY_SIZE(atlas_gate_clks));
3847 samsung_clk_sleep_init(reg_base, atlas_clk_regs,
3848 ARRAY_SIZE(atlas_clk_regs));
3849
3850 samsung_clk_of_add_provider(np, ctx);
3826} 3851}
3827CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas", 3852CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas",
3828 exynos5433_cmu_atlas_init); 3853 exynos5433_cmu_atlas_init);
diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c
index e4d14589cc4a..b7d87d6db9dc 100644
--- a/drivers/clk/samsung/clk.c
+++ b/drivers/clk/samsung/clk.c
@@ -346,9 +346,9 @@ static struct syscore_ops samsung_clk_syscore_ops = {
346 .resume = samsung_clk_resume, 346 .resume = samsung_clk_resume,
347}; 347};
348 348
349static void samsung_clk_sleep_init(void __iomem *reg_base, 349void samsung_clk_sleep_init(void __iomem *reg_base,
350 const unsigned long *rdump, 350 const unsigned long *rdump,
351 unsigned long nr_rdump) 351 unsigned long nr_rdump)
352{ 352{
353 struct samsung_clock_reg_cache *reg_cache; 353 struct samsung_clock_reg_cache *reg_cache;
354 354
@@ -370,9 +370,9 @@ static void samsung_clk_sleep_init(void __iomem *reg_base,
370} 370}
371 371
372#else 372#else
373static void samsung_clk_sleep_init(void __iomem *reg_base, 373void samsung_clk_sleep_init(void __iomem *reg_base,
374 const unsigned long *rdump, 374 const unsigned long *rdump,
375 unsigned long nr_rdump) {} 375 unsigned long nr_rdump) {}
376#endif 376#endif
377 377
378/* 378/*
diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h
index 77d4657a95c5..da3bdebabf1e 100644
--- a/drivers/clk/samsung/clk.h
+++ b/drivers/clk/samsung/clk.h
@@ -399,6 +399,10 @@ extern struct samsung_clk_provider __init *samsung_cmu_register_one(
399 399
400extern unsigned long _get_rate(const char *clk_name); 400extern unsigned long _get_rate(const char *clk_name);
401 401
402extern void samsung_clk_sleep_init(void __iomem *reg_base,
403 const unsigned long *rdump,
404 unsigned long nr_rdump);
405
402extern void samsung_clk_save(void __iomem *base, 406extern void samsung_clk_save(void __iomem *base,
403 struct samsung_clk_reg_dump *rd, 407 struct samsung_clk_reg_dump *rd,
404 unsigned int num_regs); 408 unsigned int num_regs);