3.1.2.10. U-Boot Falcon Mode
U-Boot’s falcon mode on AM62x bypasses the A-core SPL and U-Boot stage, which allows for booting straight to Linux kernel after OP-TEE and ATF.
Normal boot flow:
R5 SPL -> ATF -> OP-TEE -> Cortex-A SPL -> U-Boot -> Linux
With falcon mode:
R5 SPL -> ATF -> OP-TEE -> Linux
The following steps show how to build R5 SPL with falcon mode support:
Important
The following patch is required to enable R5 falcon mode in U-Boot for
12.0 SDK release:
diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
index b93516ff806..b5ced6e713b 100644
--- a/arch/arm/mach-k3/common.c
+++ b/arch/arm/mach-k3/common.c
@@ -54,7 +54,7 @@ struct ti_sci_handle *get_ti_sci_handle(void)
return (struct ti_sci_handle *)ti_sci_get_handle_from_sysfw(dev);
}
-#ifdef CONFIG_SPL_OS_BOOT
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT) && IS_ENABLED(CONFIG_ARM64)
void *board_spl_fit_buffer_addr(ulong fit_size, int sectors, int bl_len)
{
return (void *)CONFIG_SPL_LOAD_FIT_ADDRESS;
3.1.2.10.1. Extra Configuration
3.1.2.10.1.1. OSPI boot:
For OSPI boot, the tiboot3.bin file should be flashed to the same
addresses in flash as regular boot flow whereas tifalcon.bin and the
fitImage are read from the root filesystem’s boot directory. The MMC
device is selected by the mmcdev env variable for R5 SPL.
Below U-Boot commands can be used to download tiboot3.bin over tftp
and then flash it to OSPI.
=> sf probe
=> tftp ${loadaddr} tiboot3.bin
=> sf update $loadaddr 0x0 $filesize
3.1.2.10.1.2. eMMC Boot:
In eMMC boot mode, the tiboot3.bin file should be flashed to the
hardware boot partition whereas tifalcon.bin and the fitImage
are read from the root filesystem inside UDA. Use the U-Boot commands below
to set the correct boot partition and write tiboot3.bin to the correct
offset.
=> # Set boot0 as the boot partition
=> mmc partconf 0 1 1 1
=> mmc bootbus 0 2 0 0
=> # Flash tiboot3.bin to boot0
=> mmc dev 0 1
=> fatload mmc 1 ${loadaddr} tiboot3.bin
=> mmc write ${loadaddr} 0x0 0x400
For more information check: How to flash eMMC and boot with eMMC Boot.
3.1.2.10.2. Boot time comparisons:
Removing A-core SPL and U-Boot from the boot process leads to ~60% reduction in time to kernel. Saving about 1-2 seconds during boot depending on the platform.
Fig. 3.2 Falcon Mode (Left) vs Regular Boot (Right)