From 36afd451361dd4386c5527154d94bff4c6c538da Mon Sep 17 00:00:00 2001 From: Nikita Kiryanov Date: Sun, 8 Nov 2015 17:11:49 +0200 Subject: spl: change return values of spl_*_load_image() Make spl_*_load_image() functions return a value instead of hanging if a problem is encountered. This enables main spl code to make the decision whether to hang or not, thus preparing it to support alternative boot devices. Some boot devices (namely nand and spi) do not hang on error. Instead, they return normally and SPL proceeds to boot the contents of the load address. This is considered a bug and is rectified by hanging on error for these devices as well. Signed-off-by: Nikita Kiryanov Cc: Igor Grinberg Cc: Tom Rini Cc: Simon Glass Cc: Ian Campbell Cc: Hans De Goede Cc: Albert Aribaud Cc: Jagan Teki Reviewed-by: Tom Rini Reviewed-by: Simon Glass --- arch/arm/cpu/armv7/sunxi/board.c | 4 +++- arch/arm/include/asm/spl.h | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'arch/arm') diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c index 4785ac68a9..9b5c46b354 100644 --- a/arch/arm/cpu/armv7/sunxi/board.c +++ b/arch/arm/cpu/armv7/sunxi/board.c @@ -95,10 +95,12 @@ static int gpio_init(void) return 0; } -void spl_board_load_image(void) +int spl_board_load_image(void) { debug("Returning to FEL sp=%x, lr=%x\n", fel_stash.sp, fel_stash.lr); return_to_fel(fel_stash.sp, fel_stash.lr); + + return 0; } void s_init(void) diff --git a/arch/arm/include/asm/spl.h b/arch/arm/include/asm/spl.h index 6db405d7d9..5c5d33f0bd 100644 --- a/arch/arm/include/asm/spl.h +++ b/arch/arm/include/asm/spl.h @@ -31,8 +31,14 @@ enum { }; #endif -/* Board-specific load method */ -void spl_board_load_image(void); +/** + * Board specific load method for boards that have a special way of loading + * U-Boot, which does not fit with the existing SPL code. + * + * @return 0 on success, negative errno value on failure. + */ + +int spl_board_load_image(void); /* Linker symbols. */ extern char __bss_start[], __bss_end[]; -- cgit v1.2.1