diff options
author | Arnd Bergmann <arnd@arndb.de> | 2013-04-19 17:15:58 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2013-04-19 18:35:17 -0400 |
commit | 2254c36ddeb87d4975d2e4709413dd275a913e83 (patch) | |
tree | f0b8c52e5d3a0727e8e75f41085fd6b0819d8daf /arch/arm/mach-exynos | |
parent | 22cf644e03419b4c3d002109b021c7482306f0bf (diff) | |
parent | 20adee8fa06ef69012bc277739e9e3762c78b7b7 (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/mach-exynos')
-rw-r--r-- | arch/arm/mach-exynos/common.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-exynos/common.h | 7 |
2 files changed, 21 insertions, 6 deletions
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 | ||
423 | static 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 | |||
423 | void __init exynos4_init_irq(void) | 436 | void __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 | ||
17 | extern void mct_init(void); | 17 | void mct_init(void __iomem *base, int irq_g0, int irq_l0, int irq_l1); |
18 | void exynos_init_time(void); | 18 | void exynos_init_time(void); |
19 | extern unsigned long xxti_f, xusbxti_f; | 19 | extern unsigned long xxti_f, xusbxti_f; |
20 | 20 | ||
@@ -27,7 +27,7 @@ void exynos5_restart(char mode, const char *cmd); | |||
27 | void exynos_init_late(void); | 27 | void 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 */ |
30 | void exynos4_clk_init(struct device_node *np); | 30 | void exynos4_clk_init(struct device_node *np, int is_exynos4210, void __iomem *reg_base, unsigned long xom); |
31 | void exynos4_clk_register_fixed_ext(unsigned long, unsigned long); | 31 | void 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 | ||
71 | struct device_node; | 71 | struct device_node; |
72 | void combiner_init(void __iomem *combiner_base, struct device_node *np); | 72 | void combiner_init(void __iomem *combiner_base, struct device_node *np, |
73 | unsigned int max_nr, int irq_base); | ||
73 | 74 | ||
74 | extern struct smp_operations exynos_smp_ops; | 75 | extern struct smp_operations exynos_smp_ops; |
75 | 76 | ||