aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKukjin Kim <kgene.kim@samsung.com>2012-02-11 08:15:45 -0500
committerKukjin Kim <kgene.kim@samsung.com>2012-03-14 05:13:06 -0400
commit94c7ca71c40ffcde28388a712cab524d636bec60 (patch)
treebaf9c7efd2326a8b936e16cebd1aa3e2f1be2217
parent171c067c1a3f903fca78f2610794441a7d1e64f3 (diff)
ARM: EXYNOS: add support for EXYNOS5250 SoC
This patch add support for EXYNOS5250 SoC has two Cortex-A15 cores. Since actually, most codes in mach-exynos/ are used commonly for EXYNOS4 and EXYNOS5 the EXYNOS5/EXYNOS5250 has been implemented in mach-exynos/. Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
-rw-r--r--arch/arm/Makefile1
-rw-r--r--arch/arm/mach-exynos/common.c191
-rw-r--r--arch/arm/mach-exynos/common.h11
-rw-r--r--arch/arm/mach-exynos/include/mach/map.h21
-rw-r--r--arch/arm/mach-exynos/include/mach/regs-pmu.h1
-rw-r--r--arch/arm/plat-s5p/Kconfig4
-rw-r--r--arch/arm/plat-samsung/include/plat/cpu.h10
7 files changed, 223 insertions, 16 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 1683bfb9166f..a826ffca791d 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -180,6 +180,7 @@ machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0
180machine-$(CONFIG_ARCH_S5PC100) := s5pc100 180machine-$(CONFIG_ARCH_S5PC100) := s5pc100
181machine-$(CONFIG_ARCH_S5PV210) := s5pv210 181machine-$(CONFIG_ARCH_S5PV210) := s5pv210
182machine-$(CONFIG_ARCH_EXYNOS4) := exynos 182machine-$(CONFIG_ARCH_EXYNOS4) := exynos
183machine-$(CONFIG_ARCH_EXYNOS5) := exynos
183machine-$(CONFIG_ARCH_SA1100) := sa1100 184machine-$(CONFIG_ARCH_SA1100) := sa1100
184machine-$(CONFIG_ARCH_SHARK) := shark 185machine-$(CONFIG_ARCH_SHARK) := shark
185machine-$(CONFIG_ARCH_SHMOBILE) := shmobile 186machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
index 4a82cf0071c3..7fdb139bc25b 100644
--- a/arch/arm/mach-exynos/common.c
+++ b/arch/arm/mach-exynos/common.c
@@ -49,9 +49,12 @@
49static const char name_exynos4210[] = "EXYNOS4210"; 49static const char name_exynos4210[] = "EXYNOS4210";
50static const char name_exynos4212[] = "EXYNOS4212"; 50static const char name_exynos4212[] = "EXYNOS4212";
51static const char name_exynos4412[] = "EXYNOS4412"; 51static const char name_exynos4412[] = "EXYNOS4412";
52static const char name_exynos5250[] = "EXYNOS5250";
52 53
53static void exynos4_map_io(void); 54static void exynos4_map_io(void);
55static void exynos5_map_io(void);
54static void exynos4_init_clocks(int xtal); 56static void exynos4_init_clocks(int xtal);
57static void exynos5_init_clocks(int xtal);
55static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no); 58static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no);
56static int exynos_init(void); 59static int exynos_init(void);
57 60
@@ -80,6 +83,14 @@ static struct cpu_table cpu_ids[] __initdata = {
80 .init_uarts = exynos_init_uarts, 83 .init_uarts = exynos_init_uarts,
81 .init = exynos_init, 84 .init = exynos_init,
82 .name = name_exynos4412, 85 .name = name_exynos4412,
86 }, {
87 .idcode = EXYNOS5250_SOC_ID,
88 .idmask = EXYNOS5_SOC_MASK,
89 .map_io = exynos5_map_io,
90 .init_clocks = exynos5_init_clocks,
91 .init_uarts = exynos_init_uarts,
92 .init = exynos_init,
93 .name = name_exynos5250,
83 }, 94 },
84}; 95};
85 96
@@ -88,10 +99,14 @@ static struct cpu_table cpu_ids[] __initdata = {
88static struct map_desc exynos_iodesc[] __initdata = { 99static struct map_desc exynos_iodesc[] __initdata = {
89 { 100 {
90 .virtual = (unsigned long)S5P_VA_CHIPID, 101 .virtual = (unsigned long)S5P_VA_CHIPID,
91 .pfn = __phys_to_pfn(EXYNOS4_PA_CHIPID), 102 .pfn = __phys_to_pfn(EXYNOS_PA_CHIPID),
92 .length = SZ_4K, 103 .length = SZ_4K,
93 .type = MT_DEVICE, 104 .type = MT_DEVICE,
94 }, { 105 },
106};
107
108static struct map_desc exynos4_iodesc[] __initdata = {
109 {
95 .virtual = (unsigned long)S3C_VA_SYS, 110 .virtual = (unsigned long)S3C_VA_SYS,
96 .pfn = __phys_to_pfn(EXYNOS4_PA_SYSCON), 111 .pfn = __phys_to_pfn(EXYNOS4_PA_SYSCON),
97 .length = SZ_64K, 112 .length = SZ_64K,
@@ -141,11 +156,7 @@ static struct map_desc exynos_iodesc[] __initdata = {
141 .pfn = __phys_to_pfn(EXYNOS4_PA_UART), 156 .pfn = __phys_to_pfn(EXYNOS4_PA_UART),
142 .length = SZ_512K, 157 .length = SZ_512K,
143 .type = MT_DEVICE, 158 .type = MT_DEVICE,
144 }, 159 }, {
145};
146
147static struct map_desc exynos4_iodesc[] __initdata = {
148 {
149 .virtual = (unsigned long)S5P_VA_CMU, 160 .virtual = (unsigned long)S5P_VA_CMU,
150 .pfn = __phys_to_pfn(EXYNOS4_PA_CMU), 161 .pfn = __phys_to_pfn(EXYNOS4_PA_CMU),
151 .length = SZ_128K, 162 .length = SZ_128K,
@@ -206,11 +217,80 @@ static struct map_desc exynos4_iodesc1[] __initdata = {
206 }, 217 },
207}; 218};
208 219
220static struct map_desc exynos5_iodesc[] __initdata = {
221 {
222 .virtual = (unsigned long)S3C_VA_SYS,
223 .pfn = __phys_to_pfn(EXYNOS5_PA_SYSCON),
224 .length = SZ_64K,
225 .type = MT_DEVICE,
226 }, {
227 .virtual = (unsigned long)S3C_VA_TIMER,
228 .pfn = __phys_to_pfn(EXYNOS5_PA_TIMER),
229 .length = SZ_16K,
230 .type = MT_DEVICE,
231 }, {
232 .virtual = (unsigned long)S3C_VA_WATCHDOG,
233 .pfn = __phys_to_pfn(EXYNOS5_PA_WATCHDOG),
234 .length = SZ_4K,
235 .type = MT_DEVICE,
236 }, {
237 .virtual = (unsigned long)S5P_VA_SROMC,
238 .pfn = __phys_to_pfn(EXYNOS5_PA_SROMC),
239 .length = SZ_4K,
240 .type = MT_DEVICE,
241 }, {
242 .virtual = (unsigned long)S5P_VA_SYSTIMER,
243 .pfn = __phys_to_pfn(EXYNOS5_PA_SYSTIMER),
244 .length = SZ_4K,
245 .type = MT_DEVICE,
246 }, {
247 .virtual = (unsigned long)S5P_VA_SYSRAM,
248 .pfn = __phys_to_pfn(EXYNOS5_PA_SYSRAM),
249 .length = SZ_4K,
250 .type = MT_DEVICE,
251 }, {
252 .virtual = (unsigned long)S5P_VA_CMU,
253 .pfn = __phys_to_pfn(EXYNOS5_PA_CMU),
254 .length = 144 * SZ_1K,
255 .type = MT_DEVICE,
256 }, {
257 .virtual = (unsigned long)S5P_VA_PMU,
258 .pfn = __phys_to_pfn(EXYNOS5_PA_PMU),
259 .length = SZ_64K,
260 .type = MT_DEVICE,
261 }, {
262 .virtual = (unsigned long)S5P_VA_COMBINER_BASE,
263 .pfn = __phys_to_pfn(EXYNOS5_PA_COMBINER),
264 .length = SZ_4K,
265 .type = MT_DEVICE,
266 }, {
267 .virtual = (unsigned long)S3C_VA_UART,
268 .pfn = __phys_to_pfn(EXYNOS5_PA_UART),
269 .length = SZ_512K,
270 .type = MT_DEVICE,
271 }, {
272 .virtual = (unsigned long)S5P_VA_GIC_CPU,
273 .pfn = __phys_to_pfn(EXYNOS5_PA_GIC_CPU),
274 .length = SZ_64K,
275 .type = MT_DEVICE,
276 }, {
277 .virtual = (unsigned long)S5P_VA_GIC_DIST,
278 .pfn = __phys_to_pfn(EXYNOS5_PA_GIC_DIST),
279 .length = SZ_64K,
280 .type = MT_DEVICE,
281 },
282};
283
209void exynos4_restart(char mode, const char *cmd) 284void exynos4_restart(char mode, const char *cmd)
210{ 285{
211 __raw_writel(0x1, S5P_SWRESET); 286 __raw_writel(0x1, S5P_SWRESET);
212} 287}
213 288
289void exynos5_restart(char mode, const char *cmd)
290{
291 __raw_writel(0x1, EXYNOS_SWRESET);
292}
293
214/* 294/*
215 * exynos_map_io 295 * exynos_map_io
216 * 296 *
@@ -261,6 +341,16 @@ static void __init exynos4_map_io(void)
261 s5p_hdmi_setname("exynos4-hdmi"); 341 s5p_hdmi_setname("exynos4-hdmi");
262} 342}
263 343
344static void __init exynos5_map_io(void)
345{
346 iotable_init(exynos5_iodesc, ARRAY_SIZE(exynos5_iodesc));
347
348 /* The I2C bus controllers are directly compatible with s3c2440 */
349 s3c_i2c0_setname("s3c2440-i2c");
350 s3c_i2c1_setname("s3c2440-i2c");
351 s3c_i2c2_setname("s3c2440-i2c");
352}
353
264static void __init exynos4_init_clocks(int xtal) 354static void __init exynos4_init_clocks(int xtal)
265{ 355{
266 printk(KERN_DEBUG "%s: initializing clocks\n", __func__); 356 printk(KERN_DEBUG "%s: initializing clocks\n", __func__);
@@ -277,6 +367,17 @@ static void __init exynos4_init_clocks(int xtal)
277 exynos4_setup_clocks(); 367 exynos4_setup_clocks();
278} 368}
279 369
370static void __init exynos5_init_clocks(int xtal)
371{
372 printk(KERN_DEBUG "%s: initializing clocks\n", __func__);
373
374 s3c24xx_register_baseclocks(xtal);
375 s5p_register_clocks(xtal);
376
377 exynos5_register_clocks();
378 exynos5_setup_clocks();
379}
380
280#define COMBINER_ENABLE_SET 0x0 381#define COMBINER_ENABLE_SET 0x0
281#define COMBINER_ENABLE_CLEAR 0x4 382#define COMBINER_ENABLE_CLEAR 0x4
282#define COMBINER_INT_STATUS 0xC 383#define COMBINER_INT_STATUS 0xC
@@ -420,24 +521,59 @@ void __init exynos4_init_irq(void)
420 s5p_init_irq(NULL, 0); 521 s5p_init_irq(NULL, 0);
421} 522}
422 523
524void __init exynos5_init_irq(void)
525{
526 int irq;
527
528 gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU);
529
530 for (irq = 0; irq < MAX_COMBINER_NR; irq++) {
531 combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq),
532 COMBINER_IRQ(irq, 0));
533 combiner_cascade_irq(irq, IRQ_SPI(irq));
534 }
535
536 /*
537 * The parameters of s5p_init_irq() are for VIC init.
538 * Theses parameters should be NULL and 0 because EXYNOS4
539 * uses GIC instead of VIC.
540 */
541 s5p_init_irq(NULL, 0);
542}
543
423struct bus_type exynos4_subsys = { 544struct bus_type exynos4_subsys = {
424 .name = "exynos4-core", 545 .name = "exynos4-core",
425 .dev_name = "exynos4-core", 546 .dev_name = "exynos4-core",
426}; 547};
427 548
549struct bus_type exynos5_subsys = {
550 .name = "exynos5-core",
551 .dev_name = "exynos5-core",
552};
553
428static struct device exynos4_dev = { 554static struct device exynos4_dev = {
429 .bus = &exynos4_subsys, 555 .bus = &exynos4_subsys,
430}; 556};
431 557
432static int __init exynos4_core_init(void) 558static struct device exynos5_dev = {
559 .bus = &exynos5_subsys,
560};
561
562static int __init exynos_core_init(void)
433{ 563{
434 return subsys_system_register(&exynos4_subsys, NULL); 564 if (soc_is_exynos5250())
565 return subsys_system_register(&exynos5_subsys, NULL);
566 else
567 return subsys_system_register(&exynos4_subsys, NULL);
435} 568}
436core_initcall(exynos4_core_init); 569core_initcall(exynos_core_init);
437 570
438#ifdef CONFIG_CACHE_L2X0 571#ifdef CONFIG_CACHE_L2X0
439static int __init exynos4_l2x0_cache_init(void) 572static int __init exynos4_l2x0_cache_init(void)
440{ 573{
574 if (soc_is_exynos5250())
575 return 0;
576
441 /* TAG, Data Latency Control: 2cycle */ 577 /* TAG, Data Latency Control: 2cycle */
442 __raw_writel(0x110, S5P_VA_L2CC + L2X0_TAG_LATENCY_CTRL); 578 __raw_writel(0x110, S5P_VA_L2CC + L2X0_TAG_LATENCY_CTRL);
443 579
@@ -457,14 +593,42 @@ static int __init exynos4_l2x0_cache_init(void)
457 593
458 return 0; 594 return 0;
459} 595}
460
461early_initcall(exynos4_l2x0_cache_init); 596early_initcall(exynos4_l2x0_cache_init);
462#endif 597#endif
463 598
599static int __init exynos5_l2_cache_init(void)
600{
601 unsigned int val;
602
603 if (!soc_is_exynos5250())
604 return 0;
605
606 asm volatile("mrc p15, 0, %0, c1, c0, 0\n"
607 "bic %0, %0, #(1 << 2)\n" /* cache disable */
608 "mcr p15, 0, %0, c1, c0, 0\n"
609 "mrc p15, 1, %0, c9, c0, 2\n"
610 : "=r"(val));
611
612 val |= (1 << 9) | (1 << 5) | (2 << 6) | (2 << 0);
613
614 asm volatile("mcr p15, 1, %0, c9, c0, 2\n" : : "r"(val));
615 asm volatile("mrc p15, 0, %0, c1, c0, 0\n"
616 "orr %0, %0, #(1 << 2)\n" /* cache enable */
617 "mcr p15, 0, %0, c1, c0, 0\n"
618 : : "r"(val));
619
620 return 0;
621}
622early_initcall(exynos5_l2_cache_init);
623
464static int __init exynos_init(void) 624static int __init exynos_init(void)
465{ 625{
466 printk(KERN_INFO "EXYNOS: Initializing architecture\n"); 626 printk(KERN_INFO "EXYNOS: Initializing architecture\n");
467 return device_register(&exynos4_dev); 627
628 if (soc_is_exynos5250())
629 return device_register(&exynos5_dev);
630 else
631 return device_register(&exynos4_dev);
468} 632}
469 633
470/* uart registration process */ 634/* uart registration process */
@@ -673,6 +837,9 @@ static int __init exynos4_init_irq_eint(void)
673{ 837{
674 int irq; 838 int irq;
675 839
840 if (soc_is_exynos5250())
841 return 0;
842
676 for (irq = 0 ; irq <= 31 ; irq++) { 843 for (irq = 0 ; irq <= 31 ; irq++) {
677 irq_set_chip_and_handler(IRQ_EINT(irq), &exynos4_irq_eint, 844 irq_set_chip_and_handler(IRQ_EINT(irq), &exynos4_irq_eint,
678 handle_level_irq); 845 handle_level_irq);
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
index b32c6b5f4231..677b5467df18 100644
--- a/arch/arm/mach-exynos/common.h
+++ b/arch/arm/mach-exynos/common.h
@@ -16,7 +16,9 @@ extern struct sys_timer exynos4_timer;
16 16
17void exynos_init_io(struct map_desc *mach_desc, int size); 17void exynos_init_io(struct map_desc *mach_desc, int size);
18void exynos4_init_irq(void); 18void exynos4_init_irq(void);
19void exynos5_init_irq(void);
19void exynos4_restart(char mode, const char *cmd); 20void exynos4_restart(char mode, const char *cmd);
21void exynos5_restart(char mode, const char *cmd);
20 22
21#ifdef CONFIG_ARCH_EXYNOS4 23#ifdef CONFIG_ARCH_EXYNOS4
22void exynos4_register_clocks(void); 24void exynos4_register_clocks(void);
@@ -27,6 +29,15 @@ void exynos4_setup_clocks(void);
27#define exynos4_setup_clocks() 29#define exynos4_setup_clocks()
28#endif 30#endif
29 31
32#ifdef CONFIG_ARCH_EXYNOS5
33void exynos5_register_clocks(void);
34void exynos5_setup_clocks(void);
35
36#else
37#define exynos5_register_clocks()
38#define exynos5_setup_clocks()
39#endif
40
30#ifdef CONFIG_CPU_EXYNOS4210 41#ifdef CONFIG_CPU_EXYNOS4210
31void exynos4210_register_clocks(void); 42void exynos4210_register_clocks(void);
32 43
diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
index ea513c626b12..bf90bb0ab2b8 100644
--- a/arch/arm/mach-exynos/include/mach/map.h
+++ b/arch/arm/mach-exynos/include/mach/map.h
@@ -25,6 +25,7 @@
25 25
26#define EXYNOS4_PA_SYSRAM0 0x02025000 26#define EXYNOS4_PA_SYSRAM0 0x02025000
27#define EXYNOS4_PA_SYSRAM1 0x02020000 27#define EXYNOS4_PA_SYSRAM1 0x02020000
28#define EXYNOS5_PA_SYSRAM 0x02020000
28 29
29#define EXYNOS4_PA_FIMC0 0x11800000 30#define EXYNOS4_PA_FIMC0 0x11800000
30#define EXYNOS4_PA_FIMC1 0x11810000 31#define EXYNOS4_PA_FIMC1 0x11810000
@@ -44,14 +45,23 @@
44#define EXYNOS4_PA_ONENAND 0x0C000000 45#define EXYNOS4_PA_ONENAND 0x0C000000
45#define EXYNOS4_PA_ONENAND_DMA 0x0C600000 46#define EXYNOS4_PA_ONENAND_DMA 0x0C600000
46 47
47#define EXYNOS4_PA_CHIPID 0x10000000 48#define EXYNOS_PA_CHIPID 0x10000000
48 49
49#define EXYNOS4_PA_SYSCON 0x10010000 50#define EXYNOS4_PA_SYSCON 0x10010000
51#define EXYNOS5_PA_SYSCON 0x10050100
52
50#define EXYNOS4_PA_PMU 0x10020000 53#define EXYNOS4_PA_PMU 0x10020000
54#define EXYNOS5_PA_PMU 0x10040000
55
51#define EXYNOS4_PA_CMU 0x10030000 56#define EXYNOS4_PA_CMU 0x10030000
57#define EXYNOS5_PA_CMU 0x10010000
52 58
53#define EXYNOS4_PA_SYSTIMER 0x10050000 59#define EXYNOS4_PA_SYSTIMER 0x10050000
60#define EXYNOS5_PA_SYSTIMER 0x101C0000
61
54#define EXYNOS4_PA_WATCHDOG 0x10060000 62#define EXYNOS4_PA_WATCHDOG 0x10060000
63#define EXYNOS5_PA_WATCHDOG 0x101D0000
64
55#define EXYNOS4_PA_RTC 0x10070000 65#define EXYNOS4_PA_RTC 0x10070000
56 66
57#define EXYNOS4_PA_KEYPAD 0x100A0000 67#define EXYNOS4_PA_KEYPAD 0x100A0000
@@ -59,9 +69,12 @@
59#define EXYNOS4_PA_DMC0 0x10400000 69#define EXYNOS4_PA_DMC0 0x10400000
60 70
61#define EXYNOS4_PA_COMBINER 0x10440000 71#define EXYNOS4_PA_COMBINER 0x10440000
72#define EXYNOS5_PA_COMBINER 0x10440000
62 73
63#define EXYNOS4_PA_GIC_CPU 0x10480000 74#define EXYNOS4_PA_GIC_CPU 0x10480000
64#define EXYNOS4_PA_GIC_DIST 0x10490000 75#define EXYNOS4_PA_GIC_DIST 0x10490000
76#define EXYNOS5_PA_GIC_CPU 0x10480000
77#define EXYNOS5_PA_GIC_DIST 0x10490000
65 78
66#define EXYNOS4_PA_COREPERI 0x10500000 79#define EXYNOS4_PA_COREPERI 0x10500000
67#define EXYNOS4_PA_TWD 0x10500600 80#define EXYNOS4_PA_TWD 0x10500600
@@ -92,7 +105,6 @@
92#define EXYNOS4_PA_SPI1 0x13930000 105#define EXYNOS4_PA_SPI1 0x13930000
93#define EXYNOS4_PA_SPI2 0x13940000 106#define EXYNOS4_PA_SPI2 0x13940000
94 107
95
96#define EXYNOS4_PA_GPIO1 0x11400000 108#define EXYNOS4_PA_GPIO1 0x11400000
97#define EXYNOS4_PA_GPIO2 0x11000000 109#define EXYNOS4_PA_GPIO2 0x11000000
98#define EXYNOS4_PA_GPIO3 0x03860000 110#define EXYNOS4_PA_GPIO3 0x03860000
@@ -110,6 +122,7 @@
110#define EXYNOS4_PA_SATAPHY_CTRL 0x126B0000 122#define EXYNOS4_PA_SATAPHY_CTRL 0x126B0000
111 123
112#define EXYNOS4_PA_SROMC 0x12570000 124#define EXYNOS4_PA_SROMC 0x12570000
125#define EXYNOS5_PA_SROMC 0x12250000
113 126
114#define EXYNOS4_PA_EHCI 0x12580000 127#define EXYNOS4_PA_EHCI 0x12580000
115#define EXYNOS4_PA_OHCI 0x12590000 128#define EXYNOS4_PA_OHCI 0x12590000
@@ -117,6 +130,7 @@
117#define EXYNOS4_PA_MFC 0x13400000 130#define EXYNOS4_PA_MFC 0x13400000
118 131
119#define EXYNOS4_PA_UART 0x13800000 132#define EXYNOS4_PA_UART 0x13800000
133#define EXYNOS5_PA_UART 0x12C00000
120 134
121#define EXYNOS4_PA_VP 0x12C00000 135#define EXYNOS4_PA_VP 0x12C00000
122#define EXYNOS4_PA_MIXER 0x12C10000 136#define EXYNOS4_PA_MIXER 0x12C10000
@@ -125,6 +139,7 @@
125#define EXYNOS4_PA_IIC_HDMIPHY 0x138E0000 139#define EXYNOS4_PA_IIC_HDMIPHY 0x138E0000
126 140
127#define EXYNOS4_PA_IIC(x) (0x13860000 + ((x) * 0x10000)) 141#define EXYNOS4_PA_IIC(x) (0x13860000 + ((x) * 0x10000))
142#define EXYNOS5_PA_IIC(x) (0x12C60000 + ((x) * 0x10000))
128 143
129#define EXYNOS4_PA_ADC 0x13910000 144#define EXYNOS4_PA_ADC 0x13910000
130#define EXYNOS4_PA_ADC1 0x13911000 145#define EXYNOS4_PA_ADC1 0x13911000
@@ -134,8 +149,10 @@
134#define EXYNOS4_PA_SPDIF 0x139B0000 149#define EXYNOS4_PA_SPDIF 0x139B0000
135 150
136#define EXYNOS4_PA_TIMER 0x139D0000 151#define EXYNOS4_PA_TIMER 0x139D0000
152#define EXYNOS5_PA_TIMER 0x12DD0000
137 153
138#define EXYNOS4_PA_SDRAM 0x40000000 154#define EXYNOS4_PA_SDRAM 0x40000000
155#define EXYNOS5_PA_SDRAM 0x40000000
139 156
140/* Compatibiltiy Defines */ 157/* Compatibiltiy Defines */
141 158
diff --git a/arch/arm/mach-exynos/include/mach/regs-pmu.h b/arch/arm/mach-exynos/include/mach/regs-pmu.h
index 4fff8e938fec..4c53f38b5a9e 100644
--- a/arch/arm/mach-exynos/include/mach/regs-pmu.h
+++ b/arch/arm/mach-exynos/include/mach/regs-pmu.h
@@ -31,6 +31,7 @@
31#define S5P_USE_STANDBYWFE_ISP_ARM (1 << 26) 31#define S5P_USE_STANDBYWFE_ISP_ARM (1 << 26)
32 32
33#define S5P_SWRESET S5P_PMUREG(0x0400) 33#define S5P_SWRESET S5P_PMUREG(0x0400)
34#define EXYNOS_SWRESET S5P_PMUREG(0x0400)
34 35
35#define S5P_WAKEUP_STAT S5P_PMUREG(0x0600) 36#define S5P_WAKEUP_STAT S5P_PMUREG(0x0600)
36#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604) 37#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604)
diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig
index 10e235cc7c93..88795ea2ecaa 100644
--- a/arch/arm/plat-s5p/Kconfig
+++ b/arch/arm/plat-s5p/Kconfig
@@ -9,8 +9,8 @@ config PLAT_S5P
9 bool 9 bool
10 depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS) 10 depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
11 default y 11 default y
12 select ARM_VIC if !ARCH_EXYNOS4 12 select ARM_VIC if !ARCH_EXYNOS
13 select ARM_GIC if ARCH_EXYNOS4 13 select ARM_GIC if ARCH_EXYNOS
14 select GIC_NON_BANKED if ARCH_EXYNOS4 14 select GIC_NON_BANKED if ARCH_EXYNOS4
15 select NO_IOPORT 15 select NO_IOPORT
16 select ARCH_REQUIRE_GPIOLIB 16 select ARCH_REQUIRE_GPIOLIB
diff --git a/arch/arm/plat-samsung/include/plat/cpu.h b/arch/arm/plat-samsung/include/plat/cpu.h
index 73cb3cfd0685..787ceaca0be8 100644
--- a/arch/arm/plat-samsung/include/plat/cpu.h
+++ b/arch/arm/plat-samsung/include/plat/cpu.h
@@ -42,6 +42,9 @@ extern unsigned long samsung_cpu_id;
42#define EXYNOS4412_CPU_ID 0xE4412200 42#define EXYNOS4412_CPU_ID 0xE4412200
43#define EXYNOS4_CPU_MASK 0xFFFE0000 43#define EXYNOS4_CPU_MASK 0xFFFE0000
44 44
45#define EXYNOS5250_SOC_ID 0x43520000
46#define EXYNOS5_SOC_MASK 0xFFFFF000
47
45#define IS_SAMSUNG_CPU(name, id, mask) \ 48#define IS_SAMSUNG_CPU(name, id, mask) \
46static inline int is_samsung_##name(void) \ 49static inline int is_samsung_##name(void) \
47{ \ 50{ \
@@ -58,6 +61,7 @@ IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK)
58IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) 61IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
59IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) 62IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
60IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK) 63IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
64IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK)
61 65
62#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \ 66#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \
63 defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \ 67 defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \
@@ -120,6 +124,12 @@ IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
120#define EXYNOS4210_REV_1_0 (0x10) 124#define EXYNOS4210_REV_1_0 (0x10)
121#define EXYNOS4210_REV_1_1 (0x11) 125#define EXYNOS4210_REV_1_1 (0x11)
122 126
127#if defined(CONFIG_SOC_EXYNOS5250)
128# define soc_is_exynos5250() is_samsung_exynos5250()
129#else
130# define soc_is_exynos5250() 0
131#endif
132
123#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE } 133#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
124 134
125#ifndef MHZ 135#ifndef MHZ