NVIDIA Tegra
NVIDIA Tegra Linux Driver Package

Development Guide
32.1 Release


 
Jetson TX2 Boot Flow
 
BootROM
Bootloader Components
TegraBoot
C-Boot
U-Boot
The flow of control in the boot software is as follows.
A screenshot of a cell phone Description automatically generated
BootROM
The NVIDIA® Jetson™ TX2 BootROM (BR) is hard-wired in the Tegra chip. It initializes the Boot Media and loads Microboot1 (MB1) from the Boot Media.
Multiple copies of the BootROM Boot Configuration Table (BR-BCT) may be stored at the start of the Boot-Media. The BR-BCT contains configuration parameters used by the BootROM for hardware initialization.
The BCT also contains information about the bootloader (BL), including:
Size
Entry point
Load address
Hash
The BootROM uses this information to verify and load the bootloader. The boot flow is as follows:
C:\sw\swdocs\mobile\tegra\images\bdk_bootrom_flow.jpg
Bootloader Components
The Jetson TX2 bootloader and flash components are:
Common Driver Framework (CDF)
Microboot1 (MB1)
TBoot-BPMP (MB2)
CPU-BL
TBoot-CPU
C‑Boot
U-Boot
Common Driver Framework
MB1, TegraBoot-BPMP, and TegraBoot-CPU/C‑Boot each needs to use one of several drivers. Moreover, some libraries are common across the bootloader components. Instead of using separate sets of drivers and libraries, the binaries share a common pool of drivers and libraries called the Common Driver Framework (CDF).
Note:
Since U-Boot is built separately from the NVIDIA-proprietary bootloader software, it does not support or use CDF.
The software design architecture using the Common Driver Framework is as follows:
Common Driver Framework consists of:
Storage drivers like eMMC, QSPI, mSATA, and UFS
Host interface drivers like UART, USB
Display drivers
Debug and Console library
Libraries of other modules such as:
Clock
SE
PMIC
Timer
Fuse
GPIO
PWM
EEPROM
Keyboard
PSCI
Software libraries such as:
Cryptographic
Transport
Partition manager
Sparse
Transport libraries
A decompression library that supports LZF, Zlib, and LZ4
clib, a dynamic memory allocation library, and a cache library
The CDF is provided at:
<top>/vendor/nvidia/tegra/bootloader/partner/common/
<top>/vendor/nvidia/tegra/bootloader/partner/t18x/common/
Microboot1
Jetson TX2 Microboot1 (MB1) is the first boot software component loaded by BR in SysRAM, and runs on BPMP. MB1 is considered as an extension to BR. MB1 provides extensive flexibility to alter or fix the boot sequence. This component also implements some delicate functionality like Denver initialization and security fabric changes.
Because MB1 is an extension to BootROM, it is signed and encrypted by an NVIDIA owned key (separate keys residing in BootROM). The following diagram shows the flow of control in MB1.
C:\sw\swdocs\mobile\tegra\images\bdk_microboot.jpg
MB1 is responsible for:
Firmware initialization, include MTS preboot, SPE, and CAN
Platform configuration which includes:
Configuring pinmux
Configuring GPIO
Pad settings
Prod settings
Initializing rails including those required by CPU, memory, GPU, etc.
PMIC commands required by BR
Configuring SCR
Initialize the SDRAM based on the MB1 boot configuration table (MB1-BCT)
Load the firmware that initializes the CPU complex (CCplex)
Set the security settings
Configure pinmux/GPIO for the SoC
Program the PMIC for the VDD_CPU and VDD_DDR rails
Create carveouts
Support flashing, available as a different mb1_recovery.bin binary
Support RCM boot by downloading a blob that contains the binaries, and loading binaries from that blob
Load the next stage bootloader, TBoot-BPMP (MB2)
Support SC7
MB1 is owned by NVIDIA, and so is provided as a binary in the BSP package. Although it is provided as a binary, you can configure its behavior for a specific platform using its Boot Configuration Table, called MB1-BCT. MB1 reads MB1-BCT to configure the platform.
For information on MB1, see MB1 BCT .
TegraBoot
Jetson TX2 TegraBoot is the bootloader component that executes after MB1. This component is divided into two portions:
TBoot-BPMP (MB2)
TBoot-CPU
The processor on which they are executing determines which component runs. Both are released to OEMs as source code for reference implementation.
TegraBoot-BPMP
This portion of Jetson TX2 TegraBoot runs on BPMP (tboot-BPMP). There are two variants of TegraBoot-BPMP (MB2):
One used for cold boot
One for recovery boot
Both are generated using different configuration files and make files.
TBoot-BPMP is responsible for:
Loading and initializing firmware (FW) components
Creating carveouts
Completing CPU initialization
Loading the next stage bootloader
Supporting flashing
Supporting RCM boot; which is the TegraBoot-BPMP (MB2) recovery boot
Reading PMIC reset reason
Loading the bootloader device tree and passing the device tree load address to CPU-BL
Giving control to BPMP-FW
The components of TBoot-BPMP are as follows:
A screenshot of a video game Description generated with high confidence
TegraBoot-CPU
Jetson TX2 TegraBoot-CPU is responsible for:
Flashing
RCM boot
The flow for RCM boot is similar to a cold boot except that the binaries are transferred from the host over USB and loaded directly to SDRAM. TOS and BPMP-FW are not loaded in this path.
Note:
As soon as the CPU starts running, it starts in EL3 mode. The TOS monitor code completes its initialization and gives control to the TegraBoot-CPU. It then initializes the USB and starts the 3P protocol to flash the device.
For normal flashing TegraBoot-CPU takes the binaries from the host one-by-one and flashes them to the device.
In RCM boot, TegraBoot-CPU takes the binaries from the blob downloaded by MB1. The binaries are not flashed onto the device.
TBoot-CPU can also support cold boot by integrating the relevant libraries such as linuxboot, etc. This version of TBoot-CPU is not tested or maintained, though.
The components of TBoot-CPU are as follows:
C-Boot
Jetson TX2 C‑Boot is the primary CPU bootloader used on mobile platforms in the cold boot path. C‑Boot is feature-rich bootloader that:
Boots the kernel
Supports display, boot logo, and Verified boot
Based on the Little Kernel (LK) open source bootloader
Uses the interrupt and scheduling frameworks of LKC
Uses CDF for frameworks, drivers, and libraries
Note:
As soon as the CPU starts running, it starts in EL3 mode and begins executing TOS. TOS completes its initialization and passes control to C‑Boot in EL2 mode.
BL and Kernel use separate device trees stored in separate partitions. C‑Boot is responsible for:
Parsing the CPU-BL parameters and initializing the bootloader device tree
Booting to the kernel or chaining to U-Boot to boot the kernel
Supporting the update mechanism
Loading the recovery kernel
Verified boot
The components of C‑Boot are as follows:
A screenshot of a cell phone Description generated with very high confidence
The source code for C‑Boot is available to the public at:
https://developer.nvidia.com/embedded/downloads
The source code is in a file named cboot_src.tbz2. It includes instructions for users.
U-Boot
U-Boot is the default bootloader for NVIDIA® Tegra® Linux Driver Package.
For more information, see:
U-Boot Customization
TX2 MB1 Platform Configuration