From 8e7c0604bda40be6fac349a0cf6c4a7e1b2fd64f Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Wed, 19 Jun 2013 11:39:05 +0200 Subject: [PATCH] arm timer fix . set 'done' once initialized so 32-bit read frc works, thanks to keesj . make sure the software-implemented upper 32 bit of the 64-bit "tsc" value works OK by adding an assert in one of its calls Change-Id: I5ce24fea919f4610c6a86ac7ec9f04b1815620c2 --- kernel/arch/earm/arch_clock.c | 3 +++ kernel/arch/earm/omap_timer.c | 1 + 2 files changed, 4 insertions(+) diff --git a/kernel/arch/earm/arch_clock.c b/kernel/arch/earm/arch_clock.c index 0235e1d1a..8a0e7b1d4 100644 --- a/kernel/arch/earm/arch_clock.c +++ b/kernel/arch/earm/arch_clock.c @@ -10,6 +10,8 @@ #include "kernel/glo.h" #include "kernel/profile.h" +#include + #include "kernel/spinlock.h" @@ -61,6 +63,7 @@ void context_stop(struct proc * p) u64_t * __tsc_ctr_switch = get_cpulocal_var_ptr(tsc_ctr_switch); read_tsc_64(&tsc); + assert(tsc >= *__tsc_ctr_switch); tsc_delta = tsc - *__tsc_ctr_switch; p->p_cycles += tsc_delta; diff --git a/kernel/arch/earm/omap_timer.c b/kernel/arch/earm/omap_timer.c index ca458a438..8f742e66d 100644 --- a/kernel/arch/earm/omap_timer.c +++ b/kernel/arch/earm/omap_timer.c @@ -198,6 +198,7 @@ void omap3_frclock_init(void) /* Start timer */ mmio_set(fr_timer.base + fr_timer.regs->TCLR, OMAP3_TCLR_OVF_TRG|OMAP3_TCLR_AR|OMAP3_TCLR_ST|OMAP3_TCLR_PRE); + done = 1; } void omap3_frclock_stop() -- 2.44.0