From bab9e2e6bdf3bbfa6047773a04632e0fbdf64afb Mon Sep 17 00:00:00 2001 From: Arthur Heymans Date: Sat, 29 May 2021 07:30:33 +0200 Subject: arch/x86: Add a common romstage entry It might be possible to have this used for more than x86, but that will be for a later commit. Change-Id: I4968364a95b5c69c21d3915d302d23e6f1ca182f Signed-off-by: Arthur Heymans Reviewed-on: https://review.coreboot.org/c/coreboot/+/55067 Tested-by: build bot (Jenkins) Reviewed-by: Elyes Haouas --- src/arch/x86/Makefile.inc | 1 + src/arch/x86/romstage.c | 16 ++++++++++++++++ src/cpu/intel/car/romstage.c | 15 +++------------ src/drivers/amd/agesa/romstage.c | 13 +++---------- src/include/romstage_common.h | 8 ++++++++ src/soc/amd/cezanne/romstage.c | 11 +++-------- src/soc/amd/picasso/romstage.c | 11 +++-------- src/soc/amd/sabrina/romstage.c | 11 +++-------- src/soc/amd/stoneyridge/romstage.c | 27 +++++++++++++-------------- src/soc/example/min86/romstage.c | 7 +++++-- 10 files changed, 58 insertions(+), 62 deletions(-) create mode 100644 src/arch/x86/romstage.c create mode 100644 src/include/romstage_common.h (limited to 'src') diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc index eaced1f220..de2dc19c4e 100644 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -159,6 +159,7 @@ endif # CONFIG_ARCH_VERSTAGE_X86_32 / CONFIG_ARCH_VERSTAGE_X86_64 ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32)$(CONFIG_ARCH_ROMSTAGE_X86_64),y) romstage-y += assembly_entry.S +romstage-y += romstage.c romstage-y += boot.c romstage-$(CONFIG_DEBUG_HW_BREAKPOINTS_IN_ALL_STAGES) += breakpoint.c romstage-y += post.c diff --git a/src/arch/x86/romstage.c b/src/arch/x86/romstage.c new file mode 100644 index 0000000000..a7ee4d99b4 --- /dev/null +++ b/src/arch/x86/romstage.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +asmlinkage void car_stage_entry(void) +{ + timestamp_add_now(TS_ROMSTAGE_START); + + /* Assumes the hardware was set up during the bootblock */ + console_init(); + + romstage_main(); +} diff --git a/src/cpu/intel/car/romstage.c b/src/cpu/intel/car/romstage.c index a307893c11..a2d1a89292 100644 --- a/src/cpu/intel/car/romstage.c +++ b/src/cpu/intel/car/romstage.c @@ -7,14 +7,14 @@ #include #include #include -#include +#include #include /* If we do not have a constrained _car_stack region size, use the following as a guideline for acceptable stack usage. */ #define DCACHE_RAM_ROMSTAGE_STACK_SIZE 0x2000 -static void romstage_main(void) +void __noreturn romstage_main(void) { int i; const int num_guards = 64; @@ -54,14 +54,5 @@ static void romstage_main(void) prepare_and_run_postcar(); /* We do not return here. */ -} - -asmlinkage void car_stage_entry(void) -{ - timestamp_add_now(TS_ROMSTAGE_START); - - /* Assumes the hardware was set up during the bootblock */ - console_init(); - - romstage_main(); + die("failed to load postcar\n"); } diff --git a/src/drivers/amd/agesa/romstage.c b/src/drivers/amd/agesa/romstage.c index 35b2778e68..82ef31ebd3 100644 --- a/src/drivers/amd/agesa/romstage.c +++ b/src/drivers/amd/agesa/romstage.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -31,16 +32,12 @@ static void fill_sysinfo(struct sysinfo *cb) */ static void ap_romstage_main(void); -static void romstage_main(void) +void __noreturn romstage_main(void) { struct sysinfo romstage_state; struct sysinfo *cb = &romstage_state; int cbmem_initted = 0; - timestamp_add_now(TS_ROMSTAGE_START); - - console_init(); - printk(BIOS_DEBUG, "APIC %02u: CPU Family_Model = %08x\n", initial_lapicid(), cpuid_eax(1)); @@ -79,6 +76,7 @@ static void romstage_main(void) prepare_and_run_postcar(); /* We do not return. */ + die("failed to load postcar\n"); } static void ap_romstage_main(void) @@ -96,11 +94,6 @@ static void ap_romstage_main(void) halt(); } -asmlinkage void car_stage_entry(void) -{ - romstage_main(); -} - void *cbmem_top_chipset(void) { /* Top of CBMEM is at highest usable DRAM address below 4GiB. */ diff --git a/src/include/romstage_common.h b/src/include/romstage_common.h new file mode 100644 index 0000000000..f376864326 --- /dev/null +++ b/src/include/romstage_common.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef ROMSTAGE_COMMON_H +#define ROMSTAGE_COMMON_H + +void __noreturn romstage_main(void); + +#endif /* ROMSTAGE_COMMON_H */ diff --git a/src/soc/amd/cezanne/romstage.c b/src/soc/amd/cezanne/romstage.c index 96285710e3..7a395bdf9b 100644 --- a/src/soc/amd/cezanne/romstage.c +++ b/src/soc/amd/cezanne/romstage.c @@ -8,18 +8,12 @@ #include #include #include -#include +#include -asmlinkage void car_stage_entry(void) +void __noreturn romstage_main(void) { - timestamp_add_now(TS_ROMSTAGE_START); - post_code(0x40); - console_init(); - - post_code(0x41); - /* Snapshot chipset state prior to any FSP call */ fill_chipset_state(); @@ -31,4 +25,5 @@ asmlinkage void car_stage_entry(void) memmap_stash_early_dram_usage(); run_ramstage(); + die("failed to load ramstage\n"); } diff --git a/src/soc/amd/picasso/romstage.c b/src/soc/amd/picasso/romstage.c index 359eacf4b7..e66f423d52 100644 --- a/src/soc/amd/picasso/romstage.c +++ b/src/soc/amd/picasso/romstage.c @@ -8,19 +8,13 @@ #include #include #include -#include +#include #include -asmlinkage void car_stage_entry(void) +void __noreturn romstage_main(void) { - timestamp_add_now(TS_ROMSTAGE_START); - post_code(0x40); - console_init(); - - post_code(0x42); - /* Snapshot chipset state prior to any FSP call. */ fill_chipset_state(); @@ -33,4 +27,5 @@ asmlinkage void car_stage_entry(void) run_ramstage(); post_code(0x50); /* Should never see this post code. */ + die("failed to load ramstage\n"); } diff --git a/src/soc/amd/sabrina/romstage.c b/src/soc/amd/sabrina/romstage.c index 49ca223c60..c5dfbdaa18 100644 --- a/src/soc/amd/sabrina/romstage.c +++ b/src/soc/amd/sabrina/romstage.c @@ -10,18 +10,12 @@ #include #include #include -#include +#include -asmlinkage void car_stage_entry(void) +void __noreturn romstage_main(void) { - timestamp_add_now(TS_ROMSTAGE_START); - post_code(0x40); - console_init(); - - post_code(0x41); - /* Snapshot chipset state prior to any FSP call */ fill_chipset_state(); @@ -33,4 +27,5 @@ asmlinkage void car_stage_entry(void) memmap_stash_early_dram_usage(); run_ramstage(); + die("failed to load ramstage\n"); } diff --git a/src/soc/amd/stoneyridge/romstage.c b/src/soc/amd/stoneyridge/romstage.c index be40e2171c..973e6090c5 100644 --- a/src/soc/amd/stoneyridge/romstage.c +++ b/src/soc/amd/stoneyridge/romstage.c @@ -1,28 +1,29 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +#include #include +#include +#include #include -#include +#include #include #include -#include -#include -#include -#include -#include #include #include #include +#include +#include +#include +#include #include +#include +#include #include +#include #include -#include -#include -#include #include #include #include -#include #include #include "chip.h" @@ -47,8 +48,7 @@ static void bsp_agesa_call(void) set_ap_entry_ptr(agesa_call); /* indicate the path to the AP */ agesa_call(); } - -asmlinkage void car_stage_entry(void) +void __noreturn romstage_main(void) { msr_t base, mask; msr_t mtrr_cap = rdmsr(MTRR_CAP_MSR); @@ -56,8 +56,6 @@ asmlinkage void car_stage_entry(void) int s3_resume = acpi_is_wakeup_s3(); int i; - console_init(); - soc_enable_psp_early(); if (CONFIG(SOC_AMD_PSP_SELECTABLE_SMU_FW)) psp_load_named_blob(BLOB_SMU_FW, "smu_fw"); @@ -121,6 +119,7 @@ asmlinkage void car_stage_entry(void) post_code(0x44); prepare_and_run_postcar(); + die("failed to load postcar\n"); } void fill_postcar_frame(struct postcar_frame *pcf) diff --git a/src/soc/example/min86/romstage.c b/src/soc/example/min86/romstage.c index 91074b2012..f4c5584c30 100644 --- a/src/soc/example/min86/romstage.c +++ b/src/soc/example/min86/romstage.c @@ -1,7 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-only */ -#include +#include +#include -asmlinkage void car_stage_entry(void) +void __noreturn romstage_main(void) { + /* Needed for __noreturn */ + halt(); } -- cgit v1.2.3