aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorChanghwan Youn <chaos.youn@samsung.com>2011-10-04 04:08:56 -0400
committerKukjin Kim <kgene.kim@samsung.com>2011-10-04 05:35:01 -0400
commite6a275a8f92392f27e3accd6182d52627ef37258 (patch)
tree3d509a20f244648a439ab15d30abd2c743ed70d2 /arch/arm
parent3a062281129229b50e06547af3110f8eccd2f4e4 (diff)
ARM: EXYNOS4: Add support new EXYNOS4412 SoC
This patch adds Samsung EXYNOS4412 SoC support. The EXYNOS4412 integrates a ARM Cortex A9 quad-core. Signed-off-by: Changhwan Youn <chaos.youn@samsung.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-exynos4/Kconfig5
-rw-r--r--arch/arm/mach-exynos4/cpu.c4
-rw-r--r--arch/arm/plat-s5p/cpu.c9
-rw-r--r--arch/arm/plat-samsung/include/plat/cpu.h8
4 files changed, 24 insertions, 2 deletions
diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig
index c595bb03f417..c255d6f7ec5f 100644
--- a/arch/arm/mach-exynos4/Kconfig
+++ b/arch/arm/mach-exynos4/Kconfig
@@ -20,6 +20,11 @@ config SOC_EXYNOS4212
20 help 20 help
21 Enable EXYNOS4212 SoC support 21 Enable EXYNOS4212 SoC support
22 22
23config SOC_EXYNOS4412
24 bool
25 help
26 Enable EXYNOS4412 SoC support
27
23config EXYNOS4_MCT 28config EXYNOS4_MCT
24 bool 29 bool
25 default y 30 default y
diff --git a/arch/arm/mach-exynos4/cpu.c b/arch/arm/mach-exynos4/cpu.c
index 35fe8421bc34..940bc12f7547 100644
--- a/arch/arm/mach-exynos4/cpu.c
+++ b/arch/arm/mach-exynos4/cpu.c
@@ -191,7 +191,7 @@ void __init exynos4_init_clocks(int xtal)
191 191
192 if (soc_is_exynos4210()) 192 if (soc_is_exynos4210())
193 exynos4210_register_clocks(); 193 exynos4210_register_clocks();
194 else if (soc_is_exynos4212()) 194 else if (soc_is_exynos4212() || soc_is_exynos4412())
195 exynos4212_register_clocks(); 195 exynos4212_register_clocks();
196 196
197 exynos4_register_clocks(); 197 exynos4_register_clocks();
@@ -255,7 +255,7 @@ static int __init exynos4_l2x0_cache_init(void)
255 255
256 if (soc_is_exynos4210()) 256 if (soc_is_exynos4210())
257 __raw_writel(0x110, S5P_VA_L2CC + L2X0_DATA_LATENCY_CTRL); 257 __raw_writel(0x110, S5P_VA_L2CC + L2X0_DATA_LATENCY_CTRL);
258 else if (soc_is_exynos4212()) 258 else if (soc_is_exynos4212() || soc_is_exynos4412())
259 __raw_writel(0x120, S5P_VA_L2CC + L2X0_DATA_LATENCY_CTRL); 259 __raw_writel(0x120, S5P_VA_L2CC + L2X0_DATA_LATENCY_CTRL);
260 260
261 /* L2X0 Prefetch Control */ 261 /* L2X0 Prefetch Control */
diff --git a/arch/arm/plat-s5p/cpu.c b/arch/arm/plat-s5p/cpu.c
index 909507bae2fa..7b0a28f73a68 100644
--- a/arch/arm/plat-s5p/cpu.c
+++ b/arch/arm/plat-s5p/cpu.c
@@ -34,6 +34,7 @@ static const char name_s5pc100[] = "S5PC100";
34static const char name_s5pv210[] = "S5PV210/S5PC110"; 34static const char name_s5pv210[] = "S5PV210/S5PC110";
35static const char name_exynos4210[] = "EXYNOS4210"; 35static const char name_exynos4210[] = "EXYNOS4210";
36static const char name_exynos4212[] = "EXYNOS4212"; 36static const char name_exynos4212[] = "EXYNOS4212";
37static const char name_exynos4412[] = "EXYNOS4412";
37 38
38static struct cpu_table cpu_ids[] __initdata = { 39static struct cpu_table cpu_ids[] __initdata = {
39 { 40 {
@@ -84,6 +85,14 @@ static struct cpu_table cpu_ids[] __initdata = {
84 .init_uarts = exynos4_init_uarts, 85 .init_uarts = exynos4_init_uarts,
85 .init = exynos4_init, 86 .init = exynos4_init,
86 .name = name_exynos4212, 87 .name = name_exynos4212,
88 }, {
89 .idcode = EXYNOS4412_CPU_ID,
90 .idmask = EXYNOS4_CPU_MASK,
91 .map_io = exynos4_map_io,
92 .init_clocks = exynos4_init_clocks,
93 .init_uarts = exynos4_init_uarts,
94 .init = exynos4_init,
95 .name = name_exynos4412,
87 }, 96 },
88}; 97};
89 98
diff --git a/arch/arm/plat-samsung/include/plat/cpu.h b/arch/arm/plat-samsung/include/plat/cpu.h
index 1bbbbb420be7..54f370f0fc07 100644
--- a/arch/arm/plat-samsung/include/plat/cpu.h
+++ b/arch/arm/plat-samsung/include/plat/cpu.h
@@ -40,6 +40,7 @@ extern unsigned long samsung_cpu_id;
40 40
41#define EXYNOS4210_CPU_ID 0x43210000 41#define EXYNOS4210_CPU_ID 0x43210000
42#define EXYNOS4212_CPU_ID 0x43220000 42#define EXYNOS4212_CPU_ID 0x43220000
43#define EXYNOS4412_CPU_ID 0xE4412200
43#define EXYNOS4_CPU_MASK 0xFFFE0000 44#define EXYNOS4_CPU_MASK 0xFFFE0000
44 45
45#define IS_SAMSUNG_CPU(name, id, mask) \ 46#define IS_SAMSUNG_CPU(name, id, mask) \
@@ -56,6 +57,7 @@ IS_SAMSUNG_CPU(s5pc100, S5PC100_CPU_ID, S5PC100_CPU_MASK)
56IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK) 57IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK)
57IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) 58IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
58IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) 59IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
60IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
59 61
60#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \ 62#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \
61 defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \ 63 defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \
@@ -108,6 +110,12 @@ IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
108# define soc_is_exynos4212() 0 110# define soc_is_exynos4212() 0
109#endif 111#endif
110 112
113#if defined(CONFIG_SOC_EXYNOS4412)
114# define soc_is_exynos4412() is_samsung_exynos4412()
115#else
116# define soc_is_exynos4412() 0
117#endif
118
111#define EXYNOS4210_REV_0 (0x0) 119#define EXYNOS4210_REV_0 (0x0)
112#define EXYNOS4210_REV_1_0 (0x10) 120#define EXYNOS4210_REV_1_0 (0x10)
113#define EXYNOS4210_REV_1_1 (0x11) 121#define EXYNOS4210_REV_1_1 (0x11)