diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2021-05-14 11:22:31 +0200 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-04-01 22:17:19 +0000 |
commit | 5315e96abfa5b45fcd53149df5ebaa069a830558 (patch) | |
tree | 05982a517bfad414430873540a4b6b11ef3455dc | |
parent | 80783ae70ff071f92106a919809ce9ad09ec16fd (diff) |
arch/x86/postcar: Use a separate stack for C execution
Add a stack in .bss for C execution. This will make it easier to move
the setup of MTRRs in C code.
Change-Id: I67cbc988051036b1a0519cec9ed614acede31fd7
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/54298
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Subrata Banik <subratabanik@google.com>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
-rw-r--r-- | src/arch/x86/exit_car.S | 14 | ||||
-rw-r--r-- | src/drivers/intel/fsp1_1/exit_car.S | 2 | ||||
-rw-r--r-- | src/soc/intel/common/block/cpu/car/exit_car_fsp.S | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/src/arch/x86/exit_car.S b/src/arch/x86/exit_car.S index 9b89ffbdf9..d3954d365f 100644 --- a/src/arch/x86/exit_car.S +++ b/src/arch/x86/exit_car.S @@ -35,6 +35,18 @@ post_car_stack_top: .endm #endif +/* Place the stack in the bss section. It's not necessary to define it in the + * the linker script. */ + .section .bss, "aw", @nobits +.global _stack +.global _estack +.global _stack_size + +_stack: +.space CONFIG_STACK_SIZE +_estack: +.set _stack_size, _estack - _stack + .text .global _start _start: @@ -174,8 +186,10 @@ skip_clflush: wrmsr #endif /* CONFIG_SOC_SETS_MSRS */ + movl $_estack, %esp /* Align stack to 16 bytes at call instruction. */ andl $0xfffffff0, %esp + /* Call into main for postcar. */ call main /* Should never return. */ diff --git a/src/drivers/intel/fsp1_1/exit_car.S b/src/drivers/intel/fsp1_1/exit_car.S index dbdd3e60be..2671de5825 100644 --- a/src/drivers/intel/fsp1_1/exit_car.S +++ b/src/drivers/intel/fsp1_1/exit_car.S @@ -7,7 +7,7 @@ chipset_teardown_car: pop %ebx /* Move the stack pointer to real RAM */ - movl post_car_stack_top, %esp + movl _estack, %esp /* Align the stack 16 bytes */ andl $0xfffffff0, %esp diff --git a/src/soc/intel/common/block/cpu/car/exit_car_fsp.S b/src/soc/intel/common/block/cpu/car/exit_car_fsp.S index 4b906280e6..4d35447a56 100644 --- a/src/soc/intel/common/block/cpu/car/exit_car_fsp.S +++ b/src/soc/intel/common/block/cpu/car/exit_car_fsp.S @@ -17,7 +17,7 @@ chipset_teardown_car: /* Set up new stack. */ - mov post_car_stack_top, %esp + mov _estack, %esp /* Align the stack. */ andl $0xfffffff0, %esp |