diff options
author | Kukjin Kim <kgene.kim@samsung.com> | 2012-02-11 08:15:45 -0500 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2012-03-14 05:13:06 -0400 |
commit | 94c7ca71c40ffcde28388a712cab524d636bec60 (patch) | |
tree | baf9c7efd2326a8b936e16cebd1aa3e2f1be2217 | |
parent | 171c067c1a3f903fca78f2610794441a7d1e64f3 (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/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-exynos/common.c | 191 | ||||
-rw-r--r-- | arch/arm/mach-exynos/common.h | 11 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/map.h | 21 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/regs-pmu.h | 1 | ||||
-rw-r--r-- | arch/arm/plat-s5p/Kconfig | 4 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/cpu.h | 10 |
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 | |||
180 | machine-$(CONFIG_ARCH_S5PC100) := s5pc100 | 180 | machine-$(CONFIG_ARCH_S5PC100) := s5pc100 |
181 | machine-$(CONFIG_ARCH_S5PV210) := s5pv210 | 181 | machine-$(CONFIG_ARCH_S5PV210) := s5pv210 |
182 | machine-$(CONFIG_ARCH_EXYNOS4) := exynos | 182 | machine-$(CONFIG_ARCH_EXYNOS4) := exynos |
183 | machine-$(CONFIG_ARCH_EXYNOS5) := exynos | ||
183 | machine-$(CONFIG_ARCH_SA1100) := sa1100 | 184 | machine-$(CONFIG_ARCH_SA1100) := sa1100 |
184 | machine-$(CONFIG_ARCH_SHARK) := shark | 185 | machine-$(CONFIG_ARCH_SHARK) := shark |
185 | machine-$(CONFIG_ARCH_SHMOBILE) := shmobile | 186 | machine-$(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 @@ | |||
49 | static const char name_exynos4210[] = "EXYNOS4210"; | 49 | static const char name_exynos4210[] = "EXYNOS4210"; |
50 | static const char name_exynos4212[] = "EXYNOS4212"; | 50 | static const char name_exynos4212[] = "EXYNOS4212"; |
51 | static const char name_exynos4412[] = "EXYNOS4412"; | 51 | static const char name_exynos4412[] = "EXYNOS4412"; |
52 | static const char name_exynos5250[] = "EXYNOS5250"; | ||
52 | 53 | ||
53 | static void exynos4_map_io(void); | 54 | static void exynos4_map_io(void); |
55 | static void exynos5_map_io(void); | ||
54 | static void exynos4_init_clocks(int xtal); | 56 | static void exynos4_init_clocks(int xtal); |
57 | static void exynos5_init_clocks(int xtal); | ||
55 | static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no); | 58 | static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no); |
56 | static int exynos_init(void); | 59 | static 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 = { | |||
88 | static struct map_desc exynos_iodesc[] __initdata = { | 99 | static 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 | |||
108 | static 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 | |||
147 | static 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 | ||
220 | static 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 | |||
209 | void exynos4_restart(char mode, const char *cmd) | 284 | void 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 | ||
289 | void 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 | ||
344 | static 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 | |||
264 | static void __init exynos4_init_clocks(int xtal) | 354 | static 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 | ||
370 | static 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 | ||
524 | void __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 | |||
423 | struct bus_type exynos4_subsys = { | 544 | struct 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 | ||
549 | struct bus_type exynos5_subsys = { | ||
550 | .name = "exynos5-core", | ||
551 | .dev_name = "exynos5-core", | ||
552 | }; | ||
553 | |||
428 | static struct device exynos4_dev = { | 554 | static struct device exynos4_dev = { |
429 | .bus = &exynos4_subsys, | 555 | .bus = &exynos4_subsys, |
430 | }; | 556 | }; |
431 | 557 | ||
432 | static int __init exynos4_core_init(void) | 558 | static struct device exynos5_dev = { |
559 | .bus = &exynos5_subsys, | ||
560 | }; | ||
561 | |||
562 | static 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 | } |
436 | core_initcall(exynos4_core_init); | 569 | core_initcall(exynos_core_init); |
437 | 570 | ||
438 | #ifdef CONFIG_CACHE_L2X0 | 571 | #ifdef CONFIG_CACHE_L2X0 |
439 | static int __init exynos4_l2x0_cache_init(void) | 572 | static 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 | |||
461 | early_initcall(exynos4_l2x0_cache_init); | 596 | early_initcall(exynos4_l2x0_cache_init); |
462 | #endif | 597 | #endif |
463 | 598 | ||
599 | static 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 | } | ||
622 | early_initcall(exynos5_l2_cache_init); | ||
623 | |||
464 | static int __init exynos_init(void) | 624 | static 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 | ||
17 | void exynos_init_io(struct map_desc *mach_desc, int size); | 17 | void exynos_init_io(struct map_desc *mach_desc, int size); |
18 | void exynos4_init_irq(void); | 18 | void exynos4_init_irq(void); |
19 | void exynos5_init_irq(void); | ||
19 | void exynos4_restart(char mode, const char *cmd); | 20 | void exynos4_restart(char mode, const char *cmd); |
21 | void exynos5_restart(char mode, const char *cmd); | ||
20 | 22 | ||
21 | #ifdef CONFIG_ARCH_EXYNOS4 | 23 | #ifdef CONFIG_ARCH_EXYNOS4 |
22 | void exynos4_register_clocks(void); | 24 | void 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 | ||
33 | void exynos5_register_clocks(void); | ||
34 | void 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 |
31 | void exynos4210_register_clocks(void); | 42 | void 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) \ |
46 | static inline int is_samsung_##name(void) \ | 49 | static inline int is_samsung_##name(void) \ |
47 | { \ | 50 | { \ |
@@ -58,6 +61,7 @@ IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK) | |||
58 | IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) | 61 | IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) |
59 | IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) | 62 | IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) |
60 | IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK) | 63 | IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK) |
64 | IS_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 |