Repository navigation
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
The image-generation scripts can reject valid bootargs or produce images that overlap memory or exceed runtime limits.
3 open findings
What changed in this PR
Adds NXP i.MX 8M Mini support for BL33 and U-Boot go boot flows.
Changes:
- Adds i.MX8MM HAL, linker layout, configuration, test payload, and CI builds.
- Extends SDHCI with configurable eMMC width and High Speed timing.
- Adds scripts and documentation for producing signed FIT, go, and flash images.
| File | Description |
|---|---|
.github/workflows/test-configs.yml |
Adds three i.MX8MM build variants. |
.gitignore |
Ignores generated i.MX8MM artifacts. |
Makefile |
Defines i.MX8MM build outputs. |
config/examples/imx8mm-pico.config |
Configures PICO-IMX8MM boot modes. |
docs/Targets.md |
Documents setup, booting, and limitations. |
hal/imx8mm.c |
Implements UART, MMU/cache, and uSDHC HAL support. |
hal/imx8mm.h |
Defines i.MX8MM hardware constants. |
hal/imx8mm.ld |
Defines the DRAM memory layout. |
include/sdhci.h |
Adds eMMC High Speed constants. |
src/boot_aarch64.c |
Includes the i.MX8MM platform header. |
src/boot_aarch64_start.S |
Adds i.MX8MM EL2 startup handling. |
src/sdhci.c |
Adds configurable eMMC width and timing. |
test-app/app_imx8mm.c |
Adds a bare-metal boot payload. |
tools/scripts/imx8mm/imx8mm-mkfit.sh |
Builds signed kernel/DTB FIT images. |
tools/scripts/imx8mm/imx8mm-mkflashbin.sh |
Builds BL33 flash images. |
tools/scripts/imx8mm/imx8mm-mkgoimage.sh |
Builds U-Boot go images. |
🧠 Review effort: Balanced
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
wolfSSL-Fenrir-bot
left a comment
There was a problem hiding this comment.
Fenrir Automated Review — PR #931
Scan targets checked: wolfboot-src, wolfboot-bugs
Coverage: 2 of 5 in-scope changed file(s) opened by the reviewer; not opened: include/sdhci.h, src/boot_aarch64.c, test-app/app_imx8mm.c
Fenrir result: Approved ✅
No new issues found in the changed files.
Advisory only — this automated result does not count as a GitHub approval.
Review tier: Lite
9454a4f to
42ebd47
Compare
SDHCI_EMMC_BUS_WIDTH (1/4/8, default 4) and SDHCI_EMMC_HS (CMD6 HS_TIMING, 50 MHz). Defaults are unchanged.
Boots a signed Linux kernel, either loaded into DRAM and started from U-Boot proper (RAM-boot, go) or started by ATF as BL33 reading a signed FIT from eMMC (uSDHC3, FAT32). Includes a test app and CI builds.
Scripts for flash.bin (BL33), the signed FIT and the RAM-boot image.
wolfboot.bin omits the BSS that startup clears.
…_SIZE The limit is read from the build configuration.
|
@dgarske |
dgarske
left a comment
There was a problem hiding this comment.
Regression-tested the shared uSDHC shim, the identity MMU and the SDMA cache maintenance on an i.MX 8QuadMax MEK, comparing master against this PR merged onto master. The MEK showed no regression:
- RAM-boot with the bundled test-app over SDP: same output as master.
DISK_SDCARD=1with SDMA, and withIMX8QM_SDHCI_PIO=1: GPT, A/B selection and verify all match master.DISK_SDCARD=1 IMX8QM_MMU=1 EL2_HYPERVISOR=1 BOOT_EL1=1with a signed Linux FIT: verifies, boots to a login with all 6 cores up, and never prints the new unaligned-DMA warning.- imx8qm, imx95-a55 (including stage1) and imx8mm all build, and
unit-imx8qm-usdhc-shimpasses.
Two optional notes on the new code:
invalidate_dcache_rangediscards whole lines, so a caller passing a range that is not line-aligned loses neighbouring data. The uSDHC path warns about this; other future callers will not. Consider a comment on the prototype ininclude/aarch64_arch.h.el2_idmap_enableinvalidates by set/way at EL2 while BL31 is resident below BL33. That is safe on A53/A72 because they perform a Non-secure DC ISW as clean and invalidate, but it is core-specific and worth one line of comment.
Two pre-existing issues hit while testing, not caused by this PR, for a follow-up:
tools/scripts/imx8qm/imx8qm-flash.sh sdprunsuuu -b sdps, which uuu 1.5.243 rejects ("sdps is not built-in script").uuu SDPS: boot -f flash.binworks.make cleanleaves the wolfSSL objects underlib/wolfssl/wolfcrypt/src, including the ARMv8 asm ones. Switching between configs without deleting them can fail to link (Transform_Sha512_Len_neonundefined) or silently link objects built for the previous config.
|
Thanks for the regression test on the MEK. |


Adds wolfBoot support for the NXP i.MX 8M Mini, tested on the TechNexion PICO-IMX8MM (PICO-PI baseboard).
Boot modes
IMX8MM_BL33=1): wolfBoot replaces U-Boot proper.BootROM -> U-Boot SPL -> ATF (BL31) -> wolfBoot -> Linux.wolfBoot reads a signed FIT (kernel + DTB) from eMMC p1 (FAT32,
/fitImage_A.itb//fitImage_B.itb), verifies it and boots Linux at EL2.IMX8MM_BL33=0): started from U-Boot proper withgo 0x40480000; the signed kernel is bundled after wolfBoot.Changes
src/sdhci.c: optional eMMC bus width and High Speed timing (SDHCI_EMMC_BUS_WIDTH,SDHCI_EMMC_HS). Defaults unchanged for other targets.hal/imx8mm.*: UART2 console, uSDHC3 eMMC through the SDHCI layer (register shim fromhal/imx8qm.c), identity MMU + D-cache with SDMA cache maintenance in BL33 mode.config/examples/imx8mm-pico.config,test-app/app_imx8mm.c,Makefile(MAIN_TARGET), 3 CI build jobs.tools/scripts/imx8mm/: buildflash.bin(BL33), the signed FIT, and the go image.docs/Targets.md: "NXP i.MX 8M Mini" section.Testing
tn-imx_v2023.04_6.1.55_2.2.0-stableand itsinstall_uboot_imx8.sh.Notes
/memoryandbootargs(U-Boot normally adds them);imx8mm-mkfit.shadds them before signing.