Commit | Line | Data |
---|---|---|
c4aaa295 | 1 | /* |
a125a17f JL |
2 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. |
3 | * http://www.samsung.com | |
4 | * | |
5 | * EXYNOS - CPUFreq support | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License version 2 as | |
9 | * published by the Free Software Foundation. | |
10 | */ | |
11 | ||
12 | enum cpufreq_level_index { | |
13 | L0, L1, L2, L3, L4, | |
14 | L5, L6, L7, L8, L9, | |
15 | L10, L11, L12, L13, L14, | |
16 | L15, L16, L17, L18, L19, | |
17 | L20, | |
18 | }; | |
19 | ||
be1f7c8d | 20 | enum exynos_soc_type { |
be1f7c8d JC |
21 | EXYNOS_SOC_4212, |
22 | EXYNOS_SOC_4412, | |
be1f7c8d JC |
23 | }; |
24 | ||
9d0554ff JC |
25 | #define APLL_FREQ(f, a0, a1, a2, a3, a4, a5, a6, a7, b0, b1, b2, m, p, s) \ |
26 | { \ | |
27 | .freq = (f) * 1000, \ | |
28 | .clk_div_cpu0 = ((a0) | (a1) << 4 | (a2) << 8 | (a3) << 12 | \ | |
29 | (a4) << 16 | (a5) << 20 | (a6) << 24 | (a7) << 28), \ | |
30 | .clk_div_cpu1 = (b0 << 0 | b1 << 4 | b2 << 8), \ | |
31 | .mps = ((m) << 16 | (p) << 8 | (s)), \ | |
32 | } | |
33 | ||
34 | struct apll_freq { | |
35 | unsigned int freq; | |
36 | u32 clk_div_cpu0; | |
37 | u32 clk_div_cpu1; | |
38 | u32 mps; | |
39 | }; | |
40 | ||
a125a17f | 41 | struct exynos_dvfs_info { |
be1f7c8d | 42 | enum exynos_soc_type type; |
e5eaa445 | 43 | struct device *dev; |
a125a17f JL |
44 | unsigned long mpll_freq_khz; |
45 | unsigned int pll_safe_idx; | |
a125a17f JL |
46 | struct clk *cpu_clk; |
47 | unsigned int *volt_table; | |
48 | struct cpufreq_frequency_table *freq_table; | |
49 | void (*set_freq)(unsigned int, unsigned int); | |
50 | bool (*need_apll_change)(unsigned int, unsigned int); | |
4c8d8193 | 51 | void __iomem *cmu_regs; |
a125a17f JL |
52 | }; |
53 | ||
45e12086 | 54 | #ifdef CONFIG_ARM_EXYNOS4X12_CPUFREQ |
a35c5051 | 55 | extern int exynos4x12_cpufreq_init(struct exynos_dvfs_info *); |
45e12086 BZ |
56 | #else |
57 | static inline int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) | |
58 | { | |
59 | return -EOPNOTSUPP; | |
60 | } | |
61 | #endif | |
df3e9c05 | 62 | |
4c8d8193 TF |
63 | #define EXYNOS4_CLKSRC_CPU 0x14200 |
64 | #define EXYNOS4_CLKMUX_STATCPU 0x14400 | |
df3e9c05 | 65 | |
4c8d8193 TF |
66 | #define EXYNOS4_CLKDIV_CPU 0x14500 |
67 | #define EXYNOS4_CLKDIV_CPU1 0x14504 | |
68 | #define EXYNOS4_CLKDIV_STATCPU 0x14600 | |
69 | #define EXYNOS4_CLKDIV_STATCPU1 0x14604 | |
df3e9c05 KK |
70 | |
71 | #define EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT (16) | |
72 | #define EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK (0x7 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT) |