]> xenbits.xensource.com Git - people/aperard/linux-arndale.git/commitdiff
ARM: EXYNOS: Add Generic Arch Timer support
authorAnthony PERARD <anthony.perard@citrix.com>
Tue, 22 Jan 2013 15:30:55 +0000 (15:30 +0000)
committerAnthony PERARD <anthony.perard@citrix.com>
Tue, 22 Jan 2013 15:30:55 +0000 (15:30 +0000)
https://gerrit.chromium.org/gerrit/#/c/39175

arch/arm/boot/dts/exynos5250.dtsi
arch/arm/kernel/arch_timer.c
arch/arm/mach-exynos/Kconfig
arch/arm/mach-exynos/common.h
arch/arm/mach-exynos/mach-exynos5-dt.c

index 6e6c7d167f771806fb13d07a489d061cb67639b6..3c1dd6713a97813c75dcf614f7c3904ea89baee1 100644 (file)
                gsc3 = &gsc_3;
        };
 
+       timer {
+               compatible = "arm,armv7-timer";
+               interrupts = <1 13 0xf08>,
+                            <1 14 0xf08>,
+                            <1 11 0xf08>,
+                            <1 10 0xf08>;
+       };
+
        gic:interrupt-controller@10481000 {
                compatible = "arm,cortex-a9-gic";
                #interrupt-cells = <3>;
index c8ef20747ee75a5b0426c8338b2bfb068e2d376e..c1730949294f7ee5a8962b36d5100091253f6395 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/of_irq.h>
 #include <linux/io.h>
 
+#include <asm/mach/time.h>
 #include <asm/cputype.h>
 #include <asm/delay.h>
 #include <asm/localtimer.h>
@@ -274,6 +275,7 @@ static int arch_timer_available(void)
                return -ENXIO;
 
        if (arch_timer_rate == 0) {
+               arch_timer_reg_write(ARCH_TIMER_PHYS_ACCESS, ARCH_TIMER_REG_CTRL, 0);
                freq = arch_timer_reg_read(ARCH_TIMER_PHYS_ACCESS,
                                           ARCH_TIMER_REG_FREQ);
 
@@ -522,3 +524,13 @@ int __init arch_timer_sched_clock_init(void)
        setup_sched_clock(cnt32, 32, arch_timer_rate);
        return 0;
 }
+
+static void __init arch_timer_init(void)
+{
+    arch_timer_of_register();
+    arch_timer_sched_clock_init();
+}
+
+struct sys_timer arch_generic_timer = {
+    .init         = arch_timer_init,
+};
index 79a698cc4453d66764f0d22ecd49503b0a9cd3ca..412076e507af2125c0702f7aa261746e682ab933 100644 (file)
@@ -64,6 +64,7 @@ config SOC_EXYNOS5250
        select S5P_PM if PM
        select S5P_SLEEP if PM
        select SAMSUNG_DMADEV
+       select ARM_ARCH_TIMER
        help
          Enable EXYNOS5250 SoC support
 
index dac146df79ac870fc02bb1d014d920ff9b2b1d60..a38789dc3e7ce3eed3c40eda7f0f64d5afeed9d5 100644 (file)
@@ -13,6 +13,7 @@
 #define __ARCH_ARM_MACH_EXYNOS_COMMON_H
 
 extern struct sys_timer exynos4_timer;
+extern struct sys_timer arch_generic_timer;
 
 struct map_desc;
 void exynos_init_io(struct map_desc *mach_desc, int size);
index bc9f99879e3d70dd7b130a69797fb638c0b28428..2cfd16fa17026560be09acd7bdff525776f6cdf3 100644 (file)
@@ -197,7 +197,7 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
        .handle_irq     = gic_handle_irq,
        .init_machine   = exynos5250_dt_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .timer          = &arch_generic_timer,
        .dt_compat      = exynos5250_dt_compat,
        .restart        = exynos5_restart,
 MACHINE_END