aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2013-04-19 17:15:58 -0400
committerArnd Bergmann <arnd@arndb.de>2013-04-19 18:35:17 -0400
commit2254c36ddeb87d4975d2e4709413dd275a913e83 (patch)
treef0b8c52e5d3a0727e8e75f41085fd6b0819d8daf /arch/arm
parent22cf644e03419b4c3d002109b021c7482306f0bf (diff)
parent20adee8fa06ef69012bc277739e9e3762c78b7b7 (diff)
Merge branch 'samsung/exynos-multiplatform-drivers' into late/multiplatform
This series contains the final pieces for Exynos multiplatform support: Most of the patches are about the exynos-combiner irqchip, which is converted to not rely on platform provided constants. * samsung/exynos-multiplatform-drivers: ARM: exynos: restore mach/regs-clock.h for exynos5 irqchip: exynos: look up irq using irq_find_mapping irqchip: exynos: pass irq_base from platform irqchip: exynos: localize irq lookup for ATAGS irqchip: exynos: allocate combiner_data dynamically irqchip: exynos: pass max combiner number to combiner_init ARM: exynos: add missing properties for combiner IRQs clocksource: exynos_mct: remove platform header dependency clk: exynos: prepare for multiplatform Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/boot/dts/exynos4210.dtsi1
-rw-r--r--arch/arm/boot/dts/exynos4212.dtsi9
-rw-r--r--arch/arm/boot/dts/exynos4412.dtsi9
-rw-r--r--arch/arm/mach-exynos/common.c20
-rw-r--r--arch/arm/mach-exynos/common.h7
5 files changed, 40 insertions, 6 deletions
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 15143bdbafb8..5feccffae409 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -41,6 +41,7 @@
41 }; 41 };
42 42
43 combiner:interrupt-controller@10440000 { 43 combiner:interrupt-controller@10440000 {
44 samsung,combiner-nr = <16>;
44 interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>, 45 interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>,
45 <0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>, 46 <0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>,
46 <0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>, 47 <0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>,
diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi
index 36d4299789ef..c0f60f49cea6 100644
--- a/arch/arm/boot/dts/exynos4212.dtsi
+++ b/arch/arm/boot/dts/exynos4212.dtsi
@@ -26,6 +26,15 @@
26 cpu-offset = <0x8000>; 26 cpu-offset = <0x8000>;
27 }; 27 };
28 28
29 interrupt-controller@10440000 {
30 samsung,combiner-nr = <18>;
31 interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>,
32 <0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>,
33 <0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>,
34 <0 12 0>, <0 13 0>, <0 14 0>, <0 15 0>,
35 <0 107 0>, <0 108 0>;
36 };
37
29 mct@10050000 { 38 mct@10050000 {
30 compatible = "samsung,exynos4412-mct"; 39 compatible = "samsung,exynos4412-mct";
31 reg = <0x10050000 0x800>; 40 reg = <0x10050000 0x800>;
diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi
index d75c047e80a9..f433206bd3c5 100644
--- a/arch/arm/boot/dts/exynos4412.dtsi
+++ b/arch/arm/boot/dts/exynos4412.dtsi
@@ -26,6 +26,15 @@
26 cpu-offset = <0x4000>; 26 cpu-offset = <0x4000>;
27 }; 27 };
28 28
29 interrupt-controller@10440000 {
30 samsung,combiner-nr = <20>;
31 interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>,
32 <0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>,
33 <0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>,
34 <0 12 0>, <0 13 0>, <0 14 0>, <0 15 0>,
35 <0 107 0>, <0 108 0>, <0 48 0>, <0 42 0>;
36 };
37
29 mct@10050000 { 38 mct@10050000 {
30 compatible = "samsung,exynos4412-mct"; 39 compatible = "samsung,exynos4412-mct";
31 reg = <0x10050000 0x800>; 40 reg = <0x10050000 0x800>;
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
index a3ab0ecc7c6a..9208079d5d52 100644
--- a/arch/arm/mach-exynos/common.c
+++ b/arch/arm/mach-exynos/common.c
@@ -413,13 +413,26 @@ void __init exynos_init_time(void)
413 } else { 413 } else {
414 /* todo: remove after migrating legacy E4 platforms to dt */ 414 /* todo: remove after migrating legacy E4 platforms to dt */
415#ifdef CONFIG_ARCH_EXYNOS4 415#ifdef CONFIG_ARCH_EXYNOS4
416 exynos4_clk_init(NULL); 416 exynos4_clk_init(NULL, !soc_is_exynos4210(), S5P_VA_CMU, readl(S5P_VA_CHIPID + 8) & 1);
417 exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f); 417 exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f);
418#endif 418#endif
419 mct_init(); 419 mct_init(S5P_VA_SYSTIMER, EXYNOS4_IRQ_MCT_G0, EXYNOS4_IRQ_MCT_L0, EXYNOS4_IRQ_MCT_L1);
420 } 420 }
421} 421}
422 422
423static unsigned int max_combiner_nr(void)
424{
425 if (soc_is_exynos5250())
426 return EXYNOS5_MAX_COMBINER_NR;
427 else if (soc_is_exynos4412())
428 return EXYNOS4412_MAX_COMBINER_NR;
429 else if (soc_is_exynos4212())
430 return EXYNOS4212_MAX_COMBINER_NR;
431 else
432 return EXYNOS4210_MAX_COMBINER_NR;
433}
434
435
423void __init exynos4_init_irq(void) 436void __init exynos4_init_irq(void)
424{ 437{
425 unsigned int gic_bank_offset; 438 unsigned int gic_bank_offset;
@@ -434,7 +447,8 @@ void __init exynos4_init_irq(void)
434#endif 447#endif
435 448
436 if (!of_have_populated_dt()) 449 if (!of_have_populated_dt())
437 combiner_init(S5P_VA_COMBINER_BASE, NULL); 450 combiner_init(S5P_VA_COMBINER_BASE, NULL,
451 max_combiner_nr(), COMBINER_IRQ(0, 0));
438 452
439 /* 453 /*
440 * The parameters of s5p_init_irq() are for VIC init. 454 * The parameters of s5p_init_irq() are for VIC init.
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
index cb89ab886950..3e72d03a385e 100644
--- a/arch/arm/mach-exynos/common.h
+++ b/arch/arm/mach-exynos/common.h
@@ -14,7 +14,7 @@
14 14
15#include <linux/of.h> 15#include <linux/of.h>
16 16
17extern void mct_init(void); 17void mct_init(void __iomem *base, int irq_g0, int irq_l0, int irq_l1);
18void exynos_init_time(void); 18void exynos_init_time(void);
19extern unsigned long xxti_f, xusbxti_f; 19extern unsigned long xxti_f, xusbxti_f;
20 20
@@ -27,7 +27,7 @@ void exynos5_restart(char mode, const char *cmd);
27void exynos_init_late(void); 27void exynos_init_late(void);
28 28
29/* ToDo: remove these after migrating legacy exynos4 platforms to dt */ 29/* ToDo: remove these after migrating legacy exynos4 platforms to dt */
30void exynos4_clk_init(struct device_node *np); 30void exynos4_clk_init(struct device_node *np, int is_exynos4210, void __iomem *reg_base, unsigned long xom);
31void exynos4_clk_register_fixed_ext(unsigned long, unsigned long); 31void exynos4_clk_register_fixed_ext(unsigned long, unsigned long);
32 32
33#ifdef CONFIG_PM_GENERIC_DOMAINS 33#ifdef CONFIG_PM_GENERIC_DOMAINS
@@ -69,7 +69,8 @@ void exynos4212_register_clocks(void);
69#endif 69#endif
70 70
71struct device_node; 71struct device_node;
72void combiner_init(void __iomem *combiner_base, struct device_node *np); 72void combiner_init(void __iomem *combiner_base, struct device_node *np,
73 unsigned int max_nr, int irq_base);
73 74
74extern struct smp_operations exynos_smp_ops; 75extern struct smp_operations exynos_smp_ops;
75 76