[coreboot-gerrit] Patch set updated for coreboot: cpu/x86/tsc: compile same code for all stages

Aaron Durbin (adurbin@chromium.org) gerrit at coreboot.org
Sat Apr 9 05:17:58 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 d7f612ab653be73bbe0b18fd15ebee516b8ccf35
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.
    
    Lastly, handle apollolake fallout now that init_timer() is
    not needed in placeholders.c.
    
    Change-Id: Ia769fa71e2c9d8b11201a3896d117097f2cb7c56
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
 src/cpu/x86/tsc/delay_tsc.c             | 24 ++++++++----------------
 src/soc/intel/apollolake/placeholders.c |  6 ------
 2 files changed, 8 insertions(+), 22 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)
diff --git a/src/soc/intel/apollolake/placeholders.c b/src/soc/intel/apollolake/placeholders.c
index 808bd54..9e58c11 100644
--- a/src/soc/intel/apollolake/placeholders.c
+++ b/src/soc/intel/apollolake/placeholders.c
@@ -6,9 +6,3 @@
 void southbridge_smi_set_eos(void)
 {
 }
-
-#if ENV_BOOTBLOCK
-void init_timer(void)
-{
-}
-#endif



More information about the coreboot-gerrit mailing list