[coreboot-gerrit] New patch to review for coreboot: cpu/x86/tsc: compile same code for all stages
Aaron Durbin (adurbin@chromium.org)
gerrit at coreboot.org
Sat Apr 9 04:44:37 CEST 2016
Aaron Durbin (adurbin at chromium.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14301
-gerrit
commit 7f583604c9927fafb9e03c670cca038a2f9fd600
Author: Aaron Durbin <adurbin at chromium.org>
Date: Fri Apr 8 21:28:11 2016 -0500
cpu/x86/tsc: compile same code for all stages
The delay_tsc.c code took different paths depending
__PRE_RAM__ being defined or not. Also, timer_monotonic_get()
was only compiled in a !__PRE_RAM__ environment. Clean up
the code paths by employing CAR_GLOBAL for the global state
which allows the same code to be used in all stages.
Change-Id: Ia769fa71e2c9d8b11201a3896d117097f2cb7c56
Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
src/cpu/x86/tsc/delay_tsc.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/src/cpu/x86/tsc/delay_tsc.c b/src/cpu/x86/tsc/delay_tsc.c
index 1aec472..439b477 100644
--- a/src/cpu/x86/tsc/delay_tsc.c
+++ b/src/cpu/x86/tsc/delay_tsc.c
@@ -1,3 +1,4 @@
+#include <arch/early_variables.h>
#include <console/console.h>
#include <arch/io.h>
#include <cpu/x86/msr.h>
@@ -6,9 +7,7 @@
#include <delay.h>
#include <thread.h>
-#if !defined(__PRE_RAM__)
-
-static unsigned long clocks_per_usec;
+static unsigned long clocks_per_usec CAR_GLOBAL;
#if CONFIG_TSC_CONSTANT_RATE
static unsigned long calibrate_tsc(void)
@@ -94,22 +93,15 @@ bad_ctc:
void init_timer(void)
{
- if (!clocks_per_usec)
- clocks_per_usec = calibrate_tsc();
+ if (!car_get_var(clocks_per_usec))
+ car_set_var(clocks_per_usec, calibrate_tsc());
}
static inline unsigned long get_clocks_per_usec(void)
{
init_timer();
- return clocks_per_usec;
-}
-#else /* !defined(__PRE_RAM__) */
-/* romstage calls into cpu/board specific function every time. */
-static inline unsigned long get_clocks_per_usec(void)
-{
- return tsc_freq_mhz();
+ return car_get_var(clocks_per_usec);
}
-#endif /* !defined(__PRE_RAM__) */
void udelay(unsigned us)
{
@@ -130,18 +122,18 @@ void udelay(unsigned us)
}
}
-#if CONFIG_TSC_MONOTONIC_TIMER && !defined(__PRE_RAM__)
+#if CONFIG_TSC_MONOTONIC_TIMER
#include <timer.h>
static struct monotonic_counter {
int initialized;
struct mono_time time;
uint64_t last_value;
-} mono_counter_g;
+} mono_counter_g CAR_GLOBAL;
static inline struct monotonic_counter *get_monotonic_context(void)
{
- return &mono_counter_g;
+ return car_get_var_ptr(&mono_counter_g);
}
void timer_monotonic_get(struct mono_time *mt)
More information about the coreboot-gerrit
mailing list