diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2012-01-10 14:44:19 -0500 |
---|---|---|
committer | Marc Zyngier <marc.zyngier@arm.com> | 2012-03-13 09:45:33 -0400 |
commit | 08efd6ca6fae8ee22617b8d9d3f87d4e4cd56dab (patch) | |
tree | 4d2595267c0487da31a94f7a889d9c20c30887bd /arch/arm/mach-ux500 | |
parent | 4200b16d58cd34ff8e1616d8ed77417f8fc44864 (diff) |
ARM: ux500: convert to twd_local_timer_register() interface
Add support for the new smp_twd runtime registration interface
to the ux500 platforms, and remove the old compile-time support.
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r-- | arch/arm/mach-ux500/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/cpu.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/localtimer.c | 29 | ||||
-rw-r--r-- | arch/arm/mach-ux500/timer.c | 32 |
4 files changed, 25 insertions, 38 deletions
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile index 6bd2f451c18..35b389442af 100644 --- a/arch/arm/mach-ux500/Makefile +++ b/arch/arm/mach-ux500/Makefile | |||
@@ -15,7 +15,6 @@ obj-$(CONFIG_MACH_U8500) += board-mop500.o board-mop500-sdi.o \ | |||
15 | obj-$(CONFIG_MACH_U5500) += board-u5500.o board-u5500-sdi.o | 15 | obj-$(CONFIG_MACH_U5500) += board-u5500.o board-u5500-sdi.o |
16 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 16 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
17 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | 17 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
18 | obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o | ||
19 | obj-$(CONFIG_U5500_MODEM_IRQ) += modem-irq-db5500.o | 18 | obj-$(CONFIG_U5500_MODEM_IRQ) += modem-irq-db5500.o |
20 | obj-$(CONFIG_U5500_MBOX) += mbox-db5500.o | 19 | obj-$(CONFIG_U5500_MBOX) += mbox-db5500.o |
21 | 20 | ||
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index f4185749437..851308bf642 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | #include <asm/hardware/gic.h> | 15 | #include <asm/hardware/gic.h> |
16 | #include <asm/mach/map.h> | 16 | #include <asm/mach/map.h> |
17 | #include <asm/localtimer.h> | ||
18 | 17 | ||
19 | #include <mach/hardware.h> | 18 | #include <mach/hardware.h> |
20 | #include <mach/setup.h> | 19 | #include <mach/setup.h> |
diff --git a/arch/arm/mach-ux500/localtimer.c b/arch/arm/mach-ux500/localtimer.c deleted file mode 100644 index 5ba113309a0..00000000000 --- a/arch/arm/mach-ux500/localtimer.c +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
3 | * Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
4 | * | ||
5 | * This file is heavily based on relaview platform, almost a copy. | ||
6 | * | ||
7 | * Copyright (C) 2002 ARM Ltd. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/smp.h> | ||
15 | #include <linux/clockchips.h> | ||
16 | |||
17 | #include <asm/irq.h> | ||
18 | #include <asm/smp_twd.h> | ||
19 | #include <asm/localtimer.h> | ||
20 | |||
21 | /* | ||
22 | * Setup the local clock events for a CPU. | ||
23 | */ | ||
24 | int __cpuinit local_timer_setup(struct clock_event_device *evt) | ||
25 | { | ||
26 | evt->irq = IRQ_LOCALTIMER; | ||
27 | twd_timer_setup(evt); | ||
28 | return 0; | ||
29 | } | ||
diff --git a/arch/arm/mach-ux500/timer.c b/arch/arm/mach-ux500/timer.c index fd000243112..fbeed7e6339 100644 --- a/arch/arm/mach-ux500/timer.c +++ b/arch/arm/mach-ux500/timer.c | |||
@@ -8,28 +8,45 @@ | |||
8 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
9 | #include <linux/clksrc-dbx500-prcmu.h> | 9 | #include <linux/clksrc-dbx500-prcmu.h> |
10 | 10 | ||
11 | #include <asm/localtimer.h> | 11 | #include <asm/smp_twd.h> |
12 | 12 | ||
13 | #include <plat/mtu.h> | 13 | #include <plat/mtu.h> |
14 | 14 | ||
15 | #include <mach/setup.h> | 15 | #include <mach/setup.h> |
16 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
17 | 17 | ||
18 | #ifdef CONFIG_HAVE_ARM_TWD | ||
19 | static DEFINE_TWD_LOCAL_TIMER(u5500_twd_local_timer, | ||
20 | U5500_TWD_BASE, IRQ_LOCALTIMER); | ||
21 | static DEFINE_TWD_LOCAL_TIMER(u8500_twd_local_timer, | ||
22 | U8500_TWD_BASE, IRQ_LOCALTIMER); | ||
23 | |||
24 | static void __init ux500_twd_init(void) | ||
25 | { | ||
26 | struct twd_local_timer *twd_local_timer; | ||
27 | int err; | ||
28 | |||
29 | twd_local_timer = cpu_is_u5500() ? &u5500_twd_local_timer : | ||
30 | &u8500_twd_local_timer; | ||
31 | |||
32 | err = twd_local_timer_register(twd_local_timer); | ||
33 | if (err) | ||
34 | pr_err("twd_local_timer_register failed %d\n", err); | ||
35 | } | ||
36 | #else | ||
37 | #define ux500_twd_init() do { } while(0) | ||
38 | #endif | ||
39 | |||
18 | static void __init ux500_timer_init(void) | 40 | static void __init ux500_timer_init(void) |
19 | { | 41 | { |
20 | void __iomem *mtu_timer_base; | 42 | void __iomem *mtu_timer_base; |
21 | void __iomem *prcmu_timer_base; | 43 | void __iomem *prcmu_timer_base; |
44 | int err; | ||
22 | 45 | ||
23 | if (cpu_is_u5500()) { | 46 | if (cpu_is_u5500()) { |
24 | #ifdef CONFIG_LOCAL_TIMERS | ||
25 | twd_base = __io_address(U5500_TWD_BASE); | ||
26 | #endif | ||
27 | mtu_timer_base = __io_address(U5500_MTU0_BASE); | 47 | mtu_timer_base = __io_address(U5500_MTU0_BASE); |
28 | prcmu_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE); | 48 | prcmu_timer_base = __io_address(U5500_PRCMU_TIMER_3_BASE); |
29 | } else if (cpu_is_u8500()) { | 49 | } else if (cpu_is_u8500()) { |
30 | #ifdef CONFIG_LOCAL_TIMERS | ||
31 | twd_base = __io_address(U8500_TWD_BASE); | ||
32 | #endif | ||
33 | mtu_timer_base = __io_address(U8500_MTU0_BASE); | 50 | mtu_timer_base = __io_address(U8500_MTU0_BASE); |
34 | prcmu_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE); | 51 | prcmu_timer_base = __io_address(U8500_PRCMU_TIMER_4_BASE); |
35 | } else { | 52 | } else { |
@@ -55,6 +72,7 @@ static void __init ux500_timer_init(void) | |||
55 | 72 | ||
56 | nmdk_timer_init(mtu_timer_base); | 73 | nmdk_timer_init(mtu_timer_base); |
57 | clksrc_dbx500_prcmu_init(prcmu_timer_base); | 74 | clksrc_dbx500_prcmu_init(prcmu_timer_base); |
75 | ux500_twd_init(); | ||
58 | } | 76 | } |
59 | 77 | ||
60 | static void ux500_timer_reset(void) | 78 | static void ux500_timer_reset(void) |