intel/stm: Place resource list right below MSEG
Suggested by Nico Huber in CB:38765. This placement makes the address calculation simpler and makes its location indepedent of the number of CPUs. As part of the change in the BIOS resource list address calculation, the `size` variable was factored out of the conditional in line 361, thus eliminating the else. Change-Id: I9ee2747474df02b0306530048bdec75e95413b5d Signed-off-by: Eugene D Myers <cedarhouse@comcast.net> Reviewed-on: https://review.coreboot.org/c/coreboot/+/40437 Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
7bab4c90a7
commit
076605bc92
|
@ -307,13 +307,13 @@ int smm_setup_relocation_handler(struct smm_loader_params *params)
|
|||
/* The SMM module is placed within the provided region in the following
|
||||
* manner:
|
||||
* +-----------------+ <- smram + size
|
||||
* | stacks |
|
||||
* +-----------------+ <- smram + size - total_stack_size
|
||||
* | fxsave area |
|
||||
* +-----------------+ <- smram + size - total_stack_size - fxsave_size
|
||||
* | BIOS resource |
|
||||
* | list (STM) |
|
||||
* +-----------------+ <- .. - CONFIG_BIOS_RESOURCE_LIST_SIZE
|
||||
* +-----------------+ <- smram + size - CONFIG_BIOS_RESOURCE_LIST_SIZE
|
||||
* | stacks |
|
||||
* +-----------------+ <- .. - total_stack_size
|
||||
* | fxsave area |
|
||||
* +-----------------+ <- .. - total_stack_size - fxsave_size
|
||||
* | ... |
|
||||
* +-----------------+ <- smram + handler_size + SMM_DEFAULT_SIZE
|
||||
* | handler |
|
||||
|
@ -354,11 +354,10 @@ int smm_load_module(void *smram, size_t size, struct smm_loader_params *params)
|
|||
|
||||
/* Stacks start at the top of the region. */
|
||||
base = smram;
|
||||
base += size;
|
||||
|
||||
if (CONFIG(STM))
|
||||
base += size - CONFIG_MSEG_SIZE; // take out the mseg
|
||||
else
|
||||
base += size;
|
||||
base -= CONFIG_MSEG_SIZE + CONFIG_BIOS_RESOURCE_LIST_SIZE;
|
||||
|
||||
params->stack_top = base;
|
||||
|
||||
|
@ -388,9 +387,6 @@ int smm_load_module(void *smram, size_t size, struct smm_loader_params *params)
|
|||
/* Does the required amount of memory exceed the SMRAM region size? */
|
||||
total_size = total_stack_size + handler_size;
|
||||
total_size += fxsave_size + SMM_DEFAULT_SIZE;
|
||||
/* Account for the BIOS resource list */
|
||||
if (CONFIG(STM))
|
||||
total_size += CONFIG_BIOS_RESOURCE_LIST_SIZE;
|
||||
|
||||
if (total_size > size)
|
||||
return -1;
|
||||
|
|
|
@ -177,12 +177,7 @@ void stm_setup(uintptr_t mseg, int cpu, int num_cpus, uintptr_t smbase,
|
|||
|
||||
// need to create the BIOS resource list once
|
||||
// first calculate the location in SMRAM
|
||||
addr_calc = (mseg - (CONFIG_SMM_MODULE_STACK_SIZE * num_cpus));
|
||||
|
||||
if (CONFIG(SSE))
|
||||
addr_calc -= FXSAVE_SIZE * num_cpus;
|
||||
|
||||
addr_calc -= CONFIG_BIOS_RESOURCE_LIST_SIZE;
|
||||
addr_calc = mseg - CONFIG_BIOS_RESOURCE_LIST_SIZE;
|
||||
stm_resource_heap = (uint8_t *) addr_calc;
|
||||
printk(BIOS_DEBUG, "STM: stm_resource_heap located at %p\n",
|
||||
stm_resource_heap);
|
||||
|
|
Loading…
Reference in New Issue