diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-27 19:06:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-27 19:06:17 -0400 |
commit | 48d554418d3bfbba5e9dc1ebdf352f1b1f3ff4ee (patch) | |
tree | 696bdc0c1087e82c6493c852bca514bb0fcd7881 /arch/arm/mach-realview | |
parent | d61b7a572b292e2be409e13b4b3adf475f18fb29 (diff) | |
parent | 2cbe23e3a432e3d09a849adb197c8fcc09e7391d (diff) |
Merge tag 'timer' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull "ARM: timer cleanup work" from Arnd Bergmann:
"These are split out from the generic soc and driver updates because
there was a lot of conflicting work by multiple people. Marc Zyngier
worked on simplifying the "localtimer" interfaces, and some of the
platforms are touching the same code as they move to device tree based
booting.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>"
* tag 'timer' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (61 commits)
ARM: tegra: select USB_ULPI if USB is selected
arm/tegra: pcie: fix return value of function
ARM: ux500: fix compilation after local timer rework
ARM: shmobile: remove additional __io() macro use
ARM: local timers: make the runtime registration interface mandatory
ARM: local timers: convert MSM to runtime registration interface
ARM: local timers: convert exynos to runtime registration interface
ARM: smp_twd: remove old local timer interface
ARM: imx6q: convert to twd_local_timer_register() interface
ARM: highbank: convert to twd_local_timer_register() interface
ARM: ux500: convert to twd_local_timer_register() interface
ARM: shmobile: convert to twd_local_timer_register() interface
ARM: tegra: convert to twd_local_timer_register() interface
ARM: plat-versatile: convert to twd_local_timer_register() interface
ARM: OMAP4: convert to twd_local_timer_register() interface
ARM: smp_twd: add device tree support
ARM: smp_twd: add runtime registration support
ARM: local timers: introduce a new registration interface
ARM: smp_twd: make local_timer_stop a symbol instead of a #define
ARM: mach-shmobile: default to no earlytimer
...
Diffstat (limited to 'arch/arm/mach-realview')
-rw-r--r-- | arch/arm/mach-realview/realview_eb.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_pb11mp.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_pbx.c | 20 |
3 files changed, 54 insertions, 14 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 = { |
diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c index ae7fe54f6eb6..a98c536e3327 100644 --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.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/flash.h> | 42 | #include <asm/mach/flash.h> |
@@ -290,6 +290,21 @@ static void __init gic_init_irq(void) | |||
290 | gic_cascade_irq(1, IRQ_TC11MP_PB_IRQ1); | 290 | gic_cascade_irq(1, IRQ_TC11MP_PB_IRQ1); |
291 | } | 291 | } |
292 | 292 | ||
293 | #ifdef CONFIG_HAVE_ARM_TWD | ||
294 | static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, | ||
295 | REALVIEW_TC11MP_TWD_BASE, | ||
296 | IRQ_LOCALTIMER); | ||
297 | |||
298 | static void __init realview_pb11mp_twd_init(void) | ||
299 | { | ||
300 | int err = twd_local_timer_register(&twd_local_timer); | ||
301 | if (err) | ||
302 | pr_err("twd_local_timer_register failed %d\n", err); | ||
303 | } | ||
304 | #else | ||
305 | #define realview_pb11mp_twd_init() do {} while(0) | ||
306 | #endif | ||
307 | |||
293 | static void __init realview_pb11mp_timer_init(void) | 308 | static void __init realview_pb11mp_timer_init(void) |
294 | { | 309 | { |
295 | timer0_va_base = __io_address(REALVIEW_PB11MP_TIMER0_1_BASE); | 310 | timer0_va_base = __io_address(REALVIEW_PB11MP_TIMER0_1_BASE); |
@@ -297,10 +312,8 @@ static void __init realview_pb11mp_timer_init(void) | |||
297 | timer2_va_base = __io_address(REALVIEW_PB11MP_TIMER2_3_BASE); | 312 | timer2_va_base = __io_address(REALVIEW_PB11MP_TIMER2_3_BASE); |
298 | timer3_va_base = __io_address(REALVIEW_PB11MP_TIMER2_3_BASE) + 0x20; | 313 | timer3_va_base = __io_address(REALVIEW_PB11MP_TIMER2_3_BASE) + 0x20; |
299 | 314 | ||
300 | #ifdef CONFIG_LOCAL_TIMERS | ||
301 | twd_base = __io_address(REALVIEW_TC11MP_TWD_BASE); | ||
302 | #endif | ||
303 | realview_timer_init(IRQ_TC11MP_TIMER0_1); | 315 | realview_timer_init(IRQ_TC11MP_TIMER0_1); |
316 | realview_pb11mp_twd_init(); | ||
304 | } | 317 | } |
305 | 318 | ||
306 | static struct sys_timer realview_pb11mp_timer = { | 319 | static struct sys_timer realview_pb11mp_timer = { |
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index 1cd9956f5875..3f2f605624e9 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c | |||
@@ -298,6 +298,21 @@ static void __init gic_init_irq(void) | |||
298 | } | 298 | } |
299 | } | 299 | } |
300 | 300 | ||
301 | #ifdef CONFIG_HAVE_ARM_TWD | ||
302 | static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, | ||
303 | REALVIEW_PBX_TILE_TWD_BASE, | ||
304 | IRQ_LOCALTIMER); | ||
305 | |||
306 | static void __init realview_pbx_twd_init(void) | ||
307 | { | ||
308 | int err = twd_local_timer_register(&twd_local_timer); | ||
309 | if (err) | ||
310 | pr_err("twd_local_timer_register failed %d\n", err); | ||
311 | } | ||
312 | #else | ||
313 | #define realview_pbx_twd_init() do { } while(0) | ||
314 | #endif | ||
315 | |||
301 | static void __init realview_pbx_timer_init(void) | 316 | static void __init realview_pbx_timer_init(void) |
302 | { | 317 | { |
303 | timer0_va_base = __io_address(REALVIEW_PBX_TIMER0_1_BASE); | 318 | timer0_va_base = __io_address(REALVIEW_PBX_TIMER0_1_BASE); |
@@ -305,11 +320,8 @@ static void __init realview_pbx_timer_init(void) | |||
305 | timer2_va_base = __io_address(REALVIEW_PBX_TIMER2_3_BASE); | 320 | timer2_va_base = __io_address(REALVIEW_PBX_TIMER2_3_BASE); |
306 | timer3_va_base = __io_address(REALVIEW_PBX_TIMER2_3_BASE) + 0x20; | 321 | timer3_va_base = __io_address(REALVIEW_PBX_TIMER2_3_BASE) + 0x20; |
307 | 322 | ||
308 | #ifdef CONFIG_LOCAL_TIMERS | ||
309 | if (core_tile_pbx11mp() || core_tile_pbxa9mp()) | ||
310 | twd_base = __io_address(REALVIEW_PBX_TILE_TWD_BASE); | ||
311 | #endif | ||
312 | realview_timer_init(IRQ_PBX_TIMER0_1); | 323 | realview_timer_init(IRQ_PBX_TIMER0_1); |
324 | realview_pbx_twd_init(); | ||
313 | } | 325 | } |
314 | 326 | ||
315 | static struct sys_timer realview_pbx_timer = { | 327 | static struct sys_timer realview_pbx_timer = { |