Radxa E52C: add mainline U-Boot support and kernel target configuration
Signed-off-by: okrc <okrc@hexo.dev>
This commit is contained in:
parent
114bbfc832
commit
b31f093eb0
@ -4,10 +4,11 @@ BOARD_VENDOR="radxa"
|
||||
BOARDFAMILY="rockchip-rk3588"
|
||||
BOARD_MAINTAINER="amazingfate schwar3kat"
|
||||
BOOTCONFIG="radxa-e52c-rk3588s_defconfig"
|
||||
KERNEL_TARGET="vendor"
|
||||
KERNEL_TARGET="vendor,current,edge"
|
||||
BOOT_FDT_FILE="rockchip/rk3588s-radxa-e52c.dtb"
|
||||
BOOT_SCENARIO="spl-blobs"
|
||||
BOOT_SOC="rk3588"
|
||||
DEFAULT_CONSOLE="serial"
|
||||
IMAGE_PARTITION_TABLE="gpt"
|
||||
HAS_VIDEO_OUTPUT="no"
|
||||
|
||||
@ -22,7 +23,7 @@ function post_family_tweaks_bsp__radxa_e52c_enable_leds() {
|
||||
tx=0
|
||||
rx=1
|
||||
device_name=lan
|
||||
|
||||
|
||||
[/sys/class/leds/wan-led]
|
||||
trigger=netdev
|
||||
interval=52
|
||||
@ -31,11 +32,11 @@ function post_family_tweaks_bsp__radxa_e52c_enable_leds() {
|
||||
tx=0
|
||||
rx=1
|
||||
device_name=wan
|
||||
|
||||
|
||||
[/sys/class/leds/mmc0::]
|
||||
trigger=mmc0
|
||||
brightness=0
|
||||
|
||||
|
||||
[/sys/class/leds/sys-led]
|
||||
trigger=heartbeat
|
||||
brightness=0
|
||||
@ -52,3 +53,30 @@ function post_family_tweaks_bsp__radxa_e52c_enable_leds() {
|
||||
EOF
|
||||
}
|
||||
|
||||
# Mainline U-Boot, only for non-vendor BRANCH
|
||||
function post_family_config__radxa_e52c_use_mainline_uboot() {
|
||||
[[ "${BRANCH}" == "vendor" ]] && return 0
|
||||
|
||||
declare -g BOOT_FDT_FILE="rockchip/rk3582-radxa-e52c.dtb"
|
||||
display_alert "$BOARD" "u-boot ${BOOTBRANCH_BOARD} overrides" "info"
|
||||
declare -g BOOTCONFIG="radxa-e52c-rk3582_defconfig"
|
||||
declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git"
|
||||
declare -g BOOTBRANCH="tag:v2026.01"
|
||||
declare -g BOOTPATCHDIR="v2026.01"
|
||||
declare -g BOOTDIR="u-boot-${BOARD}"
|
||||
declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB};;u-boot-rockchip.bin"
|
||||
unset uboot_custom_postprocess write_uboot_platform write_uboot_platform_mtd # disable stuff from rockchip64_common; we're using binman here which does all the work already
|
||||
|
||||
# Just use the binman-provided u-boot-rockchip.bin, which is ready-to-go
|
||||
function write_uboot_platform() {
|
||||
dd "if=$1/u-boot-rockchip.bin" "of=$2" bs=32k seek=1 conv=notrunc status=none
|
||||
}
|
||||
}
|
||||
|
||||
# Mainline U-Boot, only for non-vendor BRANCH
|
||||
function post_config_uboot_target__extra_configs_for_radxa_e52c_mainline_uboot() {
|
||||
[[ "${BRANCH}" == "vendor" ]] && return 0
|
||||
|
||||
display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable BTRFS filesystem support" "info"
|
||||
run_host_command_logged scripts/config --enable CONFIG_CMD_BTRFS
|
||||
}
|
||||
|
||||
@ -0,0 +1,260 @@
|
||||
From 981fcdc310c7c4aff85ff6cfaddb34c2e63f8163 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Wed, 7 Jan 2026 23:07:39 +0000
|
||||
Subject: [PATCH] rockchip: Add initial RK3582 support
|
||||
|
||||
The RK3582 SoC is a variant of the RK3588S with some IP blocks disabled.
|
||||
What blocks are disabled/non-working is indicated by ip-state in OTP.
|
||||
|
||||
This add initial support for RK3582 by using ft_system_setup() to mark
|
||||
any cpu, gpu and/or vdec/venc node with status=fail as indicated by
|
||||
ip-state.
|
||||
|
||||
This apply same policy as vendor U-Boot for RK3582, i.e. two big cpu
|
||||
cores, the gpu and one vdec/venc core is always failed/disabled.
|
||||
|
||||
Enable Kconfig option OF_SYSTEM_SETUP in board defconfig to make use of
|
||||
the required DT fixups for RK3582 board variants.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
arch/arm/mach-rockchip/rk3588/rk3588.c | 215 +++++++++++++++++++++++++
|
||||
1 file changed, 215 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-rockchip/rk3588/rk3588.c b/arch/arm/mach-rockchip/rk3588/rk3588.c
|
||||
index 6324c6f12867..c1138ffcb87f 100644
|
||||
--- a/arch/arm/mach-rockchip/rk3588/rk3588.c
|
||||
+++ b/arch/arm/mach-rockchip/rk3588/rk3588.c
|
||||
@@ -7,6 +7,7 @@
|
||||
#define LOG_CATEGORY LOGC_ARCH
|
||||
|
||||
#include <dm.h>
|
||||
+#include <fdt_support.h>
|
||||
#include <misc.h>
|
||||
#include <spl.h>
|
||||
#include <asm/armv8/mmu.h>
|
||||
@@ -240,6 +241,16 @@ int rockchip_dram_init_banksize_fixup(struct bd_info *bd)
|
||||
|
||||
#define RK3588_OTP_CPU_CODE_OFFSET 0x02
|
||||
#define RK3588_OTP_SPECIFICATION_OFFSET 0x06
|
||||
+#define RK3588_OTP_IP_STATE_OFFSET 0x1d
|
||||
+
|
||||
+#define FAIL_CPU_CLUSTER0 GENMASK(3, 0)
|
||||
+#define FAIL_CPU_CLUSTER1 GENMASK(5, 4)
|
||||
+#define FAIL_CPU_CLUSTER2 GENMASK(7, 6)
|
||||
+#define FAIL_GPU GENMASK(4, 1)
|
||||
+#define FAIL_RKVDEC0 BIT(6)
|
||||
+#define FAIL_RKVDEC1 BIT(7)
|
||||
+#define FAIL_RKVENC0 BIT(0)
|
||||
+#define FAIL_RKVENC1 BIT(2)
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
@@ -285,3 +296,207 @@ int checkboard(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+static int fdt_path_del_node(void *fdt, const char *path)
|
||||
+{
|
||||
+ int nodeoffset;
|
||||
+
|
||||
+ nodeoffset = fdt_path_offset(fdt, path);
|
||||
+ if (nodeoffset < 0)
|
||||
+ return nodeoffset;
|
||||
+
|
||||
+ return fdt_del_node(fdt, nodeoffset);
|
||||
+}
|
||||
+
|
||||
+static int fdt_path_set_name(void *fdt, const char *path, const char *name)
|
||||
+{
|
||||
+ int nodeoffset;
|
||||
+
|
||||
+ nodeoffset = fdt_path_offset(fdt, path);
|
||||
+ if (nodeoffset < 0)
|
||||
+ return nodeoffset;
|
||||
+
|
||||
+ return fdt_set_name(fdt, nodeoffset, name);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * RK3582 is a variant of the RK3588S with some IP blocks disabled. What blocks
|
||||
+ * are disabled/non-working is indicated by ip-state in OTP. ft_system_setup()
|
||||
+ * is used to mark any cpu, gpu and/or vdec/venc node with status=fail as
|
||||
+ * indicated by ip-state. Apply same policy as vendor U-Boot for RK3582, i.e.
|
||||
+ * two big cpu cores, the gpu and one vdec/venc core is always failed. Enable
|
||||
+ * OF_SYSTEM_SETUP to use the required DT fixups for RK3582 board variants.
|
||||
+ */
|
||||
+int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
+{
|
||||
+ static const char * const cpu_node_names[] = {
|
||||
+ "cpu@0", "cpu@100", "cpu@200", "cpu@300",
|
||||
+ "cpu@400", "cpu@500", "cpu@600", "cpu@700",
|
||||
+ };
|
||||
+ int parent, node, i, comp_len, len, ret;
|
||||
+ bool cluster1_removed = false;
|
||||
+ u8 cpu_code[2], ip_state[3];
|
||||
+ struct udevice *dev;
|
||||
+ char soc_comp[16];
|
||||
+ const char *comp;
|
||||
+ void *data;
|
||||
+
|
||||
+ if (!IS_ENABLED(CONFIG_OF_SYSTEM_SETUP))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!IS_ENABLED(CONFIG_ROCKCHIP_OTP) || !CONFIG_IS_ENABLED(MISC))
|
||||
+ return -ENOSYS;
|
||||
+
|
||||
+ ret = uclass_get_device_by_driver(UCLASS_MISC,
|
||||
+ DM_DRIVER_GET(rockchip_otp), &dev);
|
||||
+ if (ret) {
|
||||
+ log_debug("Could not find otp device, ret=%d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ /* cpu-code: SoC model, e.g. 0x35 0x82 or 0x35 0x88 */
|
||||
+ ret = misc_read(dev, RK3588_OTP_CPU_CODE_OFFSET, cpu_code, 2);
|
||||
+ if (ret < 0) {
|
||||
+ log_debug("Could not read cpu-code, ret=%d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ log_debug("cpu-code: %02x %02x\n", cpu_code[0], cpu_code[1]);
|
||||
+
|
||||
+ /* only fail cores on rk3582 */
|
||||
+ if (!(cpu_code[0] == 0x35 && cpu_code[1] == 0x82))
|
||||
+ return 0;
|
||||
+
|
||||
+ ret = misc_read(dev, RK3588_OTP_IP_STATE_OFFSET, &ip_state, 3);
|
||||
+ if (ret < 0) {
|
||||
+ log_err("Could not read ip-state, ret=%d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ log_debug("ip-state: %02x %02x %02x (otp)\n",
|
||||
+ ip_state[0], ip_state[1], ip_state[2]);
|
||||
+
|
||||
+ /* policy: fail entire big core cluster when one or more core is bad */
|
||||
+ if (ip_state[0] & FAIL_CPU_CLUSTER1)
|
||||
+ ip_state[0] |= FAIL_CPU_CLUSTER1;
|
||||
+ if (ip_state[0] & FAIL_CPU_CLUSTER2)
|
||||
+ ip_state[0] |= FAIL_CPU_CLUSTER2;
|
||||
+
|
||||
+ /* policy: always fail one big core cluster on rk3582 */
|
||||
+ if (!(ip_state[0] & (FAIL_CPU_CLUSTER1 | FAIL_CPU_CLUSTER2)))
|
||||
+ ip_state[0] |= FAIL_CPU_CLUSTER2;
|
||||
+
|
||||
+ /* policy: always fail gpu on rk3582 */
|
||||
+ ip_state[1] |= FAIL_GPU;
|
||||
+
|
||||
+ /* policy: always fail one rkvdec core on rk3582 */
|
||||
+ if (!(ip_state[1] & (FAIL_RKVDEC0 | FAIL_RKVDEC1)))
|
||||
+ ip_state[1] |= FAIL_RKVDEC1;
|
||||
+
|
||||
+ /* policy: always fail one rkvenc core on rk3582 */
|
||||
+ if (!(ip_state[2] & (FAIL_RKVENC0 | FAIL_RKVENC1)))
|
||||
+ ip_state[2] |= FAIL_RKVENC1;
|
||||
+
|
||||
+ log_debug("ip-state: %02x %02x %02x (policy)\n",
|
||||
+ ip_state[0], ip_state[1], ip_state[2]);
|
||||
+
|
||||
+ /* cpu cluster1: ip_state[0]: bit4~5 */
|
||||
+ if ((ip_state[0] & FAIL_CPU_CLUSTER1) == FAIL_CPU_CLUSTER1) {
|
||||
+ log_debug("remove cpu-map cluster1\n");
|
||||
+ fdt_path_del_node(blob, "/cpus/cpu-map/cluster1");
|
||||
+ cluster1_removed = true;
|
||||
+ }
|
||||
+
|
||||
+ /* cpu cluster2: ip_state[0]: bit6~7 */
|
||||
+ if ((ip_state[0] & FAIL_CPU_CLUSTER2) == FAIL_CPU_CLUSTER2) {
|
||||
+ log_debug("remove cpu-map cluster2\n");
|
||||
+ fdt_path_del_node(blob, "/cpus/cpu-map/cluster2");
|
||||
+ } else if (cluster1_removed) {
|
||||
+ /* cluster nodes must be named in a continuous series */
|
||||
+ log_debug("rename cpu-map cluster2\n");
|
||||
+ fdt_path_set_name(blob, "/cpus/cpu-map/cluster2", "cluster1");
|
||||
+ }
|
||||
+
|
||||
+ /* gpu: ip_state[1]: bit1~4 */
|
||||
+ if (ip_state[1] & FAIL_GPU) {
|
||||
+ log_debug("fail gpu\n");
|
||||
+ fdt_status_fail_by_pathf(blob, "/gpu@fb000000");
|
||||
+ }
|
||||
+
|
||||
+ /* rkvdec: ip_state[1]: bit6,7 */
|
||||
+ if (ip_state[1] & FAIL_RKVDEC0) {
|
||||
+ log_debug("fail rkvdec0\n");
|
||||
+ fdt_status_fail_by_pathf(blob, "/video-codec@fdc38000");
|
||||
+ fdt_status_fail_by_pathf(blob, "/iommu@fdc38700");
|
||||
+ }
|
||||
+ if (ip_state[1] & FAIL_RKVDEC1) {
|
||||
+ log_debug("fail rkvdec1\n");
|
||||
+ fdt_status_fail_by_pathf(blob, "/video-codec@fdc40000");
|
||||
+ fdt_status_fail_by_pathf(blob, "/iommu@fdc40700");
|
||||
+ }
|
||||
+
|
||||
+ /* rkvenc: ip_state[2]: bit0,2 */
|
||||
+ if (ip_state[2] & FAIL_RKVENC0) {
|
||||
+ log_debug("fail rkvenc0\n");
|
||||
+ fdt_status_fail_by_pathf(blob, "/video-codec@fdbd0000");
|
||||
+ fdt_status_fail_by_pathf(blob, "/iommu@fdbdf000");
|
||||
+ }
|
||||
+ if (ip_state[2] & FAIL_RKVENC1) {
|
||||
+ log_debug("fail rkvenc1\n");
|
||||
+ fdt_status_fail_by_pathf(blob, "/video-codec@fdbe0000");
|
||||
+ fdt_status_fail_by_pathf(blob, "/iommu@fdbef000");
|
||||
+ }
|
||||
+
|
||||
+ parent = fdt_path_offset(blob, "/cpus");
|
||||
+ if (parent < 0) {
|
||||
+ log_err("Could not find /cpus, parent=%d\n", parent);
|
||||
+ return parent;
|
||||
+ }
|
||||
+
|
||||
+ /* cpu: ip_state[0]: bit0~7 */
|
||||
+ for (i = 0; i < 8; i++) {
|
||||
+ /* fail any bad cpu core */
|
||||
+ if (!(ip_state[0] & BIT(i)))
|
||||
+ continue;
|
||||
+
|
||||
+ node = fdt_subnode_offset(blob, parent, cpu_node_names[i]);
|
||||
+ if (node >= 0) {
|
||||
+ log_debug("fail cpu %s\n", cpu_node_names[i]);
|
||||
+ fdt_status_fail(blob, node);
|
||||
+ } else {
|
||||
+ log_err("Could not find %s, node=%d\n",
|
||||
+ cpu_node_names[i], node);
|
||||
+ return node;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ node = fdt_path_offset(blob, "/");
|
||||
+ if (node < 0) {
|
||||
+ log_err("Could not find /, node=%d\n", node);
|
||||
+ return node;
|
||||
+ }
|
||||
+
|
||||
+ snprintf(soc_comp, sizeof(soc_comp), "rockchip,rk35%x", cpu_code[1]);
|
||||
+
|
||||
+ for (i = 0, comp_len = 0;
|
||||
+ (comp = fdt_stringlist_get(blob, node, "compatible", i, &len));
|
||||
+ i++) {
|
||||
+ /* stop at soc compatible */
|
||||
+ if (!strcmp(comp, soc_comp) ||
|
||||
+ !strcmp(comp, "rockchip,rk3588s") ||
|
||||
+ !strcmp(comp, "rockchip,rk3588"))
|
||||
+ break;
|
||||
+
|
||||
+ log_debug("compatible[%d]: %s\n", i, comp);
|
||||
+ comp_len += len + 1;
|
||||
+ }
|
||||
+
|
||||
+ /* truncate to only include board compatible */
|
||||
+ fdt_setprop_placeholder(blob, node, "compatible", comp_len, &data);
|
||||
+
|
||||
+ /* append soc compatible */
|
||||
+ fdt_appendprop_string(blob, node, "compatible", soc_comp);
|
||||
+ fdt_appendprop_string(blob, node, "compatible", "rockchip,rk3588s");
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
@ -0,0 +1,86 @@
|
||||
From 51dd17cd676857da04752910adfeca6bac8977a8 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Wed, 7 Jan 2026 23:07:40 +0000
|
||||
Subject: [PATCH] rockchip: rk3588-generic: Enable support for RK3582
|
||||
|
||||
Add Kconfig option OF_SYSTEM_SETUP=y to support booting boards with a
|
||||
RK3582 SoC. CPU and GPU cores are failed based on ip-state and policy.
|
||||
|
||||
Tested on a ROCK 5C Lite v1.1:
|
||||
|
||||
cpu-code: 35 82
|
||||
ip-state: 10 00 00 (otp)
|
||||
ip-state: 30 9e 04 (policy)
|
||||
remove cpu-map cluster1
|
||||
rename cpu-map cluster2
|
||||
fail gpu
|
||||
fail rkvdec1
|
||||
fail rkvenc1
|
||||
fail cpu cpu@400
|
||||
fail cpu cpu@500
|
||||
|
||||
and on a Radxa E52C:
|
||||
|
||||
cpu-code: 35 82
|
||||
ip-state: 00 04 00 (otp)
|
||||
ip-state: c0 9e 04 (policy)
|
||||
remove cpu-map cluster2
|
||||
fail gpu
|
||||
fail rkvdec1
|
||||
fail rkvenc1
|
||||
fail cpu cpu@600
|
||||
fail cpu cpu@700
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de>
|
||||
---
|
||||
arch/arm/dts/rk3588-generic.dts | 4 ++--
|
||||
configs/generic-rk3588_defconfig | 1 +
|
||||
doc/board/rockchip/rockchip.rst | 2 +-
|
||||
3 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/dts/rk3588-generic.dts b/arch/arm/dts/rk3588-generic.dts
|
||||
index 6740f9866f17..04144e2ad128 100644
|
||||
--- a/arch/arm/dts/rk3588-generic.dts
|
||||
+++ b/arch/arm/dts/rk3588-generic.dts
|
||||
@@ -1,13 +1,13 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
- * Minimal generic DT for RK3588S/RK3588 with eMMC, SD-card and USB OTG enabled
|
||||
+ * Minimal generic DT for RK3582/RK3588S/RK3588 with eMMC, SD-card and USB OTG enabled
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "rk3588s.dtsi"
|
||||
|
||||
/ {
|
||||
- model = "Generic RK3588S/RK3588";
|
||||
+ model = "Generic RK3582/RK3588S/RK3588";
|
||||
compatible = "rockchip,rk3588";
|
||||
|
||||
aliases {
|
||||
diff --git a/configs/generic-rk3588_defconfig b/configs/generic-rk3588_defconfig
|
||||
index dfa8efabe6be..7a8c176912e1 100644
|
||||
--- a/configs/generic-rk3588_defconfig
|
||||
+++ b/configs/generic-rk3588_defconfig
|
||||
@@ -16,6 +16,7 @@ CONFIG_SPL_FIT_SIGNATURE=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
# CONFIG_BOOTMETH_VBE is not set
|
||||
CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
+CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588-generic.dtb"
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_SPL_MAX_SIZE=0x40000
|
||||
diff --git a/doc/board/rockchip/rockchip.rst b/doc/board/rockchip/rockchip.rst
|
||||
index 6ae4d4371ff6..886df1c39cbc 100644
|
||||
--- a/doc/board/rockchip/rockchip.rst
|
||||
+++ b/doc/board/rockchip/rockchip.rst
|
||||
@@ -154,7 +154,7 @@ List of mainline supported Rockchip boards:
|
||||
- FriendlyElec NanoPi R6C (nanopi-r6c-rk3588s)
|
||||
- FriendlyElec NanoPi R6S (nanopi-r6s-rk3588s)
|
||||
- GameForce Ace (gameforce-ace-rk3588s)
|
||||
- - Generic RK3588S/RK3588 (generic-rk3588)
|
||||
+ - Generic RK3582/RK3588S/RK3588 (generic-rk3588)
|
||||
- Hardkernel ODROID-M2 (odroid-m2-rk3588s)
|
||||
- Indiedroid Nova (nova-rk3588s)
|
||||
- Khadas Edge2 (khadas-edge2-rk3588s)
|
||||
@ -0,0 +1,159 @@
|
||||
From 7bb408061a496cb3c56825da82342ae8d2e4602b Mon Sep 17 00:00:00 2001
|
||||
From: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Date: Sat, 10 Jan 2026 01:15:05 +0000
|
||||
Subject: [PATCH] rockchip: Add support for Radxa E52C
|
||||
|
||||
The Radxa E52C is a compact network computer developed by Radxa, based
|
||||
on the Rockchip RK3582 SoC. [1]
|
||||
|
||||
Specification:
|
||||
- Dual Cortex-A76 and Quad Cortex-A55 cores
|
||||
- 5TOPS NPU
|
||||
- Up to 8GB LPDDR4x RAM
|
||||
- Up to 64GB eMMC
|
||||
- microSD card slot
|
||||
- USB 3.0 Type-A OTG port
|
||||
- USB Type-C debug port (USB-UART)
|
||||
- USB Type-C power port (5V)
|
||||
- 2x Gigabit Ethernet ports
|
||||
- Maskrom and User buttons
|
||||
- Aluminum alloy case
|
||||
|
||||
[1] https://dl.radxa.com/e/e52c/radxa_e52c_product_brief.pdf
|
||||
|
||||
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
|
||||
Reviewed-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
arch/arm/dts/rk3582-radxa-e52c-u-boot.dtsi | 24 +++++++
|
||||
configs/radxa-e52c-rk3582_defconfig | 77 ++++++++++++++++++++++
|
||||
doc/board/rockchip/rockchip.rst | 1 +
|
||||
3 files changed, 102 insertions(+)
|
||||
create mode 100644 arch/arm/dts/rk3582-radxa-e52c-u-boot.dtsi
|
||||
create mode 100644 configs/radxa-e52c-rk3582_defconfig
|
||||
|
||||
diff --git a/arch/arm/dts/rk3582-radxa-e52c-u-boot.dtsi b/arch/arm/dts/rk3582-radxa-e52c-u-boot.dtsi
|
||||
new file mode 100644
|
||||
index 00000000000..dd65cdd250f
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/rk3582-radxa-e52c-u-boot.dtsi
|
||||
@@ -0,0 +1,24 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Copyright (c) 2026 Radxa Computer (Shenzhen) Co., Ltd.
|
||||
+ */
|
||||
+
|
||||
+#include "rk3588s-u-boot.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ leds-0 {
|
||||
+ led-1 {
|
||||
+ default-state = "on";
|
||||
+ gpios = <&gpio4 RK_PB2 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ led-2 {
|
||||
+ default-state = "on";
|
||||
+ gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&sdhci {
|
||||
+ mmc-hs200-1_8v;
|
||||
+};
|
||||
diff --git a/configs/radxa-e52c-rk3582_defconfig b/configs/radxa-e52c-rk3582_defconfig
|
||||
new file mode 100644
|
||||
index 00000000000..5c1056867f2
|
||||
--- /dev/null
|
||||
+++ b/configs/radxa-e52c-rk3582_defconfig
|
||||
@@ -0,0 +1,77 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_SKIP_LOWLEVEL_INIT=y
|
||||
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
|
||||
+CONFIG_COUNTER_FREQUENCY=24000000
|
||||
+CONFIG_ARCH_ROCKCHIP=y
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3582-radxa-e52c"
|
||||
+CONFIG_ROCKCHIP_RK3588=y
|
||||
+CONFIG_SPL_SERIAL=y
|
||||
+CONFIG_TARGET_EVB_RK3588=y
|
||||
+CONFIG_SYS_LOAD_ADDR=0xc00800
|
||||
+CONFIG_DEBUG_UART_BASE=0xFEB50000
|
||||
+CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
+CONFIG_PCI=y
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_FIT_VERBOSE=y
|
||||
+CONFIG_SPL_FIT_SIGNATURE=y
|
||||
+CONFIG_SPL_LOAD_FIT=y
|
||||
+CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
+CONFIG_OF_SYSTEM_SETUP=y
|
||||
+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3582-radxa-e52c.dtb"
|
||||
+# CONFIG_DISPLAY_CPUINFO is not set
|
||||
+CONFIG_SPL_MAX_SIZE=0x40000
|
||||
+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
+CONFIG_SPL_ATF=y
|
||||
+CONFIG_CMD_MEMINFO=y
|
||||
+CONFIG_CMD_MEMINFO_MAP=y
|
||||
+CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_GPT=y
|
||||
+CONFIG_CMD_MISC=y
|
||||
+CONFIG_CMD_MMC=y
|
||||
+CONFIG_CMD_PCI=y
|
||||
+CONFIG_CMD_USB=y
|
||||
+# CONFIG_CMD_SETEXPR is not set
|
||||
+CONFIG_CMD_RNG=y
|
||||
+# CONFIG_SPL_DOS_PARTITION is not set
|
||||
+CONFIG_SPL_OF_CONTROL=y
|
||||
+CONFIG_OF_LIVE=y
|
||||
+CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
|
||||
+CONFIG_ENV_RELOC_GD_ENV_ADDR=y
|
||||
+CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||
+CONFIG_SPL_REGMAP=y
|
||||
+CONFIG_SPL_SYSCON=y
|
||||
+# CONFIG_ADC is not set
|
||||
+CONFIG_SPL_CLK=y
|
||||
+CONFIG_ROCKCHIP_GPIO=y
|
||||
+CONFIG_LED=y
|
||||
+CONFIG_LED_GPIO=y
|
||||
+CONFIG_MISC=y
|
||||
+CONFIG_SUPPORT_EMMC_RPMB=y
|
||||
+CONFIG_MMC_DW=y
|
||||
+CONFIG_MMC_DW_ROCKCHIP=y
|
||||
+CONFIG_MMC_SDHCI=y
|
||||
+CONFIG_MMC_SDHCI_SDMA=y
|
||||
+CONFIG_MMC_SDHCI_ROCKCHIP=y
|
||||
+CONFIG_PHYLIB=y
|
||||
+CONFIG_RTL8169=y
|
||||
+CONFIG_PCIE_DW_ROCKCHIP=y
|
||||
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
+CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
|
||||
+CONFIG_PHY_ROCKCHIP_USBDP=y
|
||||
+CONFIG_SPL_PINCTRL=y
|
||||
+CONFIG_DM_PMIC=y
|
||||
+CONFIG_PMIC_RK8XX=y
|
||||
+CONFIG_REGULATOR_RK8XX=y
|
||||
+CONFIG_SPL_RAM=y
|
||||
+CONFIG_BAUDRATE=1500000
|
||||
+CONFIG_DEBUG_UART_SHIFT=2
|
||||
+CONFIG_SYS_NS16550_MEM32=y
|
||||
+CONFIG_ROCKCHIP_SPI=y
|
||||
+CONFIG_SYSRESET=y
|
||||
+CONFIG_SYSRESET_PSCI=y
|
||||
+CONFIG_USB=y
|
||||
+CONFIG_USB_XHCI_HCD=y
|
||||
+CONFIG_USB_DWC3=y
|
||||
+CONFIG_USB_DWC3_GENERIC=y
|
||||
+CONFIG_ERRNO_STR=y
|
||||
diff --git a/doc/board/rockchip/rockchip.rst b/doc/board/rockchip/rockchip.rst
|
||||
index 7a8532b49fc..2fd7d687d2e 100644
|
||||
--- a/doc/board/rockchip/rockchip.rst
|
||||
+++ b/doc/board/rockchip/rockchip.rst
|
||||
@@ -160,6 +160,7 @@ List of mainline supported Rockchip boards:
|
||||
- Khadas Edge2 (khadas-edge2-rk3588s)
|
||||
- MNT Reform2 (mnt-reform2-rk3588)
|
||||
- Pine64 QuartzPro64 (quartzpro64-rk3588)
|
||||
+ - Radxa E52C (radxa-e52c-rk3582)
|
||||
- Radxa ROCK 5 ITX (rock-5-itx-rk3588)
|
||||
- Radxa ROCK 5A (rock5a-rk3588s)
|
||||
- Radxa ROCK 5B/5B+/5T (rock5b-rk3588)
|
||||
Loading…
Reference in New Issue
Block a user