cpu/x86/smm: Move apic_id_to_cpu map to smm_stub params
This is only consumed by the stub and not by the relocation handler or the permanent handler, so move it out of the runtime struct. Change-Id: I01ed0a412c23c8a82d88408be058a27e55d0dc4d Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/50762 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
166d2ac901
commit
ed4be45d58
@ -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)
|
static void adjust_smm_apic_id_map(struct smm_loader_params *smm_params)
|
||||||
{
|
{
|
||||||
int i;
|
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++)
|
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)
|
static int install_relocation_handler(int num_cpus, size_t save_state_size)
|
||||||
|
@ -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 */
|
/* Initialize the APIC id to CPU number table to be 1:1 */
|
||||||
for (i = 0; i < params->num_concurrent_stacks; i++)
|
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. */
|
/* Allow the initiator to manipulate SMM stub parameters. */
|
||||||
|
params->stub_params = stub_params;
|
||||||
params->runtime = &stub_params->runtime;
|
params->runtime = &stub_params->runtime;
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "SMM Module: stub loaded at %p. Will call %p\n",
|
printk(BIOS_DEBUG, "SMM Module: stub loaded at %p. Will call %p\n",
|
||||||
|
@ -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 */
|
/* Initialize the APIC id to CPU number table to be 1:1 */
|
||||||
for (i = 0; i < params->num_concurrent_stacks; i++)
|
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. */
|
/* Allow the initiator to manipulate SMM stub parameters. */
|
||||||
|
params->stub_params = stub_params;
|
||||||
params->runtime = &stub_params->runtime;
|
params->runtime = &stub_params->runtime;
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "SMM Module: stub loaded at %p. Will call %p\n",
|
printk(BIOS_DEBUG, "SMM Module: stub loaded at %p. Will call %p\n",
|
||||||
|
@ -25,6 +25,12 @@ fxsave_area:
|
|||||||
.long 0
|
.long 0
|
||||||
fxsave_area_size:
|
fxsave_area_size:
|
||||||
.long 0
|
.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. */
|
/* struct smm_runtime begins here. */
|
||||||
smm_runtime:
|
smm_runtime:
|
||||||
smbase:
|
smbase:
|
||||||
@ -40,11 +46,6 @@ gnvs_ptr:
|
|||||||
/* allows the STM to bring up SMM in 32-bit mode */
|
/* allows the STM to bring up SMM in 32-bit mode */
|
||||||
start32_offset:
|
start32_offset:
|
||||||
.long smm_trampoline32 - _start
|
.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 */
|
/* end struct smm_runtime */
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
@ -62,13 +62,6 @@ struct smm_runtime {
|
|||||||
u32 gnvs_ptr;
|
u32 gnvs_ptr;
|
||||||
/* STM's 32bit entry into SMI handler */
|
/* STM's 32bit entry into SMI handler */
|
||||||
u32 start32_offset;
|
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;
|
} __packed;
|
||||||
|
|
||||||
struct smm_module_params {
|
struct smm_module_params {
|
||||||
@ -88,6 +81,13 @@ struct smm_stub_params {
|
|||||||
u32 c_handler;
|
u32 c_handler;
|
||||||
u32 fxsave_area;
|
u32 fxsave_area;
|
||||||
u32 fxsave_area_size;
|
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;
|
struct smm_runtime runtime;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
@ -150,6 +150,7 @@ struct smm_loader_params {
|
|||||||
|
|
||||||
smm_handler_t handler;
|
smm_handler_t handler;
|
||||||
|
|
||||||
|
struct smm_stub_params *stub_params;
|
||||||
struct smm_runtime *runtime;
|
struct smm_runtime *runtime;
|
||||||
|
|
||||||
/* The following are only used by X86_SMM_LOADER_VERSION2 */
|
/* The following are only used by X86_SMM_LOADER_VERSION2 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user