From b21e362e93993a8879906cf3fa56586b84226920 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Wed, 7 Dec 2016 00:32:19 -0600 Subject: cpu/x86: allow AP callbacks after MP init There are circumstances where the APs need to run a piece of code later in the boot flow. The current MP init just parks the APs after MP init is completed so there's not an opportunity to target running a piece of code on all the APs at a later time. Therefore, provide an option, PARALLEL_MP_AP_WORK, that allows the APs to perform callbacks. BUG=chrome-os-partner:60657 BRANCH=reef Change-Id: I849ecfdd6641dd9424943e246317cd1996ef1ba6 Signed-off-by: Aaron Durbin Reviewed-on: https://review.coreboot.org/17745 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh Reviewed-by: Lijian Zhao --- src/arch/x86/cpu.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/arch/x86/cpu.c') diff --git a/src/arch/x86/cpu.c b/src/arch/x86/cpu.c index fbd48b0c2b..1e74d0cd59 100644 --- a/src/arch/x86/cpu.c +++ b/src/arch/x86/cpu.c @@ -11,11 +11,13 @@ * GNU General Public License for more details. */ +#include #include #include #include #include #include +#include #include #include #include @@ -310,3 +312,14 @@ void lb_arch_add_records(struct lb_header *header) tsc_info->size = sizeof(*tsc_info); tsc_info->freq_khz = freq_khz; } + +void arch_bootstate_coreboot_exit(void) +{ + /* APs are already parked by existing infrastructure. */ + if (!IS_ENABLED(CONFIG_PARALLEL_MP_AP_WORK)) + return; + + /* APs are waiting for work. Last thing to do is park them. */ + if (mp_park_aps()) + printk(BIOS_ERR, "Parking APs failed.\n"); +} -- cgit v1.2.3