Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions config/boards/helios64.conf
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ BOARDFAMILY="rockchip64" # Used to be rk3399
BOARD_MAINTAINER="prahal"
INTRODUCED="2020"
BOOTCONFIG="helios64-rk3399_defconfig"
BOOTBRANCH="tag:v2026.01"
BOOTPATCHDIR="v2026.01/board_helios64"
BOOTBRANCH="tag:v2026.04"
BOOTPATCHDIR="v2026.04/board_helios64"
BOOT_SCENARIO="binman-atf-mainline"
DDR_BLOB="rk33/rk3399_ddr_933MHz_v1.25.bin"
KERNEL_TARGET="current,edge"
Expand All @@ -25,6 +25,11 @@ if [[ "$ROOTFS_TYPE" =~ f2fs|nilfs2|nfs|xfs ]]; then
BOOTPART_REQUIRED=${BOOTPART_REQUIRED:-yes}
fi

function post_config_uboot_target__helios64_enable_fileenv() {
display_alert "u-boot for ${BOARD}" "enable CONFIG_CMD_FILEENV" "info"
run_host_command_logged scripts/config --enable CONFIG_CMD_FILEENV # added via cmd-fileenv-read-string-from-file-into-env.patch
}

function post_family_tweaks__helios64_enable_heartbeat() {
display_alert "$BOARD" "Installing board tweaks" "info"

Expand Down
10 changes: 10 additions & 0 deletions patch/u-boot/v2026.04/board_helios64/0000.patching_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
config:

# Board-specific overlays live inside this directory to keep Helios64
# patches self contained.
overlay-directories:
- { source: "defconfig", target: "configs" }
- { source: "dt_upstream_rockchip", target: "dts/upstream/src/arm64/rockchip" }
- { source: "dt_uboot", target: "arch/arm/dts" }
- { source: "board", target: "board/kobol/helios64" }
- { source: "include_configs", target: "include/configs" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Igor Velkov <325961+iav@users.noreply.github.com>
Date: Thu, 25 Dec 2025 01:30:00 +0000
Subject: [PATCH] exception: include string.h for strlen/strncmp

Fix implicit declarations in cmd/arm/exception64 by pulling in the
standard string helpers.

---
include/exception.h | 1 +
1 file changed, 1 insertion(+)

diff --git a/include/exception.h b/include/exception.h
index 0d27152ffa..e32eb833af 100644
--- a/include/exception.h
+++ b/include/exception.h
@@ -7,6 +7,7 @@
* Copyright (c) 2018, Heinrich Schuchardt <xypron.glpk@gmx.de>
*/

#include <command.h>
+#include <string.h>

static int do_exception(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ricardo Pardini <ricardo@pardini.net>
Date: Mon, 12 Jan 2026 18:26:25 +0100
Subject: fdt_fixup_ethernet: add logs

---
boot/fdt_support.c | 56 +++++++---
boot/image-fdt.c | 18 +++
2 files changed, 59 insertions(+), 15 deletions(-)

diff --git a/boot/fdt_support.c b/boot/fdt_support.c
index 111111111111..222222222222 100644
--- a/boot/fdt_support.c
+++ b/boot/fdt_support.c
@@ -632,27 +632,31 @@ int fdt_fixup_memory(void *blob, u64 start, u64 size)

void fdt_fixup_ethernet(void *fdt)
{
+ log_info("[fdt_fixup_ethernet] called\n");
int i = 0, j, prop;
char *tmp, *end;
char mac[16];
const char *path;
unsigned char mac_addr[ARP_HLEN];
int offset;
+ int total_aliases = 0, total_attempted = 0, total_skipped = 0, total_patched = 0;
#ifdef FDT_SEQ_MACADDR_FROM_ENV
int nodeoff;
const struct fdt_property *fdt_prop;
#endif

- if (fdt_path_offset(fdt, "/aliases") < 0)
+ int aliases_off = fdt_path_offset(fdt, "/aliases");
+ if (aliases_off < 0) {
+ log_info("[fdt_fixup_ethernet] /aliases node not found\n");
return;
+ }

/* Cycle through all aliases */
for (prop = 0; ; prop++) {
const char *name;

/* FDT might have been edited, recompute the offset */
- offset = fdt_first_property_offset(fdt,
- fdt_path_offset(fdt, "/aliases"));
+ offset = fdt_first_property_offset(fdt, aliases_off);
Comment thread
iav marked this conversation as resolved.
/* Select property number 'prop' */
for (j = 0; j < prop; j++)
offset = fdt_next_property_offset(fdt, offset);
@@ -660,7 +664,10 @@ void fdt_fixup_ethernet(void *fdt)
if (offset < 0)
break;

+ total_aliases++;
path = fdt_getprop_by_offset(fdt, offset, &name, NULL);
+ log_info("[fdt_fixup_ethernet] alias #%d: name='%s', path='%s'\n", prop, name, path ? path : "<null>");
+
if (!strncmp(name, "ethernet", 8)) {
/* Treat plain "ethernet" same as "ethernet0". */
if (!strcmp(name, "ethernet")
@@ -679,33 +686,54 @@ void fdt_fixup_ethernet(void *fdt)
else
sprintf(mac, "eth%daddr", i);
} else {
+ log_info("[fdt_fixup_ethernet] Skipping alias '%s' (invalid index)\n", name);
+ total_skipped++;
continue;
}
#ifdef FDT_SEQ_MACADDR_FROM_ENV
nodeoff = fdt_path_offset(fdt, path);
- fdt_prop = fdt_get_property(fdt, nodeoff, "status",
- NULL);
- if (fdt_prop && !strcmp(fdt_prop->data, "disabled"))
+ fdt_prop = fdt_get_property(fdt, nodeoff, "status", NULL);
+ if (fdt_prop && !strcmp(fdt_prop->data, "disabled")) {
+ log_info("[fdt_fixup_ethernet] Node '%s' is disabled, skipping\n", path);
+ total_skipped++;
continue;
+ }
i++;
#endif
+ total_attempted++;
tmp = env_get(mac);
- if (!tmp)
+ log_info("[fdt_fixup_ethernet] env var for alias '%s' is '%s', value='%s'\n", name, mac, tmp ? tmp : "<not set>");
+ if (!tmp) {
+ log_info("[fdt_fixup_ethernet] env var '%s' not set, skipping\n", mac);
+ total_skipped++;
continue;
-
+ }
+#ifndef FDT_SEQ_MACADDR_FROM_ENV
+ int nodeoff = fdt_path_offset(fdt, path);
+#endif
+ if (nodeoff < 0) {
+ log_info("[fdt_fixup_ethernet] Node path '%s' not found, skipping\n", path);
+ total_skipped++;
+ continue;
+ }
+ const struct fdt_property *status_prop = fdt_get_property(fdt, nodeoff, "status", NULL);
+ if (status_prop && strcmp((const char *)status_prop->data, "okay")) {
+ log_info("[fdt_fixup_ethernet] Node '%s' status is '%s', skipping\n", path, (const char *)status_prop->data);
+ total_skipped++;
+ continue;
Comment thread
coderabbitai[bot] marked this conversation as resolved.
+ }
for (j = 0; j < 6; j++) {
- mac_addr[j] = tmp ?
- hextoul(tmp, &end) : 0;
+ mac_addr[j] = tmp ? hextoul(tmp, &end) : 0;
if (tmp)
tmp = (*end) ? end + 1 : end;
}
-
- do_fixup_by_path(fdt, path, "mac-address",
- &mac_addr, 6, 0);
- do_fixup_by_path(fdt, path, "local-mac-address",
- &mac_addr, 6, 1);
+ log_info("[fdt_fixup_ethernet] Patching node '%s' (offset %d) with MAC %02x:%02x:%02x:%02x:%02x:%02x\n", path, nodeoff, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
+ do_fixup_by_path(fdt, path, "mac-address", &mac_addr, 6, 0);
+ do_fixup_by_path(fdt, path, "local-mac-address", &mac_addr, 6, 1);
+ total_patched++;
}
}
+ log_info("[fdt_fixup_ethernet] SUMMARY: aliases found=%d, attempted=%d, skipped=%d, patched=%d\n", total_aliases, total_attempted, total_skipped, total_patched);
}

int fdt_record_loadable(void *blob, u32 index, const char *name,
diff --git a/boot/image-fdt.c b/boot/image-fdt.c
index 111111111111..222222222222 100644
--- a/boot/image-fdt.c
+++ b/boot/image-fdt.c
@@ -1,3 +1,4 @@
+#warning "Building image-fdt.c: fdt fixup call chain instrumented for MAC debugging."
Comment thread
coderabbitai[bot] marked this conversation as resolved.
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (c) 2013, Google Inc.
@@ -586,11 +587,25 @@ __weak int ft_verify_fdt(void *fdt)

__weak int arch_fixup_fdt(void *blob)
{
+ log_info("[arch_fixup_fdt] called (weak stub)\n");
+ return 0;
+}
+
+__weak int ft_board_setup(void *blob, struct bd_info *bd)
+{
+ log_info("[ft_board_setup] called (weak stub)\n");
+ return 0;
+}
+
+__weak int ft_system_setup(void *blob, struct bd_info *bd)
+{
+ log_info("[ft_system_setup] called (weak stub)\n");
return 0;
}

int image_setup_libfdt(struct bootm_headers *images, void *blob, bool lmb)
{
+ log_info("[image_setup_libfdt] called\n");
ulong *initrd_start = &images->initrd_start;
ulong *initrd_end = &images->initrd_end;
bool skip_board_fixup = false;
@@ -638,6 +653,7 @@ int image_setup_libfdt(struct bootm_headers *images, void *blob, bool lmb)
strlen(images->fit_uname_cfg) + 1, 1);

/* Update ethernet nodes */
+ log_info("[image_setup_libfdt] calling fdt_fixup_ethernet\n");
fdt_fixup_ethernet(blob);
#if IS_ENABLED(CONFIG_CMD_PSTORE)
/* Append PStore configuration */
@@ -651,6 +667,7 @@ int image_setup_libfdt(struct bootm_headers *images, void *blob, bool lmb)
}

if (IS_ENABLED(CONFIG_OF_BOARD_SETUP) && !skip_board_fixup) {
+ log_info("[image_setup_libfdt] calling ft_board_setup\n");
fdt_ret = ft_board_setup(blob, gd->bd);
if (fdt_ret) {
printf("ERROR: board-specific fdt fixup failed: %s\n",
@@ -659,6 +676,7 @@ int image_setup_libfdt(struct bootm_headers *images, void *blob, bool lmb)
}
}
if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
+ log_info("[image_setup_libfdt] calling ft_system_setup\n");
fdt_ret = ft_system_setup(blob, gd->bd);
if (fdt_ret) {
printf("ERROR: system-specific fdt fixup failed: %s\n",
--
Armbian

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Igor Velkov <325961+iav@users.noreply.github.com>
Date: Thu, 25 Dec 2025 01:30:00 +0000
Subject: [PATCH] rk3399: add Helios64 target

Wire Helios64 into the rk3399 board menu and source tree so its defconfig
builds again on v2026.01-rc5. Based on work Aditya Prayoga <aditya@kobol.io>
Tue, 15 Sep 2020 18:41:54 +0700

---
arch/arm/mach-rockchip/rk3399/Kconfig | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig b/arch/arm/mach-rockchip/rk3399/Kconfig
index 39e5b0548d..2b5e169acd 100644
--- a/arch/arm/mach-rockchip/rk3399/Kconfig
+++ b/arch/arm/mach-rockchip/rk3399/Kconfig
@@ -130,6 +130,13 @@
* wide voltage input(5V-15V), dual cell battery
* Wifi/BT accessible via expansion board M.2

+config TARGET_HELIOS64
+ bool "Kobol Helios64"
+ help
+ Helios64 is a RK3399-based NAS board with a JMB585 SATA HBA,
+ USB-C (DP Alt), USB3 hub, dual Ethernet (1G + 2.5G), eMMC and
+ LPDDR4 memory.
+
endchoice

config ROCKCHIP_BOOT_MODE_REG
@@ -163,6 +170,7 @@ endif # BOOTCOUNT_LIMIT

source "board/firefly/roc-pc-rk3399/Kconfig"
source "board/google/gru/Kconfig"
+source "board/kobol/helios64/Kconfig"
source "board/pine64/pinebook-pro-rk3399/Kconfig"
source "board/pine64/pinephone-pro-rk3399/Kconfig"
source "board/pine64/rockpro64_rk3399/Kconfig"
24 changes: 24 additions & 0 deletions patch/u-boot/v2026.04/board_helios64/board/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
if TARGET_HELIOS64

config SYS_BOARD
default "helios64"

config SYS_VENDOR
default "kobol"

config SYS_CONFIG_NAME
default "helios64"

config BOARD_SPECIFIC_OPTIONS # dummy
def_bool y

config ENV_SECT_SIZE
default 0x1000 if ENV_IS_IN_SPI_FLASH

config ENV_SIZE
default 0x8000

config ENV_OFFSET
default 0x3F8000 if ENV_IS_IN_SPI_FLASH

endif
6 changes: 6 additions & 0 deletions patch/u-boot/v2026.04/board_helios64/board/MAINTAINERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
HELIOS64 BOARD
M: Aditya Prayoga <aditya@kobol.io>
S: Maintained
F: board/kobol/helios64/
F: include/configs/helios64.h
F: configs/helios64-rk3399_defconfig
5 changes: 5 additions & 0 deletions patch/u-boot/v2026.04/board_helios64/board/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (C) 2020 Aditya Prayoga <aditya@kobol.io>

obj-y := helios64.o sys_otp.o
Loading
Loading