Same fix as #9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).
Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
zstd_decompress: failed to decompress: 70
BTRFS: An error occurred while reading file /boot/boot.scr
See commit 5617ff3fd for the full rationale.
Code-style and defensive-programming fixes to the helios64 u-boot
overlay, applied on top of the pristine v2026.04 vendor bump. All
changes are additive safety nets — none alter the happy-path
behaviour of the previous Kobol/Armbian code.
board/helios64.c:
- setup_leds(): check led_get_by_label() return value. Without
this, led_set_state() is called on an uninitialised udevice
pointer if LED lookup fails.
- sata_power_enable(): add the matching 10s mdelay after
enabling hdd_b_power, mirroring the one already present after
hdd_a_power. Previously rail B had no spin-up time before
scsi_scan(true) in last_stage_init(), so drives on the second
rail could miss the scan. The staggered spin-up between rails
is preserved (PSU in-rush protection for two 3.5" HDDs).
board/sys_otp.c:
- replace the || chain magic-number check in is_valid_header()
with memcmp() against a const expected_magic[8] (fixes a real
pre-existing bug: the || chain was always true);
- introduce otp_serial() / otp_mfg_year() helpers that assemble
the multi-byte values byte-by-byte, eliminating unaligned
u64/u16 casts into the packed otp struct (UB per the C standard,
also over-read into adjacent fields);
- bounds-check otp.variant against BOARD_VARIANT_MAX before
indexing var_str[], adding BOARD_VARIANT_INVALID slot;
- use strnlen() when printing packed fixed-length fields;
- use snprintf() with target buffer size instead of sprintf();
- retry read_otp_data() in ensure_otp_data_ready() on the first
access after a failed board_early_init_r(), instead of silently
skipping OTP-provided values for the whole boot.
cmd-fileenv-read-string-from-file-into-env.patch:
add 'depends on CMD_FAT' to the cherry-picked CMD_FILEENV Kconfig
entry. do_fat_fsload() is called unconditionally from the
fileenv implementation, so the dependency reflects reality.
general-fix-btrfs-zstd-decompression.patch:
tighten the decompression-success check to also reject short
reads ('|| ret < dlen'). zstd_is_error() alone does not cover
truncated output.
Assisted-by: Claude:claude-opus-4-7
Self-contained board_helios64/ overlay bumped to v2026.04 from v2026.01.
The overlay is a pristine copy of v2026.01 plus the minimum set of
v2026.04-mandated changes and new cherry-picks:
- board/Kconfig: ENV_OFFSET 0x460000 → 0x3F8000
Required by the v2026.04 SPI NOR environment layout.
- 1001-fdt_fixup_ethernet-add-logs.patch.disabled
Cherry-pick of Ricardo Pardini's fdt_fixup_ethernet logging patch.
Shipped disabled; preserved for debugging MAC propagation issues.
- cmd-fileenv-read-string-from-file-into-env.patch
Cherry-pick of the Home Assistant 2018 vendor patch (rebased by
rpardini) adapting 'fileenv' u-boot command for v2026.04.
config/boards/helios64.conf: BOOTBRANCH / BOOTPATCHDIR → v2026.04.
No behaviour changes beyond what the u-boot version bump itself
requires; pre-existing code paths (sys_otp.c, helios64.c) are left
exactly as they were in v2026.01. Defensive code-style fixes on top
of this baseline are a separate follow-up commit.
Assisted-by: Claude:claude-opus-4-7
- those were added to ensure that code was actually being compiled
- we're pretty sure now, so avoid spurious warnings during compilation
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Same patch as v2026.01 — fs/btrfs/compression.c is identical.
Tested on Helios4 (Marvell A388).
Placed in both board_helios4/ (board-specific BOOTPATCHDIR) and
v2025.10/ root (shared, for boards like rockpi-e, orangepi4-lts).
U-Boot's generic zstd_decompress() wrapper fails when used by BTRFS
due to two sector-alignment mismatches:
1. Compressed extents are stored padded to sector boundaries (4096),
but zstd_decompress_dctx() rejects trailing data after the frame.
2. BTRFS compresses in sector-sized blocks, so the zstd frame content
size may exceed ram_bytes. When the output buffer is sized to
ram_bytes, zstd_decompress_dctx() returns dstSize_tooSmall (error 70).
Symptoms on zstd-compressed BTRFS partition:
zstd_decompress: failed to decompress: 70
BTRFS: An error occurred while reading file /boot/boot.scr
Fix by calling zstd_decompress_dctx() directly with:
- zstd_find_frame_compressed_size() to strip sector padding from input
- ZSTD_getFrameContentSize() to allocate a larger output buffer when
the frame decompresses beyond the caller's buffer size
Tested on Helios64 (RK3399) booting from BTRFS+zstd SD card.
Patch mainline U-Boot to detect the NanoPC-T6 LTS Plus variant via
ADC channel 5 (value ~3076, range 2986-3166) and automatically set
the correct device tree. Remove the no-op override that disabled
auto-detection since U-Boot can now handle all three variants.
Same three patches (defconfig, device-tree, device-tree-makefile)
that existed in v2025.10 and earlier. v2026.01 skipped the board;
this brings it back for v2026.04 so boards using this u-boot
version keep building.
Original patches by Paolo Sabatino.
* rockchip64: bump some boards u-boot to v2026.04
* OrangePi4 LTS
* Radxa Rockpi-E
* Dusun DSOM 010R
* rk3318-box tv box series
* get rid of disabled u-boot patch
* rockchip64: fix minor mistakes in CSC boards defconfig/dts
- those were added to ensure that code was actually being compiled
- we're pretty sure now, so avoid spurious warnings during compilation
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
* add support for arduino-uno-q
* arduino-uno-q: fix boot with boot.scr and correct memory addresses
ABL overwrites kernel_addr_r/fdt_addr_r/ramdisk_addr_r at runtime,
causing memory overlap that corrupts the kernel Image header.
Switch from extlinux to boot.scr which sets correct addresses in the
0xC0000000 RAM bank before loading kernel, initrd and dtb.
U-Boot env loads boot.scr from partition 0x43 (GPT 67 "efi") with
sysboot as fallback.
* arduino-uno-q: update board and family config
- Use boot.scr instead of extlinux (BOOTSCRIPT/BOOTENV_FILE in family)
- Add SERIALCON=ttyMSM0 for serial console
- BOOTSIZE=512 to fit kernel + initrd
- Remove BOARD_FIRMWARE_INSTALL="-full", copy only needed firmware
- Add WiFi ath10k firmware copy
- Add ADB daemon with Armbian branding
- Add first-boot rootfs resize service
- Update kernel to 6.19.0 from qcom-v6.19.0-unoq branch
* arduino-uno-q: fix image-output extension
Use dd with sector offsets instead of loop device partitions to extract
boot and rootfs images. The previous approach failed because the build
framework releases the loop device before the extension runs.
* arduino-uno-q: add first-boot rootfs resize for eMMC
Add systemd service that expands the rootfs partition to fill the entire
eMMC on first boot using sgdisk. Removes the empty userdata partition
and recreates rootfs with all remaining space.
* arduino-uno-q: update ath10k WiFi firmware to upstream
Update board-2.bin from linux-firmware (ath-20260204) with support for
additional board IDs.
* arduino-uno-q: update kernel config for 6.19
* arduino-uno-q: revert board-2.bin to original version
Restore the ath10k board-2.bin firmware to the version provided in the
original board bring-up, as the upstream version has not been validated
on this hardware.
* arduino-uno-q: move flash binaries to armbian/qcombin
Move EDL flash binaries (ABL, XBL, TrustZone, GPT tables, etc.) from
packages/blobs/arduino/flash/ to the external armbian/qcombin repository
under the Agatti folder, following the same pattern as rkbin for
Rockchip and mtkbin for MediaTek.
Add qcombin.sh extension to fetch binaries during build. Update
image-output-arduino.sh to source flash files from qcombin cache and
derive U-Boot package path from BRANCH/BOARD variables.
* arduino-uno-q: add BOARD_VENDOR
* arduino-uno-q: update qcombin path to Agatti/arduino-uno-q
* arduino-uno-q: move firmware to armbian/firmware, rename boot script
Move firmware blobs to armbian/firmware repository (armbian/firmware#123)
and remove manual firmware copies from post_family_tweaks. Firmware is
now installed via the armbian-firmware package.
Rename boot-qcom to boot-qrb2210 to be family-specific.
* arduino-uno-q: include prog_firehose_ddr.elf from Agatti root
* arduino-uno-q: add qbootctl to prevent fastboot fallback
---------
Co-authored-by: Hsun Lai <i@chainsx.cn>
This commit adds a suite of 4 patches for U-Boot v2025.10 to enable
full support for the Xunlong Orange Pi 5 Pro SBC.
The Orange Pi 5 Pro introduces several significant hardware departures
from the base Orange Pi 5, necessitating specific driver and DTS
adjustments:
1. Networking (Motorcomm YT6801):
- The Pro variant replaces the SoC's built-in GMAC1 NIC with a
PCIe-attached Motorcomm YT6801 controller.
- Introduce a new glue driver (dwc_eth_qos_motorcomm) to bridge
the core DWC EQoS IP to the PCIe bus.
- Core EQoS driver is modified to support the YT6801's unique
32-byte descriptor size and Descriptor Skip Length requirements.
- Auto-generation of MAC addresses from CPU ID is disabled to
preserve the hardware's native eFuse MAC.
2. Audio and I/O:
- Audio routing is moved from I2S1 to I2S2 (M1 mux) with the
ES8388 codec on I2C3.
- LEDs are remapped from GPIO to PWM control (PWM3/PWM15).
- Headphone amplifier enable is remapped to GPIO4_PB5.
3. Thermal and Power:
- PWM Fan control is implemented with a specific 20ms (50Hz)
period. This is CRITICAL because the hardware's RC filter gate
logic causes MOSFET overheating if standard 25kHz PWM is used.
4. Wireless:
- Full support for the AP6256 module via SDIO and UART9.
Patch Summary:
- [0001] Board support (DTS, defconfig, doc). DTS based on initial
submission by Dennis Gilmore.
- [0002] Motorcomm YT6801 PCIe glue driver and PHY support.
- [0003] Core EQoS driver extension for descriptor/DSL overrides.
- [0004] Rockchip board MAC setup bypass for Pro hardware.
Signed-off-by: c127dev <contact@c127.dev>
Voltages for "gpu_opp_table" and "vdd_arm" were wrongly using default
values instead of the customized values from the vendor image, leading
to dmesg errors like
[ 19.709834] core: _opp_supported_by_regulators: OPP minuV: 1075000 maxuV: 1075000, not supported by regulator
[ 19.710075] lima ff300000.gpu: _opp_add: OPP not supported by regulators (200000000) 0xBEBC200
Thanks to Shadowrom2020 for noticing.
Update the I2S MCLK output gate clock patches to match the upstream v3
series. Changes from previous version:
- Split into 4 patches (was 3): added separate patch for
RK3588_SYSGRF_SOC_CON6 define in rk3588_grf.h
- Use named constant RK3588_SYSGRF_SOC_CON6 instead of magic 0x0318
- Add u-boot patch for clock ID bindings (needed by board DTS files)
6.18 uses kzalloc(sizeof(...)) as kzalloc_obj is not available.
7.0 uses kzalloc_obj as recommended by upstream reviewer.
Upstream: https://lore.kernel.org/linux-rockchip/20260320-rk3588-mclk-gate-grf-v3-0-980338eacd2c@superkali.me/
* Add GPU operating points and modify power controller
Makerbase power control adaptions due to voltage regulator limitations
* Add GPU operating points to rk3328-mkspi.dts
Makerbase power control adaptions due to voltage limitations
* Add GPU operating points to rk3328-mkspi.dts
* Remove unused gpu-opp-table node
* Remove unused gpu-opp-table node
* Remove unused gpu-opp-table node from device tree
* revert changes to kernel 6.12
* Add initial support for Qidi-X boards
* enable uart1 by default
* disable spi for screen and touch
* remove spi0 reference
* fix typo
* add new dts to kernel 7.0
* remove unused leds and unused drive
* fix storage
* disable sound output
* fixes for nitpick comments
* fix default device tree
* fix accidental changes
* changed supported boards comment
- fancy: EFI debug, compression, LED, networking with LWIP
- Kwiboo has worked his magic on LWIP in 2026.04
- Use flashcp to write to SPI (mine needed a few times, as my flash is old and failing)
- Move FIP handling from family to board file, but still the same
- flash blue led in preboot once
- adapt 24Mhz mmc patch