aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/amd/car/cache_as_ram.inc13
-rw-r--r--src/cpu/amd/car/post_cache_as_ram.c8
-rw-r--r--src/include/cpu/amd/car.h6
3 files changed, 8 insertions, 19 deletions
diff --git a/src/cpu/amd/car/cache_as_ram.inc b/src/cpu/amd/car/cache_as_ram.inc
index 4d70c9e6bc..6161048b29 100644
--- a/src/cpu/amd/car/cache_as_ram.inc
+++ b/src/cpu/amd/car/cache_as_ram.inc
@@ -599,21 +599,14 @@ CAR_FAM10_ap_out:
call cache_as_ram_main
call post_cache_as_ram
+ movl %eax, %esp
+
+ call cache_as_ram_new_stack
/* We will not go back. */
post_code(0xaf) /* Should never see this POST code. */
- .globl cache_as_ram_switch_stack
-
-cache_as_ram_switch_stack:
- /* Return address. */
- popl %eax
- /* New stack. */
- popl %eax
- movl %eax, %esp
- call cache_as_ram_new_stack
-
all_mtrr_msrs:
/* fixed MTRR MSRs */
.long MTRR_FIX_64K_00000
diff --git a/src/cpu/amd/car/post_cache_as_ram.c b/src/cpu/amd/car/post_cache_as_ram.c
index c647254c70..d51e431560 100644
--- a/src/cpu/amd/car/post_cache_as_ram.c
+++ b/src/cpu/amd/car/post_cache_as_ram.c
@@ -125,7 +125,7 @@ static void vErrata343(void)
wrmsr(BU_CFG2_MSR, msr);
}
-void post_cache_as_ram(void)
+asmlinkage void * post_cache_as_ram(void)
{
uint32_t family = amd_fam1x_cpu_family();
@@ -171,12 +171,10 @@ void post_cache_as_ram(void)
/* New stack grows right below migrated_car. */
print_car_debug("Switching to use RAM as stack...");
- cache_as_ram_switch_stack(migrated_car);
-
- /* We do not come back. */
+ return migrated_car;
}
-void cache_as_ram_new_stack(void)
+asmlinkage void cache_as_ram_new_stack(void)
{
print_car_debug("Disabling cache as RAM now\n");
disable_cache_as_ram_real(0); // inline
diff --git a/src/include/cpu/amd/car.h b/src/include/cpu/amd/car.h
index c4d92d93d0..288edb28c2 100644
--- a/src/include/cpu/amd/car.h
+++ b/src/include/cpu/amd/car.h
@@ -4,10 +4,8 @@
#include <arch/cpu.h>
void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx);
-void post_cache_as_ram(void);
-
-void cache_as_ram_switch_stack(void *stacktop);
-void cache_as_ram_new_stack(void);
+asmlinkage void * post_cache_as_ram(void);
+asmlinkage void cache_as_ram_new_stack(void);
void disable_cache_as_ram(void);