AM62Px MCU+ SDK  11.01.01
Falcon Boot Support

Introduction

  • In falcon boot mode, the device bypasses the A-core SPL and U-Boot stage, allowing for direct booting to the Linux kernel after OP-TEE and ATF.
  • With Falcon Boot, devices can achieve fast boot times, making it an ideal solution for applications where boot times are critical.

Pre-requisites for falcon boot mode

1) In falcon boot mode, A53 SPL and U-Boot are bypassed, and the boot sequence directly jumps to TF-A, then to the kernel.

2) To achieve faster booting,

- A minimalistic file system (initramfs) is used.
- A smaller kernel image is used.
    - It includes relevant drivers.
    - The boot messages are suppressed.
- A Device tree blob from Processor SDK is used.

How to obtain the kernel images and Initramfs

How to obtain the DTB, RTOS and linux Appimages

Loading ATF at the Correct Location

  • The Device Tree Binary (DTB) provided by the Processor SDK specifies the load address of the Arm Trust Firmware (ATF) as 0x9e780000.
  • The U-Boot device tree fix-ups load the ATF at 0x80000000.
  • In Falcon mode, the U-Boot is removed, and the MCU+SDK uses the default DTB from the Processor SDK to generate Falcon images.
  • This may cause the ATF to be loaded at the location specified by the default DTB (0x9e780000).
  • To load the ATF at the correct location, an overlay must be applied to load the ATF at 0x80000000.

Device-Specific Overlay

  • For AM62A, AM62P, AM62X-SK-LP, and AM62X-SK devices:
    • The overlay is applied to load the ATF at 0x80000000.
    • The overlay code is:
/dts-v1/;
/plugin/;
/ {
#address-cells = <0x02>;
#size-cells = <0x02>;
fragment@0 {
#address-cells = <0x02>;
#size-cells = <0x02>;
ranges;
target-path = "/reserved-memory/tfa@9e780000";
__overlay__ {
#address-cells = <0x02>;
#size-cells = <0x02>;
ranges;
reg = <0x00 0x80000000 0x00 0x80000>;
};
};
};

Generating a New DTBO File

To generate a new DTBO file, use the following command:

dtc -I dts -O dtb -o output-filename.dtbo input-filename.dtsi

For example:

dtc -I dts -O dtb -o tfa-overlay.dtbo tfa-overlay.dtsi

This command generates a new DTBO file called tfa-overlay.dtbo from the tfa-overlay.dtsi file.

Applying the Overlay

To apply the overlay, use the following command:

Attention
Please modify the input/output filenames and path appropriately.
fdtoverlay -i path-to-actual.dtb-used -o path-to-new-overlay.dtb path-to-obtained.dtbo

For example:

fdtoverlay -i <path-to-processor-sdk>/board-support/prebuilt-images/am62pxx-evm/k3-am62p5.dtb -o <path-to-processor-sdk>/board-support/prebuilt-images/am62pxx-evm/k3-am62p5-sk-overlay.dtb tfa-overlay.dtbo

This command applies the overlay to the default DTB file and generates a new DTB file with the overlay changes.

Rebuilding ATF

  • Refer to Processor SDK Linux - ARM Trusted Firmware-A to rebuild ATF inside the ATF source directory:
  • Add the PRELOADED_BL33_BASE, K3_HW_CONFIG_BASE and BL32_BASE for respective devices.
    • For example:
  • For AM62A, AM62P, AM62X-SK-LP, and AM62X-SK devices:
    make CROSS_COMPILE=<path-to-compiler>/bin/aarch64-none-elf- ARCH=aarch64 PLAT=k3 TARGET_BOARD=lite SPD=opteed PRELOADED_BL33_BASE=0x82000000 K3_HW_CONFIG_BASE=0x88000000
  • For AM62SIP device:
    make CROSS_COMPILE=<path-to-compiler>/bin/aarch64-none-elf- ARCH=aarch64 PLAT=k3 TARGET_BOARD=lite SPD=opteed PRELOADED_BL33_BASE=0x82000000 K3_HW_CONFIG_BASE=0x88000000 BL32_BASE=0x80080000
  • This command rebuilds ATF with the kernel load address at 0x82000000 and FDT at 0x88000000.

Building the Fastboot Binaries

Refer to the section "How to obtain the kernel images and Initramfs" to build the fastboot binaries.

Creating a Linux Falcon Appimage

To create a Linux Falcon Appimage, run the makefile at {SDK_INSTALL_PATH}/tools/boot/linuxAppimageGen after setting the PSDK path in the config.mak file.

Loading the Falcon Image

The generated falcon image size ranges up to ~23MB. To load the necessary RTOS appimages and Linux appimage, use the default sbl_emmc_linux_falcon_hs_fs.cfg or default_sbl_ospi_linux_falcon_hs_fs.cfg configuration file, depending on the storage device used. Boot the device using the generated falcon image.

Note
SBL EMMC Linux boots from the boot partition 0 of eMMC and does not use a filesystem boot. The appimage is flashed to the offsets in eMMC as configured using syscfg.
Attention
Care should be taken to ensure that the R5, M4 appimage and the Linux appimage flashed does NOT overwrite the Linux binaries in eMMC.
Note
The load address of resource table for R5 and M4 cores must be consistent with the address in the Linux dts file.

Running the Example

  • To run the example, you can use the SBL images obtained using the SBL EMMC Linux Multistage and SBL OSPI Linux Multistage examples for eMMC and OSPI falcon boot, respectively.

Refer to the Examples

For more information, refer to the following examples:

SBL Images and Flash Config Files

EMMC

  • The above mentioned example is the SBL that needs to be flashed on the eMMC, along with sample application images for R5, M4 CPUs, and Linux Appimage.
  • The default flash config file for eMMC is located at: ${SDK_INSTALL_PATH}/tools/boot/sbl_prebuilt/am62px-sk/default_sbl_emmc_linux_hs_fs.cfg
  • The eMMC appimage offsets need to be modified to fit within the eMMC boot partition of size 31.5 MB.
  • Please refer the following changes to modify the offsets.

Syscfg changes

  • In EMMC Linux Stage2:
    bootloader1.$name = "CONFIG_BOOTLOADER_EMMC_HSM";
    bootloader1.bootMedia = "EMMC";
    bootloader1.EMMCAppImageOffset = "0x240000";
    bootloader2.$name = "CONFIG_BOOTLOADER_EMMC_MCU";
    bootloader2.bootMedia = "EMMC";
    bootloader2.EMMCAppImageOffset = "0x600000";
    bootloader3.$name = "CONFIG_BOOTLOADER_EMMC_LINUX";
    bootloader3.bootMedia = "EMMC";
    bootloader3.EMMCAppImageOffset = "0x800000";

Default sbl_emmc_linux config file changes

--file=sbl_prebuilt/am62px-sk/sbl_emmc_linux_stage1.release.hs_fs.tiimage --operation=flash-emmc --flash-offset=0x0
--file=../../examples/drivers/boot/sbl_emmc_linux_multistage/sbl_emmc_linux_stage2/am62px-sk/wkup-r5fss0-0_freertos/ti-arm-clang/sbl_emmc_linux_stage2.release.appimage.hs_fs --operation=flash-emmc --flash-offset=0x80000
--file=HSMAppimageGen/board/am62px-sk/hsm.appimage.hs_fs --operation=flash-emmc --flash-offset=0x240000
--file=../../examples/drivers/ipc/ipc_rpmsg_echo_linux/am62px-sk/mcu-r5fss0-0_freertos/ti-arm-clang/ipc_rpmsg_echo_linux.release.appimage.hs_fs --operation=flash-emmc --flash-offset=0x600000
--file=linuxAppimageGen/board/am62px-sk/linux.falcon.appimage.hs_fs --operation=flash-emmc --flash-offset=0x800000
Note
U-boot image is not required to be flashed as Falcon mode skips U-boot and jumps to kernel directly.

OSPI

  • The above mentioned example is the SBL that needs to be flashed on the OSPI, along with sample application images for R5, M4 CPUs, and Linux Appimage.
  • The default flash config file for OSPI is located at: ${SDK_INSTALL_PATH}/tools/boot/sbl_prebuilt/am62px-sk/default_sbl_ospi_linux_falcon_hs_fs.cfg
Note
Falcon boot wih OSPI does not require config file or syscfg changes.

Booting the EVM

  • With the required images flashed using the config file, proceed to boot the EVM in either eMMC or OSPI boot mode. This will launch the boot process, resulting in Linux booting on the A53 core and the RTOS or baremetal application booting on the R5 and M4 cores.

Sample Output

After flashing and booting the EVM, you will see below output on the UART console

EMMC

SYSFW Firmware Version 11.1.5--v11.01.05 (Fancy Rat)
SYSFW Firmware revision 0xb
SYSFW ABI revision 4.0
[BOOTLOADER_PROFILE] Boot Media : eMMC
[BOOTLOADER_PROFILE] Boot Media Clock : 200.000 MHz
[BOOTLOADER_PROFILE] Boot Image Size : 183 KB
[BOOTLOADER_PROFILE] Cores present :
m4f0-0
r5f0-0
[BOOTLOADER PROFILE] System_init : 5513us
[BOOTLOADER PROFILE] Board_init : 0us
[BOOTLOADER PROFILE] Drivers_open : 82210us
[BOOTLOADER PROFILE] Board_driversOpen : 0us
[BOOTLOADER PROFILE] Sciclient Get Version : 10200us
[BOOTLOADER PROFILE] App_loadImages : 6977us
[BOOTLOADER PROFILE] App_loadSelfcoreImage : 7571us
[BOOTLOADER_PROFILE] SBL Total Time Taken : 112474us
Image loading done, switching to application ...
Starting MCU-m4f and 2nd stage bootloader
SYSFW Firmware Version 11.1.5--v11.01.05 (Fancy Rat)
SYSFW Firmware revision 0xb
SYSFW ABI revision 4.0
[BOOTLOADER_PROFILE] Boot Media : eMMC
[BOOTLOADER_PROFILE] Boot Media Clock : 200.000 MHz
[BOOTLOADER_PROFILE] Boot Image Size : 22446 KB
[BOOTLOADER_PROFILE] Cores present :
hsm-m4f0-0
r5f0-0
a530-0
[BOOTLOADER PROFILE] System_init : 2833us
[BOOTLOADER PROFILE] Board_init : 0us
[BOOTLOADER PROFILE] Drivers_open : 20820us
[BOOTLOADER PROFILE] Board_driversOpen : 0us
[BOOTLOADER PROFILE] Sciclient Get Version : 10240us
[BOOTLOADER PROFILE] App_loadImages : 5684us
[BOOTLOADER PROFILE] App_loadSelfcoreImage : 8419us
[BOOTLOADER PROFILE] App_loadLinuxImages : 366136us
[BOOTLOADER_PROFILE] SBL Total Time Taken : 414135us
Image loading done, switching to application ...
Starting linux and RTOS/Baremetal applications
NOTICE: BL31: v2.13.0(release):v2.13.0-710-gcd08e7883
NOTICE: BL31: Built : 14:10:13, Sep 19 2025
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 6.12.35-ge3e551586dfa-dirty (user-Workstation-Desktop-PC) (aarch64-oe-linux-gcc (GCC) 13.4.0, GNU ld (GNU Binutils) 2.42.0.20240723) #1 SMP PREEMPT Fri Sep 19 16:45:01 IST 2025
[ 0.000000] KASLR disabled due to lack of seed
[ 0.000000] Machine model: Texas Instruments AM625 SK
[ 0.000000] earlycon: ns16550a0 at MMIO32 0x0000000002800000 (options '')
[ 0.000000] printk: legacy bootconsole [ns16550a0] enabled
[ 0.280611] Warning: unable to open an initial console.
am62xx-evm login:

OSPI

SYSFW Firmware Version 11.1.5--v11.01.05 (Fancy Rat)
SYSFW Firmware revision 0xb
SYSFW ABI revision 4.0
[BOOTLOADER_PROFILE] Boot Media : FLASH
[BOOTLOADER_PROFILE] Boot Media Clock : 166.667 MHz
[BOOTLOADER_PROFILE] Boot Image Size : 192 KB
[BOOTLOADER_PROFILE] Cores present :
m4f0-0
r5f0-0
[BOOTLOADER PROFILE] System_init : 23591us
[BOOTLOADER PROFILE] Board_init : 0us
[BOOTLOADER PROFILE] Drivers_open : 208us
[BOOTLOADER PROFILE] Board_driversOpen : 1360us
[BOOTLOADER PROFILE] Sciclient Get Version : 10206us
[BOOTLOADER PROFILE] App_waitForMcuPbist : 106us
[BOOTLOADER PROFILE] App_waitForMcuLbist : 7689us
[BOOTLOADER PROFILE] App_loadImages : 3678us
[BOOTLOADER PROFILE] App_loadSelfcoreImage : 4157us
[BOOTLOADER_PROFILE] SBL Total Time Taken : 50999us
Image loading done, switching to application ...
Starting MCU-m4f and 2nd stage bootloader
SYSFW Firmware Version 11.1.5--v11.01.05 (Fancy Rat)
SYSFW Firmware revision 0xb
SYSFW ABI revision 4.0
[BOOTLOADER_PROFILE] Boot Media : FLASH
[BOOTLOADER_PROFILE] Boot Media Clock : 166.667 MHz
[BOOTLOADER_PROFILE] Boot Image Size : 22445 KB
[BOOTLOADER_PROFILE] Cores present :
hsm-m4f0-0
r5f0-0
a530-0
[BOOTLOADER PROFILE] System_init : 2768us
[BOOTLOADER PROFILE] Board_init : 0us
[BOOTLOADER PROFILE] Drivers_open : 259us
[BOOTLOADER PROFILE] Board_driversOpen : 250us
[BOOTLOADER PROFILE] Sciclient Get Version : 10259us
[BOOTLOADER PROFILE] App_loadImages : 2882us
[BOOTLOADER PROFILE] App_loadSelfcoreImage : 4699us
[BOOTLOADER PROFILE] App_loadLinuxImages : 235223us
[BOOTLOADER_PROFILE] SBL Total Time Taken : 256345us
Image loading done, switching to application ...
Starting linux and RTOS/Baremetal applications
NOTICE: BL31: v2.13.0(release):v2.13.0-710-gcd08e7883
NOTICE: BL31: Built : 17:54:37, Sep 19 2025
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 6.12.35-ge3e551586dfa-dirty (user-Workstation-Desktop-PC) (aarch64-oe-linux-gcc (GCC) 13.4.0, GNU ld (GNU Binutils) 2.42.0.20240723) #1 SMP PREEMPT Fri Sep 19 18:12:05 IST 2025
[ 0.000000] KASLR disabled due to lack of seed
[ 0.000000] Machine model: Texas Instruments AM6254xxl SK
[ 0.000000] earlycon: ns16550a0 at MMIO32 0x0000000002800000 (options '')
[ 0.000000] printk: legacy bootconsole [ns16550a0] enabled
[ 0.274576] Warning: unable to open an initial console.
am62xx-evm login: