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:30:30 -0400 |
commit | 1fcf3a6edde7aeef7a207f8209231dd340a4ea89 (patch) | |
tree | a146c688efe3ac47f1a2ec9665e621c58dc8a430 /arch | |
parent | 7c380f273cf09b202e4bc9cbe137aef1870b8a20 (diff) |
ARM: tegra: convert to twd_local_timer_register() interface
Add support for the new smp_twd runtime registration interface
to the tegra platforms, and remove the old compile-time support.
Tested on Harmony.
Acked-by: Stephen Warren <swarren@nvidia.com>
Cc: Colin Cross <ccross@android.com>
Cc: Olof Johansson <olof@lixom.net>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-tegra/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-tegra/localtimer.c | 26 | ||||
-rw-r--r-- | arch/arm/mach-tegra/timer.c | 22 |
3 files changed, 18 insertions, 32 deletions
diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile index e120ff54f663..f7d044369ed5 100644 --- a/arch/arm/mach-tegra/Makefile +++ b/arch/arm/mach-tegra/Makefile | |||
@@ -13,7 +13,7 @@ obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_emc.o | |||
13 | obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += pinmux-tegra20-tables.o | 13 | obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += pinmux-tegra20-tables.o |
14 | obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += pinmux-tegra30-tables.o | 14 | obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += pinmux-tegra30-tables.o |
15 | obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += board-dt-tegra30.o | 15 | obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += board-dt-tegra30.o |
16 | obj-$(CONFIG_SMP) += platsmp.o localtimer.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_TEGRA_SYSTEM_DMA) += dma.o | 18 | obj-$(CONFIG_TEGRA_SYSTEM_DMA) += dma.o |
19 | obj-$(CONFIG_CPU_FREQ) += cpu-tegra.o | 19 | obj-$(CONFIG_CPU_FREQ) += cpu-tegra.o |
diff --git a/arch/arm/mach-tegra/localtimer.c b/arch/arm/mach-tegra/localtimer.c deleted file mode 100644 index e91d681d45a2..000000000000 --- a/arch/arm/mach-tegra/localtimer.c +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-tegra/localtimer.c | ||
3 | * | ||
4 | * Copyright (C) 2002 ARM Ltd. | ||
5 | * All Rights Reserved | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/smp.h> | ||
13 | #include <linux/clockchips.h> | ||
14 | #include <asm/irq.h> | ||
15 | #include <asm/smp_twd.h> | ||
16 | #include <asm/localtimer.h> | ||
17 | |||
18 | /* | ||
19 | * Setup the local clock events for a CPU. | ||
20 | */ | ||
21 | int __cpuinit local_timer_setup(struct clock_event_device *evt) | ||
22 | { | ||
23 | evt->irq = IRQ_LOCALTIMER; | ||
24 | twd_timer_setup(evt); | ||
25 | return 0; | ||
26 | } | ||
diff --git a/arch/arm/mach-tegra/timer.c b/arch/arm/mach-tegra/timer.c index 1d1acda4f3e0..1eed8d4a80ef 100644 --- a/arch/arm/mach-tegra/timer.c +++ b/arch/arm/mach-tegra/timer.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | 29 | ||
30 | #include <asm/mach/time.h> | 30 | #include <asm/mach/time.h> |
31 | #include <asm/localtimer.h> | 31 | #include <asm/smp_twd.h> |
32 | #include <asm/sched_clock.h> | 32 | #include <asm/sched_clock.h> |
33 | 33 | ||
34 | #include <mach/iomap.h> | 34 | #include <mach/iomap.h> |
@@ -162,6 +162,21 @@ static struct irqaction tegra_timer_irq = { | |||
162 | .irq = INT_TMR3, | 162 | .irq = INT_TMR3, |
163 | }; | 163 | }; |
164 | 164 | ||
165 | #ifdef CONFIG_HAVE_ARM_TWD | ||
166 | static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, | ||
167 | TEGRA_ARM_PERIF_BASE + 0x600, | ||
168 | IRQ_LOCALTIMER); | ||
169 | |||
170 | static void __init tegra_twd_init(void) | ||
171 | { | ||
172 | int err = twd_local_timer_register(&twd_local_timer); | ||
173 | if (err) | ||
174 | pr_err("twd_local_timer_register failed %d\n", err); | ||
175 | } | ||
176 | #else | ||
177 | #define tegra_twd_init() do {} while(0) | ||
178 | #endif | ||
179 | |||
165 | static void __init tegra_init_timer(void) | 180 | static void __init tegra_init_timer(void) |
166 | { | 181 | { |
167 | struct clk *clk; | 182 | struct clk *clk; |
@@ -188,10 +203,6 @@ static void __init tegra_init_timer(void) | |||
188 | else | 203 | else |
189 | clk_enable(clk); | 204 | clk_enable(clk); |
190 | 205 | ||
191 | #ifdef CONFIG_HAVE_ARM_TWD | ||
192 | twd_base = IO_ADDRESS(TEGRA_ARM_PERIF_BASE + 0x600); | ||
193 | #endif | ||
194 | |||
195 | switch (rate) { | 206 | switch (rate) { |
196 | case 12000000: | 207 | case 12000000: |
197 | timer_writel(0x000b, TIMERUS_USEC_CFG); | 208 | timer_writel(0x000b, TIMERUS_USEC_CFG); |
@@ -231,6 +242,7 @@ static void __init tegra_init_timer(void) | |||
231 | tegra_clockevent.cpumask = cpu_all_mask; | 242 | tegra_clockevent.cpumask = cpu_all_mask; |
232 | tegra_clockevent.irq = tegra_timer_irq.irq; | 243 | tegra_clockevent.irq = tegra_timer_irq.irq; |
233 | clockevents_register_device(&tegra_clockevent); | 244 | clockevents_register_device(&tegra_clockevent); |
245 | tegra_twd_init(); | ||
234 | } | 246 | } |
235 | 247 | ||
236 | struct sys_timer tegra_timer = { | 248 | struct sys_timer tegra_timer = { |