diff options
author | Lee Leahy <leroy.p.leahy@intel.com> | 2016-12-31 08:21:56 -0800 |
---|---|---|
committer | Lee Leahy <leroy.p.leahy@intel.com> | 2017-01-04 00:03:44 +0100 |
commit | 68fdb785b2183cfa3312266b4a800174ba2d64e5 (patch) | |
tree | a8c956b62216ff4fe2be621121449d918b518843 | |
parent | 37935573bfe0c8c8f3e2aeb6e4d2f451539f0f91 (diff) | |
download | coreboot-68fdb785b2183cfa3312266b4a800174ba2d64e5.tar.xz |
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 <leroy.p.leahy@intel.com>
Reviewed-on: https://review.coreboot.org/18002
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Martin Roth <martinroth@google.com>
-rw-r--r-- | src/soc/intel/quark/Kconfig | 1 | ||||
-rw-r--r-- | src/soc/intel/quark/tsc_freq.c | 16 |
2 files changed, 8 insertions, 9 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 <stdint.h> #include <cpu/x86/msr.h> #include <cpu/x86/tsc.h> +#include <timer.h> -static unsigned long bus_freq_khz(void) +unsigned long tsc_freq_mhz(void) { /* CPU freq = 400 MHz */ - return 400 * 1000; + return 400; } -unsigned long tsc_freq_mhz(void) +void timer_monotonic_get(struct mono_time *mt) { - /* assume ratio=1 */ - unsigned bclk_khz = bus_freq_khz(); - - if (!bclk_khz) - return 0; + uint64_t tsc_value; - return (bclk_khz * 1) / 1000; + tsc_value = rdtscll(); + mt->microseconds = tsc_value / tsc_freq_mhz(); } |