diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index bf06ca641078..fb9aee89bd63 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -61,13 +61,23 @@ #include "internal.h" #ifdef CONFIG_PRINTK_TIME_FROM_ARM_ARCH_TIMER -#include +#include static u64 get_local_clock(void) { u64 ns; + static u32 mhz; + + if (!mhz) { + mhz = arch_timer_get_cntfrq() / 1000000; + if (!mhz) + mhz = 24; + } + + if (mhz == 1000) + return arch_timer_read_counter(); ns = arch_timer_read_counter() * 1000; - do_div(ns, 24); + do_div(ns, mhz); return ns; }