diff options
-rw-r--r-- | src/drivers/amd/agesa/cache_as_ram.S | 25 | ||||
-rw-r--r-- | src/drivers/amd/agesa/romstage.c | 19 | ||||
-rw-r--r-- | src/include/bootblock_common.h | 3 | ||||
-rw-r--r-- | src/include/cpu/amd/car.h | 9 |
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 |