diff options
Diffstat (limited to 'arch/arm/mach-msm/timer.c')
-rw-r--r-- | arch/arm/mach-msm/timer.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index 75f4be40b3e5..812808254936 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/mach/time.h> | 24 | #include <asm/mach/time.h> |
25 | #include <asm/hardware/gic.h> | 25 | #include <asm/hardware/gic.h> |
26 | #include <asm/localtimer.h> | 26 | #include <asm/localtimer.h> |
27 | #include <asm/sched_clock.h> | ||
27 | 28 | ||
28 | #include <mach/msm_iomap.h> | 29 | #include <mach/msm_iomap.h> |
29 | #include <mach/cpu.h> | 30 | #include <mach/cpu.h> |
@@ -105,12 +106,12 @@ static union { | |||
105 | 106 | ||
106 | static void __iomem *source_base; | 107 | static void __iomem *source_base; |
107 | 108 | ||
108 | static cycle_t msm_read_timer_count(struct clocksource *cs) | 109 | static notrace cycle_t msm_read_timer_count(struct clocksource *cs) |
109 | { | 110 | { |
110 | return readl_relaxed(source_base + TIMER_COUNT_VAL); | 111 | return readl_relaxed(source_base + TIMER_COUNT_VAL); |
111 | } | 112 | } |
112 | 113 | ||
113 | static cycle_t msm_read_timer_count_shift(struct clocksource *cs) | 114 | static notrace cycle_t msm_read_timer_count_shift(struct clocksource *cs) |
114 | { | 115 | { |
115 | /* | 116 | /* |
116 | * Shift timer count down by a constant due to unreliable lower bits | 117 | * Shift timer count down by a constant due to unreliable lower bits |
@@ -166,6 +167,11 @@ static struct local_timer_ops msm_local_timer_ops __cpuinitdata = { | |||
166 | }; | 167 | }; |
167 | #endif /* CONFIG_LOCAL_TIMERS */ | 168 | #endif /* CONFIG_LOCAL_TIMERS */ |
168 | 169 | ||
170 | static notrace u32 msm_sched_clock_read(void) | ||
171 | { | ||
172 | return msm_clocksource.read(&msm_clocksource); | ||
173 | } | ||
174 | |||
169 | static void __init msm_timer_init(void) | 175 | static void __init msm_timer_init(void) |
170 | { | 176 | { |
171 | struct clock_event_device *ce = &msm_clockevent; | 177 | struct clock_event_device *ce = &msm_clockevent; |
@@ -232,6 +238,8 @@ err: | |||
232 | res = clocksource_register_hz(cs, dgt_hz); | 238 | res = clocksource_register_hz(cs, dgt_hz); |
233 | if (res) | 239 | if (res) |
234 | pr_err("clocksource_register failed\n"); | 240 | pr_err("clocksource_register failed\n"); |
241 | setup_sched_clock(msm_sched_clock_read, | ||
242 | cpu_is_msm7x01() ? 32 - MSM_DGT_SHIFT : 32, dgt_hz); | ||
235 | } | 243 | } |
236 | 244 | ||
237 | struct sys_timer msm_timer = { | 245 | struct sys_timer msm_timer = { |