aboutsummaryrefslogtreecommitdiff
path: root/src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S')
-rw-r--r--src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S b/src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S
index b9daf08b2f..e77b841612 100644
--- a/src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S
+++ b/src/soc/intel/common/block/cpu/car/cache_as_ram_fsp.S
@@ -72,6 +72,13 @@ CAR_init_done:
/* Setup bootblock stack */
mov %edx, %esp
+ /*
+ * temp_memory_start/end reside in the .bss section, which gets cleared
+ * below. Save the FSP return value to the stack before writing those
+ * variables.
+ */
+ push %ecx
+ push %edx
/* clear .bss section as it is not shared */
cld
@@ -82,6 +89,11 @@ CAR_init_done:
shrl $2, %ecx
rep stosl
+ pop %edx
+ movl %edx, temp_memory_end
+ pop %ecx
+ movl %ecx, temp_memory_start
+
/* Restore the timestamp from bootblock_crt0.S (ebp:mm1) */
push %ebp
movd %mm1, %eax