aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/intel/haswell/haswell.h
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2013-01-14 14:54:41 -0600
committerRonald G. Minnich <rminnich@gmail.com>2013-03-18 17:10:18 +0100
commit7af20698f69bbf10c4f18aa4fcc35ae7cf8cb866 (patch)
tree553435da18950a247e1061669f78d70453fe629d /src/cpu/intel/haswell/haswell.h
parent24614af9b85bc615b0d9af3f37fa393de039c9f8 (diff)
haswell: enable caching before SMM initialization
The SMM handler resides in the TSEG region which is far above CONFIG_RAM_TOP (which is the highest cacheable address) before MTRRs are setup. This means that calling initialize_cpus() before performing MTRR setup on the BSP means the SMM handler is copied using uncacheable accesses. Improve the SMM handler setup path by enabling performing MTRR setup on for the BSP before the call to initialize_cpus(). In order to do this the haswell_init() function was split into 2 paths: BSP & AP paths. There is a cpu_common_init() that both call to perform similar functionality. The BSP path in haswell_init() then starts the APs using intel_cores_init(). The AP path in haswell_init() loads microcode and sets up MTRRs. This split will be leveraged for future support of bringing up APs in parallel as well as adhering to the Haswell MP initialization requirements. Change-Id: Id8e17af149e68d708f3d4765e38b1c61f7ebb470 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/2746 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/cpu/intel/haswell/haswell.h')
-rw-r--r--src/cpu/intel/haswell/haswell.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/cpu/intel/haswell/haswell.h b/src/cpu/intel/haswell/haswell.h
index 7ce868d30d..cb85078db4 100644
--- a/src/cpu/intel/haswell/haswell.h
+++ b/src/cpu/intel/haswell/haswell.h
@@ -108,6 +108,8 @@ void intel_cpu_haswell_finalize_smm(void);
/* Configure power limits for turbo mode */
void set_power_limits(u8 power_limit_1_time);
int cpu_config_tdp_levels(void);
+struct bus;
+void bsp_init_and_start_aps(struct bus *cpu_bus);
#endif
#endif