cpu/x86/smm_stub.S: Drop smm_runtime from the stub

The parameters that the permanent handler requires are pushed directly
to the permanent handlers relocatable module params.

The paremeters that the relocation handler requires are not passed on
via arguments but are copied inside the ramstage. This is ok as the
relocation handler calls into ramstage.

Change-Id: Ice311d05e2eb0e95122312511d83683d7f0dee58
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/50767
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Arthur Heymans
2021-02-15 16:43:19 +01:00
committed by Patrick Georgi
parent 6f9b1a9049
commit 50e849fc9b
5 changed files with 2 additions and 48 deletions

View File

@ -709,15 +709,12 @@ static void smm_enable(void)
static void asmlinkage smm_do_relocation(void *arg)
{
const struct smm_module_params *p;
const struct smm_runtime *runtime;
int cpu;
uintptr_t curr_smbase;
const uintptr_t curr_smbase = SMM_DEFAULT_BASE;
uintptr_t perm_smbase;
p = arg;
runtime = p->runtime;
cpu = p->cpu;
curr_smbase = runtime->smbase;
if (cpu >= CONFIG_MAX_CPUS) {
printk(BIOS_CRIT,

View File

@ -251,11 +251,6 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size,
stub_params->c_handler = (uintptr_t)params->handler;
stub_params->fxsave_area = (uintptr_t)fxsave_area;
stub_params->fxsave_area_size = FXSAVE_SIZE;
stub_params->runtime.smbase = (uintptr_t)smbase;
stub_params->runtime.smm_size = smm_size;
stub_params->runtime.save_state_size = params->per_cpu_save_state_size;
stub_params->runtime.num_cpus = params->num_concurrent_stacks;
stub_params->runtime.gnvs_ptr = (uintptr_t)acpi_get_gnvs();
/* Initialize the APIC id to CPU number table to be 1:1 */
for (i = 0; i < params->num_concurrent_stacks; i++)

View File

@ -342,7 +342,6 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size,
size_t i;
struct smm_stub_params *stub_params;
struct rmodule smm_stub;
unsigned int total_size_all;
base = smbase;
size = smm_size;
@ -431,11 +430,6 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size,
stub_params->c_handler = (uintptr_t)params->handler;
stub_params->fxsave_area = (uintptr_t)fxsave_area;
stub_params->fxsave_area_size = FXSAVE_SIZE;
stub_params->runtime.smbase = (uintptr_t)smbase;
stub_params->runtime.smm_size = smm_size;
stub_params->runtime.save_state_size = params->per_cpu_save_state_size;
stub_params->runtime.num_cpus = params->num_concurrent_stacks;
stub_params->runtime.gnvs_ptr = (uintptr_t)acpi_get_gnvs();
printk(BIOS_DEBUG, "%s: stack_end = 0x%lx\n",
__func__, stub_params->stack_top - total_stack_size);
@ -443,24 +437,10 @@ static int smm_module_setup_stub(void *smbase, size_t smm_size,
"%s: stack_top = 0x%x\n", __func__, stub_params->stack_top);
printk(BIOS_DEBUG, "%s: stack_size = 0x%x\n",
__func__, stub_params->stack_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->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",
__func__, stub_params->runtime.save_state_size);
printk(BIOS_DEBUG, "%s: num_cpus = 0x%x\n", __func__,
stub_params->runtime.num_cpus);
printk(BIOS_DEBUG, "%s: total_save_state_size = 0x%x\n",
__func__, (stub_params->runtime.save_state_size *
stub_params->runtime.num_cpus));
total_size_all = stub_params->stack_size +
(stub_params->runtime.save_state_size *
stub_params->runtime.num_cpus);
printk(BIOS_DEBUG, "%s: total_size_all = 0x%x\n", __func__,
total_size_all);
/* Initialize the APIC id to CPU number table to be 1:1 */
for (i = 0; i < params->num_concurrent_stacks; i++)

View File

@ -34,20 +34,6 @@ apic_to_cpu_num:
start32_offset:
.long smm_trampoline32 - _start
/* struct smm_runtime begins here. */
smm_runtime:
smbase:
.long 0
smm_size:
.long 0
save_state_size:
.long 0
num_cpus:
.long 0
gnvs_ptr:
.long 0
/* end struct smm_runtime */
.data
/* Provide fallback stack to use when a valid CPU number cannot be found. */
fallback_stack_bottom:
@ -200,9 +186,7 @@ smm_trampoline32:
* c_handler(&arg)
*/
#ifdef __x86_64__
push $0x0 /* Padding */
push %rbx /* uintptr_t *canary */
push $(smm_runtime)
push %rcx /* size_t cpu */
mov %rsp, %rdi /* *arg */
@ -228,8 +212,8 @@ smm_trampoline32:
wrmsr
#else
push $0x0 /* Padding */
push %ebx /* uintptr_t *canary */
push $(smm_runtime)
push %ecx /* size_t cpu */
push %esp /* smm_module_params *arg (allocated on stack). */
mov c_handler, %eax