aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-davinci/time.c
diff options
context:
space:
mode:
authorAndreas Gaeer <Andreas.Gaer@baslerweb.com>2010-10-06 04:38:55 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2010-12-10 10:33:49 -0500
commit6d1c57c84cc474a0fa63aadaa260b13dc5c7d68b (patch)
tree5ce151dd60a963883ff738132e30c9adf590030c /arch/arm/mach-davinci/time.c
parentcf7d7e5a1980d1116ee152d25dac382b112b9c17 (diff)
davinci: Implement sched_clock()
Overwrite the default implementation of sched_clock that is based on jiffies by something more precise. This improves timestamps in ftrace. Implementation is copied from OMAP platform code. Signed-off-by: Andreas Gaeer <Andreas.Gaer@baslerweb.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci/time.c')
-rw-r--r--arch/arm/mach-davinci/time.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
index 0f21c36e65dd..5d1eea026635 100644
--- a/arch/arm/mach-davinci/time.c
+++ b/arch/arm/mach-davinci/time.c
@@ -272,15 +272,36 @@ static cycle_t read_cycles(struct clocksource *cs)
272 return (cycles_t)timer32_read(t); 272 return (cycles_t)timer32_read(t);
273} 273}
274 274
275/*
276 * Kernel assumes that sched_clock can be called early but may not have
277 * things ready yet.
278 */
279static cycle_t read_dummy(struct clocksource *cs)
280{
281 return 0;
282}
283
284
275static struct clocksource clocksource_davinci = { 285static struct clocksource clocksource_davinci = {
276 .rating = 300, 286 .rating = 300,
277 .read = read_cycles, 287 .read = read_dummy,
278 .mask = CLOCKSOURCE_MASK(32), 288 .mask = CLOCKSOURCE_MASK(32),
279 .shift = 24, 289 .shift = 24,
280 .flags = CLOCK_SOURCE_IS_CONTINUOUS, 290 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
281}; 291};
282 292
283/* 293/*
294 * Overwrite weak default sched_clock with something more precise
295 */
296unsigned long long notrace sched_clock(void)
297{
298 const cycle_t cyc = clocksource_davinci.read(&clocksource_davinci);
299
300 return clocksource_cyc2ns(cyc, clocksource_davinci.mult,
301 clocksource_davinci.shift);
302}
303
304/*
284 * clockevent 305 * clockevent
285 */ 306 */
286static int davinci_set_next_event(unsigned long cycles, 307static int davinci_set_next_event(unsigned long cycles,
@@ -377,6 +398,7 @@ static void __init davinci_timer_init(void)
377 davinci_clock_tick_rate = clk_get_rate(timer_clk); 398 davinci_clock_tick_rate = clk_get_rate(timer_clk);
378 399
379 /* setup clocksource */ 400 /* setup clocksource */
401 clocksource_davinci.read = read_cycles;
380 clocksource_davinci.name = id_to_name[clocksource_id]; 402 clocksource_davinci.name = id_to_name[clocksource_id];
381 clocksource_davinci.mult = 403 clocksource_davinci.mult =
382 clocksource_khz2mult(davinci_clock_tick_rate/1000, 404 clocksource_khz2mult(davinci_clock_tick_rate/1000,