aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-05-07 14:28:42 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-05-07 14:28:42 -0400
commitbb9055b2744ada735a2fe555c4196ad39a83ef2a (patch)
tree014e0f462217cfa49988872a5134ae41b90b2e9c /arch/arm/mach-exynos
parent1bf25e78af317e6d5d9b5594dfeb0036e0d589d6 (diff)
parent241a9871263f3114717c0ed416a1bd1d2415d1fb (diff)
Merge tag 'multiplatform-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull late ARM Exynos multiplatform changes from Arnd Bergmann: "These continue the multiplatform support for exynos, adding support for building most of the essential drivers (clocksource, clk, irqchip) when combined with other platforms. As a result, it should become really easy to add full multiplatform exynos support in 3.11, although we don't yet enable it for 3.10. The changes were not included in the earlier multiplatform series in order to avoid clashes with the other Exynos updates. This also includes work from Tomasz Figa to fix the pwm clocksource code on Exynos, which is not strictly required for multiplatform, but related to the other patches in this set and needed as a bug fix for at least one board." * tag 'multiplatform-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (22 commits) ARM: dts: exynops4210: really add universal_c210 dts ARM: dts: exynos4210: Add basic dts file for universal_c210 board ARM: dts: exynos4: Add node for PWM device ARM: SAMSUNG: Do not register legacy timer interrupts on Exynos clocksource: samsung_pwm_timer: Work around rounding errors in clockevents core clocksource: samsung_pwm_timer: Correct programming of clock events clocksource: samsung_pwm_timer: Use proper clockevents max_delta clocksource: samsung_pwm_timer: Add support for non-DT platforms clocksource: samsung_pwm_timer: Drop unused samsung_pwm struct clocksource: samsung_pwm_timer: Keep all driver data in a structure clocksource: samsung_pwm_timer: Make PWM spinlock global clocksource: samsung_pwm_timer: Let platforms select the driver Documentation: Add device tree bindings for Samsung PWM timers clocksource: add samsung pwm timer driver 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 ...
Diffstat (limited to 'arch/arm/mach-exynos')
-rw-r--r--arch/arm/mach-exynos/common.c35
-rw-r--r--arch/arm/mach-exynos/common.h7
2 files changed, 21 insertions, 21 deletions
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
index d126f26dbbf1..745e304ad0de 100644
--- a/arch/arm/mach-exynos/common.c
+++ b/arch/arm/mach-exynos/common.c
@@ -452,13 +452,26 @@ void __init exynos_init_time(void)
452 } else { 452 } else {
453 /* todo: remove after migrating legacy E4 platforms to dt */ 453 /* todo: remove after migrating legacy E4 platforms to dt */
454#ifdef CONFIG_ARCH_EXYNOS4 454#ifdef CONFIG_ARCH_EXYNOS4
455 exynos4_clk_init(NULL); 455 exynos4_clk_init(NULL, !soc_is_exynos4210(), S5P_VA_CMU, readl(S5P_VA_CHIPID + 8) & 1);
456 exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f); 456 exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f);
457#endif 457#endif
458 mct_init(); 458 mct_init(S5P_VA_SYSTIMER, EXYNOS4_IRQ_MCT_G0, EXYNOS4_IRQ_MCT_L0, EXYNOS4_IRQ_MCT_L1);
459 } 459 }
460} 460}
461 461
462static unsigned int max_combiner_nr(void)
463{
464 if (soc_is_exynos5250())
465 return EXYNOS5_MAX_COMBINER_NR;
466 else if (soc_is_exynos4412())
467 return EXYNOS4412_MAX_COMBINER_NR;
468 else if (soc_is_exynos4212())
469 return EXYNOS4212_MAX_COMBINER_NR;
470 else
471 return EXYNOS4210_MAX_COMBINER_NR;
472}
473
474
462void __init exynos4_init_irq(void) 475void __init exynos4_init_irq(void)
463{ 476{
464 unsigned int gic_bank_offset; 477 unsigned int gic_bank_offset;
@@ -473,14 +486,8 @@ void __init exynos4_init_irq(void)
473#endif 486#endif
474 487
475 if (!of_have_populated_dt()) 488 if (!of_have_populated_dt())
476 combiner_init(S5P_VA_COMBINER_BASE, NULL); 489 combiner_init(S5P_VA_COMBINER_BASE, NULL,
477 490 max_combiner_nr(), COMBINER_IRQ(0, 0));
478 /*
479 * The parameters of s5p_init_irq() are for VIC init.
480 * Theses parameters should be NULL and 0 because EXYNOS4
481 * uses GIC instead of VIC.
482 */
483 s5p_init_irq(NULL, 0);
484 491
485 gic_arch_extn.irq_set_wake = s3c_irq_wake; 492 gic_arch_extn.irq_set_wake = s3c_irq_wake;
486} 493}
@@ -490,14 +497,6 @@ void __init exynos5_init_irq(void)
490#ifdef CONFIG_OF 497#ifdef CONFIG_OF
491 irqchip_init(); 498 irqchip_init();
492#endif 499#endif
493 /*
494 * The parameters of s5p_init_irq() are for VIC init.
495 * Theses parameters should be NULL and 0 because EXYNOS4
496 * uses GIC instead of VIC.
497 */
498 if (!of_machine_is_compatible("samsung,exynos5440"))
499 s5p_init_irq(NULL, 0);
500
501 gic_arch_extn.irq_set_wake = s3c_irq_wake; 500 gic_arch_extn.irq_set_wake = s3c_irq_wake;
502} 501}
503 502
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
index b17448c1a164..60dd35cc01a6 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
33void exynos_firmware_init(void); 33void exynos_firmware_init(void);
@@ -71,7 +71,8 @@ void exynos4212_register_clocks(void);
71#endif 71#endif
72 72
73struct device_node; 73struct device_node;
74void combiner_init(void __iomem *combiner_base, struct device_node *np); 74void combiner_init(void __iomem *combiner_base, struct device_node *np,
75 unsigned int max_nr, int irq_base);
75 76
76extern struct smp_operations exynos_smp_ops; 77extern struct smp_operations exynos_smp_ops;
77 78