[PATCH u-boot-mvebu v2 32/41] arm: mvebu: Use U-Boot's SPL BootROM framework for booting from NAND/UART

Marek Behún marek.behun at nic.cz
Mon Jul 19 14:20:55 CEST 2021


From: Pali Rohár <pali at kernel.org>

Current code uses hack in board_init_f() which calls return_to_bootrom()
to skip U-Boot SPL code and return back to BootROM to load U-Boot via
UART or from NAND.

This change migrates that hack from the board_init_f() function and
changes it to return BOOT_DEVICE_BOOTROM instead of returning to BootROM
directly, so that U-Boot's SPL framework is used for returning to
BootROM.

Signed-off-by: Pali Rohár <pali at kernel.org>
Reviewed-by: Marek Behún <marek.behun at nic.cz>
Reviewed-by: Stefan Roese <sr at denx.de>
Reviewed-by: Chris Packham <judge.packham at gmail.com>
Tested-by: Chris Packham <judge.packham at gmail.com>
---
 arch/arm/mach-mvebu/spl.c | 47 ++++++++++++++++++++-------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 836eb18889..5c3d959bff 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -76,7 +76,30 @@ static u32 get_boot_device(void)
 
 u32 spl_boot_device(void)
 {
-	return get_boot_device();
+	u32 boot_device = get_boot_device();
+
+	/*
+	 * Return to the BootROM to continue the Marvell xmodem
+	 * UART boot protocol. As initiated by the kwboot tool.
+	 *
+	 * This can only be done by the BootROM since the beginning
+	 * of the image is already read and interpreted by the BootROM.
+	 * SPL has no chance to receive this information. So we
+	 * need to return to the BootROM to enable this xmodem
+	 * UART download. Use SPL infrastructure to return to BootROM.
+	 *
+	 * If booting from NAND lets let the BootROM load the
+	 * rest of the bootloader.
+	 */
+	switch (boot_device) {
+	case BOOT_DEVICE_UART:
+#if defined(CONFIG_ARMADA_38X)
+	case BOOT_DEVICE_NAND:
+#endif
+		return BOOT_DEVICE_BOOTROM;
+	default:
+		return boot_device;
+	}
 }
 
 int board_return_to_bootrom(struct spl_image_info *spl_image,
@@ -147,26 +170,4 @@ void board_init_f(ulong dummy)
 
 	/* Update read timing control for PCIe */
 	mv_rtc_config();
-
-	/*
-	 * Return to the BootROM to continue the Marvell xmodem
-	 * UART boot protocol. As initiated by the kwboot tool.
-	 *
-	 * This can only be done by the BootROM and not by the
-	 * U-Boot SPL infrastructure, since the beginning of the
-	 * image is already read and interpreted by the BootROM.
-	 * SPL has no chance to receive this information. So we
-	 * need to return to the BootROM to enable this xmodem
-	 * UART download.
-	 *
-	 * If booting from NAND lets let the BootROM load the
-	 * rest of the bootloader.
-	 */
-	switch (get_boot_device()) {
-		case BOOT_DEVICE_UART:
-#if defined(CONFIG_ARMADA_38X)
-		case BOOT_DEVICE_NAND:
-#endif
-			return_to_bootrom();
-	}
 }
-- 
2.31.1



More information about the U-Boot mailing list