arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework
authorPali Rohár <pali@kernel.org>
Fri, 23 Jul 2021 09:14:25 +0000 (11:14 +0200)
committerStefan Roese <sr@denx.de>
Sat, 31 Jul 2021 07:49:32 +0000 (09:49 +0200)
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 <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
arch/arm/mach-mvebu/Kconfig
arch/arm/mach-mvebu/spl.c

index 27d227d..12de6f1 100644 (file)
@@ -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
 
index 16ebb7a..836eb18 100644 (file)
@@ -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;