aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/x86/mp_init.c4
-rw-r--r--src/cpu/x86/smm/smm_module_loader.c3
-rw-r--r--src/cpu/x86/smm/smm_module_loaderv2.c3
-rw-r--r--src/cpu/x86/smm/smm_stub.S11
-rw-r--r--src/include/cpu/x86/smm.h15
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 */