Skip to content

Helios64: update uboot to v26-01#9125

Merged
igorpecovnik merged 4 commits intoarmbian:mainfrom
iav:helios64_uboot_mainline
Jan 8, 2026
Merged

Helios64: update uboot to v26-01#9125
igorpecovnik merged 4 commits intoarmbian:mainfrom
iav:helios64_uboot_mainline

Conversation

@iav
Copy link
Contributor

@iav iav commented Dec 24, 2025

use dts from linux upstream

studies with AI agent.
Boot log:

U-Boot TPL 2026.01-rc5_armbian-2026.01-rc5-S0f6f-Ped1b-Hbed3-Vb80f-Bbf55-R448a (Dec 24 2025 - 01:16:37)

yes, only one line.

Summary by CodeRabbit

  • New Features
    • Full Helios64 board support: hardware init, power/regulators, PCIe/SATA/USB, LEDs, boot flow, device-tree and default defconfig.
    • On-board OTP readout exposing board revision, serial, variant and automatic MAC provisioning; board info populated into environment.
  • Bug Fixes
    • Enabled U-Boot btrfs extension and adjusted rootfs matching for boot handling.
  • Chores
    • Added board patch overlays, boot/DDR blob settings, boot-scenario update, and maintainer entry.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 24, 2025

📝 Walkthrough

Walkthrough

Adds Helios64 RK3399 support: Armbian board config updates, U-Boot board port with driver and OTP SPI reader, device trees (U-Boot + upstream), defconfig/Kconfig/Makefile/MAINTAINERS, and patch overlay mappings for integration.

Changes

Cohort / File(s) Summary
Armbian board config
config/boards/helios64.conf
Added BOOTBRANCH, BOOTPATCHDIR, DDR_BLOB; switched BOOT_SCENARIObinman-atf-mainline; removed btrfs from ROOTFS_TYPE regex; enabled uboot-btrfs.
U-Boot top-level patching config
patch/u-boot/v2026.01/0000.patching_config.yaml
Added overlay mapping { source: "dt_uboot", target: "arch/arm/dts" }.
Board patch overlays
patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
New board patching_config listing overlays: defconfig, dt_upstream_rockchip, dt_uboot, board, include_configs.
Kconfig / integration
patch/.../1001-helios64-enable-target.patch, patch/.../board/Kconfig
Added TARGET_HELIOS64 bool, sourced board Kconfig, and declared Helios64-specific Kconfig entries and defaults.
Board build & metadata
patch/.../board/MAINTAINERS, patch/.../board/Makefile, patch/.../defconfig/helios64-rk3399_defconfig, patch/.../include_configs/helios64.h
Added MAINTAINERS entry for Helios64; set obj-y := helios64.o sys_otp.o; added comprehensive defconfig; override BOOT_TARGETS.
Exception include fix
patch/.../1000-exception-include-string.patch
Added #include <string.h> to include/exception.h.
Board driver implementation
patch/.../board/helios64.c
New board driver: early/runtime/late init hooks, IO/regulator/LED setup, boot-target swap logic, CPUID/MAC provisioning, DT augmentation, and exported init APIs.
SPI OTP subsystem
patch/.../board/sys_otp.c, patch/.../board/sys_otp.h
New SPI-based OTP reader: packed otp struct, SPI init/read, header/CRC validation, caching, and accessors (read_otp_data, get_revision, get_variant, set_board_info, mac_read_from_otp).
Device tree (U-Boot & upstream)
patch/.../dt_uboot/rk3399-kobol-helios64-u-boot.dtsi, patch/.../dt_upstream_rockchip/rk3399-kobol-helios64.dts
Added U-Boot DT overlay and upstream DTS: regulators, PMIC, power rails, peripherals, GPIO hogs, PCIe/SPI bindings, SATA, and U-Boot SPI flash node.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant ROM as Boot ROM / SPL
  participant ATF as ATF (BL31)
  participant UBoot as U-Boot
  participant Board as helios64.c
  participant OTP as sys_otp (SPI)
  participant HW as Hardware (SPI/GPIO/Regulators)

  ROM->>ATF: handoff
  ATF->>UBoot: launch
  UBoot->>Board: board_early_init_f()
  Board->>HW: configure IO domains & regulators
  Board->>HW: init LEDs / GPIO hogs
  UBoot->>Board: board_early_init_r()
  Board->>OTP: read_otp_data()
  OTP->>HW: claim SPI & transfer
  OTP->>OTP: validate header & CRC
  OTP-->>Board: OTP data (or error)
  Board->>UBoot: set_board_info(), mac_read_from_otp()
  Board->>UBoot: adjust boot_targets (if SD)
  UBoot->>Board: ft_board_setup()
  Board->>UBoot: inject board properties into DT
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Suggested labels

BSP

Suggested reviewers

  • prahal
  • amazingfate
  • SuperKali
  • Tonymac32
  • NicoD-SBC
  • ColorfulRhino
  • rpardini

Poem

🐇 I nibbled at SPI pins through the night,

OTP whispers glowed in moonlit bytes,
LEDs blinked a tiny, hopeful tune,
Helios64 woke to a rabbit's delight,
Hops, beeps, and board‑rev hugs under the moon.

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.09% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Helios64: update uboot to v26-01' accurately summarizes the primary change: updating U-Boot for the Helios64 board to version 2026.01, which is clearly supported by the extensive changeset involving board configuration, patches, and device tree updates.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 0170a20 and 8958193.

📒 Files selected for processing (1)
  • config/boards/helios64.conf
🚧 Files skipped from review as they are similar to previous changes (1)
  • config/boards/helios64.conf

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added 02 Milestone: First quarter release size/large PR with 250 lines or more Needs review Seeking for review Hardware Hardware related like kernel, U-Boot, ... Patches Patches related to kernel, U-Boot, ... labels Dec 24, 2025
@rpardini
Copy link
Member

Hmm. @iav If you suspect RAM init being a problem, and this being rk3399, maybe instead of open-source ATF, keep on using the rk blob? I had very similar troubles on the Tinkerboard2 years ago.

@iav
Copy link
Contributor Author

iav commented Dec 25, 2025

maybe instead of open-source ATF, keep on using the rk blob?

Yes, it is my next step if I finish my current try without success.

@iav
Copy link
Contributor Author

iav commented Dec 25, 2025

something boots. but what exactly is not yet clear.
puttyCOM16.log

@iav iav force-pushed the helios64_uboot_mainline branch from 4bccc4a to fb9402a Compare December 25, 2025 21:37
@iav
Copy link
Contributor Author

iav commented Dec 25, 2025

  • Switched to the binman-atf-mainline scenario with the same rkbin DDR blob
    rk3399_ddr_933MHz_v1.25.bin (TPL blob, as in the old working loader). DRAM init is correct, full
    4 GB visible, Linux boots.
  • U-Boot and DTS updated to v2026.01-rc5. Added MDIO/PHY node and phy-handle in rk3399-kobol-
    helios64.dts, fixing “mdio node is missing”. Disabled i2s2 in the U-Boot DT to avoid rockchip-
    i2s ... Could not register PCM.
  • boot_targets in U-Boot config shortened (mmc1, scsi0, usb0, pxe, dhcp) to avoid env_buf ... too
    small; however, the last built binary still shows the warning (needs rebuild with the shortened
    list or enlarging the buffer).
  • Boot flow: bootstd scans SD (mmc0) and eMMC (mmc1); SD boot works even without mmc0 in
    boot_targets.
  • Other changes: defconfig has CONFIG_ROCKCHIP_EXTERNAL_TPL=y to use the external DDR blob.

Boots.
putty.log

@rpardini
Copy link
Member

Fantastic, congratulations.

@iav iav force-pushed the helios64_uboot_mainline branch 6 times, most recently from 008d0b7 to f0708fd Compare December 26, 2025 00:10
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (5)
patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig (1)

81-81: Consider reducing log levels for production builds.

The log levels are currently set to 7 (LOG_DEBUG) for all boot stages (U-Boot, SPL, and TPL). While appropriate for initial bringup and debugging, you may want to reduce these to lower levels (e.g., 4 or 5) in future iterations for production builds to improve boot speed and reduce log noise.

Also applies to: 83-83, 158-158

patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch (1)

57-63: BOOT_TARGET_SCSI macro not used in BOOT_TARGET_DEVICES.

The BOOT_TARGET_SCSI(func) macro is defined at lines 48-51 to conditionally include SCSI based on CONFIG_IS_ENABLED(SCSI), but BOOT_TARGET_DEVICES at lines 58-63 uses func(SCSI, scsi, 0) directly instead of BOOT_TARGET_SCSI(func). This means SCSI will be included in boot targets even when SCSI is disabled.

🔎 Proposed fix
 #undef BOOT_TARGET_DEVICES
 #define BOOT_TARGET_DEVICES(func) \
 	func(MMC, mmc, 1) \
-	func(SCSI, scsi, 0) \
+	BOOT_TARGET_SCSI(func) \
 	func(USB, usb, 0) \
 	func(PXE, pxe, na) \
 	func(DHCP, dhcp, na)
patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)

40-41: Unused variable grf in SPL build.

The grf pointer is defined but never used in board_early_init_f(). Only gpio is used for the LED control.

🔎 Proposed fix
 #ifdef CONFIG_SPL_BUILD
 #define GPIO0_BASE      0xff720000
-#define GRF_BASE		0xff770000
-	struct rk3399_grf_regs * const grf = (void *)GRF_BASE;
 	struct rockchip_gpio_regs * const gpio = (void *)GPIO0_BASE;
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (2)

57-70: Minor memory leak if SPI initialization fails.

strdup() at line 64 allocates memory that is never freed if _spi_get_bus_and_cs() fails. While minor (runs once at boot), consider freeing on error for correctness.

🔎 Proposed fix
 static int init_system_otp(int bus, int cs)
 {
 	int ret;
 	char name[30], *str;
 	struct udevice *dev;

 	snprintf(name, sizeof(name), "generic_%d:%d", bus, cs);
 	str = strdup(name);
 	if (!str)
 		return -ENOMEM;
 	ret = _spi_get_bus_and_cs(bus, cs, 25000000, CONFIG_DEFAULT_SPI_MODE, "spi_generic_drv",
 				 str, &dev, &slave);
+	if (ret)
+		free(str);
 	return ret;
 }

103-104: Potential strict aliasing and alignment concerns.

Casting otp.serial_num (a u8[6] array) to uint64_t* may cause strict aliasing violations and alignment issues on some architectures. While this works on ARM/RK3399, consider using get_unaligned_le48() or manual byte extraction for portability.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 8fb61c9 and 1c3baaf.

📒 Files selected for processing (15)
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/Makefile
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
💤 Files with no reviewable changes (1)
  • patch/u-boot/v2026.01/0000.patching_config.yaml
🧰 Additional context used
🧠 Learnings (45)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-12-17T15:46:22.709Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9096
File: patch/kernel/archive/sunxi-6.18/patches.armbian/arm64-dts-sun50i-h616-add-overlays.patch:4-5
Timestamp: 2025-12-17T15:46:22.709Z
Learning: In Armbian kernel patches, when patches are renamed or reorganized, the old Subject line may be intentionally preserved in the patch header (as a second Subject line) for archival/historical purposes to document the previous patch name. This is an Armbian-specific practice for tracking patch evolution and should not be flagged as an error when the maintainer has intentionally included it for documentation.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-12-17T05:09:02.306Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-07-23T07:30:52.265Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
📚 Learning: 2025-09-14T11:37:35.089Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:65-72
Timestamp: 2025-09-14T11:37:35.089Z
Learning: In the Armbian build system, patch directories referenced in BOOTPATCHDIR and KERNELPATCHDIR configurations can be non-existent without causing build failures. Empty patch directories are also ignored by git, so missing patch directories should not be flagged as errors during code review.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-08-30T04:13:16.457Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T04:13:16.457Z
Learning: Armbian kernel configuration files like linux-filogic-current.config are autogenerated overlays on top of arch defconfig. Comments added manually will be lost during future updates by maintainers, and explicit "CONFIG_OPTION is not set" statements aren't needed for mutually exclusive options since these are overlay configs that only specify changes from the base configuration.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-06-25T03:42:09.086Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:42:09.086Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, KERNELSOURCE is explicitly declared when using unofficial or 3rd party kernel repositories (like the "dev" branch using https://github.com/apritzel/linux), but can be omitted when using the standard mainline kernel (like the "edge" branch) since it will fall back to the default mainline source.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
📚 Learning: 2025-10-26T10:41:35.118Z
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-06-25T03:40:52.109Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:40:52.109Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, when KERNELSOURCE is not explicitly declared in a case branch, the system falls back to a default KERNELSOURCE value, so missing KERNELSOURCE declarations are not critical issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-09-18T03:36:17.862Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-07-17T04:12:33.125Z
Learnt from: pyavitz
Repo: armbian/build PR: 8388
File: config/boards/kickpik2b.conf:1-14
Timestamp: 2025-07-17T04:12:33.125Z
Learning: In the Armbian build system, board configuration files (*.conf) follow a project standard of not including shebang lines, even though they contain bash code and are sourced by the build system. This is an established Armbian convention that individual contributors are expected to follow, and changes to this standard would require broader project maintainer approval.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-12T19:28:38.491Z
Learnt from: Grippy98
Repo: armbian/build PR: 8622
File: config/sources/families/k3.conf:66-66
Timestamp: 2025-09-12T19:28:38.491Z
Learning: In the Armbian k3 family build system (config/sources/families/k3.conf), builds do not fail when TIBOOT3_BOOTCONFIG is unset, even though tiboot3.bin is still listed in UBOOT_TARGET_MAP. The gating mechanism in pre_config_uboot_target__build_first_stage function works as intended to conditionally build/copy tiboot3.bin only when TIBOOT3_BOOTCONFIG is defined.

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1002-helios64-config-header.patch
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-08-03T15:21:20.148Z
Learnt from: pyavitz
Repo: armbian/build PR: 8455
File: config/sources/families/sun50iw1.conf:19-24
Timestamp: 2025-08-03T15:21:20.148Z
Learning: In the Armbian build system, when copying firmware files during family_tweaks_s(), use /lib/firmware/updates/ instead of /lib/firmware/ to avoid conflicts with the Armbian firmware package. The /lib/firmware/updates directory takes precedence in Linux firmware loading hierarchy and is the proper location for user-installed firmware files.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-14T06:29:18.958Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:64-70
Timestamp: 2025-09-14T06:29:18.958Z
Learning: In the Armbian build system, vendor branch configurations in family files are designed to be shared across multiple SoCs within the same family that use the same vendor kernel tree. For example, rk35xx and rockchip-rk3588 families both use identical vendor branch settings (same KERNELSOURCE, KERNELBRANCH, and KERNELPATCHDIR), demonstrating that vendor branches are intentionally generic rather than SoC-specific.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-11-10T22:05:40.490Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8913
File: config/sources/families/k3-beagle.conf:16-16
Timestamp: 2025-11-10T22:05:40.490Z
Learning: In the Armbian build system, kernel branches using non-mainline/vendor forks (like BeagleBoard's linux repository) should be named "vendor" or "vendor-rt" rather than "current" or "edge". The "current" and "edge" naming is reserved for mainline kernel branches. This affects both the case statement in family config files (e.g., `vendor | vendor-rt)` instead of `current | current-rt)`) and the corresponding KERNEL_TARGET declarations in board config files.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-09-18T03:36:17.862Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files, .wip and .conf extensions require BOARD_MAINTAINER to be present and contain at least one maintainer. If no maintainer is present, the board support rules state it does not qualify for standard support and must be moved to community support (.csc extension). This is documented at https://docs.armbian.com/User-Guide_Board-Support-Rules/

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-08-30T06:56:33.372Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:56:33.372Z
Learning: In Armbian kernel configuration, the BTRFS configuration logic preserves existing settings (whether built-in 'y' or module 'm') and only sets BTRFS_FS to module when it was previously disabled or not set, achieving "allow but not require" flexibility while maintaining backward compatibility.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-01T06:11:43.476Z
Learnt from: wei633
Repo: armbian/build PR: 8557
File: config/bootscripts/boot-xpressreal-t3.cmd:0-0
Timestamp: 2025-09-01T06:11:43.476Z
Learning: In Armbian boot scripts without initramfs support, UUID= and LABEL= style device paths cannot be used for rootdev as they require initramfs to resolve during boot. Only direct device paths (/dev/mmcblkXpY) or PARTUUID= references (which U-Boot can resolve) will work.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-07-27T13:03:53.146Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:2664-2671
Timestamp: 2025-07-27T13:03:53.146Z
Learning: In the Armbian build system's kernel configuration, when CONFIG_EXT2_FS=y and CONFIG_EXT3_FS=y are both set to built-in, EXT4 filesystem support becomes automatically available/hard-coded without requiring an explicit CONFIG_EXT4_FS line in the configuration file. This is specific to how Armbian handles kernel configuration and differs from typical standalone Linux kernel configuration behavior.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-27T21:47:58.020Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-bcm2711-edge.config:859-861
Timestamp: 2025-09-27T21:47:58.020Z
Learning: In the Armbian build system, kernel configuration files in config/kernel/ are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-09-27T21:50:15.915Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sunxi64-current.config:94-94
Timestamp: 2025-09-27T21:50:15.915Z
Learning: When kernel config files are generated through Armbian's automated process (previous config → armbian-kernel.sh changes → make oldconfig → Armbian machinery processing), manual config file edits are not appropriate since they would be overwritten. Deprecated option handling should be implemented in the automated tooling instead.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-09-27T21:49:55.796Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8678
File: config/kernel/linux-sm8250-current.config:78-80
Timestamp: 2025-09-27T21:49:55.796Z
Learning: In the Armbian build system, kernel configuration files are generated through an automated process: taking previous config → applying scripted changes from armbian-kernel.sh → running kernel's `make oldconfig` → processing by Armbian machinery back into config files. This automated process properly handles kernel configuration dependencies and reduces the likelihood of manual configuration errors.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-10-26T12:56:29.185Z
Learnt from: rpardini
Repo: armbian/build PR: 8820
File: config/sources/families/include/meson64_common.inc:51-53
Timestamp: 2025-10-26T12:56:29.185Z
Learning: In the Armbian build framework, scripts/config correctly handles kernel configuration option names both with and without the CONFIG_ prefix, so opts_m+=("CONFIG_RTL8822CS") and opts_m+=("RTL8822CS") are both valid and will work correctly.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-09-07T17:39:32.272Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8586
File: config/boards/nanopi-r76s.conf:15-21
Timestamp: 2025-09-07T17:39:32.272Z
Learning: In the Armbian build system, the variables $BOARD and $SDCARD are always set by the build framework, so guard checks for these variables are unnecessary in board configuration files and hook functions.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
📚 Learning: 2025-11-08T06:39:24.527Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8886
File: patch/kernel/rk35xx-vendor-6.1/dt/rk3528-nanopi-rev01.dts:9-9
Timestamp: 2025-11-08T06:39:24.527Z
Learning: In Armbian's Rockchip vendor kernel branches (rk35xx-vendor), device tree files may not require the same headers as mainline Linux. For example, input key definitions like KEY_BACK and KEY_VOLUMEUP may be handled differently in BSP kernels and don't necessarily need explicit includes like <dt-bindings/input/input.h> that would be required in mainline kernel device trees.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-11-15T14:33:30.654Z
Learnt from: SuperKali
Repo: armbian/build PR: 8936
File: patch/kernel/archive/rockchip64-6.18/dt/rk3576-nanopi-r76s.dts:800-802
Timestamp: 2025-11-15T14:33:30.654Z
Learning: In RK3576 device tree files (like rk3576-nanopi-r76s.dts), the serial0 alias is already defined in the upstream kernel's rk3576.dtsi base file, so board-specific DTS files do not need to redeclare it when enabling &uart0 for serial console.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-12-23T04:44:25.212Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9067
File: patch/kernel/archive/rockchip64-6.19/dt/rk3399-orangepi-4-lts.dts:869-875
Timestamp: 2025-12-23T04:44:25.212Z
Learning: During code reviews of device tree changes (any .dts file), verify node properties against the official kernel device tree binding documentation (*.yaml) rather than relying solely on patterns observed in existing DTS files. This helps catch copy-paste or drift errors and ensures properties align with authoritative bindings for each device node type.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-07-27T15:53:30.629Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:805-825
Timestamp: 2025-07-27T15:53:30.629Z
Learning: In the Armbian build system, kernel configurations prioritize broad hardware compatibility over optimization concerns. Even when including numerous legacy/obsolete drivers causes technical issues like increased initramfs size and slower enumeration, the project philosophy is to "appease the masses" by ensuring maximum device compatibility rather than optimizing for specific use cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-10-22T07:51:53.015Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8789
File: config/kernel/linux-sunxi64-edge.config:839-839
Timestamp: 2025-10-22T07:51:53.015Z
Learning: In Armbian's wireless driver configuration, CONFIG_RK_WIFI_DEVICE_* options are Rockchip-specific device registration settings, while CONFIG_WLAN_UWE* are the actual cross-platform driver modules for UWE5622 wireless chips. The UWE5622 chip (manufactured by Unisoc/Spreadtrum) is used on multiple Allwinner boards including Orange Pi Zero 2/2W/3 and Orange Pi 3 LTS, so CONFIG_WLAN_UWE5621/5622 along with Unisoc infrastructure options (CONFIG_SPARD_WLAN_SUPPORT, CONFIG_SC23XX, CONFIG_UNISOC_WIFI_PS, CONFIG_WCN_BSP_DRIVER_BUILDIN) are correct in sunxi64 kernel configs.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-11-10T23:44:53.363Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-11-10T23:44:53.363Z
Learning: For the RV1106 family in Armbian (config/sources/families/rockchip-rv1106.conf), udev.children-max=1 is set in the kernel boot parameters to prevent early-boot OOM errors. The RV1106 has a single-core CPU, so parallelism in udev child processes provides no practical benefit. Testing higher values is impractical due to the difficulty of monitoring at this early boot stage.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-10-22T07:56:19.424Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8789
File: config/kernel/linux-sunxi64-edge.config:839-839
Timestamp: 2025-10-22T07:56:19.424Z
Learning: In Linux kernel configuration, some `=y` (builtin) options are infrastructure or feature flags that enable subsystems or features for modular drivers, rather than directly compiling code into the kernel. For example, in Armbian wireless configs, options like CONFIG_SPARD_WLAN_SUPPORT=y, CONFIG_SC23XX=y, CONFIG_WCN_BSP_DRIVER_BUILDIN=y, CONFIG_UNISOC_WIFI_PS=y are module infrastructure/feature enablers, while the actual drivers (CONFIG_WLAN_UWE5621=m, CONFIG_WLAN_UWE5622=m) remain as loadable modules. These infrastructure options don't cause kernel bloat.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-08-11T22:00:13.411Z
Learnt from: rafayahmed317
Repo: armbian/build PR: 8484
File: config/kernel/linux-rk35xx-vendor.config:904-906
Timestamp: 2025-08-11T22:00:13.411Z
Learning: In the linux-rk35xx-vendor kernel, the LTE driver options (CONFIG_LTE, CONFIG_LTE_RM310, CONFIG_LTE_EM05) are defined as boolean in drivers/net/lte/Kconfig and cannot be built as modules - they must be either built-in (=y) or disabled.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
🧬 Code graph analysis (2)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.h (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)
  • read_otp_data (127-179)
  • set_board_info (207-221)
  • get_revision (181-190)
  • get_variant (192-205)
  • mac_read_from_otp (223-249)
patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)
  • read_otp_data (127-179)
  • set_board_info (207-221)
  • mac_read_from_otp (223-249)
  • get_revision (181-190)
  • get_variant (192-205)
🪛 checkmake (0.2.2)
patch/u-boot/v2026.01/board_helios64/board/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

🪛 Cppcheck (2.19.0)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c

[error] 248-248: Uninitialized variable

(uninitvar)

🔇 Additional comments (20)
patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch (2)

1-11: Patch header format looks good.

The patch metadata follows standard Git format-patch conventions. The placeholder From/Date/commit hash values are acceptable for local Armbian patches, and the Subject/commit message clearly describe the fix.


13-25: Patch is correct; part of new board_helios64 support in v2026.01.

The addition of #include <string.h> to include/exception.h is the minimal and correct fix for implicit string function declarations. This is new support for helios64 board in v2026.01 (not ported from earlier versions), so upstream status verification is optional and does not block this change.

patch/u-boot/v2026.01/board_helios64/board/Makefile (1)

1-5: LGTM - Static analysis warnings are false positives.

The checkmake warnings about missing phony targets ("all", "clean", "test") can be safely ignored. This is a standard U-Boot board Makefile pattern that's included by the larger U-Boot build system, which provides these targets at the top level.

patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch (2)

21-27: LGTM - Clean Kconfig integration.

The TARGET_HELIOS64 config option is well-defined with appropriate help text describing the board's key features.


35-35: LGTM - Proper Kconfig sourcing.

The board-specific Kconfig is correctly sourced, following the standard U-Boot pattern for board integration.

config/boards/helios64.conf (3)

7-10: LGTM - Boot configuration aligns with PR objectives.

The changes correctly implement the switch to binman-atf-mainline scenario with the external DDR blob (rk3399_ddr_933MHz_v1.25.bin) as documented in the PR objectives. The dedicated BOOTPATCHDIR follows the pattern previously suggested by rpardini.


20-20: LGTM - btrfs support enabled.

This aligns with the commit message "enable btrfs support in uBoot."


22-22: LGTM - ROOTFS_TYPE conditional narrowed.

The condition now explicitly excludes btrfs (since U-Boot can handle it directly) while still requiring a separate boot partition for f2fs, nilfs2, nfs, and xfs.

patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml (1)

1-9: LGTM - Well-structured patching configuration.

The overlay directory mappings correctly organize board-specific patches, keeping them self-contained as requested in previous review feedback.

patch/u-boot/v2026.01/board_helios64/board/sys_otp.h (1)

1-10: LGTM - Clean OTP API interface.

The header provides a well-defined interface for OTP operations, with proper include guards and function declarations that align with the implementation.

patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig (1)

40-40: LGTM - External TPL correctly enabled.

This setting aligns with the PR objectives to use the external rkbin DDR blob (rk3399_ddr_933MHz_v1.25.bin).

patch/u-boot/v2026.01/board_helios64/board/Kconfig (1)

1-24: LGTM - Standard board Kconfig structure.

The Kconfig entries follow U-Boot conventions and set appropriate defaults for board identification and environment storage. The conditional ENV settings for SPI flash are correctly structured.

patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts (3)

1-28: LGTM - Well-structured device tree with proper licensing and board identification.

The DTS file properly defines the Kobol Helios64 board with correct SPDX license, copyright, compatible string, and aliases. The structure follows standard Rockchip RK3399 DTS conventions.


796-799: i2s2 disabled to avoid boot errors - aligns with PR objectives.

Disabling i2s2 prevents the rockchip-i2s PCM registration errors mentioned in the PR discussion. This is appropriate for U-Boot DT where audio functionality isn't needed.


469-494: MDIO node and phy-handle addition fixes ethernet initialization.

The addition of the mdio child node with rgmii_phy and the phy-handle = <&rgmii_phy> reference addresses the "mdio node is missing" error mentioned in the PR. The PHY configuration with internal delay settings follows RK3399 RGMII conventions.

patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)

116-178: LGTM - Boot target swapping logic is well-implemented.

The setup_boottargets() function correctly swaps mmc0/mmc1 when booting from SD card, while preserving any user-customized environment. The implementation follows established patterns from other Rockchip boards.

patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi (3)

1-24: LGTM - Proper U-Boot DT overlay structure.

The file correctly includes the base U-Boot and SDRAM configuration, defines appropriate boot order with SPI flash priority, and sets early console parameters. The SPL payload offset at 512KB aligns with typical Rockchip boot layout.


26-84: GPIO hogs properly configured for board hardware control.

The GPIO hog definitions correctly set up:

  • USB mux control (HS select and OE)
  • Flash write-protect signals
  • Auto-on enable signals for power sequencing
  • Board revision ID inputs

These align with the board initialization code in helios64.c that looks up these hogs by name.


116-124: Regulator init values set for stable RK3399 operation.

The vdd_center at 950mV and vdd_log at 930mV are appropriate for RK3399 stability. These values complement the init_vdd_center() function in helios64.c.

patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (1)

127-179: LGTM - OTP read flow with proper validation.

The read_otp_data() function correctly implements caching (has_been_read), SPI bus handling, CRC validation, and error paths. The security register read command (0x48) follows standard SPI NOR OTP conventions.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (1)

207-221: Consider using memcpy to avoid unaligned access.

Lines 217-218 cast a u8[] array to uint64_t* for reading the serial number. This type punning can cause undefined behavior or bus errors on strict-alignment architectures (some ARM variants). While this is legacy code being ported, consider using memcpy to a local uint64_t variable to ensure safe access.

🔎 Safer approach using memcpy
 void set_board_info(void)
 {
 	char env_str[13];
+	uint64_t serial;
 
 	if (!is_data_valid())
 		return;
 
 	snprintf(env_str, sizeof(env_str), "%i.%i", (otp.revision & 0xf0) >> 4, otp.revision & 0x0f);
 	env_set("board_rev", env_str);
 
-	sprintf(env_str, "%012llx", *((uint64_t*) otp.serial_num) &
-		0xFFFFFFFFFFFF);
+	memcpy(&serial, otp.serial_num, sizeof(otp.serial_num));
+	sprintf(env_str, "%012llx", serial & 0xFFFFFFFFFFFF);
 
 	env_set("serial#", env_str);
 }

Based on learnings: When porting U-Boot patches, maintaining consistency with existing code is prioritized. This suggestion can be deferred if you prefer to maintain bug-for-bug compatibility with the legacy implementation.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 1d66679 and dda4e77.

📒 Files selected for processing (1)
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
🧰 Additional context used
🧠 Learnings (14)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.
Learnt from: Grippy98
Repo: armbian/build PR: 8622
File: config/sources/families/k3.conf:66-66
Timestamp: 2025-09-12T19:28:38.491Z
Learning: In the Armbian k3 family build system (config/sources/families/k3.conf), builds do not fail when TIBOOT3_BOOTCONFIG is unset, even though tiboot3.bin is still listed in UBOOT_TARGET_MAP. The gating mechanism in pre_config_uboot_target__build_first_stage function works as intended to conditionally build/copy tiboot3.bin only when TIBOOT3_BOOTCONFIG is defined.
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-09-25T18:37:00.330Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-17T05:09:02.306Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-17T15:46:22.709Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9096
File: patch/kernel/archive/sunxi-6.18/patches.armbian/arm64-dts-sun50i-h616-add-overlays.patch:4-5
Timestamp: 2025-12-17T15:46:22.709Z
Learning: In Armbian kernel patches, when patches are renamed or reorganized, the old Subject line may be intentionally preserved in the patch header (as a second Subject line) for archival/historical purposes to document the previous patch name. This is an Armbian-specific practice for tracking patch evolution and should not be flagged as an error when the maintainer has intentionally included it for documentation.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-11-06T15:36:04.682Z
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
🔇 Additional comments (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (1)

223-248: Uninitialized variable fix confirmed.

The previously flagged uninitialized ret variable issue has been properly addressed. The function now correctly returns 0 on the success path (line 247) and -1 on error (line 228).

@iav iav force-pushed the helios64_uboot_mainline branch 2 times, most recently from 7a950a4 to e56e5ed Compare January 1, 2026 21:11
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi (1)

58-84: Minor: Consider adding line-name properties to board revision GPIO hogs for consistency.

The board-rev-id-0 and board-rev-id-1 hogs are missing line-name properties, unlike all other GPIO hogs in this file. Adding them would improve debugging visibility via /sys/kernel/debug/gpio.

🔎 Suggested addition
 	board-rev-id-0 {
 		gpio-hog;
 		gpios = <RK_PD5 GPIO_ACTIVE_HIGH>;
 		input;
+		line-name = "BOARD_REV_ID_0";
 	};

 	board-rev-id-1 {
 		gpio-hog;
 		gpios = <RK_PD6 GPIO_ACTIVE_HIGH>;
 		input;
+		line-name = "BOARD_REV_ID_1";
 	};
patch/u-boot/v2026.01/board_helios64/board/helios64.c (2)

180-188: Consider adding error checks for LED operations.

The LED operations at lines 184-187 don't check return values from led_get_by_label or led_set_state. While LED control is non-critical and boot should proceed even if it fails, adding basic error checks would improve robustness.

🔎 Example with error checking
 static void setup_leds(void)
 {
 	struct udevice *dev;
+	int ret;
 
-	led_get_by_label("helios64::status", &dev);
-	led_set_state(dev, LEDST_OFF);
-	mdelay(250);
-	led_set_state(dev, LEDST_ON);
+	ret = led_get_by_label("helios64::status", &dev);
+	if (ret) {
+		debug("%s: Failed to get status LED\n", __func__);
+		return;
+	}
+	
+	led_set_state(dev, LEDST_OFF);
+	mdelay(250);
+	led_set_state(dev, LEDST_ON);
 }

263-279: Document the 10-second delay for HDD spinup.

Line 272 contains a 10-second delay (mdelay(10000)) which is unusually long for typical initialization code. This is likely intentional to allow sufficient time for HDD spinup before SCSI scanning, but should be documented to prevent future maintainers from mistaking it for a bug.

🔎 Suggested documentation
 	ret = regulator_get_by_platname("hdd_a_power", &rail_a);
 	if (!ret) {
 		ret = regulator_set_enable(rail_a, true);
-		if (!ret)
+		if (!ret)
+			/* Wait for HDD spinup before SCSI scan */
 			mdelay(10000);
 	}
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 9cef379 and 7a950a4.

📒 Files selected for processing (15)
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/Makefile
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
💤 Files with no reviewable changes (1)
  • patch/u-boot/v2026.01/0000.patching_config.yaml
🚧 Files skipped from review as they are similar to previous changes (6)
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
🧰 Additional context used
🧠 Learnings (40)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:64-70
Timestamp: 2025-09-14T06:10:25.610Z
Learning: In the Armbian build system, rk32xx and rk33xx Rockchip SoCs no longer have BSP-based (vendor) kernel branches. The rk3506 is the first 32-bit Rockchip SoC to use the vendor branch in the current codebase.
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-11-15T14:33:30.654Z
Learnt from: SuperKali
Repo: armbian/build PR: 8936
File: patch/kernel/archive/rockchip64-6.18/dt/rk3576-nanopi-r76s.dts:800-802
Timestamp: 2025-11-15T14:33:30.654Z
Learning: In RK3576 device tree files (like rk3576-nanopi-r76s.dts), the serial0 alias is already defined in the upstream kernel's rk3576.dtsi base file, so board-specific DTS files do not need to redeclare it when enabling &uart0 for serial console.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-17T05:09:02.306Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-10-26T10:41:35.118Z
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-11-10T23:44:53.363Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-11-10T23:44:53.363Z
Learning: For the RV1106 family in Armbian (config/sources/families/rockchip-rv1106.conf), udev.children-max=1 is set in the kernel boot parameters to prevent early-boot OOM errors. The RV1106 has a single-core CPU, so parallelism in udev child processes provides no practical benefit. Testing higher values is impractical due to the difficulty of monitoring at this early boot stage.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-11-08T06:39:24.527Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8886
File: patch/kernel/rk35xx-vendor-6.1/dt/rk3528-nanopi-rev01.dts:9-9
Timestamp: 2025-11-08T06:39:24.527Z
Learning: In Armbian's Rockchip vendor kernel branches (rk35xx-vendor), device tree files may not require the same headers as mainline Linux. For example, input key definitions like KEY_BACK and KEY_VOLUMEUP may be handled differently in BSP kernels and don't necessarily need explicit includes like <dt-bindings/input/input.h> that would be required in mainline kernel device trees.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-06-12T21:14:36.024Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:38-44
Timestamp: 2025-06-12T21:14:36.024Z
Learning: In config/bootscripts/boot-sunxi.cmd the unconditional "+1" increment in func_align_addr_next (when align_overlap_oboe_avoidance="on") is intentional. It compensates for a known off-by-one error in U-Boot where the end address is calculated as start+size instead of start+size-1, so the extra page prevents overlap. This behavior should not be “optimized away”.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
📚 Learning: 2025-09-25T18:37:00.330Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-17T15:46:22.709Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9096
File: patch/kernel/archive/sunxi-6.18/patches.armbian/arm64-dts-sun50i-h616-add-overlays.patch:4-5
Timestamp: 2025-12-17T15:46:22.709Z
Learning: In Armbian kernel patches, when patches are renamed or reorganized, the old Subject line may be intentionally preserved in the patch header (as a second Subject line) for archival/historical purposes to document the previous patch name. This is an Armbian-specific practice for tracking patch evolution and should not be flagged as an error when the maintainer has intentionally included it for documentation.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-16T13:40:07.649Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 9087
File: .github/workflows/pr-check-pictures.yml:138-146
Timestamp: 2025-12-16T13:40:07.649Z
Learning: In the Armbian build repository, when introducing new requirements or checks (like the board assets verification workflow), the project prefers an initial educational-only period where violations post helpful PR comments and warnings but don't block merges. This allows contributors to become familiar with new requirements before enforcement is enabled (typically after ~6 months).

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-11-06T15:36:04.682Z
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-09-18T03:36:17.862Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-07-23T07:30:52.265Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-07-17T04:12:33.125Z
Learnt from: pyavitz
Repo: armbian/build PR: 8388
File: config/boards/kickpik2b.conf:1-14
Timestamp: 2025-07-17T04:12:33.125Z
Learning: In the Armbian build system, board configuration files (*.conf) follow a project standard of not including shebang lines, even though they contain bash code and are sourced by the build system. This is an established Armbian convention that individual contributors are expected to follow, and changes to this standard would require broader project maintainer approval.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-18T03:36:17.862Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files, .wip and .conf extensions require BOARD_MAINTAINER to be present and contain at least one maintainer. If no maintainer is present, the board support rules state it does not qualify for standard support and must be moved to community support (.csc extension). This is documented at https://docs.armbian.com/User-Guide_Board-Support-Rules/

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-09-14T11:37:35.089Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:65-72
Timestamp: 2025-09-14T11:37:35.089Z
Learning: In the Armbian build system, patch directories referenced in BOOTPATCHDIR and KERNELPATCHDIR configurations can be non-existent without causing build failures. Empty patch directories are also ignored by git, so missing patch directories should not be flagged as errors during code review.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-08-03T15:21:20.148Z
Learnt from: pyavitz
Repo: armbian/build PR: 8455
File: config/sources/families/sun50iw1.conf:19-24
Timestamp: 2025-08-03T15:21:20.148Z
Learning: In the Armbian build system, when copying firmware files during family_tweaks_s(), use /lib/firmware/updates/ instead of /lib/firmware/ to avoid conflicts with the Armbian firmware package. The /lib/firmware/updates directory takes precedence in Linux firmware loading hierarchy and is the proper location for user-installed firmware files.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-14T06:29:18.958Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:64-70
Timestamp: 2025-09-14T06:29:18.958Z
Learning: In the Armbian build system, vendor branch configurations in family files are designed to be shared across multiple SoCs within the same family that use the same vendor kernel tree. For example, rk35xx and rockchip-rk3588 families both use identical vendor branch settings (same KERNELSOURCE, KERNELBRANCH, and KERNELPATCHDIR), demonstrating that vendor branches are intentionally generic rather than SoC-specific.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-11-10T22:05:40.490Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8913
File: config/sources/families/k3-beagle.conf:16-16
Timestamp: 2025-11-10T22:05:40.490Z
Learning: In the Armbian build system, kernel branches using non-mainline/vendor forks (like BeagleBoard's linux repository) should be named "vendor" or "vendor-rt" rather than "current" or "edge". The "current" and "edge" naming is reserved for mainline kernel branches. This affects both the case statement in family config files (e.g., `vendor | vendor-rt)` instead of `current | current-rt)`) and the corresponding KERNEL_TARGET declarations in board config files.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-06-25T03:42:09.086Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:42:09.086Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, KERNELSOURCE is explicitly declared when using unofficial or 3rd party kernel repositories (like the "dev" branch using https://github.com/apritzel/linux), but can be omitted when using the standard mainline kernel (like the "edge" branch) since it will fall back to the default mainline source.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-08-30T06:56:33.372Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:56:33.372Z
Learning: In Armbian kernel configuration, the BTRFS configuration logic preserves existing settings (whether built-in 'y' or module 'm') and only sets BTRFS_FS to module when it was previously disabled or not set, achieving "allow but not require" flexibility while maintaining backward compatibility.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-01T06:11:43.476Z
Learnt from: wei633
Repo: armbian/build PR: 8557
File: config/bootscripts/boot-xpressreal-t3.cmd:0-0
Timestamp: 2025-09-01T06:11:43.476Z
Learning: In Armbian boot scripts without initramfs support, UUID= and LABEL= style device paths cannot be used for rootdev as they require initramfs to resolve during boot. Only direct device paths (/dev/mmcblkXpY) or PARTUUID= references (which U-Boot can resolve) will work.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-07-27T13:03:53.146Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:2664-2671
Timestamp: 2025-07-27T13:03:53.146Z
Learning: In the Armbian build system's kernel configuration, when CONFIG_EXT2_FS=y and CONFIG_EXT3_FS=y are both set to built-in, EXT4 filesystem support becomes automatically available/hard-coded without requiring an explicit CONFIG_EXT4_FS line in the configuration file. This is specific to how Armbian handles kernel configuration and differs from typical standalone Linux kernel configuration behavior.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-12-28T01:49:28.830Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9136
File: lib/functions/compilation/armbian-kernel.sh:529-537
Timestamp: 2025-12-28T01:49:28.830Z
Learning: In lib/functions/compilation/armbian-kernel.sh's opts_m handling, checking .config (kernel defconfig) is problematic because savedefconfig elides options matching defconfig, making it impossible to distinguish overlay silence from defconfig agreement. The correct approach is to check only kernel_config_source_filename (the overlay) for explicit =y, otherwise default to =m, letting savedefconfig handle deduplication with defconfig automatically.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-06-12T21:08:11.318Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:13-23
Timestamp: 2025-06-12T21:08:11.318Z
Learning: In config/bootscripts/boot-sunxi.cmd the variable name `align_overlap_oboe_avoidance` intentionally uses the acronym “OBOE” (Off-By-One Error); it is not a typo and should not be renamed.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-10-26T12:56:29.185Z
Learnt from: rpardini
Repo: armbian/build PR: 8820
File: config/sources/families/include/meson64_common.inc:51-53
Timestamp: 2025-10-26T12:56:29.185Z
Learning: In the Armbian build framework, scripts/config correctly handles kernel configuration option names both with and without the CONFIG_ prefix, so opts_m+=("CONFIG_RTL8822CS") and opts_m+=("RTL8822CS") are both valid and will work correctly.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
🧬 Code graph analysis (1)
patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)
  • read_otp_data (127-179)
  • set_board_info (207-221)
  • mac_read_from_otp (223-248)
  • get_revision (181-190)
  • get_variant (192-205)
🪛 checkmake (0.2.2)
patch/u-boot/v2026.01/board_helios64/board/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

🔇 Additional comments (25)
patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch (1)

13-25: LGTM: Correct fix for implicit string function declarations.

Adding #include <string.h> is the appropriate solution to resolve implicit declarations of strlen/strncmp used in the exception command implementation. The include placement is correct, and the change is minimal and targeted.

patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi (10)

1-4: LGTM!

License and includes are appropriate. The dual GPL-2.0+/MIT license is standard for device tree files, and the LPDDR4 SDRAM timing include aligns with the Helios64's memory configuration.


6-12: LGTM!

Aliases provide consistent device enumeration for U-Boot. The SPI remapping and dual Ethernet aliases are appropriate for the Helios64's hardware configuration.


14-18: LGTM!

The chosen node is well configured. UART2 at 0xff1a0000 with 1500000 baud matches RK3399 debug console conventions, and the SPL boot order prioritizes SPI flash for reliable boot while maintaining SD/eMMC fallback.


20-24: LGTM!

The 512KB SPL payload offset is appropriate for SPI flash boot on Rockchip platforms.


26-47: LGTM!

GPIO hogs correctly configure USB multiplexer and flash write-protect signals at boot. The active-low logic for WP and OE signals is handled correctly (output-low on active-low WP disables protection, output-high on active-low OE enables the mux).


49-56: LGTM!

SATA flash write-protect is enabled (active-low + output-high), protecting the SATA controller's flash during boot. This appropriately differs from the SoC flash WP which is disabled to allow U-Boot operations.


86-94: LGTM!

PCIe pinctrl overrides correctly configure safe default states: reset asserted and power disabled. This ensures proper sequencing when PCIe is later initialized for the JMB585 SATA controller.


96-108: LGTM!

USB mux pinctrl definitions complement the GPIO hogs, configuring the pins as GPIO with no internal pull resistors.


110-114: LGTM!

The u-boot,dm-pre-reloc property ensures the SPI flash driver is initialized early, which is required for the SPL boot order that prioritizes SPI flash.


116-124: LGTM!

Regulator voltage settings for VDD_CENTER (950mV) and VDD_LOG (930mV) are appropriate for RK3399 early boot. These conservative values ensure stable operation during power sequencing.

Please verify these voltage values match the Helios64 hardware design specifications, as incorrect regulator settings can cause instability or hardware damage.

patch/u-boot/v2026.01/board_helios64/board/Makefile (1)

1-5: LGTM!

The Makefile correctly follows U-Boot board Makefile conventions. The static analysis warnings about missing phony targets (all, clean, test) are false positives—U-Boot board Makefiles only define object lists (obj-y), and the parent build system handles top-level targets.

patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS (1)

1-6: LGTM!

The MAINTAINERS file correctly references all Helios64 board files, including the defconfig with the -rk3399 suffix for consistency with Armbian's Rockchip board naming conventions.

config/boards/helios64.conf (3)

7-10: LGTM!

The U-Boot configuration updates correctly implement the PR objectives:

  • U-Boot updated to v2026.01-rc5
  • Board-specific patch directory as suggested
  • Boot scenario changed to binman-atf-mainline with explicit DDR blob rk3399_ddr_933MHz_v1.25.bin, which resolved DRAM init issues

20-20: Good addition of U-Boot btrfs support.

Enabling the uboot-btrfs extension allows U-Boot to boot directly from btrfs filesystems, complementing the ROOTFS_TYPE change on Line 22.


22-25: LGTM!

Removing btrfs from the ROOTFS_TYPE regex is correct—with the uboot-btrfs extension enabled (Line 20), btrfs no longer requires a separate boot partition. U-Boot can now boot directly from btrfs root filesystems.

patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h (3)

11-11: LGTM!

SDRAM_BANK_SIZE of 2GB per bank correctly configures for 4GB total memory (2 banks × 2GB), matching the Helios64 hardware specification.


23-33: LGTM!

SCSI configuration is properly gated to exclude SPL builds and conditional on SCSI support. The Helios64 has a JMB585 SATA controller on PCIe, so SCSI/AHCI configuration enables SATA boot support.


35-44: LGTM!

The boot targets configuration correctly addresses the env_buf size constraint mentioned in the PR. The shortened boot_targets list (mmc1, scsi0, usb0, pxe, dhcp) avoids the env_buf-too-small warning while preserving essential boot paths. The comment correctly notes that bootstd automatically scans both SD (mmc0) and eMMC (mmc1).

patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)

57-70: LGTM!

The SPI initialization correctly uses U-Boot's device model API to locate and configure the OTP device. The generic SPI driver binding is appropriate for OTP access.


72-125: LGTM!

The debug dump function provides useful diagnostics for OTP data validation, including hex dump, parsed fields, and CRC verification.


127-179: LGTM!

The OTP read function correctly implements:

  • Read-once caching to avoid redundant SPI transactions
  • Proper SPI bus claim/release
  • Header and CRC32 validation
  • Appropriate error handling

181-221: LGTM!

The accessor functions correctly:

  • Check data validity before accessing OTP data
  • Extract revision information from packed format
  • Map variant codes to human-readable strings with bounds checking
  • Set U-Boot environment variables for board identification

223-248: LGTM!

The MAC address initialization function correctly:

  • Validates OTP data availability
  • Checks MAC address validity before use
  • Respects user-configured MAC addresses (only sets if blank)
  • Sets both ethaddr and eth1addr from OTP

The uninitialized variable issue was correctly fixed in the referenced commit.

patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)

169-174: Clarify env_get mutability requirements for direct string modification.

The code directly modifies the string returned by env_get("boot_targets") (line 130) by changing characters in the buffer, then calls env_set with the modified pointer (line 173). This assumes env_get returns mutable storage rather than const or read-only memory. While the pattern may work in current U-Boot, verification requires access to the U-Boot environment API definition (env.h) to confirm the return type guarantees mutability. If this code originates from existing upstream or reference implementations, that source should be cited for verification.

@iav
Copy link
Contributor Author

iav commented Jan 1, 2026

Old u-boot (v2022.04, main branch):

// Used BOOT_TARGET_DEVICES macro with callback function
// Intermediate macros BOOT_TARGET_MMC, BOOT_TARGET_USB etc.
// were defined in config_distro_bootcmd.h

#undef BOOT_TARGET_DEVICES
#define BOOT_TARGET_DEVICES(func)
BOOT_TARGET_MMC(func)
BOOT_TARGET_USB(func)
BOOT_TARGET_SCSI(func)
BOOT_TARGET_PXE(func)
BOOT_TARGET_DHCP(func)

New u-boot (v2026.01, current branch):

Rockchip switched to a simple BOOT_TARGETS string
rockchip-common.h: #define BOOT_TARGETS "mmc1 mmc0 nvme scsi usb pxe dhcp spi"
rk3399_common.h: "boot_targets=" BOOT_TARGETS "\0"

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch (1)

1-11: Minor: Date field uses midnight timestamp.

The patch author field has been correctly updated. The date field shows "Thu, 25 Dec 2025 00:00:00 +0000" with a midnight timestamp, which may be a placeholder. In the Armbian patch workflow this is often acceptable, but consider using the actual commit timestamp if available.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 43c108c and 702e8b6.

📒 Files selected for processing (2)
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
🚧 Files skipped from review as they are similar to previous changes (1)
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
🧰 Additional context used
🧠 Learnings (11)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-12-17T15:46:22.709Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9096
File: patch/kernel/archive/sunxi-6.18/patches.armbian/arm64-dts-sun50i-h616-add-overlays.patch:4-5
Timestamp: 2025-12-17T15:46:22.709Z
Learning: In Armbian kernel patches, when patches are renamed or reorganized, the old Subject line may be intentionally preserved in the patch header (as a second Subject line) for archival/historical purposes to document the previous patch name. This is an Armbian-specific practice for tracking patch evolution and should not be flagged as an error when the maintainer has intentionally included it for documentation.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-12-17T05:09:02.306Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
📚 Learning: 2025-09-25T18:37:00.330Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
🔇 Additional comments (1)
patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch (1)

13-25: LGTM: Correct fix for implicit string function declarations.

Adding #include <string.h> to include/exception.h properly resolves implicit declarations of strlen and strncmp used in the exception command implementation. The placement after command.h is appropriate and follows standard practice.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 702e8b6 and 6fcffcd.

📒 Files selected for processing (2)
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
🚧 Files skipped from review as they are similar to previous changes (1)
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:64-70
Timestamp: 2025-09-14T06:10:25.610Z
Learning: In the Armbian build system, rk32xx and rk33xx Rockchip SoCs no longer have BSP-based (vendor) kernel branches. The rk3506 is the first 32-bit Rockchip SoC to use the vendor branch in the current codebase.
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-10-26T10:41:35.118Z
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
🔇 Additional comments (2)
patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch (2)

1-13: LGTM! Patch header is well-formed.

The patch metadata is correct, properly credits the original work by Aditya Prayoga, and clearly describes the purpose of restoring Helios64 support for v2026.01-rc5.


22-28: LGTM! Board config is properly defined.

The TARGET_HELIOS64 configuration is correctly placed within the choice block, and the help text accurately describes the Helios64 hardware including the JMB585 SATA HBA and dual Ethernet setup mentioned in the PR discussion.

@iav iav force-pushed the helios64_uboot_mainline branch 3 times, most recently from 2a77b51 to 369d3a1 Compare January 1, 2026 23:51
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (1)

45-55: Previously discussed: OR logic in header validation.

This was discussed in prior review iterations. The author chose to maintain legacy behavior for now, with the CRC check providing a safety net.

patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)

80-89: Previously discussed: rk_setreg no-op patterns.

The rk_setreg(..., 0 << SHIFT) calls at lines 81, 84, and 88 are no-ops (legacy code migrated from the previous version). Documented for future reference.

🧹 Nitpick comments (2)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (1)

57-70: Minor: strdup result is never freed.

The string allocated at line 64 via strdup(name) is passed to _spi_get_bus_and_cs but never freed. In U-Boot's context this is typically acceptable since board init runs once and memory isn't reclaimed, but it's worth noting for code hygiene.

patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)

190-216: VLA usage in misc_init_r.

Line 194 uses cpuid_length (a const u32) to declare u8 cpuid[cpuid_length]. While this works as a VLA in C99/GNU C, some coding standards prefer fixed-size arrays for embedded code. Since cpuid_length is 0x10 (16 bytes), consider using a fixed size for clarity.

This is minor since the value is compile-time constant and the code is ported from a previous version.

🔎 Optional: Use fixed array size
 int misc_init_r(void)
 {
 	const u32 cpuid_offset = 0x7;
 	const u32 cpuid_length = 0x10;
-	u8 cpuid[cpuid_length];
+	u8 cpuid[16];
 	int ret;
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 215f262 and 369d3a1.

📒 Files selected for processing (15)
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/Makefile
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
💤 Files with no reviewable changes (1)
  • patch/u-boot/v2026.01/0000.patching_config.yaml
🚧 Files skipped from review as they are similar to previous changes (9)
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
  • config/boards/helios64.conf
🧰 Additional context used
🧠 Learnings (29)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.
Learnt from: tabrisnet
Repo: armbian/build PR: 8925
File: lib/functions/host/docker.sh:141-141
Timestamp: 2025-11-13T14:50:44.662Z
Learning: In the Armbian build system, certain boards have U-Boot that doesn't build correctly on ubuntu:noble but works on ubuntu:jammy. For these boards, DOCKER_ARMBIAN_BASE_IMAGE can be set to "ubuntu:jammy" via an extension file loaded before docker_cli_prepare() runs, allowing legacy toolchains to work while the community works on proper fixes with limited resources.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/board/Makefile
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-11-08T06:39:24.527Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8886
File: patch/kernel/rk35xx-vendor-6.1/dt/rk3528-nanopi-rev01.dts:9-9
Timestamp: 2025-11-08T06:39:24.527Z
Learning: In Armbian's Rockchip vendor kernel branches (rk35xx-vendor), device tree files may not require the same headers as mainline Linux. For example, input key definitions like KEY_BACK and KEY_VOLUMEUP may be handled differently in BSP kernels and don't necessarily need explicit includes like <dt-bindings/input/input.h> that would be required in mainline kernel device trees.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-12-17T05:09:02.306Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-11-15T14:33:30.654Z
Learnt from: SuperKali
Repo: armbian/build PR: 8936
File: patch/kernel/archive/rockchip64-6.18/dt/rk3576-nanopi-r76s.dts:800-802
Timestamp: 2025-11-15T14:33:30.654Z
Learning: In RK3576 device tree files (like rk3576-nanopi-r76s.dts), the serial0 alias is already defined in the upstream kernel's rk3576.dtsi base file, so board-specific DTS files do not need to redeclare it when enabling &uart0 for serial console.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-23T04:44:25.212Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9067
File: patch/kernel/archive/rockchip64-6.19/dt/rk3399-orangepi-4-lts.dts:869-875
Timestamp: 2025-12-23T04:44:25.212Z
Learning: During code reviews of device tree changes (any .dts file), verify node properties against the official kernel device tree binding documentation (*.yaml) rather than relying solely on patterns observed in existing DTS files. This helps catch copy-paste or drift errors and ensures properties align with authoritative bindings for each device node type.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-06-12T21:14:36.024Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:38-44
Timestamp: 2025-06-12T21:14:36.024Z
Learning: In config/bootscripts/boot-sunxi.cmd the unconditional "+1" increment in func_align_addr_next (when align_overlap_oboe_avoidance="on") is intentional. It compensates for a known off-by-one error in U-Boot where the end address is calculated as start+size instead of start+size-1, so the extra page prevents overlap. This behavior should not be “optimized away”.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
📚 Learning: 2025-09-25T18:37:00.330Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-17T15:46:22.709Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9096
File: patch/kernel/archive/sunxi-6.18/patches.armbian/arm64-dts-sun50i-h616-add-overlays.patch:4-5
Timestamp: 2025-12-17T15:46:22.709Z
Learning: In Armbian kernel patches, when patches are renamed or reorganized, the old Subject line may be intentionally preserved in the patch header (as a second Subject line) for archival/historical purposes to document the previous patch name. This is an Armbian-specific practice for tracking patch evolution and should not be flagged as an error when the maintainer has intentionally included it for documentation.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-12-16T13:40:07.649Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 9087
File: .github/workflows/pr-check-pictures.yml:138-146
Timestamp: 2025-12-16T13:40:07.649Z
Learning: In the Armbian build repository, when introducing new requirements or checks (like the board assets verification workflow), the project prefers an initial educational-only period where violations post helpful PR comments and warnings but don't block merges. This allows contributors to become familiar with new requirements before enforcement is enabled (typically after ~6 months).

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
📚 Learning: 2025-11-06T15:36:04.682Z
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
📚 Learning: 2025-10-26T10:41:35.118Z
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-08-30T04:13:16.457Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T04:13:16.457Z
Learning: Armbian kernel configuration files like linux-filogic-current.config are autogenerated overlays on top of arch defconfig. Comments added manually will be lost during future updates by maintainers, and explicit "CONFIG_OPTION is not set" statements aren't needed for mutually exclusive options since these are overlay configs that only specify changes from the base configuration.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-07-27T15:53:30.629Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:805-825
Timestamp: 2025-07-27T15:53:30.629Z
Learning: In the Armbian build system, kernel configurations prioritize broad hardware compatibility over optimization concerns. Even when including numerous legacy/obsolete drivers causes technical issues like increased initramfs size and slower enumeration, the project philosophy is to "appease the masses" by ensuring maximum device compatibility rather than optimizing for specific use cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-10-22T07:51:53.015Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8789
File: config/kernel/linux-sunxi64-edge.config:839-839
Timestamp: 2025-10-22T07:51:53.015Z
Learning: In Armbian's wireless driver configuration, CONFIG_RK_WIFI_DEVICE_* options are Rockchip-specific device registration settings, while CONFIG_WLAN_UWE* are the actual cross-platform driver modules for UWE5622 wireless chips. The UWE5622 chip (manufactured by Unisoc/Spreadtrum) is used on multiple Allwinner boards including Orange Pi Zero 2/2W/3 and Orange Pi 3 LTS, so CONFIG_WLAN_UWE5621/5622 along with Unisoc infrastructure options (CONFIG_SPARD_WLAN_SUPPORT, CONFIG_SC23XX, CONFIG_UNISOC_WIFI_PS, CONFIG_WCN_BSP_DRIVER_BUILDIN) are correct in sunxi64 kernel configs.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-11-10T23:44:53.363Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-11-10T23:44:53.363Z
Learning: For the RV1106 family in Armbian (config/sources/families/rockchip-rv1106.conf), udev.children-max=1 is set in the kernel boot parameters to prevent early-boot OOM errors. The RV1106 has a single-core CPU, so parallelism in udev child processes provides no practical benefit. Testing higher values is impractical due to the difficulty of monitoring at this early boot stage.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-10-22T07:56:19.424Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8789
File: config/kernel/linux-sunxi64-edge.config:839-839
Timestamp: 2025-10-22T07:56:19.424Z
Learning: In Linux kernel configuration, some `=y` (builtin) options are infrastructure or feature flags that enable subsystems or features for modular drivers, rather than directly compiling code into the kernel. For example, in Armbian wireless configs, options like CONFIG_SPARD_WLAN_SUPPORT=y, CONFIG_SC23XX=y, CONFIG_WCN_BSP_DRIVER_BUILDIN=y, CONFIG_UNISOC_WIFI_PS=y are module infrastructure/feature enablers, while the actual drivers (CONFIG_WLAN_UWE5621=m, CONFIG_WLAN_UWE5622=m) remain as loadable modules. These infrastructure options don't cause kernel bloat.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-10-26T12:56:29.185Z
Learnt from: rpardini
Repo: armbian/build PR: 8820
File: config/sources/families/include/meson64_common.inc:51-53
Timestamp: 2025-10-26T12:56:29.185Z
Learning: In the Armbian build framework, scripts/config correctly handles kernel configuration option names both with and without the CONFIG_ prefix, so opts_m+=("CONFIG_RTL8822CS") and opts_m+=("RTL8822CS") are both valid and will work correctly.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-08-11T22:00:13.411Z
Learnt from: rafayahmed317
Repo: armbian/build PR: 8484
File: config/kernel/linux-rk35xx-vendor.config:904-906
Timestamp: 2025-08-11T22:00:13.411Z
Learning: In the linux-rk35xx-vendor kernel, the LTE driver options (CONFIG_LTE, CONFIG_LTE_RM310, CONFIG_LTE_EM05) are defined as boolean in drivers/net/lte/Kconfig and cannot be built as modules - they must be either built-in (=y) or disabled.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
🧬 Code graph analysis (1)
patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)
  • read_otp_data (127-179)
  • set_board_info (207-221)
  • mac_read_from_otp (223-248)
  • get_revision (181-190)
  • get_variant (192-205)
🪛 checkmake (0.2.2)
patch/u-boot/v2026.01/board_helios64/board/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

🔇 Additional comments (11)
patch/u-boot/v2026.01/board_helios64/board/Makefile (1)

1-5: LGTM!

Standard U-Boot board Makefile pattern. The static analysis warnings about phony targets are false positives—U-Boot's build system handles all, clean, and test targets at the top level; board-level Makefiles only need to declare obj-y.

patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts (4)

1-52: Well-structured device tree for Helios64 NAS board.

The DTS properly defines the comprehensive hardware topology including GMAC with MDIO/PHY node (addressing the missing mdio node issue), RK808 PMIC with full regulator bindings, USB Type-C with FUSB302, and HDD power sequencing.


469-494: MDIO node correctly added.

The GMAC configuration with embedded MDIO node and phy-handle reference addresses the missing mdio node issue mentioned in the PR comments.


796-799: i2s2 intentionally disabled.

Per PR discussion, this avoids the "rockchip-i2s ... Could not register PCM" warning in U-Boot.


1002-1013: TODO comment noted for future consideration.

The explicit cd-gpios definition works correctly. The TODO about implicit CD definition is a potential future improvement but not blocking.

patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (2)

127-179: OTP read flow is well-structured.

Proper SPI bus claim/release, caching via has_been_read, and two-stage validation (header + CRC) provides good error detection.


223-248: LGTM - uninitialized variable issue was addressed.

The function now correctly returns 0 on success, as fixed in commit dda4e77.

patch/u-boot/v2026.01/board_helios64/board/helios64.c (3)

263-279: 10-second delay for HDD spin-up.

The mdelay(10000) after enabling hdd_a_power is intentional to allow HDDs to spin up before boot continues. This is appropriate for a 5-bay NAS board.


116-178: Boot target swap logic is well-implemented.

The function properly:

  • Checks if boot_targets matches the default before modifying
  • Detects SD card boot via /mmc@fe320000
  • Only swaps if mmc0 appears before mmc1

This ensures SD card boot priority when booting from SD without overriding user customizations.


310-327: FDT board setup for kobol-specific properties.

Properly augments the device tree with kobol,board-rev and kobol,cpu-id properties from environment variables, with null checks before use.

patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig (1)

1-159: Comprehensive defconfig for Helios64 RK3399.

The configuration appropriately enables:

  • CONFIG_ROCKCHIP_EXTERNAL_TPL=y for the external DDR blob (per PR discussion)
  • CONFIG_ENV_OFFSET=0x3F8000 aligned with rpardini's suggested value
  • CONFIG_SYS_TEXT_BASE=0x00200000 — standard for RK3399 with proper memory layout (U-Boot proper at 2 MiB, consistent with upstream rock-pi-4c and other RK3399 boards)
  • SCSI/AHCI support for SATA boot via PCIe
  • Full peripheral support (MMC, USB, I2C, GPIO, LEDs, Ethernet)

@iav iav force-pushed the helios64_uboot_mainline branch from 369d3a1 to 3834f01 Compare January 2, 2026 00:35
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)

67-89: IO domain configuration (migrated code).

The rk_setreg calls with zero values at lines 81, 84, and 88 were previously flagged and confirmed as migrated code from the earlier U-Boot version. Per Armbian's approach of maintaining patches as-is during version bumps, these are retained unchanged.

🧹 Nitpick comments (2)
patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts (1)

1002-1013: SD card configuration functional with noted TODO.

The explicit cd-gpios definition works correctly. The TODO comment at line 1005 is a reminder for future cleanup but doesn't affect functionality.

Would you like me to open an issue to track investigating the implicit CD definition mentioned in the TODO?

patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig (1)

7-7: Consider adding explicit CONFIG_ENV_SIZE per PR discussion.

The PR comments mention env_buf size warnings and suggest experimenting with CONFIG_ENV_SIZE=0x8000. The defconfig currently relies on the default size. If warnings persist, adding an explicit size setting may help.

Also applies to: 87-88

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 369d3a1 and 3834f01.

📒 Files selected for processing (15)
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/Makefile
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
💤 Files with no reviewable changes (1)
  • patch/u-boot/v2026.01/0000.patching_config.yaml
🚧 Files skipped from review as they are similar to previous changes (5)
  • patch/u-boot/v2026.01/board_helios64/1001-helios64-enable-target.patch
  • patch/u-boot/v2026.01/board_helios64/1000-exception-include-string.patch
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.c
  • patch/u-boot/v2026.01/board_helios64/0000.patching_config.yaml
  • patch/u-boot/v2026.01/board_helios64/board/Kconfig
🧰 Additional context used
🧠 Learnings (46)
📓 Common learnings
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.
Learnt from: EvilOlaf
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:64-70
Timestamp: 2025-09-14T06:10:25.610Z
Learning: In the Armbian build system, rk32xx and rk33xx Rockchip SoCs no longer have BSP-based (vendor) kernel branches. The rk3506 is the first 32-bit Rockchip SoC to use the vendor branch in the current codebase.
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.
📚 Learning: 2025-12-13T11:39:08.046Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:28-67
Timestamp: 2025-12-13T11:39:08.046Z
Learning: In the Armbian build system for SpacemiT U-Boot patches (patch/u-boot/legacy/u-boot-spacemit-k1/), alignment with mainline U-Boot behavior is prioritized. For example, in boot mode handling, leaving devnum unchanged in the default case (when devtype is cleared) follows mainline conventions rather than explicitly clearing it to handle edge cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-10-26T10:41:35.118Z
Learnt from: HackingGate
Repo: armbian/build PR: 8665
File: config/boards/photonicat2.csc:4-4
Timestamp: 2025-10-26T10:41:35.118Z
Learning: In the Armbian build system, rk3576 boards consistently use BOARDFAMILY="rk35xx" for both vendor and edge kernel targets. The rk35xx family configuration sources rockchip64_common.inc, which provides edge and current kernel branch definitions, making these branches available even though they're not defined directly in rk35xx.conf.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h
  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub or the PR API to get the complete picture of what files are being added or modified.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-09-14T06:32:29.806Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:222-230
Timestamp: 2025-09-14T06:32:29.806Z
Learning: In the Armbian build system, the write_uboot_platform() function implementations follow different patterns across Rockchip family files. The newer standard (used in rockchip64_common.inc and rk3506) includes 'status=none' parameter in dd commands, while older implementations (rk3288, rk322x) use an older pattern without this parameter. The rk3506 implementation correctly follows the current Rockchip family standard.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-11-20T18:20:11.985Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8968
File: patch/u-boot/u-boot-sunxi/arm64-dts-sun50i-h6-orangepi.dtsi-Rollback-r_rsb-to-r_i2c.patch:36-36
Timestamp: 2025-11-20T18:20:11.985Z
Learning: The rewrite-patches tool (REWRITE_PATCHES=yes) in the Armbian build system can inadvertently introduce semantic changes when the u-boot/kernel git base revision differs from expected state. The tool applies patches, commits them, and re-exports them using git format-patch, which can cause the re-exported patch to reflect the base revision's state rather than preserving the original patch intent. This is particularly problematic for device tree changes like interrupt specifications. The tool currently lacks validation mechanisms to detect such semantic drift, and affected patches must be manually corrected after rewriting.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-12-19T13:56:45.124Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-19T13:56:45.124Z
Learning: When reviewing kernel or u-boot version bump PRs in the Armbian build system, check if patches existed in previous kernel version directories (e.g., sunxi-6.12, sunxi-6.13) before describing them as new features. If a patch and the majority of its contents existed previously with no major functionality changes, focus the review on the actual changes: the version bump itself and patch compatibility adjustments. Don't describe existing patches being ported/maintained across versions as new features or drivers—this is misleading. The patches are existing code being re-aligned to work with the new upstream version.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
  • patch/u-boot/v2026.01/board_helios64/board/Makefile
📚 Learning: 2025-12-17T05:09:02.306Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-12-17T05:09:02.306Z
Learning: In the Armbian build system, kernel patches (e.g., in patch/kernel/archive/sunxi-6.18/patches.armbian/) contain device tree overlays and other code that have existed for years and are maintained/ported across kernel versions. When reviewing PRs that modify these patch files, focus on the actual changes being made (e.g., Makefile fixes, new additions) rather than reviewing the entire existing content within the patch as if it were new code. The patch file contents are existing, stable code unless explicitly modified in the PR diff.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-08-30T04:13:16.457Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T04:13:16.457Z
Learning: Armbian kernel configuration files like linux-filogic-current.config are autogenerated overlays on top of arch defconfig. Comments added manually will be lost during future updates by maintainers, and explicit "CONFIG_OPTION is not set" statements aren't needed for mutually exclusive options since these are overlay configs that only specify changes from the base configuration.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-12-13T11:45:02.422Z
Learnt from: pyavitz
Repo: armbian/build PR: 9058
File: patch/u-boot/legacy/u-boot-spacemit-k1/003-SpacemiT-K1X-Fixups.patch:17-25
Timestamp: 2025-12-13T11:45:02.422Z
Learning: In the SpacemiT U-Boot patches for Armbian (patch/u-boot/legacy/u-boot-spacemit-k1/), the environment variable `devnum` is set to the device name string (e.g., "mmc", "nvme") rather than a numeric index, and `distro_bootpart` holds the partition number. This implementation aligns with mainline U-Boot conventions for the SpacemiT platform and has been verified to work correctly by the maintainer.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-03-31T22:20:48.475Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:76-86
Timestamp: 2025-03-31T22:20:48.475Z
Learning: For the Armbian build project, maintaining consistency with existing patches across U-Boot versions (such as between 2025.01 and 2025.04) is prioritized over refactoring individual patches for code improvements.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-07-27T15:53:30.629Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:805-825
Timestamp: 2025-07-27T15:53:30.629Z
Learning: In the Armbian build system, kernel configurations prioritize broad hardware compatibility over optimization concerns. Even when including numerous legacy/obsolete drivers causes technical issues like increased initramfs size and slower enumeration, the project philosophy is to "appease the masses" by ensuring maximum device compatibility rather than optimizing for specific use cases.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-10-22T07:51:53.015Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8789
File: config/kernel/linux-sunxi64-edge.config:839-839
Timestamp: 2025-10-22T07:51:53.015Z
Learning: In Armbian's wireless driver configuration, CONFIG_RK_WIFI_DEVICE_* options are Rockchip-specific device registration settings, while CONFIG_WLAN_UWE* are the actual cross-platform driver modules for UWE5622 wireless chips. The UWE5622 chip (manufactured by Unisoc/Spreadtrum) is used on multiple Allwinner boards including Orange Pi Zero 2/2W/3 and Orange Pi 3 LTS, so CONFIG_WLAN_UWE5621/5622 along with Unisoc infrastructure options (CONFIG_SPARD_WLAN_SUPPORT, CONFIG_SC23XX, CONFIG_UNISOC_WIFI_PS, CONFIG_WCN_BSP_DRIVER_BUILDIN) are correct in sunxi64 kernel configs.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-11-10T23:44:53.363Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-11-10T23:44:53.363Z
Learning: For the RV1106 family in Armbian (config/sources/families/rockchip-rv1106.conf), udev.children-max=1 is set in the kernel boot parameters to prevent early-boot OOM errors. The RV1106 has a single-core CPU, so parallelism in udev child processes provides no practical benefit. Testing higher values is impractical due to the difficulty of monitoring at this early boot stage.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
📚 Learning: 2025-11-02T20:49:56.719Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8849
File: config/boards/radxa-e54c.csc:14-28
Timestamp: 2025-11-02T20:49:56.719Z
Learning: In Armbian board configuration files (config/boards/*.conf, *.csc, etc.), do not use kernel_config_set, kernel_config_set_m, kernel_config_set_y, or custom_kernel_config__* functions to modify kernel configuration. Kernel configuration is associated with LINUXFAMILY/BOARDFAMILY, not individual BOARD. Board-specific kernel modifications cause inconsistency in kernel packages published to the apt repository because boards within a family share the same kernel packages. Kernel configuration changes must be made in the appropriate kernel config file (e.g., config/kernel/linux-*-*.config) or in family configuration files (config/sources/families/*.conf, *.inc) instead.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-10-22T07:56:19.424Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 8789
File: config/kernel/linux-sunxi64-edge.config:839-839
Timestamp: 2025-10-22T07:56:19.424Z
Learning: In Linux kernel configuration, some `=y` (builtin) options are infrastructure or feature flags that enable subsystems or features for modular drivers, rather than directly compiling code into the kernel. For example, in Armbian wireless configs, options like CONFIG_SPARD_WLAN_SUPPORT=y, CONFIG_SC23XX=y, CONFIG_WCN_BSP_DRIVER_BUILDIN=y, CONFIG_UNISOC_WIFI_PS=y are module infrastructure/feature enablers, while the actual drivers (CONFIG_WLAN_UWE5621=m, CONFIG_WLAN_UWE5622=m) remain as loadable modules. These infrastructure options don't cause kernel bloat.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-10-26T12:56:29.185Z
Learnt from: rpardini
Repo: armbian/build PR: 8820
File: config/sources/families/include/meson64_common.inc:51-53
Timestamp: 2025-10-26T12:56:29.185Z
Learning: In the Armbian build framework, scripts/config correctly handles kernel configuration option names both with and without the CONFIG_ prefix, so opts_m+=("CONFIG_RTL8822CS") and opts_m+=("RTL8822CS") are both valid and will work correctly.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-08-11T22:00:13.411Z
Learnt from: rafayahmed317
Repo: armbian/build PR: 8484
File: config/kernel/linux-rk35xx-vendor.config:904-906
Timestamp: 2025-08-11T22:00:13.411Z
Learning: In the linux-rk35xx-vendor kernel, the LTE driver options (CONFIG_LTE, CONFIG_LTE_RM310, CONFIG_LTE_EM05) are defined as boolean in drivers/net/lte/Kconfig and cannot be built as modules - they must be either built-in (=y) or disabled.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig
📚 Learning: 2025-09-18T03:36:17.862Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files (regardless of file extension), the standard pattern is to have only one line as a comment describing the board hardware specifications. This single-line description typically includes the SoC model, core count, RAM options, and key features like connectivity options, storage interfaces, and special features. The file extensions indicate board support status: .conf (standard support), .csc (community supported), .eos (end of support), .tvb (tvbox), .wip (work in progress).

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-10-14T05:08:11.785Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8754
File: config/boards/bestv-r3300-l.csc:14-16
Timestamp: 2025-10-14T05:08:11.785Z
Learning: In the Armbian build system, BOOTBRANCH_BOARD is a valid framework variable used as a fallback when BOOTBRANCH is unset. The framework checks BOOTBRANCH_BOARD before applying the default bootloader branch value (see config/sources/common.conf). Board configuration files can use BOOTBRANCH_BOARD to specify the bootloader branch.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-07-23T07:30:52.265Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8417
File: config/boards/orangepi5pro.csc:57-58
Timestamp: 2025-07-23T07:30:52.265Z
Learning: In the Armbian build system, BOOTPATCHDIR can contain board-specific subdirectories (e.g., board_orangepi5pro) for applying patches to specific boards only. The framework automatically checks if such board-specific subdirectories exist for the board being built and applies those patches accordingly.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-07-17T04:12:33.125Z
Learnt from: pyavitz
Repo: armbian/build PR: 8388
File: config/boards/kickpik2b.conf:1-14
Timestamp: 2025-07-17T04:12:33.125Z
Learning: In the Armbian build system, board configuration files (*.conf) follow a project standard of not including shebang lines, even though they contain bash code and are sourced by the build system. This is an established Armbian convention that individual contributors are expected to follow, and changes to this standard would require broader project maintainer approval.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-18T03:36:17.862Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8537
File: config/boards/qcom-robotics-rb5.conf:1-1
Timestamp: 2025-09-18T03:36:17.862Z
Learning: In Armbian board configuration files, .wip and .conf extensions require BOARD_MAINTAINER to be present and contain at least one maintainer. If no maintainer is present, the board support rules state it does not qualify for standard support and must be moved to community support (.csc extension). This is documented at https://docs.armbian.com/User-Guide_Board-Support-Rules/

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-09-14T11:37:35.089Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:65-72
Timestamp: 2025-09-14T11:37:35.089Z
Learning: In the Armbian build system, patch directories referenced in BOOTPATCHDIR and KERNELPATCHDIR configurations can be non-existent without causing build failures. Empty patch directories are also ignored by git, so missing patch directories should not be flagged as errors during code review.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-03-31T22:20:41.849Z
Learnt from: rpardini
Repo: armbian/build PR: 8044
File: patch/u-boot/v2025.04/cmd-fileenv-read-string-from-file-into-env.patch:73-75
Timestamp: 2025-03-31T22:20:41.849Z
Learning: When porting patches between U-Boot versions (like from 2025.01 to 2025.04), rpardini prefers to maintain patches as-is rather than introducing refactoring changes, even when potential improvements are identified. This approach prioritizes consistency and reduces the risk of introducing new issues.

Applied to files:

  • config/boards/helios64.conf
  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/board/sys_otp.h
📚 Learning: 2025-08-03T15:21:20.148Z
Learnt from: pyavitz
Repo: armbian/build PR: 8455
File: config/sources/families/sun50iw1.conf:19-24
Timestamp: 2025-08-03T15:21:20.148Z
Learning: In the Armbian build system, when copying firmware files during family_tweaks_s(), use /lib/firmware/updates/ instead of /lib/firmware/ to avoid conflicts with the Armbian firmware package. The /lib/firmware/updates directory takes precedence in Linux firmware loading hierarchy and is the proper location for user-installed firmware files.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-14T06:29:18.958Z
Learnt from: amazingfate
Repo: armbian/build PR: 8619
File: config/sources/families/rockchip.conf:64-70
Timestamp: 2025-09-14T06:29:18.958Z
Learning: In the Armbian build system, vendor branch configurations in family files are designed to be shared across multiple SoCs within the same family that use the same vendor kernel tree. For example, rk35xx and rockchip-rk3588 families both use identical vendor branch settings (same KERNELSOURCE, KERNELBRANCH, and KERNELPATCHDIR), demonstrating that vendor branches are intentionally generic rather than SoC-specific.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-11-10T22:05:40.490Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8913
File: config/sources/families/k3-beagle.conf:16-16
Timestamp: 2025-11-10T22:05:40.490Z
Learning: In the Armbian build system, kernel branches using non-mainline/vendor forks (like BeagleBoard's linux repository) should be named "vendor" or "vendor-rt" rather than "current" or "edge". The "current" and "edge" naming is reserved for mainline kernel branches. This affects both the case statement in family config files (e.g., `vendor | vendor-rt)` instead of `current | current-rt)`) and the corresponding KERNEL_TARGET declarations in board config files.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-08-02T05:46:10.664Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-02T05:46:10.664Z
Learning: In the Armbian build system, the modern recommended approach for kernel configuration is to use the kernel-config command via "./compile.sh BOARD=boardname BRANCH=branchname kernel-config" instead of the deprecated KERNEL_CONFIGURE=yes flag. This provides a two-step workflow: configure using menuconfig, then build, with better transparency and control over configuration changes.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-06-25T03:42:09.086Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8330
File: config/sources/families/sun55iw3.conf:32-36
Timestamp: 2025-06-25T03:42:09.086Z
Learning: In Armbian build system configuration files like config/sources/families/*.conf, KERNELSOURCE is explicitly declared when using unofficial or 3rd party kernel repositories (like the "dev" branch using https://github.com/apritzel/linux), but can be omitted when using the standard mainline kernel (like the "edge" branch) since it will fall back to the default mainline source.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-08-30T06:56:33.372Z
Learnt from: tabrisnet
Repo: armbian/build PR: 0
File: :0-0
Timestamp: 2025-08-30T06:56:33.372Z
Learning: In Armbian kernel configuration, the BTRFS configuration logic preserves existing settings (whether built-in 'y' or module 'm') and only sets BTRFS_FS to module when it was previously disabled or not set, achieving "allow but not require" flexibility while maintaining backward compatibility.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-09-01T06:11:43.476Z
Learnt from: wei633
Repo: armbian/build PR: 8557
File: config/bootscripts/boot-xpressreal-t3.cmd:0-0
Timestamp: 2025-09-01T06:11:43.476Z
Learning: In Armbian boot scripts without initramfs support, UUID= and LABEL= style device paths cannot be used for rootdev as they require initramfs to resolve during boot. Only direct device paths (/dev/mmcblkXpY) or PARTUUID= references (which U-Boot can resolve) will work.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-06-12T21:03:39.686Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:148-161
Timestamp: 2025-06-12T21:03:39.686Z
Learning: In Armbian U-Boot bootscripts, the `${cpu}` environment variable is always pre-set by U-Boot (or defaults to a valid value), so additional guards against it being unset are unnecessary.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-07-27T13:03:53.146Z
Learnt from: pyavitz
Repo: armbian/build PR: 8421
File: config/kernel/linux-sunxi64-edge.config:2664-2671
Timestamp: 2025-07-27T13:03:53.146Z
Learning: In the Armbian build system's kernel configuration, when CONFIG_EXT2_FS=y and CONFIG_EXT3_FS=y are both set to built-in, EXT4 filesystem support becomes automatically available/hard-coded without requiring an explicit CONFIG_EXT4_FS line in the configuration file. This is specific to how Armbian handles kernel configuration and differs from typical standalone Linux kernel configuration behavior.

Applied to files:

  • config/boards/helios64.conf
📚 Learning: 2025-11-11T20:56:20.303Z
Learnt from: glneo
Repo: armbian/build PR: 8913
File: config/sources/families/include/k3_common.inc:57-60
Timestamp: 2025-11-11T20:56:20.303Z
Learning: In config/sources/families/include/k3_common.inc, the OP-TEE build command at line 59 should be updated in a future PR to explicitly set CROSS_COMPILE64=aarch64-linux-gnu- and CROSS_COMPILE32=arm-linux-gnueabihf- instead of relying on OP-TEE's internal defaults, for better clarity and maintainability. User glneo agreed to address this in a separate PR.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-06-12T21:14:36.024Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:38-44
Timestamp: 2025-06-12T21:14:36.024Z
Learning: In config/bootscripts/boot-sunxi.cmd the unconditional "+1" increment in func_align_addr_next (when align_overlap_oboe_avoidance="on") is intentional. It compensates for a known off-by-one error in U-Boot where the end address is calculated as start+size instead of start+size-1, so the extra page prevents overlap. This behavior should not be “optimized away”.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
📚 Learning: 2025-09-25T18:37:00.330Z
Learnt from: tabrisnet
Repo: armbian/build PR: 8661
File: lib/functions/compilation/armbian-kernel.sh:194-199
Timestamp: 2025-09-25T18:37:00.330Z
Learning: In PR armbian/build#8661, line 235 of lib/functions/compilation/armbian-kernel.sh already contains the corrected comment "BPF link support for netfilter hooks" for NETFILTER_BPF_LINK, not the misleading "BPF_SYSCALL" comment that was flagged during review.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
📚 Learning: 2025-07-25T03:51:50.830Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8428
File: config/boards/lckfb-taishanpi.csc:5-9
Timestamp: 2025-07-25T03:51:50.830Z
Learning: When reviewing PRs in the Armbian build system, U-Boot defconfig files and patches may be added as part of the PR changes but might not be visible in the current repository clone state during review. It's important to check the actual PR file changes directly via GitHub API (https://api.github.com/repos/armbian/build/pulls/{pr_number}/files) to get the complete picture of what files are being added or modified, especially for U-Boot patches that will be applied during the build process.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-12-17T15:46:22.709Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9096
File: patch/kernel/archive/sunxi-6.18/patches.armbian/arm64-dts-sun50i-h616-add-overlays.patch:4-5
Timestamp: 2025-12-17T15:46:22.709Z
Learning: In Armbian kernel patches, when patches are renamed or reorganized, the old Subject line may be intentionally preserved in the patch header (as a second Subject line) for archival/historical purposes to document the previous patch name. This is an Armbian-specific practice for tracking patch evolution and should not be flagged as an error when the maintainer has intentionally included it for documentation.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-12-16T13:40:07.649Z
Learnt from: igorpecovnik
Repo: armbian/build PR: 9087
File: .github/workflows/pr-check-pictures.yml:138-146
Timestamp: 2025-12-16T13:40:07.649Z
Learning: In the Armbian build repository, when introducing new requirements or checks (like the board assets verification workflow), the project prefers an initial educational-only period where violations post helpful PR comments and warnings but don't block merges. This allows contributors to become familiar with new requirements before enforcement is enabled (typically after ~6 months).

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-11-06T15:36:04.682Z
Learnt from: rpardini
Repo: armbian/build PR: 8879
File: config/sources/families/uefi-x86.conf:0-0
Timestamp: 2025-11-06T15:36:04.682Z
Learning: As of PR #8879, the uefi-x86 family in the Armbian build system now includes kernel patches for the first time. The current and edge branches for uefi-x86 are specifically configured for Apple T2-based x86 machines, including T2-specific patches from the linux-t2 project and custom kernel configuration options for Apple hardware drivers.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/helios64.c
  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-11-15T14:33:30.654Z
Learnt from: SuperKali
Repo: armbian/build PR: 8936
File: patch/kernel/archive/rockchip64-6.18/dt/rk3576-nanopi-r76s.dts:800-802
Timestamp: 2025-11-15T14:33:30.654Z
Learning: In RK3576 device tree files (like rk3576-nanopi-r76s.dts), the serial0 alias is already defined in the upstream kernel's rk3576.dtsi base file, so board-specific DTS files do not need to redeclare it when enabling &uart0 for serial console.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-11-08T06:39:24.527Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 8886
File: patch/kernel/rk35xx-vendor-6.1/dt/rk3528-nanopi-rev01.dts:9-9
Timestamp: 2025-11-08T06:39:24.527Z
Learning: In Armbian's Rockchip vendor kernel branches (rk35xx-vendor), device tree files may not require the same headers as mainline Linux. For example, input key definitions like KEY_BACK and KEY_VOLUMEUP may be handled differently in BSP kernels and don't necessarily need explicit includes like <dt-bindings/input/input.h> that would be required in mainline kernel device trees.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi
  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-12-23T04:44:25.212Z
Learnt from: EvilOlaf
Repo: armbian/build PR: 9067
File: patch/kernel/archive/rockchip64-6.19/dt/rk3399-orangepi-4-lts.dts:869-875
Timestamp: 2025-12-23T04:44:25.212Z
Learning: During code reviews of device tree changes (any .dts file), verify node properties against the official kernel device tree binding documentation (*.yaml) rather than relying solely on patterns observed in existing DTS files. This helps catch copy-paste or drift errors and ensures properties align with authoritative bindings for each device node type.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts
📚 Learning: 2025-12-28T01:49:28.830Z
Learnt from: tabrisnet
Repo: armbian/build PR: 9136
File: lib/functions/compilation/armbian-kernel.sh:529-537
Timestamp: 2025-12-28T01:49:28.830Z
Learning: In lib/functions/compilation/armbian-kernel.sh's opts_m handling, checking .config (kernel defconfig) is problematic because savedefconfig elides options matching defconfig, making it impossible to distinguish overlay silence from defconfig agreement. The correct approach is to check only kernel_config_source_filename (the overlay) for explicit =y, otherwise default to =m, letting savedefconfig handle deduplication with defconfig automatically.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
📚 Learning: 2025-06-12T21:08:11.318Z
Learnt from: djurny
Repo: armbian/build PR: 8287
File: config/bootscripts/boot-sunxi.cmd:13-23
Timestamp: 2025-06-12T21:08:11.318Z
Learning: In config/bootscripts/boot-sunxi.cmd the variable name `align_overlap_oboe_avoidance` intentionally uses the acronym “OBOE” (Off-By-One Error); it is not a typo and should not be renamed.

Applied to files:

  • patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS
🧬 Code graph analysis (2)
patch/u-boot/v2026.01/board_helios64/board/helios64.c (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)
  • read_otp_data (127-179)
  • set_board_info (207-221)
  • mac_read_from_otp (223-248)
  • get_revision (181-190)
  • get_variant (192-205)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.h (1)
patch/u-boot/v2026.01/board_helios64/board/sys_otp.c (5)
  • read_otp_data (127-179)
  • set_board_info (207-221)
  • get_revision (181-190)
  • get_variant (192-205)
  • mac_read_from_otp (223-248)
🪛 checkmake (0.2.2)
patch/u-boot/v2026.01/board_helios64/board/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

🔇 Additional comments (23)
patch/u-boot/v2026.01/board_helios64/board/Makefile (1)

1-5: LGTM! Static analysis warnings are false positives.

This Kbuild-style Makefile is correctly structured for U-Boot's build system. The missing phony target warnings from checkmake are false positives—Kbuild makefiles integrated into U-Boot don't require standalone all, clean, or test targets as the parent build system handles these.

patch/u-boot/v2026.01/board_helios64/include_configs/helios64.h (2)

9-10: Verify environment buffer sizing with shortened boot targets.

From the PR discussion, environment buffer warnings persisted even after shortening boot_targets. While this override is correctly positioned before including rk3399_common.h, you may need to adjust CONFIG_ENV_SIZE in the defconfig if warnings persist.

As rpardini suggested in the PR comments, consider experimenting with:

  • CONFIG_ENV_SIZE=0x8000 or 0x10000
  • CONFIG_ENV_OFFSET=0x3F8000
  • CONFIG_ENV_SECT_SIZE=0x1000
  • CONFIG_ENV_RELOC_GD_ENV_ADDR=y

Please verify the final build output for environment-related warnings and confirm whether additional CONFIG adjustments are needed.


1-14: Good override pattern before common config inclusion.

The structure correctly overrides BOOT_TARGETS before including rk3399_common.h, ensuring the custom boot sequence takes precedence. License and include guards are properly formatted.

patch/u-boot/v2026.01/board_helios64/board/MAINTAINERS (1)

1-6: LGTM! Maintainer entry is correct and complete.

The MAINTAINERS file properly references the defconfig as configs/helios64-rk3399_defconfig, which is consistent with the Armbian naming pattern for Rockchip boards (e.g., orangepi-5-max-rk3588_defconfig, nanopi-m6-rk3588s_defconfig). The file patterns, maintainer information, and status are all appropriate.

patch/u-boot/v2026.01/board_helios64/dt_uboot/rk3399-kobol-helios64-u-boot.dtsi (3)

14-18: Boot configuration looks correct for RK3399.

The earlycon, stdout-path, and spl-boot-order configurations are standard for RK3399 boards. The boot order (same-as-spl, SPI flash, SD, eMMC) provides good fallback behavior.


116-124: Verify regulator voltages against hardware specifications.

The voltage constraints set vdd_center to 950mV (min/max/init) and vdd_log init to 930mV. While these are typical values for RK3399, please confirm these voltages match your hardware specifications and don't violate any operating limits, especially if using non-standard DRAM configurations.

Based on the PR discussion, you're using LPDDR4-933MHz with the external DDR blob rk3399_ddr_933MHz_v1.25.bin. Verify these regulator settings are compatible with this DRAM configuration and the Rockchip reference design for Helios64.


26-94: GPIO hog and PCIe pin defaults appear reasonable.

The GPIO hogs configure:

  • USB mux in HS mode with OE enabled (appropriate defaults)
  • SOC and SATA flash write-protect signals (safe defaults)
  • Auto-on signals disabled (safe default)
  • Board revision inputs
  • PCIe pins set to output low (safe default for unpowered state)

These configurations align with typical board initialization requirements.

config/boards/helios64.conf (2)

7-10: Boot configuration changes align with PR objectives and fix DRAM initialization.

The switch to BOOT_SCENARIO="binman-atf-mainline" with DDR_BLOB="rk33/rk3399_ddr_933MHz_v1.25.bin" addresses the DRAM initialization issues documented in the PR. This configuration:

  • Uses mainline ATF with binman
  • Retains the proven Rockchip DDR blob (v1.25) from the previously working loader
  • Correctly detects full 4GB RAM

The dedicated BOOTPATCHDIR="v2026.01/board_helios64" follows the recommended pattern for board-specific patching.


20-25: U-Boot btrfs extension and ROOTFS_TYPE condition work together correctly.

The addition of enable_extension "uboot-btrfs" provides btrfs support in U-Boot, and the updated ROOTFS_TYPE condition correctly excludes btrfs from requiring a separate boot partition (since U-Boot can now read btrfs directly). This allows btrfs root filesystems without a dedicated boot partition.

Note: The ROOTFS_TYPE regex changed from btrfs|f2fs|nilfs2|nfs|xfs to just f2fs|nilfs2|nfs|xfs, meaning btrfs is no longer treated as requiring a separate boot partition.

patch/u-boot/v2026.01/board_helios64/board/sys_otp.h (1)

1-10: LGTM!

Clean header file with proper include guards and well-defined public API declarations that match the implementations in sys_otp.c.

patch/u-boot/v2026.01/board_helios64/dt_upstream_rockchip/rk3399-kobol-helios64.dts (4)

469-494: GMAC with inline MDIO node looks correct.

The MDIO node is properly nested within the &gmac block with correct #address-cells and #size-cells. The PHY configuration with internal delay settings aligns with the PR objective to fix the missing mdio node issue.


796-799: Intentional disable to avoid boot errors.

Per PR discussion, disabling i2s2 prevents the "Could not register PCM" error during U-Boot initialization. This is appropriate for U-Boot context where audio is not needed.


746-783: USB-C connector configuration appears complete.

The fusb302 Type-C controller with connector subnode includes standard USB-PD properties and port configurations. The extcon-cables and typec-altmodes properties are board-specific extensions that have been carried forward from previous versions.


196-218: HDD power regulators with appropriate spinup delay.

The 2-second (startup-delay-us = <2000000>) delay for HDD power rails is appropriate for allowing mechanical drives to spin up before access attempts.

patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig (3)

40-45: External TPL configuration aligns with PR discussion.

CONFIG_ROCKCHIP_EXTERNAL_TPL=y enables use of the external DDR blob (rk3399_ddr_933MHz_v1.25.bin) which, per PR comments, resolves the DRAM initialization issues and enables full 4GB visibility.


93-94: SCSI/AHCI configuration enables SATA boot support.

These options (CONFIG_SCSI_AHCI, CONFIG_AHCI_PCI, CONFIG_SCSI, CONFIG_DM_SCSI) along with CONFIG_AHCI=y enable support for the JMB585 SATA controller on PCIe, allowing boot from attached drives as discussed in PR comments.

Also applies to: 135-136


1-159: Comprehensive defconfig for Helios64 hardware.

The configuration properly enables all required subsystems: RK3399 support, external TPL for DDR init, SCSI/AHCI for SATA, Realtek PHY for networking, USB controllers, PMIC support, and the Helios64-specific options like advanced recovery with LED indication.

patch/u-boot/v2026.01/board_helios64/board/helios64.c (6)

30-33: External function declarations without headers.

These functions (rockchip_cpuid_from_efuse, rockchip_cpuid_set, rockchip_setup_macaddr) are declared locally rather than via a header include. This is a common pattern in U-Boot board files where the implementations are in platform-common code.


35-49: Early init with SPL LED feedback.

Hardcoded register addresses are appropriate here since FDT/DM are not yet initialized. The LED activation provides useful visual feedback during early boot stages.


116-178: Boot target swap logic is well-designed.

The function intelligently swaps MMC boot order only when:

  1. Booted from SD card (/mmc@fe320000)
  2. Boot targets are still at default values (respects user customization)
  3. Both mmc0 and mmc1 are present in the boot order

This ensures SD-card-booted systems prioritize SD for distroboot while not overriding explicit user preferences.


190-216: Initialization sequence with proper fallback for MAC address.

The MAC address provisioning logic at lines 209-210 correctly falls back to rockchip_setup_macaddr() (which derives MAC from CPUID) when OTP data is unavailable. The initialization order (iodomain → vdd_center → board_info → cpuid → mac → boottargets → leds) is logical.


263-280: HDD spinup delay is appropriate for NAS boot.

The 10-second delay at line 273 allows mechanical drives to spin up before SCSI scanning. This is necessary for reliable disk detection on a NAS device like Helios64 with up to five drives.


311-328: FDT augmentation with board metadata.

Adds Kobol-specific properties (kobol,board-rev, kobol,cpu-id) to the device tree for runtime identification. The lack of error checking on fdt_setprop_string is acceptable since these are informational properties and failure is non-fatal.

@iav
Copy link
Contributor Author

iav commented Jan 2, 2026

patch/u-boot/v2026.01/board_helios64/defconfig/helios64-rk3399_defconfig (1)

7-7: Consider adding explicit CONFIG_ENV_SIZE per PR discussion.
The PR comments mention env_buf size warnings and suggest experimenting with CONFIG_ENV_SIZE=0x8000. The defconfig currently relies on the default size. If warnings persist, adding an explicit size setting may help.
Also applies to: 87-88

Was fixed by CONFIG_SPL_MAX_SIZE=0x40000

@iav iav force-pushed the helios64_uboot_mainline branch from 0703426 to 0170a20 Compare January 2, 2026 20:35
@iav iav mentioned this pull request Jan 3, 2026
3 tasks
@rpardini
Copy link
Member

rpardini commented Jan 6, 2026

Hey @iav while doing unrelated stuff I found existence of config/its/rockchip64/rk3399/helios64.its - is this even used? Maybe could be removed?

@iav
Copy link
Contributor Author

iav commented Jan 6, 2026

Hey @iav while doing unrelated stuff I found existence of config/its/rockchip64/rk3399/helios64.its - is this even used? Maybe could be removed?

I didn't know it existed until then.
The only thing I found by searching — #3780 : "Documenting functional Image Tree Source files. These files are not currently used for any builds".
I not see other references in armbian system.

@rpardini
Copy link
Member

rpardini commented Jan 6, 2026

Then I'd say lets remove it to avoid further confusion down the line. I don't think ITS's should be part of any rk stuff. It might make sense for Marvell, but not here.

@iav
Copy link
Contributor Author

iav commented Jan 6, 2026

Then I'd say lets remove it to avoid further confusion down the line. I don't think ITS's should be part of any rk stuff. It might make sense for Marvell, but not here.

I don't mind, but it's definitely not up to me to decide. I'm not very knowledgeable about this topic.

iav and others added 4 commits January 7, 2026 20:00
  - Switched to the binman-atf-mainline scenario with the same rkbin DDR blob
    rk3399_ddr_933MHz_v1.25.bin (TPL blob, as in the old working loader). DRAM init is correct, full
    4 GB visible, Linux boots.
  - U-Boot and DTS updated to v2026.01-rc5. Added MDIO/PHY node and phy-handle in rk3399-kobol-
    helios64.dts, fixing “mdio node is missing”. Disabled i2s2 in the U-Boot DT to avoid rockchip-
    i2s ... Could not register PCM.
  - boot_targets in U-Boot config shortened (mmc1, scsi0, usb0, pxe, dhcp) to avoid env_buf ... too
    small; however, the last built binary still shows the warning (needs rebuild with the shortened
    list or enlarging the buffer).
  - Boot flow: bootstd scans SD (mmc0) and eMMC (mmc1); SD boot works even without mmc0 in
    boot_targets.
  - Other changes: defconfig has CONFIG_ROCKCHIP_EXTERNAL_TPL=y to use the external DDR blob.

Boots.
@iav iav force-pushed the helios64_uboot_mainline branch from 0170a20 to 8958193 Compare January 7, 2026 18:01
@iav iav changed the title Helios64: update uboot to v26-01-rc5 Helios64: update uboot to v26-01 Jan 7, 2026
@rpardini
Copy link
Member

rpardini commented Jan 7, 2026

Then I'd say lets remove it to avoid further confusion down the line. I don't think ITS's should be part of any rk stuff. It might make sense for Marvell, but not here.

I don't mind, but it's definitely not up to me to decide. I'm not very knowledgeable about this topic.

Believe me, I just went through mvebu64 stuff and we do NOT, ever want to do things like that.

@iav
Copy link
Contributor Author

iav commented Jan 7, 2026

Then I'd say lets remove it to avoid further confusion down the line. I don't think ITS's should be part of any rk stuff. It might make sense for Marvell, but not here.

I don't mind, but it's definitely not up to me to decide. I'm not very knowledgeable about this topic.

Believe me, I just went through mvebu64 stuff and we do NOT, ever want to do things like that.

Definitely, if you say so, then it's true. You can also simply delete this file, can't you?
However, if it is necessary for me to do it — I will do it. Is it probably better to do a separate PR so as not to confuse the reviewers of other changes?

@rpardini
Copy link
Member

rpardini commented Jan 7, 2026

🤷‍♂️

@igorpecovnik igorpecovnik merged commit 94dd1fe into armbian:main Jan 8, 2026
1 check passed
@iav iav deleted the helios64_uboot_mainline branch January 8, 2026 18:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

02 Milestone: First quarter release Hardware Hardware related like kernel, U-Boot, ... Needs review Seeking for review Patches Patches related to kernel, U-Boot, ... size/large PR with 250 lines or more

Development

Successfully merging this pull request may close these issues.

3 participants