Secondary Program Loader (SPL)
When the IMX6 comes out of reset a BOOT ROM application built into firmware starts to run and uses information from either pin strapping or eFUSE settings to load software (Note that the Ventana boards do not use pin strapping but rely strickly on eFUSE settings). The BOOT ROM itself is referred to generically as they Primary Boot Loader (PBL) thus the application it loads and runs is generically referred to as the Secondary Boot Loader (SPL). While the PBL is un-changeable code within the IMX6 itself, the SPL is code provided by the user stored on some sort of storage media.
The IMX6 BOOT ROM (PBL) supports loading applications from various devices such as FLASH, micro-SD, SATA (Note however USB Mass Storage is not supported).
The reason for this multi-stage bootup is so that the SPL can dynamically program the SDRAM controller per the board that is detected. Without this (before the Gateworks bootloader had SPL support) a u-boot.imx needed to be created for each CPU (IMX6DUAL/QUAD vs IMX6SOLO/DUALLITE), each memory configuration (width/size) and each baseboard (gw54xx/gw53xx/gw52xx etc) - each of which requires different register values to be programmed into the SDRAM controller. Now that this is done by the SPL, we only need a single version of the bootloader. Additionally, the SPL itself only needs to be updated when Gateworks introduces a new board that has a different combination of parameters (CPU/Memory/Baseboard) or register configurations. Therefore, it is advised that you have a good reason to update the SPL before you do so, as making a mistake here may 'soft brick' your board to the point where you need to JTAG program it to recover.
Bare Metal
Sometimes the application run on the processor is not an application running on an Operating System such as Linux or some RTOS but talks simply directly to the hardware with nothing in between. Such an application is referred to as Bare Metal and while typically requires more software development, allows for the most direct control of the underlying hardware.
SPL based on U-Boot
Gateworks provides an SPL based on the U-Boot bootloader source. U-Boot can build both an SPL and the bootloader from the same codebase. The SPL is small in size as it runs from internal RAM (iRAM) as that is where the PBL can load applications.
The SPL's job is:
- determine board info: memory width, memory size, board model
- configure the memory controller
- load and execute the bootloader (or directly load and execute the OS in some configurations)
The current Gateworks U-Boot SPL supports loading the following:
- NAND Flash (common/spl_nand.c) - raw offset
- micro-SD (common/spl_mmc.c) - raw offset, raw partition, FAT filesystem, EXT filesystem
- SATA (common/spl_sata.c) - FAT filesystem
- USB (common/spl_usb.c) - FAT filesystem
For more information on the SPL please see the ventana/bootloader page