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>
This commit is contained in:
parent
823b1a8270
commit
1dfa46ecfd
|
@ -686,6 +686,7 @@ struct mp_state {
|
||||||
uintptr_t perm_smbase;
|
uintptr_t perm_smbase;
|
||||||
size_t perm_smsize;
|
size_t perm_smsize;
|
||||||
size_t smm_save_state_size;
|
size_t smm_save_state_size;
|
||||||
|
uintptr_t reloc_start32_offset;
|
||||||
int do_smm;
|
int do_smm;
|
||||||
} mp_state;
|
} mp_state;
|
||||||
|
|
||||||
|
@ -755,7 +756,7 @@ static void asmlinkage smm_do_relocation(void *arg)
|
||||||
stm_setup(mseg, p->cpu,
|
stm_setup(mseg, p->cpu,
|
||||||
perm_smbase,
|
perm_smbase,
|
||||||
mp_state.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);
|
adjust_smm_apic_id_map(&smm_params);
|
||||||
|
|
||||||
|
mp_state.reloc_start32_offset = smm_params.stub_params->start32_offset;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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",
|
printk(BIOS_DEBUG, "%s: runtime.smbase = 0x%x\n",
|
||||||
__func__, stub_params->runtime.smbase);
|
__func__, stub_params->runtime.smbase);
|
||||||
printk(BIOS_DEBUG, "%s: runtime.start32_offset = 0x%x\n", __func__,
|
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",
|
printk(BIOS_DEBUG, "%s: runtime.smm_size = 0x%zx\n",
|
||||||
__func__, smm_size);
|
__func__, smm_size);
|
||||||
printk(BIOS_DEBUG, "%s: per_cpu_save_state_size = 0x%x\n",
|
printk(BIOS_DEBUG, "%s: per_cpu_save_state_size = 0x%x\n",
|
||||||
|
|
|
@ -30,6 +30,9 @@ fxsave_area_size:
|
||||||
* into the table. */
|
* into the table. */
|
||||||
apic_to_cpu_num:
|
apic_to_cpu_num:
|
||||||
.fill CONFIG_MAX_CPUS,1,0xff
|
.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. */
|
/* struct smm_runtime begins here. */
|
||||||
smm_runtime:
|
smm_runtime:
|
||||||
|
@ -43,9 +46,6 @@ num_cpus:
|
||||||
.long 0
|
.long 0
|
||||||
gnvs_ptr:
|
gnvs_ptr:
|
||||||
.long 0
|
.long 0
|
||||||
/* allows the STM to bring up SMM in 32-bit mode */
|
|
||||||
start32_offset:
|
|
||||||
.long smm_trampoline32 - _start
|
|
||||||
/* end struct smm_runtime */
|
/* end struct smm_runtime */
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
|
@ -60,8 +60,6 @@ struct smm_runtime {
|
||||||
u32 save_state_size;
|
u32 save_state_size;
|
||||||
u32 num_cpus;
|
u32 num_cpus;
|
||||||
u32 gnvs_ptr;
|
u32 gnvs_ptr;
|
||||||
/* STM's 32bit entry into SMI handler */
|
|
||||||
u32 start32_offset;
|
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct smm_module_params {
|
struct smm_module_params {
|
||||||
|
@ -88,6 +86,8 @@ struct smm_stub_params {
|
||||||
* contiguous like the 1:1 mapping it is up to the caller of the stub
|
* contiguous like the 1:1 mapping it is up to the caller of the stub
|
||||||
* loader to adjust this mapping. */
|
* loader to adjust this mapping. */
|
||||||
u8 apic_id_to_cpu[CONFIG_MAX_CPUS];
|
u8 apic_id_to_cpu[CONFIG_MAX_CPUS];
|
||||||
|
/* STM's 32bit entry into SMI handler */
|
||||||
|
u32 start32_offset;
|
||||||
struct smm_runtime runtime;
|
struct smm_runtime runtime;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue