Add Avnet MaaXBoard 8ULP (i.MX8ULP) support#9991
Conversation
Some pip environments omit GitPython transitive deps; explicit pins avoid U-Boot source-prep failures during maaxboard-8ulp builds.
Vendor 6.1.22 BSP defconfig for i.MX8ULP A2, aligned with Avnet maaxboard-build-tools lf-6.1.22-2.0.0.
Avnet linux-imx, uboot-imx, imx-atf, M33 firmware, sentinel/upower blobs, and imx-mkimage REV=A2 flash.bin. SD image uses VFAT /boot, flash.bin at sector 66, and hooks to prune FAT boot and export flash.bin for UUU.
Avnet MaaXBoard 8ULP on imx8ulp family with serial console ttyLP1 and uEnv.txt boot flow matching Avnet/Nix layout (Image, initrd, DTB on FAT).
🚫 Missing required board assetsThis PR adds new board configuration(s). Required assets must already exist in github/armbian/armbian.github.io.
Missing items
Once the missing files are added (or a PR is opened in armbian/armbian.github.io), re-run this check. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds Armbian build support for the Avnet MaaXBoard 8ULP (i.MX8ULP A2): a new board ChangesMaaXBoard 8ULP Board Support
Python Dependency Pins
Sequence Diagram(s)sequenceDiagram
rect rgba(135, 206, 235, 0.5)
Note over build_custom_uboot: U-Boot + Flash Assembly
build_custom_uboot->>_imx8ulp_build_uboot_arm: checkout SHA, clean, defconfig, make all
_imx8ulp_build_uboot_arm-->>build_custom_uboot: U-Boot ARM artifacts
end
rect rgba(144, 238, 144, 0.5)
Note over build_custom_uboot: Firmware Acquisition
build_custom_uboot->>_imx8ulp_build_m33_fw: CMake build via ARM GCC, ELF→m33_image.bin
_imx8ulp_build_m33_fw-->>build_custom_uboot: m33_image.bin
build_custom_uboot->>_imx8ulp_fetch_boot_firmware: download + SHA-256 verify sentinel/upower blobs
_imx8ulp_fetch_boot_firmware-->>build_custom_uboot: sentinel.bin, upower.bin
end
rect rgba(255, 179, 71, 0.5)
Note over build_custom_uboot: Image Assembly
build_custom_uboot->>imx_mkimage: stage ATF/U-Boot/M33/AHAB into iMX8ULP/, make flash.bin
imx_mkimage-->>build_custom_uboot: flash.bin
build_custom_uboot->>build_custom_uboot: validate flash.bin size, copy to output dir
end
rect rgba(216, 191, 216, 0.5)
Note over post_build_image: Export
post_build_image->>uboot_deb: unpack, extract flash.bin
uboot_deb-->>post_build_image: flash.bin
post_build_image->>output: write .flash.bin, .boot.img, emit UUU/dd commands
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~70 minutes Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/CODEOWNERS:
- Line 368: In the CODEOWNERS file, locate the entry for imx8ulp.conf on line
368 which currently shows the path as sources/families/imx8ulp.conf. Update this
path to config/sources/families/imx8ulp.conf to match the actual file location,
keeping the maintainer assignment `@govindsi` unchanged. This corrected path will
ensure proper maintainer auto-assignment for changes to that configuration file.
In `@config/sources/families/imx8ulp.conf`:
- Around line 186-193: The self-extracting binaries for sentinel and upower
firmware (referenced as ${sentinel_pkg}.bin and ${upower_pkg}.bin) are being
executed immediately after download without verifying their integrity. Before
executing each binary, retrieve the corresponding checksums from NXP, verify the
downloaded binary against the expected checksum using a tool like sha256sum or
similar, and only proceed with execution if the checksums match. If verification
fails, exit with an appropriate error message. This applies to both the sentinel
firmware binary download/execution block and the upower firmware binary
download/execution block.
- Around line 291-293: The kernel_img and initrd_img variables are selected
independently using separate find commands, which can result in pairing kernel
and initrd from different versions. Refactor the selection logic to extract the
version from the kernel file first (by parsing the vmlinuz-* or Image filename),
then use that version to deterministically select the matching initrd.img-*
file. This ensures kernel_img and initrd_img are always version-paired and the
selection is reproducible, avoiding non-bootable image configurations.
In `@lib/functions/artifacts/artifact-uboot.sh`:
- Line 108: The ATF log level default is inconsistent between the artifact hash
calculation and the compile execution. Line 108 uses an empty default for
ATF_LOG_LEVEL while the compile function uses a default of 40, causing identical
binaries to produce different artifact versions when ATF_LOG_LEVEL is unset.
Change the parameter expansion on line 108 from using an empty default to using
40 as the default, matching what the compile function uses, so the artifact hash
reflects the actual effective log level value that will be used during
compilation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: da2fca4c-e727-4f45-8ccc-cff39cc1c59f
📒 Files selected for processing (8)
.github/CODEOWNERSconfig/boards/maaxboard-8ulp.cscconfig/bootscripts/boot-maaxboard-8ulp.cmdconfig/kernel/linux-maaxboard-8ulp-current.configconfig/sources/families/imx8ulp.conflib/functions/artifacts/artifact-uboot.shlib/functions/compilation/atf.shrequirements.txt
|
|
remove CODEOWNERS commits. That part is auto-maintained. |
Set ATF_LOG_LEVEL=20 to silence BL31 SCMI/upower INFO spam, honor it in compile_atf, and hash ATF vars in uboot artifacts. Use quiet loglevel=4 in uEnv and lower the kernel default console loglevel to 4.
Use a hardware summary comment line and move ATF_PLAT to the imx8ulp family config where it belongs for all boards on this SoC.
Set ATF_PLAT in the family config, verify sentinel/upower installer SHA-256 before execution, and select kernel/initrd deterministically when pruning the VFAT /boot partition.
Hash ATF_LOG_LEVEL with the same default (40) used at compile time so unset and explicit values produce matching artifact versions.
5a1f2c9 to
59655ec
Compare
Done |
| declare -g ATF_LOG_LEVEL=20 | ||
| ATF_TARGET_MAP="PLAT=${ATF_PLAT} LDFLAGS=-no-warn-rwx-segments bl31;;build/${ATF_PLAT}/release/bl31.bin" | ||
|
|
||
| case $BOARD in |
There was a problem hiding this comment.
Kernel is never board specific. Kernel defs goes under BRANCH.
Put KERNELSOURCE/KERNELBRANCH/KERNEL_MAJOR_MINOR under case $BRANCH, drop board-specific LINUXCONFIG, rename defconfig to linux-imx8ulp-current.config, and regenerate via rewrite-kernel-config.
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
config/kernel/linux-imx8ulp-current.config (1)
352-353: 🧹 Nitpick | 🔵 TrivialDisable firmware sysfs fallback to avoid boot delays.
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=yat line 353 forces the kobject-uevent fallback path for firmware requests. Most Linux distributions disable this option. Without a matching firmware user-helper service, missing firmware blobs can cause timeout-bound boot delays during device probe. Set to# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@config/kernel/linux-imx8ulp-current.config` around lines 352 - 353, In the kernel configuration file, locate the CONFIG_FW_LOADER_USER_HELPER_FALLBACK setting and change it from enabled (=y) to disabled by replacing the line with # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set. This disables the firmware sysfs fallback mechanism to prevent timeout-related boot delays when firmware blobs are missing or no matching user-helper service is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@config/kernel/linux-imx8ulp-current.config`:
- Around line 1156-1159: The kernel configuration file is missing the base
CONFIG_EXT4_FS=y option which is required to build ext4 filesystem support in
the kernel. Currently CONFIG_EXT4_FS_POSIX_ACL=y and CONFIG_EXT4_FS_SECURITY=y
are enabled but these are suboptions that depend on the main ext4 filesystem
driver being built. Add CONFIG_EXT4_FS=y to the configuration file near the
existing ext4 options to enable the core ext4 filesystem support, which is
necessary for the kernel to mount ext4 root partitions.
- Around line 7-10: The kernel configuration is missing the
`CONFIG_BPF_UNPRIV_DEFAULT_OFF=y` option which is needed to disable unprivileged
BPF by default for security purposes. Add `CONFIG_BPF_UNPRIV_DEFAULT_OFF=y` to
the configuration file near the other BPF-related options such as
`CONFIG_BPF_SYSCALL`, `CONFIG_BPF_JIT`, `CONFIG_BPF_JIT_ALWAYS_ON`, and
`CONFIG_BPF_LSM`. This ensures the kernel defaults to a more secure state where
unprivileged BPF access is disabled by default but can be administratively
adjusted if needed.
---
Nitpick comments:
In `@config/kernel/linux-imx8ulp-current.config`:
- Around line 352-353: In the kernel configuration file, locate the
CONFIG_FW_LOADER_USER_HELPER_FALLBACK setting and change it from enabled (=y) to
disabled by replacing the line with # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is
not set. This disables the firmware sysfs fallback mechanism to prevent
timeout-related boot delays when firmware blobs are missing or no matching
user-helper service is available.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 8cd0b26a-8c52-4ef1-b5cf-61e5ce7c534d
📒 Files selected for processing (2)
config/kernel/linux-imx8ulp-current.configconfig/sources/families/imx8ulp.conf
🚧 Files skipped from review as they are similar to previous changes (1)
- config/sources/families/imx8ulp.conf
Description
Adds support for the Avnet MaaXBoard 8ULP (i.MX8ULP, A2 silicon).
BSP packages
Aligned with Avnet maaxboard-build-tools branch
maaxboard_lf-6.1.22-2.0.0:linux-imx), U-Boot (uboot-imx), ATF, Cortex-M33 firmware, and imx-mkimageflash.binREV=A2 flash_singleboot_m33What's included:
maaxboard-8ulp.csc) and family config (imx8ulp.conf)Avnet/uboot-imxAvnet/imx-atf(withATF_LOG_LEVEL=20to silence BL31 SCMI/upower INFO spam)Avnet/linux-imximx-mkimageforflash.binassembly (REV=A2, M33 single-boot)flash.binboot-maaxboard-8ulp.cmd→uEnv.txt) for VFAT/bootwithbooti+ gzip initrdlinux-maaxboard-8ulp-current.config) from Avnet linux-imx 6.1.22flash.bin@ sector 66, 10 MiB gap, 128 MiB VFAT/boot, ext4 root on partition 2/boottoImage,initrd,maaxboard-8ulp.dtb, anduEnv.txt.flash.bin/.boot.imgfor UUU eMMC flashinggitdb/smmap) for GitPython U-Boot toolingcompile_atfhonorsATF_LOG_LEVEL; uboot artifact hash includes ATF varsTechnical notes:
imx-mkimage(flash_singleboot_m33)ARCH=arm(32-bit SPL); Linux isarm64Avnet/mcore_sdk_8ulpusing the ARM GNU embedded toolchainDISABLE_KERNEL_PATCHES=yes,EXTRAWIFI=no)ttyLP1@ 115200 on J4 (USB debug port)Build:
Artifacts in
output/images/:Armbian-*-Maaxboard-8ulp_*.img— full disk imageArmbian-*-Maaxboard-8ulp_*.flash.bin— bootloader image for UUUInstall UUU (host PC)
From release (recommended):
From source:
Boot switch (SW1) for eMMC flashing
Per Avnet MaaXBoard 8ULP Yocto User Manual:
Hardware connections
lsusb(NXP USB device in download mode)Flash to eMMC (UUU)
Bootloader only:
Full system (bootloader + image; Avnet requires both together):
After flashing:
ttyLP1, 115200) and verify bootTest plan
.img, and.flash.binproduceduuu/lsusbuuu -v -b emmc_all *.flash.bin *.imgflashes eMMC successfullyttyLP1)/bootcontains onlyImage,initrd,maaxboard-8ulp.dtb,uEnv.txtChecklist:
Summary by CodeRabbit
flash.binimages with correct FAT/DTB contents.