diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cpu/x86/mp_init.c | 4 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_module_loader.c | 3 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_module_loaderv2.c | 3 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_stub.S | 11 | ||||
-rw-r--r-- | src/include/cpu/x86/smm.h | 15 |
5 files changed, 20 insertions, 16 deletions
diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c index 3edb5e7693..0693bc712a 100644 --- a/src/cpu/x86/mp_init.c +++ b/src/cpu/x86/mp_init.c @@ -762,10 +762,10 @@ static void asmlinkage smm_do_relocation(void *arg) static void adjust_smm_apic_id_map(struct smm_loader_params *smm_params) { int i; - struct smm_runtime *runtime = smm_params->runtime; + struct smm_stub_params *stub_params = smm_params->stub_params; for (i = 0; i < CONFIG_MAX_CPUS; i++) - runtime->apic_id_to_cpu[i] = cpu_get_apic_id(i); + stub_params->apic_id_to_cpu[i] = cpu_get_apic_id(i); } static int install_relocation_handler(int num_cpus, size_t save_state_size) diff --git a/src/cpu/x86/smm/smm_module_loader.c b/src/cpu/x86/smm/smm_module_loader.c index d799ae2805..16feeb6c6e 100644 --- a/src/cpu/x86/smm/smm_module_loader.c +++ b/src/cpu/x86/smm/smm_module_loader.c @@ -259,9 +259,10 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size, /* Initialize the APIC id to CPU number table to be 1:1 */ for (i = 0; i < params->num_concurrent_stacks; i++) - stub_params->runtime.apic_id_to_cpu[i] = i; + stub_params->apic_id_to_cpu[i] = i; /* Allow the initiator to manipulate SMM stub parameters. */ + params->stub_params = stub_params; params->runtime = &stub_params->runtime; printk(BIOS_DEBUG, "SMM Module: stub loaded at %p. Will call %p\n", diff --git a/src/cpu/x86/smm/smm_module_loaderv2.c b/src/cpu/x86/smm/smm_module_loaderv2.c index be0e23d50c..81d85c6f92 100644 --- a/src/cpu/x86/smm/smm_module_loaderv2.c +++ b/src/cpu/x86/smm/smm_module_loaderv2.c @@ -464,9 +464,10 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size, /* Initialize the APIC id to CPU number table to be 1:1 */ for (i = 0; i < params->num_concurrent_stacks; i++) - stub_params->runtime.apic_id_to_cpu[i] = i; + stub_params->apic_id_to_cpu[i] = i; /* Allow the initiator to manipulate SMM stub parameters. */ + params->stub_params = stub_params; params->runtime = &stub_params->runtime; printk(BIOS_DEBUG, "SMM Module: stub loaded at %p. Will call %p\n", diff --git a/src/cpu/x86/smm/smm_stub.S b/src/cpu/x86/smm/smm_stub.S index b9b0670ef6..24cb684e10 100644 --- a/src/cpu/x86/smm/smm_stub.S +++ b/src/cpu/x86/smm/smm_stub.S @@ -25,6 +25,12 @@ fxsave_area: .long 0 fxsave_area_size: .long 0 +/* apic_to_cpu_num is a table mapping the default APIC id to CPU num. If the + * APIC id is found at the given index, the contiguous CPU number is index + * into the table. */ +apic_to_cpu_num: +.fill CONFIG_MAX_CPUS,1,0xff + /* struct smm_runtime begins here. */ smm_runtime: smbase: @@ -40,11 +46,6 @@ gnvs_ptr: /* allows the STM to bring up SMM in 32-bit mode */ start32_offset: .long smm_trampoline32 - _start -/* apic_to_cpu_num is a table mapping the default APIC id to CPU num. If the - * APIC id is found at the given index, the contiguous CPU number is index - * into the table. */ -apic_to_cpu_num: -.fill CONFIG_MAX_CPUS,1,0xff /* end struct smm_runtime */ .data diff --git a/src/include/cpu/x86/smm.h b/src/include/cpu/x86/smm.h index 692da5c7d7..badcb394c7 100644 --- a/src/include/cpu/x86/smm.h +++ b/src/include/cpu/x86/smm.h @@ -62,13 +62,6 @@ struct smm_runtime { u32 gnvs_ptr; /* STM's 32bit entry into SMI handler */ u32 start32_offset; - /* The apic_id_to_cpu provides a mapping from APIC id to CPU number. - * The CPU number is indicated by the index into the array by matching - * the default APIC id and value at the index. The stub loader - * initializes this array with a 1:1 mapping. If the APIC ids are not - * contiguous like the 1:1 mapping it is up to the caller of the stub - * loader to adjust this mapping. */ - u8 apic_id_to_cpu[CONFIG_MAX_CPUS]; } __packed; struct smm_module_params { @@ -88,6 +81,13 @@ struct smm_stub_params { u32 c_handler; u32 fxsave_area; u32 fxsave_area_size; + /* The apic_id_to_cpu provides a mapping from APIC id to CPU number. + * The CPU number is indicated by the index into the array by matching + * the default APIC id and value at the index. The stub loader + * initializes this array with a 1:1 mapping. If the APIC ids are not + * contiguous like the 1:1 mapping it is up to the caller of the stub + * loader to adjust this mapping. */ + u8 apic_id_to_cpu[CONFIG_MAX_CPUS]; struct smm_runtime runtime; } __packed; @@ -150,6 +150,7 @@ struct smm_loader_params { smm_handler_t handler; + struct smm_stub_params *stub_params; struct smm_runtime *runtime; /* The following are only used by X86_SMM_LOADER_VERSION2 */ |