# NVIDIA Jetson Orin / Tegra234 - bare-metal BL33, DRAM-staged Linux boot. # # wolfBoot runs as the bare-metal BL33 (replacing edk2 UEFI), verifies a signed # Linux kernel bundled into the BL33 image in DRAM, and boots it EL2->EL1 with a # device tree - no storage driver required. This sidesteps the SDMMC1 controller # bring-up (still open; see hal/tegra234.c). The kernel + DTB are bundled by # tools/scripts/tegra234-mkpoc.sh. # # For the storage-based (SDHCI) variant, see tegra234.config + DISK_SDCARD. ARCH=AARCH64 TARGET=tegra234 SIGN?=ECC384 HASH?=SHA384 DEBUG?=1 DEBUG_UART?=1 TEGRA234_HANDOFF_DUMP?=1 SPMATH?=1 NO_XIP?=1 # Skip GIC init before booting the payload (Orin is GICv3; BL31 set it up). SKIP_GIC_INIT?=1 WOLFBOOT_SECTOR_SIZE?=0x1000 WOLFBOOT_NO_PARTITIONS=1 # Payload slot in the BL33 bundle (see hal/tegra234.h): bounds the test-app link. WOLFBOOT_PARTITION_SIZE?=0x100000 # --- Linux boot payload plumbing --------------------------------------------- # MMU/WOLFBOOT_FDT come from arch.mk for every aarch64 target; they only switch # on the FDT/DTS code path (the two-argument do_boot that forwards a DTB # pointer). tegra234 stays MMU-off at runtime, 1:1 physical, which is what the # arm64 Linux boot protocol wants. EL2_HYPERVISOR+BOOT_EL1 add the EL2->EL1 # drop with the DTB in x0 (the Linux boot ABI). EL2_HYPERVISOR=1 BOOT_EL1=1 # RAM staging: the bundled payload lives at BL33_BASE+0x200000 and the DTB at # +0x300000 (see hal/tegra234.h). update_ram copies the kernel to LOAD_ADDRESS # and relocates the DTB to LOAD_DTS_ADDRESS, both in low DRAM, 2 MB-aligned. # LOAD_DTS_ADDRESS must stay above LOAD_ADDRESS + RAMBOOT_MAX_SIZE # (0xA0000000 + 0x4000000 = 0xA4000000), otherwise the DTB relocation writes # into the tail of a large image that already passed signature verification. # The cap itself is enforced at runtime by wolfBoot_open_image_address() # (src/image.c, no-partition branch). WOLFBOOT_RAMBOOT_MAX_SIZE=0x4000000 WOLFBOOT_LOAD_ADDRESS?=0xA0000000 WOLFBOOT_LOAD_DTS_ADDRESS?=0xA5000000