summaryrefslogtreecommitdiffstats
path: root/include/clocksource
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@codeaurora.org>2013-07-19 01:59:32 +0200
committerDaniel Lezcano <daniel.lezcano@linaro.org>2013-08-01 01:13:37 +0200
commit220069945b298d3998c6598b081c466dca259929 (patch)
treee74675bfe2f46e4986512c451ce9ad9882cd4836 /include/clocksource
parentclocksource: arch_timer: Push the read/write wrappers deeper (diff)
downloadlinux-220069945b298d3998c6598b081c466dca259929.tar.xz
linux-220069945b298d3998c6598b081c466dca259929.zip
clocksource: arch_timer: Add support for memory mapped timers
Add support for the memory mapped timers by filling in the read/write functions and adding some parsing code. Note that we only register one clocksource, preferring the cp15 based clocksource over the mmio one. To keep things simple we register one global clockevent. This covers the case of UP and SMP systems with only mmio hardware and systems where the memory mapped timers are used as the broadcast timer in low power modes. The DT binding allows for per-CPU memory mapped timers in case we want to support that in the future, but the code isn't added here. We also don't do much for hypervisor support, although it should be possible to support it by searching for at least two frames where one frame has the virtual capability and then updating KVM timers to support it. Cc: Mark Rutland <mark.rutland@arm.com> Cc: Marc Zyngier <Marc.Zyngier@arm.com> Cc: Rob Herring <robherring2@gmail.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Mark Rutland <mark.rutland@arm.com>
Diffstat (limited to 'include/clocksource')
-rw-r--r--include/clocksource/arm_arch_timer.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/clocksource/arm_arch_timer.h b/include/clocksource/arm_arch_timer.h
index f3da817b9b8e..93b7f96f9c59 100644
--- a/include/clocksource/arm_arch_timer.h
+++ b/include/clocksource/arm_arch_timer.h
@@ -30,11 +30,13 @@ enum arch_timer_reg {
#define ARCH_TIMER_PHYS_ACCESS 0
#define ARCH_TIMER_VIRT_ACCESS 1
+#define ARCH_TIMER_MEM_PHYS_ACCESS 2
+#define ARCH_TIMER_MEM_VIRT_ACCESS 3
#ifdef CONFIG_ARM_ARCH_TIMER
extern u32 arch_timer_get_rate(void);
-extern u64 arch_timer_read_counter(void);
+extern u64 (*arch_timer_read_counter)(void);
extern struct timecounter *arch_timer_get_timecounter(void);
#else