From 4f32b64e4f88038347bec1d80ee2af41470d03ca Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Fri, 5 Oct 2018 23:40:21 +0200 Subject: reset: Provide new single-function reset API board_reset() replaces the existing common reset API. There is no common distinction between reset types across platforms, hence, common code could never decide which one to call. Currently only hard_reset() is used by common code. We replace these calls and provide a fall-back to the current hard_reset() implemen- tation. The fall-back will be removed along with hard_reset() after the transition of all boards. Change-Id: I274a8cee9cb38226b5a0bdff6a847c74ef0b3128 Signed-off-by: Nico Huber Reviewed-on: https://review.coreboot.org/29047 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner Reviewed-by: Aaron Durbin --- src/lib/Kconfig | 7 +++++++ src/lib/prog_loaders.c | 3 +-- src/lib/reset.c | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Kconfig b/src/lib/Kconfig index eb4c16eb51..2f10c1ccdf 100644 --- a/src/lib/Kconfig +++ b/src/lib/Kconfig @@ -1,3 +1,10 @@ +config MISSING_BOARD_RESET + bool + help + Selected by boards that don't provide a do_board_reset() + implementation. This activates a stub that logs the missing + board reset and halts execution. + config NO_EDID_FILL_FB bool default y if !MAINBOARD_DO_NATIVE_VGA_INIT diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c index e3ddce0a5c..883dbdc7ec 100644 --- a/src/lib/prog_loaders.c +++ b/src/lib/prog_loaders.c @@ -84,8 +84,7 @@ static void ramstage_cache_invalid(void) { printk(BIOS_ERR, "ramstage cache invalid.\n"); if (IS_ENABLED(CONFIG_RESET_ON_INVALID_RAMSTAGE_CACHE)) { - hard_reset(); - halt(); + board_reset(); } } diff --git a/src/lib/reset.c b/src/lib/reset.c index d8284210c4..283f72c2bf 100644 --- a/src/lib/reset.c +++ b/src/lib/reset.c @@ -18,6 +18,30 @@ #include #include +__noreturn void board_reset(void) +{ + printk(BIOS_INFO, "%s() called!\n", __func__); + dcache_clean_all(); + do_board_reset(); + halt(); +} + +#if IS_ENABLED(CONFIG_MISSING_BOARD_RESET) +void do_board_reset(void) +{ + printk(BIOS_CRIT, "No board_reset implementation, hanging...\n"); +} +#else +/* + * Fall back to hard_reset() for a regression free transition. + * FIXME: Remove after everything is converted to board_reset(). + */ +__weak void do_board_reset(void) +{ + hard_reset(); +} +#endif + __noreturn static void __hard_reset(void) { if (IS_ENABLED(CONFIG_HAVE_HARD_RESET)) do_hard_reset(); -- cgit v1.2.3