diff options
Diffstat (limited to 'arch/arm/mach-realview/realview_eb.c')
-rw-r--r-- | arch/arm/mach-realview/realview_eb.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 157e1bc6e83c..baf382c5e776 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
@@ -36,7 +36,7 @@ | |||
36 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
37 | #include <asm/hardware/gic.h> | 37 | #include <asm/hardware/gic.h> |
38 | #include <asm/hardware/cache-l2x0.h> | 38 | #include <asm/hardware/cache-l2x0.h> |
39 | #include <asm/localtimer.h> | 39 | #include <asm/smp_twd.h> |
40 | 40 | ||
41 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
42 | #include <asm/mach/map.h> | 42 | #include <asm/mach/map.h> |
@@ -383,6 +383,23 @@ static void realview_eb11mp_fixup(void) | |||
383 | realview_eb_isp1761_resources[1].end = IRQ_EB11MP_USB; | 383 | realview_eb_isp1761_resources[1].end = IRQ_EB11MP_USB; |
384 | } | 384 | } |
385 | 385 | ||
386 | #ifdef CONFIG_HAVE_ARM_TWD | ||
387 | static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, | ||
388 | REALVIEW_EB11MP_TWD_BASE, | ||
389 | IRQ_LOCALTIMER); | ||
390 | |||
391 | static void __init realview_eb_twd_init(void) | ||
392 | { | ||
393 | if (core_tile_eb11mp() || core_tile_a9mp()) { | ||
394 | int err = twd_local_timer_register(&twd_local_timer); | ||
395 | if (err) | ||
396 | pr_err("twd_local_timer_register failed %d\n", err); | ||
397 | } | ||
398 | } | ||
399 | #else | ||
400 | #define realview_eb_twd_init() do { } while(0) | ||
401 | #endif | ||
402 | |||
386 | static void __init realview_eb_timer_init(void) | 403 | static void __init realview_eb_timer_init(void) |
387 | { | 404 | { |
388 | unsigned int timer_irq; | 405 | unsigned int timer_irq; |
@@ -392,15 +409,13 @@ static void __init realview_eb_timer_init(void) | |||
392 | timer2_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE); | 409 | timer2_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE); |
393 | timer3_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE) + 0x20; | 410 | timer3_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE) + 0x20; |
394 | 411 | ||
395 | if (core_tile_eb11mp() || core_tile_a9mp()) { | 412 | if (core_tile_eb11mp() || core_tile_a9mp()) |
396 | #ifdef CONFIG_LOCAL_TIMERS | ||
397 | twd_base = __io_address(REALVIEW_EB11MP_TWD_BASE); | ||
398 | #endif | ||
399 | timer_irq = IRQ_EB11MP_TIMER0_1; | 413 | timer_irq = IRQ_EB11MP_TIMER0_1; |
400 | } else | 414 | else |
401 | timer_irq = IRQ_EB_TIMER0_1; | 415 | timer_irq = IRQ_EB_TIMER0_1; |
402 | 416 | ||
403 | realview_timer_init(timer_irq); | 417 | realview_timer_init(timer_irq); |
418 | realview_eb_twd_init(); | ||
404 | } | 419 | } |
405 | 420 | ||
406 | static struct sys_timer realview_eb_timer = { | 421 | static struct sys_timer realview_eb_timer = { |