summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/soc/intel/skylake/Makefile.inc1
-rw-r--r--src/soc/intel/skylake/monotonic_timer.c27
2 files changed, 3 insertions, 25 deletions
diff --git a/src/soc/intel/skylake/Makefile.inc b/src/soc/intel/skylake/Makefile.inc
index defb94502b..3bd9823738 100644
--- a/src/soc/intel/skylake/Makefile.inc
+++ b/src/soc/intel/skylake/Makefile.inc
@@ -13,6 +13,7 @@ subdirs-y += ../../../cpu/x86/tsc
romstage-y += flash_controller.c
romstage-y += gpio.c
romstage-y += memmap.c
+romstage-y += monotonic_timer.c
romstage-y += pch.c
romstage-y += pcr.c
romstage-y += pei_data.c
diff --git a/src/soc/intel/skylake/monotonic_timer.c b/src/soc/intel/skylake/monotonic_timer.c
index 35ad911168..55430ef2b1 100644
--- a/src/soc/intel/skylake/monotonic_timer.c
+++ b/src/soc/intel/skylake/monotonic_timer.c
@@ -23,12 +23,6 @@
#include <timer.h>
#include <soc/msr.h>
-static struct monotonic_counter {
- int initialized;
- struct mono_time time;
- uint32_t last_value;
-} mono_counter;
-
static inline uint32_t read_counter_msr(void)
{
/*
@@ -44,23 +38,6 @@ static inline uint32_t read_counter_msr(void)
void timer_monotonic_get(struct mono_time *mt)
{
- uint32_t current_tick;
- uint32_t usecs_elapsed;
-
- if (!mono_counter.initialized) {
- mono_counter.last_value = read_counter_msr();
- mono_counter.initialized = 1;
- }
-
- current_tick = read_counter_msr();
- usecs_elapsed = (current_tick - mono_counter.last_value) / 24;
-
- /* Update current time and tick values only if a full tick occurred. */
- if (usecs_elapsed) {
- mono_time_add_usecs(&mono_counter.time, usecs_elapsed);
- mono_counter.last_value = current_tick;
- }
-
- /* Save result. */
- *mt = mono_counter.time;
+ /* Always increases. Don't normalize to 0 between stages. */
+ mono_time_set_usecs(mt, read_counter_msr() / 24);
}