From 9d0225b7fa1571ebe62f7c59ae140fd8df77a34d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pali=20Roh=C3=A1r?= Date: Fri, 23 Jul 2021 11:14:25 +0200 Subject: [PATCH] arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit U-Boot's SPL framework already has an API for loading U-Boot via BootROM. Implement the function board_return_to_bootrom() for mvebu SPL code. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Reviewed-by: Stefan Roese Reviewed-by: Chris Packham Tested-by: Chris Packham --- arch/arm/mach-mvebu/Kconfig | 4 ++++ arch/arm/mach-mvebu/spl.c | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig index 27d227d54a..12de6f1625 100644 --- a/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig @@ -257,6 +257,7 @@ config MVEBU_SPL_BOOT_DEVICE_SPI select SPL_SPI_FLASH_SUPPORT select SPL_SPI_LOAD select SPL_SPI_SUPPORT + select SPL_BOOTROM_SUPPORT config MVEBU_SPL_BOOT_DEVICE_MMC bool "SDIO/MMC card" @@ -267,14 +268,17 @@ config MVEBU_SPL_BOOT_DEVICE_MMC select SPL_GPIO select SPL_LIBDISK_SUPPORT select SPL_MMC_SUPPORT + select SPL_BOOTROM_SUPPORT config MVEBU_SPL_BOOT_DEVICE_SATA bool "SATA" select SPL_SATA_SUPPORT select SPL_LIBDISK_SUPPORT + select SPL_BOOTROM_SUPPORT config MVEBU_SPL_BOOT_DEVICE_UART bool "UART" + select SPL_BOOTROM_SUPPORT endchoice diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c index 16ebb7a59e..836eb18889 100644 --- a/arch/arm/mach-mvebu/spl.c +++ b/arch/arm/mach-mvebu/spl.c @@ -79,6 +79,18 @@ u32 spl_boot_device(void) return get_boot_device(); } +int board_return_to_bootrom(struct spl_image_info *spl_image, + struct spl_boot_device *bootdev) +{ + u32 *regs = *(u32 **)CONFIG_SPL_BOOTROM_SAVE; + + printf("Returning to BootROM (return address 0x%08x)...\n", regs[13]); + return_to_bootrom(); + + /* NOTREACHED - return_to_bootrom() does not return */ + hang(); +} + void board_init_f(ulong dummy) { int ret; -- 2.39.5