diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2021-02-15 16:19:33 +0100 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2021-03-19 11:29:20 +0000 |
commit | 1dfa46ecfd6c0bcbfb10d6e3c051806f5e62c2ff (patch) | |
tree | f94420698b469a41f7ede3144cfd2210402082fd /src/cpu | |
parent | 823b1a827046ccfc00835bfbce95824dd644e9f9 (diff) |
cpu/x86/mp_init.c: Copy the stub parameter start32_offset into ramstage
Keep a copy of start32_offset into ramstage to avoid needing to pass
arguments, calling from assembly. Doing this in C code is better than
assembly.
Change-Id: Iac04358e377026f45293bbee03e30d792df407fd
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/50765
Reviewed-by: Eugene Myers <cedarhouse1@comcast.net>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/x86/mp_init.c | 5 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_module_loaderv2.c | 2 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_stub.S | 6 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c index e70c142cc5..26b1ccabe2 100644 --- a/src/cpu/x86/mp_init.c +++ b/src/cpu/x86/mp_init.c @@ -686,6 +686,7 @@ struct mp_state { uintptr_t perm_smbase; size_t perm_smsize; size_t smm_save_state_size; + uintptr_t reloc_start32_offset; int do_smm; } mp_state; @@ -755,7 +756,7 @@ static void asmlinkage smm_do_relocation(void *arg) stm_setup(mseg, p->cpu, perm_smbase, mp_state.perm_smbase, - runtime->start32_offset); + mp_state.reloc_start32_offset); } } @@ -796,6 +797,8 @@ static int install_relocation_handler(int num_cpus, size_t save_state_size) } adjust_smm_apic_id_map(&smm_params); + mp_state.reloc_start32_offset = smm_params.stub_params->start32_offset; + return 0; } diff --git a/src/cpu/x86/smm/smm_module_loaderv2.c b/src/cpu/x86/smm/smm_module_loaderv2.c index 810df83d57..2f4e88e6f6 100644 --- a/src/cpu/x86/smm/smm_module_loaderv2.c +++ b/src/cpu/x86/smm/smm_module_loaderv2.c @@ -446,7 +446,7 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size, printk(BIOS_DEBUG, "%s: runtime.smbase = 0x%x\n", __func__, stub_params->runtime.smbase); printk(BIOS_DEBUG, "%s: runtime.start32_offset = 0x%x\n", __func__, - stub_params->runtime.start32_offset); + stub_params->start32_offset); printk(BIOS_DEBUG, "%s: runtime.smm_size = 0x%zx\n", __func__, smm_size); printk(BIOS_DEBUG, "%s: per_cpu_save_state_size = 0x%x\n", diff --git a/src/cpu/x86/smm/smm_stub.S b/src/cpu/x86/smm/smm_stub.S index 24cb684e10..10560b1593 100644 --- a/src/cpu/x86/smm/smm_stub.S +++ b/src/cpu/x86/smm/smm_stub.S @@ -30,6 +30,9 @@ fxsave_area_size: * into the table. */ apic_to_cpu_num: .fill CONFIG_MAX_CPUS,1,0xff +/* allows the STM to bring up SMM in 32-bit mode */ +start32_offset: +.long smm_trampoline32 - _start /* struct smm_runtime begins here. */ smm_runtime: @@ -43,9 +46,6 @@ num_cpus: .long 0 gnvs_ptr: .long 0 -/* allows the STM to bring up SMM in 32-bit mode */ -start32_offset: -.long smm_trampoline32 - _start /* end struct smm_runtime */ .data |