aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/amd/agesa/cache_as_ram.S25
-rw-r--r--src/drivers/amd/agesa/romstage.c19
-rw-r--r--src/include/bootblock_common.h3
-rw-r--r--src/include/cpu/amd/car.h9
4 files changed, 30 insertions, 26 deletions
diff --git a/src/drivers/amd/agesa/cache_as_ram.S b/src/drivers/amd/agesa/cache_as_ram.S
index e86830f5f7..4417e64595 100644
--- a/src/drivers/amd/agesa/cache_as_ram.S
+++ b/src/drivers/amd/agesa/cache_as_ram.S
@@ -30,9 +30,6 @@
_cache_as_ram_setup:
- /* Preserve BIST. */
- movd %eax, %mm0
-
post_code(0xa0)
AMD_ENABLE_STACK
@@ -50,16 +47,16 @@ _cache_as_ram_setup:
mov $_ecar_stack, %esp
- /* Align the stack. */
- and $0xFFFFFFF0, %esp
+ /* Align the stack and keep aligned for call to bootblock_c_entry() */
+ and $0xfffffff0, %esp
+ sub $8, %esp
+
+ pushl $0 /* tsc[63:32] */
+ pushl $0 /* tsc[31:0] */
+
+ post_code(0xa2)
- /* Must maintain 16-byte stack alignment here. */
- pushl $0x0
- pushl $0x0
- pushl $0x0
- movd %mm0, %eax /* bist */
- pushl %eax
- call romstage_main
+ call bootblock_c_entry
/* Never reached. */
@@ -69,9 +66,9 @@ stop:
jmp stop
ap_entry:
- /* Align the stack for call to ap_romstage_main() */
+ /* Align the stack for call to ap_bootblock_c_entry() */
and $0xfffffff0, %esp
- call ap_romstage_main
+ call ap_bootblock_c_entry
/* Never reached. */
jmp stop
diff --git a/src/drivers/amd/agesa/romstage.c b/src/drivers/amd/agesa/romstage.c
index 571397fdb3..48a81c57df 100644
--- a/src/drivers/amd/agesa/romstage.c
+++ b/src/drivers/amd/agesa/romstage.c
@@ -14,8 +14,8 @@
#include <arch/acpi.h>
#include <arch/cpu.h>
#include <arch/romstage.h>
+#include <bootblock_common.h>
#include <cbmem.h>
-#include <cpu/amd/car.h>
#include <console/console.h>
#include <halt.h>
#include <program_loading.h>
@@ -39,7 +39,7 @@ static void fill_sysinfo(struct sysinfo *cb)
agesa_set_interface(cb);
}
-asmlinkage void romstage_main(unsigned long bist)
+static void romstage_main(void)
{
struct postcar_frame pcf;
struct sysinfo romstage_state;
@@ -99,7 +99,7 @@ asmlinkage void romstage_main(unsigned long bist)
/* We do not return. */
}
-asmlinkage void ap_romstage_main(void)
+static void ap_romstage_main(void)
{
struct sysinfo romstage_state;
struct sysinfo *cb = &romstage_state;
@@ -116,3 +116,16 @@ asmlinkage void ap_romstage_main(void)
/* Not reached. */
halt();
}
+
+/* This wrapper enables easy transition away from ROMCC_BOOTBLOCK
+ * keeping changes in cache_as_ram.S easy to manage.
+ */
+asmlinkage void bootblock_c_entry(uint64_t base_timestamp)
+{
+ romstage_main();
+}
+
+asmlinkage void ap_bootblock_c_entry(void)
+{
+ ap_romstage_main();
+}
diff --git a/src/include/bootblock_common.h b/src/include/bootblock_common.h
index 1081f27453..eb9c24c75d 100644
--- a/src/include/bootblock_common.h
+++ b/src/include/bootblock_common.h
@@ -38,6 +38,9 @@ void bootblock_soc_init(void);
asmlinkage void bootblock_c_entry(uint64_t base_timestamp);
asmlinkage void bootblock_c_entry_bist(uint64_t base_timestamp, uint32_t bist);
+/* To be used when APs execute through bootblock too. */
+asmlinkage void ap_bootblock_c_entry(void);
+
void bootblock_main_with_basetime(uint64_t base_timestamp);
/* This is the argument structure passed from decompressor to bootblock. */
diff --git a/src/include/cpu/amd/car.h b/src/include/cpu/amd/car.h
deleted file mode 100644
index f57ea82ad0..0000000000
--- a/src/include/cpu/amd/car.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _CPU_AMD_CAR_H
-#define _CPU_AMD_CAR_H
-
-#include <arch/cpu.h>
-
-asmlinkage void romstage_main(unsigned long bist);
-asmlinkage void ap_romstage_main(void);
-
-#endif