diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2016-11-23 06:47:15 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2017-04-05 15:02:43 +0200 |
commit | ba22e159bb21549ba92eb6e9d91eaa097a54985b (patch) | |
tree | b9195d45d7e01b7f4dbe4a646ff5c274d6e1d53c /src/cpu/amd/agesa/cache_as_ram.inc | |
parent | 1779d534e5b6e01e2aabfb30aa369e0aebe28488 (diff) |
AGESA: Disable CAR with empty stack
Calling disable_cache_as_ram() with valuables in stack is not
a stable solution, as per documentation AMD_DISABLE_STACK
should destroy stack in cache.
Change-Id: I986bb7a88f53f7f7a0b05d4edcd5020f5dbeb4b7
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/18626
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/cpu/amd/agesa/cache_as_ram.inc')
-rw-r--r-- | src/cpu/amd/agesa/cache_as_ram.inc | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/src/cpu/amd/agesa/cache_as_ram.inc b/src/cpu/amd/agesa/cache_as_ram.inc index 1258d154c3..857873a682 100644 --- a/src/cpu/amd/agesa/cache_as_ram.inc +++ b/src/cpu/amd/agesa/cache_as_ram.inc @@ -26,12 +26,8 @@ #include "gcccar.inc" #include <cpu/x86/cache.h> -/* - * XMM map: - */ - .code32 -.globl cache_as_ram_setup, disable_cache_as_ram, cache_as_ram_setup_out +.globl cache_as_ram_setup, cache_as_ram_setup_out cache_as_ram_setup: @@ -110,17 +106,13 @@ cache_as_ram_setup: pushl $0x0 pushl %ebp call romstage_main + movl %eax, %ebx - /* Should never see this postcode */ - post_code(0xaf) -stop: - jmp stop +/* Register %ebx is new stacktop for remaining of romstage. + * It is the only register preserved in AMD_DISABLE_STACK. + */ disable_cache_as_ram: - /* Save return stack */ - movd 0(%esp), %xmm1 - movd %esp, %xmm0 - /* Disable cache */ movl %cr0, %eax orl $CR0_CacheDisable, %eax @@ -132,12 +124,13 @@ disable_cache_as_ram: movl %cr0, %eax andl $0x9fffffff, %eax movl %eax, %cr0 - xorl %eax, %eax - /* Restore the return stack */ - wbinvd - movd %xmm0, %esp - movd %xmm1, (%esp) - ret + movl %ebx, %esp + call romstage_after_car + + /* Should never see this postcode */ + post_code(0xaf) +stop: + jmp stop cache_as_ram_setup_out: |