diff options
author | Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> | 2015-08-11 18:36:47 -0400 |
---|---|---|
committer | Kukjin Kim <kgene@kernel.org> | 2015-08-13 13:00:43 -0400 |
commit | cd6aceef028afc3fa216e3e7bc94cc31632cad43 (patch) | |
tree | a1acbcf7217a63a09b7b068ea9f0df846c2777ce | |
parent | 7c9422ef553e8845c91b8fc5fa98452d934834f0 (diff) |
clk: exynos4x12: add cpu clock configuration data and instantiate cpu clock
With the addition of the new Samsung specific cpu-clock type, the
arm clock can be represented as a cpu-clock type. Add the CPU clock
configuration data and instantiate the CPU clock type for Exynos4x12.
Based on the earlier work by Thomas Abraham.
Cc: Tomasz Figa <tomasz.figa@gmail.com>
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Thomas Abraham <thomas.ab@samsung.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Tested-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Tested-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Kukjin Kim <kgene@kernel.org>
-rw-r--r-- | drivers/clk/samsung/clk-exynos4.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index cae2c048488d..30712608f8c5 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c | |||
@@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { | |||
1396 | { 0 }, | 1396 | { 0 }, |
1397 | }; | 1397 | }; |
1398 | 1398 | ||
1399 | static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { | ||
1400 | { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, | ||
1401 | { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, | ||
1402 | { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, | ||
1403 | { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, | ||
1404 | { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, | ||
1405 | { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, | ||
1406 | { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, | ||
1407 | { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, | ||
1408 | { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, | ||
1409 | { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, | ||
1410 | { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, | ||
1411 | { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, | ||
1412 | { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, | ||
1413 | { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, | ||
1414 | { 0 }, | ||
1415 | }; | ||
1416 | |||
1417 | #define E4412_CPU_DIV1(cores, hpm, copy) \ | ||
1418 | (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) | ||
1419 | |||
1420 | static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { | ||
1421 | { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, | ||
1422 | { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, | ||
1423 | { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, | ||
1424 | { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, | ||
1425 | { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, | ||
1426 | { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, | ||
1427 | { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, | ||
1428 | { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, | ||
1429 | { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, | ||
1430 | { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, | ||
1431 | { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, | ||
1432 | { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, | ||
1433 | { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, | ||
1434 | { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, | ||
1435 | { 0 }, | ||
1436 | }; | ||
1437 | |||
1399 | /* register exynos4 clocks */ | 1438 | /* register exynos4 clocks */ |
1400 | static void __init exynos4_clk_init(struct device_node *np, | 1439 | static void __init exynos4_clk_init(struct device_node *np, |
1401 | enum exynos4_soc soc) | 1440 | enum exynos4_soc soc) |
@@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, | |||
1489 | samsung_clk_register_fixed_factor(ctx, | 1528 | samsung_clk_register_fixed_factor(ctx, |
1490 | exynos4x12_fixed_factor_clks, | 1529 | exynos4x12_fixed_factor_clks, |
1491 | ARRAY_SIZE(exynos4x12_fixed_factor_clks)); | 1530 | ARRAY_SIZE(exynos4x12_fixed_factor_clks)); |
1531 | if (of_machine_is_compatible("samsung,exynos4412")) { | ||
1532 | exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", | ||
1533 | mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, | ||
1534 | e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d), | ||
1535 | CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); | ||
1536 | } else { | ||
1537 | exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", | ||
1538 | mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, | ||
1539 | e4212_armclk_d, ARRAY_SIZE(e4212_armclk_d), | ||
1540 | CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); | ||
1541 | } | ||
1492 | } | 1542 | } |
1493 | 1543 | ||
1494 | samsung_clk_register_alias(ctx, exynos4_aliases, | 1544 | samsung_clk_register_alias(ctx, exynos4_aliases, |