From 68fdb785b2183cfa3312266b4a800174ba2d64e5 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Sat, 31 Dec 2016 08:21:56 -0800 Subject: [PATCH] soc/intel/quark: Add monotonic timer support Add the Kconfig value HAVE_MONOTONIC_TIMER and the routine to read the TSC for the monotonic timer. Simplify the routine to get the TSC frequency. TEST=Build and run on Galileo Gen2 Change-Id: I806fb864b01e39277bf2d6276254b0543930c2f6 Signed-off-by: Lee Leahy Reviewed-on: https://review.coreboot.org/18002 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel Reviewed-by: Martin Roth --- src/soc/intel/quark/Kconfig | 1 + src/soc/intel/quark/tsc_freq.c | 24 +++++++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/soc/intel/quark/Kconfig b/src/soc/intel/quark/Kconfig index c5efd4a296..8182caa51c 100644 --- a/src/soc/intel/quark/Kconfig +++ b/src/soc/intel/quark/Kconfig @@ -29,6 +29,7 @@ config CPU_SPECIFIC_OPTIONS select BOOTBLOCK_SAVE_BIST_AND_TIMESTAMP select C_ENVIRONMENT_BOOTBLOCK select HAVE_HARD_RESET + select HAVE_MONOTONIC_TIMER select NO_MMCONF_SUPPORT select REG_SCRIPT select RELOCATABLE_RAMSTAGE diff --git a/src/soc/intel/quark/tsc_freq.c b/src/soc/intel/quark/tsc_freq.c index eb8c46ecf2..e6d0369eff 100644 --- a/src/soc/intel/quark/tsc_freq.c +++ b/src/soc/intel/quark/tsc_freq.c @@ -17,20 +17,18 @@ #include #include #include - -static unsigned long bus_freq_khz(void) -{ - /* CPU freq = 400 MHz */ - return 400 * 1000; -} +#include unsigned long tsc_freq_mhz(void) { - /* assume ratio=1 */ - unsigned bclk_khz = bus_freq_khz(); - - if (!bclk_khz) - return 0; - - return (bclk_khz * 1) / 1000; + /* CPU freq = 400 MHz */ + return 400; +} + +void timer_monotonic_get(struct mono_time *mt) +{ + uint64_t tsc_value; + + tsc_value = rdtscll(); + mt->microseconds = tsc_value / tsc_freq_mhz(); }