From 149c4c5d0191f1728a66ec986c3eae698cbf87cb Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sat, 28 Nov 2015 21:27:05 +1100 Subject: x86/smm: Initialize SMM on some CPUs one-by-one We currently race in SMM init on Atom 230 (and potentially other CPUs). At least on the 230, this leads to a hang on RSM, likely because both hyperthreads mess around with SMBASE and other SMM state variables in parallel without coordination. The same behaviour occurs with Atom D5xx. Change it so first APs are spun up and sent to sleep, then BSP initializes SMM, then every CPU, one after another. Only do this when SERIALIZE_SMM_INITIALIZATION is set. Set the flag for Atom CPUs. Change-Id: I1ae864e37546298ea222e81349c27cf774ed251f Signed-off-by: Patrick Georgi Signed-off-by: Damien Zammit Reviewed-on: https://review.coreboot.org/6311 Tested-by: build bot (Jenkins) Tested-by: BSI firmware lab Reviewed-by: Aaron Durbin --- src/arch/x86/cpu.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/arch') diff --git a/src/arch/x86/cpu.c b/src/arch/x86/cpu.c index ceed0770e2..52b56812d5 100644 --- a/src/arch/x86/cpu.c +++ b/src/arch/x86/cpu.c @@ -234,6 +234,9 @@ void cpu_initialize(unsigned int index) die("CPU: missing cpu device structure"); } + if (cpu->initialized) + return; + post_log_path(cpu); /* Find what type of cpu we are dealing with */ -- cgit v1.2.3