From cd5f6f2502893236ca1274b0e3efee5f0e6080f4 Mon Sep 17 00:00:00 2001 From: David Karoly Date: Thu, 25 Aug 2022 12:35:01 +0200 Subject: [PATCH] kernel/arm: fix system_time for generic timer Change-Id: Ief7b0638f40ba5deee27f3551e8870bfb6216a4d Reviewed-on: https://review.haiku-os.org/c/haiku/+/5569 Tested-by: Commit checker robot Reviewed-by: Fredrik Holmqvist --- src/system/kernel/arch/arm/arch_timer_generic.cpp | 5 +++-- src/system/kernel/arch/arm/arch_timer_generic.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/arch/arm/arch_timer_generic.cpp b/src/system/kernel/arch/arm/arch_timer_generic.cpp index f9d574db9d..7fb3a97059 100644 --- a/src/system/kernel/arch/arm/arch_timer_generic.cpp +++ b/src/system/kernel/arch/arm/arch_timer_generic.cpp @@ -35,7 +35,7 @@ get_counter(void) void ARMGenericTimer::SetTimeout(bigtime_t timeout) { - uint32_t timeout_ticks = timeout * fTimerFrequency / 1000000; + uint32_t timeout_ticks = timeout * fTimerFrequencyMHz; asm volatile ("ISB\n" "MCR p15, 0, %0, c14, c2, 0" : : "r"(timeout_ticks)); @@ -58,7 +58,7 @@ ARMGenericTimer::Clear() bigtime_t ARMGenericTimer::Time() { - return get_counter() / fTimerFrequency; + return get_counter() / fTimerFrequencyMHz; } @@ -85,6 +85,7 @@ ARMGenericTimer::ARMGenericTimer() &ARMGenericTimer::_InterruptWrapper, this, 0); fTimerFrequency = get_counter_freq(); + fTimerFrequencyMHz = fTimerFrequency / 1000000; } diff --git a/src/system/kernel/arch/arm/arch_timer_generic.h b/src/system/kernel/arch/arm/arch_timer_generic.h index 7d1e66234a..26cb71b114 100644 --- a/src/system/kernel/arch/arm/arch_timer_generic.h +++ b/src/system/kernel/arch/arm/arch_timer_generic.h @@ -30,6 +30,7 @@ private: int32 HandleInterrupt(); uint32_t fTimerFrequency; + uint32_t fTimerFrequencyMHz; }; #endif /* ARCH_ARM_TIMER_GENERIC_H */