Commit a8cb6041 authored by Marc Zyngier's avatar Marc Zyngier

ARM: local timers: convert exynos to runtime registration interface

Convert the Exynos MCT timers to the runtime registration interface.
Tested on Origen.

Cc: Kukjin Kim <kgene.kim@samsung.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 92485104
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/percpu.h> #include <linux/percpu.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
#include <asm/localtimer.h>
#include <plat/cpu.h> #include <plat/cpu.h>
...@@ -375,7 +376,7 @@ static struct irqaction mct_tick1_event_irq = { ...@@ -375,7 +376,7 @@ static struct irqaction mct_tick1_event_irq = {
.handler = exynos4_mct_tick_isr, .handler = exynos4_mct_tick_isr,
}; };
static void exynos4_mct_tick_init(struct clock_event_device *evt) static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
{ {
struct mct_clock_event_device *mevt; struct mct_clock_event_device *mevt;
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
...@@ -417,17 +418,11 @@ static void exynos4_mct_tick_init(struct clock_event_device *evt) ...@@ -417,17 +418,11 @@ static void exynos4_mct_tick_init(struct clock_event_device *evt)
} else { } else {
enable_percpu_irq(IRQ_MCT_LOCALTIMER, 0); enable_percpu_irq(IRQ_MCT_LOCALTIMER, 0);
} }
}
/* Setup the local clock events for a CPU */
int __cpuinit local_timer_setup(struct clock_event_device *evt)
{
exynos4_mct_tick_init(evt);
return 0; return 0;
} }
void local_timer_stop(struct clock_event_device *evt) static void exynos4_local_timer_stop(struct clock_event_device *evt)
{ {
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt); evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
...@@ -439,6 +434,11 @@ void local_timer_stop(struct clock_event_device *evt) ...@@ -439,6 +434,11 @@ void local_timer_stop(struct clock_event_device *evt)
else else
disable_percpu_irq(IRQ_MCT_LOCALTIMER); disable_percpu_irq(IRQ_MCT_LOCALTIMER);
} }
static struct local_timer_ops exynos4_mct_tick_ops __cpuinitdata = {
.setup = exynos4_local_timer_setup,
.stop = exynos4_local_timer_stop,
};
#endif /* CONFIG_LOCAL_TIMERS */ #endif /* CONFIG_LOCAL_TIMERS */
static void __init exynos4_timer_resources(void) static void __init exynos4_timer_resources(void)
...@@ -458,6 +458,8 @@ static void __init exynos4_timer_resources(void) ...@@ -458,6 +458,8 @@ static void __init exynos4_timer_resources(void)
WARN(err, "MCT: can't request IRQ %d (%d)\n", WARN(err, "MCT: can't request IRQ %d (%d)\n",
IRQ_MCT_LOCALTIMER, err); IRQ_MCT_LOCALTIMER, err);
} }
local_timer_register(&exynos4_mct_tick_ops);
#endif /* CONFIG_LOCAL_TIMERS */ #endif /* CONFIG_LOCAL_TIMERS */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment