This section describes the two boot flow sequences used on AM62P. The Read Only Memory (ROM) code is the first block of code that is automatically run on device start-up or after power-on reset (POR). The ROM bootloader code is hardcoded into the device. This is a very small binary, due to the limited amount of internal memory. After the ROM bootloader comes up, the bootloader either loads the Secondary Program loader for a Linux-specific boot flow, or the Secondary Bootloader for Real-Time Operating System (RTOS) based boot flow. These boot sequences can also be customized according to the required use case.
- Secondary Program loader mainly serves to initialize the external Double Data Rate (DDR) memory and sets up the boot process for the next bootloader stage, U-Boot. U-Boot, running out of DDR, provides wider functionalities, such as command (CMD) line support, device driver infrastructure and Kconfig infrastructure. U-Boot then loads the Kernel image, to start a High-Level Operating System (HLOS) like Linux on a A53 core.
- Secondary Bootloader is a FreeRTOS based bootloader, responsible for performing device-specific initialization, loading of respective binaries to initialize the subsequent cores, and to ultimately start the application. On AM62P, the Secondary Bootloader is divided into two stages, namely stage1 and stage 2. Stage 1 initializes DDR and loads the SBL stage 2 and the device manager binary to DDR. The SBL stage 2 has two threads running in parallel, one SBL stage 2 thread to run the boot sequence to start the Hardware Security Module (HSM) M4 core, MCU-R5 core, and Linux on the A53 core, another thread loads the device manager that opens the drivers required for application.