summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2018-12-28 19:18:46 +0200
committerKyösti Mälkki <kyosti.malkki@gmail.com>2018-12-30 12:36:30 +0000
commitd7892bc3913fab68c880d3b7a1206b4c23d5dbe3 (patch)
tree93a092c0b95592e7a61a04c33ffb1a79c06df2b2 /src
parent1c105903078f85dd1be805c737b4e4da6dea0618 (diff)
arch/x86: Add CAR stack location symbols
Add symbols for the non C_ENVIRONMENT_BOOTBLOCK builds and use them for stack guards. Change-Id: Ib622eacb161d9a110d35a7d6979d1b601503b6f4 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/30491 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86/car.ld4
-rw-r--r--src/cpu/intel/car/romstage.c5
2 files changed, 6 insertions, 3 deletions
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld
index 86656829ab..2f0ce50e3c 100644
--- a/src/arch/x86/car.ld
+++ b/src/arch/x86/car.ld
@@ -86,6 +86,10 @@
_car_global_end = .;
_car_relocatable_data_end = .;
+#if !IS_ENABLED(CONFIG_C_ENVIRONMENT_BOOTBLOCK)
+ _car_stack_start = .;
+ _car_stack_end = _car_region_end;
+#endif
_car_region_end = . + CONFIG_DCACHE_RAM_SIZE - (. - _car_region_start);
}
diff --git a/src/cpu/intel/car/romstage.c b/src/cpu/intel/car/romstage.c
index 1109d80442..e21ea467c2 100644
--- a/src/cpu/intel/car/romstage.c
+++ b/src/cpu/intel/car/romstage.c
@@ -28,15 +28,14 @@ asmlinkage void *romstage_main(unsigned long bist)
u32 size;
/* Size of unallocated CAR. */
- size = _car_region_end - _car_relocatable_data_end;
- size = ALIGN_DOWN(size, 16);
+ size = ALIGN_DOWN(_car_stack_size, 16);
size = MIN(size, DCACHE_RAM_ROMSTAGE_STACK_SIZE);
if (size < DCACHE_RAM_ROMSTAGE_STACK_SIZE)
printk(BIOS_DEBUG, "Romstage stack size limited to 0x%x!\n",
size);
- stack_base = (u32 *) (_car_region_end - size);
+ stack_base = (u32 *) (_car_stack_end - size);
for (i = 0; i < num_guards; i++)
stack_base[i] = stack_guard;