]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-realview/realview_eb.c
Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd
[~andy/linux] / arch / arm / mach-realview / realview_eb.c
index 157e1bc6e83c17197ffbdbc48d4cdbe2572404c5..baf382c5e77601957b2ef8982ccdd61552f9b2f2 100644 (file)
@@ -36,7 +36,7 @@
 #include <asm/pgtable.h>
 #include <asm/hardware/gic.h>
 #include <asm/hardware/cache-l2x0.h>
-#include <asm/localtimer.h>
+#include <asm/smp_twd.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -383,6 +383,23 @@ static void realview_eb11mp_fixup(void)
        realview_eb_isp1761_resources[1].end    = IRQ_EB11MP_USB;
 }
 
+#ifdef CONFIG_HAVE_ARM_TWD
+static DEFINE_TWD_LOCAL_TIMER(twd_local_timer,
+                             REALVIEW_EB11MP_TWD_BASE,
+                             IRQ_LOCALTIMER);
+
+static void __init realview_eb_twd_init(void)
+{
+       if (core_tile_eb11mp() || core_tile_a9mp()) {
+               int err = twd_local_timer_register(&twd_local_timer);
+               if (err)
+                       pr_err("twd_local_timer_register failed %d\n", err);
+       }
+}
+#else
+#define realview_eb_twd_init() do { } while(0)
+#endif
+
 static void __init realview_eb_timer_init(void)
 {
        unsigned int timer_irq;
@@ -392,15 +409,13 @@ static void __init realview_eb_timer_init(void)
        timer2_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE);
        timer3_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE) + 0x20;
 
-       if (core_tile_eb11mp() || core_tile_a9mp()) {
-#ifdef CONFIG_LOCAL_TIMERS
-               twd_base = __io_address(REALVIEW_EB11MP_TWD_BASE);
-#endif
+       if (core_tile_eb11mp() || core_tile_a9mp())
                timer_irq = IRQ_EB11MP_TIMER0_1;
-       else
+       else
                timer_irq = IRQ_EB_TIMER0_1;
 
        realview_timer_init(timer_irq);
+       realview_eb_twd_init();
 }
 
 static struct sys_timer realview_eb_timer = {