Lean Sheng Tan has submitted this change. ( https://review.coreboot.org/c/coreboot/+/64802 )
(
27 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: cpu/smm_module_loader.c: Fix up CPU index locally ......................................................................
cpu/smm_module_loader.c: Fix up CPU index locally
Don't pass the stub params to the mp_init code.
Change-Id: I070bc00ae5e5bceb6c5b90ea833cc057dd41f6cc Signed-off-by: Arthur Heymans arthur@aheymans.xyz Reviewed-on: https://review.coreboot.org/c/coreboot/+/64802 Reviewed-by: Patrick Rudolph siro@das-labor.org Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M src/cpu/x86/mp_init.c M src/cpu/x86/smm/smm_module_loader.c M src/include/cpu/x86/smm.h 3 files changed, 31 insertions(+), 20 deletions(-)
Approvals: build bot (Jenkins): Verified Patrick Rudolph: Looks good to me, approved
diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c index 01ca64e..df6bc4b 100644 --- a/src/cpu/x86/mp_init.c +++ b/src/cpu/x86/mp_init.c @@ -744,16 +744,6 @@ } }
-static void adjust_smm_apic_id_map(struct smm_loader_params *smm_params) -{ - struct smm_stub_params *stub_params = smm_params->stub_params; - - int i = 0; - for (struct device *dev = g_cpu_bus->children; dev; dev = dev->sibling) - if (dev->enabled) - stub_params->apic_id_to_cpu[i++] = dev->path.apic.initial_lapicid; -} - static enum cb_err install_relocation_handler(int num_cpus, size_t save_state_size) { if (CONFIG(X86_SMM_SKIP_RELOCATION_HANDLER)) @@ -770,7 +760,6 @@ printk(BIOS_ERR, "%s: smm setup failed\n", __func__); return CB_ERR; } - adjust_smm_apic_id_map(&smm_params);
return CB_SUCCESS; } @@ -796,8 +785,6 @@ if (smm_load_module(smbase, smsize, &smm_params)) return CB_ERR;
- adjust_smm_apic_id_map(&smm_params); - return CB_SUCCESS; }
diff --git a/src/cpu/x86/smm/smm_module_loader.c b/src/cpu/x86/smm/smm_module_loader.c index 6cd9956..47a2831 100644 --- a/src/cpu/x86/smm/smm_module_loader.c +++ b/src/cpu/x86/smm/smm_module_loader.c @@ -5,7 +5,9 @@ #include <commonlib/helpers.h> #include <commonlib/region.h> #include <console/console.h> +#include <cpu/cpu.h> #include <cpu/x86/smm.h> +#include <device/device.h> #include <rmodule.h> #include <stdio.h> #include <string.h> @@ -267,12 +269,21 @@ stub_params->fxsave_area = (uintptr_t)fxsave_area; stub_params->fxsave_area_size = FXSAVE_SIZE;
- /* Initialize the APIC id to CPU number table to be 1:1 */ - for (int i = 0; i < params->num_cpus; i++) - stub_params->apic_id_to_cpu[i] = i; + /* This runs on the BSP. All the APs are its siblings */ + struct cpu_info *info = cpu_info(); + if (!info || !info->cpu) { + printk(BIOS_ERR, "%s: Failed to find BSP struct device\n", __func__); + return -1; + } + int i = 0; + for (struct device *dev = info->cpu; dev; dev = dev->sibling) + if (dev->enabled) + stub_params->apic_id_to_cpu[i++] = dev->path.apic.initial_lapicid;
- /* Allow the initiator to manipulate SMM stub parameters. */ - params->stub_params = stub_params; + if (i != params->num_cpus) { + printk(BIOS_ERR, "%s: Failed to set up apic map correctly\n", __func__); + return -1; + }
printk(BIOS_DEBUG, "%s: stack_top = 0x%x\n", __func__, stub_params->stack_top); printk(BIOS_DEBUG, "%s: per cpu stack_size = 0x%x\n", __func__, diff --git a/src/include/cpu/x86/smm.h b/src/include/cpu/x86/smm.h index efafa53..4c97f21 100644 --- a/src/include/cpu/x86/smm.h +++ b/src/include/cpu/x86/smm.h @@ -156,8 +156,6 @@ size_t num_concurrent_save_states;
smm_handler_t handler; - - struct smm_stub_params *stub_params; };
/* All of these return 0 on success, < 0 on failure. */