diff mbox series

[rockchip,1/2] rk3576: add initial support

Message ID 20260621211915.72650-2-sputnik@on-the-web.ch
State New
Headers show
Series rk3576: rock-4d: initial support | expand

Commit Message

sputnik@on-the-web.ch June 21, 2026, 9:19 p.m. UTC
From: Martin Herren <sputnik@on-the-web.ch>

Add basic SoC support for the Rockchip RK3576 using the mainline Linux
kernel and Rockchip's binary TPL (DDR init), BL31 (TF-A) and BL32
(OP-TEE) blobs from rkbin.

The RK3576 is an octa-core SoC (4x Cortex-A72 + 4x Cortex-A53) with a
Mali-G52 MC3 GPU and a 6 TOPS NPU. It is the only currently supported
rk3xxx SoC with a different RAM base address, and therefore uses a
different UBOOT_ENTRYPOINT of 0x4a000000.

NOTE: a bootable rk3576 currently requires a U-Boot fork. Upstream
U-Boot has the rk3576 SoC support and board defconfigs, but is missing a
critical fix for a BootROM issue that prevents loading boot images from
SD card; see the WIP commit "rockchip: mkimage: Add rk3576 align and
sd-card workaround" on Kwiboo's rk3576 branch.

Signed-off-by: Martin Herren <sputnik@on-the-web.ch>
---
 conf/machine/include/rk3576.inc               | 24 +++++++++++++++++++
 recipes-bsp/rkbin/rockchip-rkbin-ddr_git.bb   |  4 ++++
 ...
/rkbin/rockchip-rkbin-optee-os_git.bb      |  4 ++++
 recipes-bsp/rkbin/rockchip-rkbin-tf-a_git.bb  |  3 +++
 recipes-bsp/rkbin/rockchip-rkbin.inc          |  2 ++
 .../trusted-firmware-a_%.bbappend             |  5 ++++
 recipes-bsp/u-boot/u-boot_%.bbappend          |  5 ++++
 7 files changed, 47 insertions(+)
 create mode 100644 conf/machine/include/rk3576.inc
diff mbox series

Patch

diff --git a/conf/machine/include/rk3576.inc b/conf/machine/include/rk3576.inc
new file mode 100644
index 0000000..acb4249
--- /dev/null
+++ b/conf/machine/include/rk3576.inc
@@ -0,0 +1,24 @@ 
+SOC_FAMILY ?= "rk3576"
+MACHINEOVERRIDES =. "rk3576:"
+DEFAULTTUNE ?= "cortexa72-cortexa53-crypto"
+
+ROCKCHIP_CLOSED_TPL ?= "1"
+
+require conf/machine/include/rockchip-defaults.inc
+require conf/machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc
+require conf/machine/include/rockchip-wic.inc
+
+SERIAL_CONSOLES = "1500000;ttyS0"
+
+KBUILD_DEFCONFIG ?= "defconfig"
+
+PREFERRED_PROVIDER_trusted-firmware-a 
= "rockchip-rkbin-tf-a"
+PREFERRED_PROVIDER_optee-os = "rockchip-rkbin-optee-os"
+
+UBOOT_SUFFIX ?= "itb"
+UBOOT_ENTRYPOINT ?= "0x4a000000"
+
+TFA_PLATFORM = "rk3576"
+TFA_BUILD_TARGET = "bl31"
+
+ENABLE_STATELESS_VPU_GST ?= "1"
diff --git a/recipes-bsp/rkbin/rockchip-rkbin-ddr_git.bb b/recipes-bsp/rkbin/rockchip-rkbin-ddr_git.bb
index 7f1e820..7427f57 100644
--- a/recipes-bsp/rkbin/rockchip-rkbin-ddr_git.bb
+++ b/recipes-bsp/rkbin/rockchip-rkbin-ddr_git.bb
@@ -14,6 +14,10 @@  RKBIN_BINVERS:rk3568 ?= "v1.23"
 RKBIN_BINFILE:rk3568 ?= "rk3568_ddr_1560MHz_${RKBIN_BINVERS}.bin"
 RKBIN_DEPLOY_FILENAME:rk3568 ?= "ddr-rk3568.bin"
 
+RKBIN_BINVERS:rk3576 ?= "v1.09"
+RKBIN_BINFILE:rk3576 ?= "rk3576_ddr_lp4_2112MHz_lp5_2736MHz_${RKBIN_BINVERS}.bin"
+RKBIN_DEPLOY_FILENAME:rk3576 ?= "ddr-rk3576.bin"
+
 RKBIN_BINVERS:rk3588s ?= "v1.18"
 RKBIN_BINFILE:rk3588s ?= "rk3588_ddr_lp4_2112MHz_lp5_2400MHz_${RKBIN_BINVERS}.bin"
 RKBIN_DEPLOY_FILENAME:rk3588s ?= "ddr-rk3588.bin"
diff -
-git a/recipes-bsp/rkbin/rockchip-rkbin-optee-os_git.bb b/recipes-bsp/rkbin/rockchip-rkbin-optee-os_git.bb
index 0f3c927..35a102e 100644
--- a/recipes-bsp/rkbin/rockchip-rkbin-optee-os_git.bb
+++ b/recipes-bsp/rkbin/rockchip-rkbin-optee-os_git.bb
@@ -19,6 +19,10 @@  RKBIN_BINVERS:rk3568 ?= "${RKBIN_BINVERS_RK356x}"
 RKBIN_BINFILE:rk3568 ?= "rk3568_bl32_${RKBIN_BINVERS}.bin"
 RKBIN_DEPLOY_FILENAME:rk3568 ?= "tee-rk3568.bin"
 
+RKBIN_BINVERS:rk3576 ?= "v1.05"
+RKBIN_BINFILE:rk3576 ?= "rk3576_bl32_${RKBIN_BINVERS}.bin"
+RKBIN_DEPLOY_FILENAME:rk3576 ?= "tee-rk3576.bin"
+
 RKBIN_BINVERS:rk3588s ?= "v1.19"
 RKBIN_BINFILE:rk3588s ?= "rk3588_bl32_${RKBIN_BINVERS}.bin"
 RKBIN_DEPLOY_FILENAME:rk3588s ?= "tee-rk3588.bin"
diff --git a/recipes-bsp/rkbin/rockchip-rkbin-tf-a_git.bb b/recipes-bsp/rkbin/rockchip-rkbin-tf-a_git.bb
index ece5faa..39cc7ee 100644
--- a/recipes-bsp/rkbin/rockchip-rkbin-tf-a_git.bb
+++ b/recipes-bsp/rkbin/rockchip-rkbin-tf-a_git.bb
@@ -21,5 +21,8 @@  RKBIN_B
INFILE:rk3566 ?= "rk3568_bl31_${RKBIN_BINVERS}.elf"
 RKBIN_BINVERS:rk3568 ?= "${RKBIN_BINVERS_RK356x}"
 RKBIN_BINFILE:rk3568 ?= "rk3568_bl31_${RKBIN_BINVERS}.elf"
 
+RKBIN_BINVERS:rk3576 ?= "v1.15"
+RKBIN_BINFILE:rk3576 ?= "rk3576_bl31_${RKBIN_BINVERS}.elf"
+
 RKBIN_BINVERS:rk3588s ?= "v1.48"
 RKBIN_BINFILE:rk3588s ?= "rk3588_bl31_${RKBIN_BINVERS}.elf"
diff --git a/recipes-bsp/rkbin/rockchip-rkbin.inc b/recipes-bsp/rkbin/rockchip-rkbin.inc
index 9ddd54f..a276aa6 100644
--- a/recipes-bsp/rkbin/rockchip-rkbin.inc
+++ b/recipes-bsp/rkbin/rockchip-rkbin.inc
@@ -11,6 +11,7 @@  COMPATIBLE_MACHINE = "^$"
 COMPATIBLE_MACHINE:rk3308 = "rk3308"
 COMPATIBLE_MACHINE:rk3566 = "rk3566"
 COMPATIBLE_MACHINE:rk3568 = "rk3568"
+COMPATIBLE_MACHINE:rk3576 = "rk3576"
 COMPATIBLE_MACHINE:rk3588s = "rk3588s"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -26,6 +27,7 @@  ALLOW_EMPTY:${PN} = "1"
 RKBIN_BINDIR:rk3308 ?= "bin/rk33/"
 RKBIN_BINDIR:rk3566 ?= "bin/rk35/"
 RKBIN_BINDIR:rk3568 ?= "bin/r
k35/"
+RKBIN_BINDIR:rk3576 ?= "bin/rk35/"
 RKBIN_BINDIR:rk3588s ?= "bin/rk35/"
 
 do_deploy() {
diff --git a/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend b/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
index 4c7fc3c..4e7265b 100644
--- a/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
+++ b/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
@@ -7,6 +7,7 @@  COMPATIBLE_MACHINE:append:rk3328 = "|rk3328"
 COMPATIBLE_MACHINE:append:px30 = "|px30"
 COMPATIBLE_MACHINE:append:rk3566 = "|rk3566"
 COMPATIBLE_MACHINE:append:rk3568 = "|rk3568"
+COMPATIBLE_MACHINE:append:rk3576 = "|rk3576"
 COMPATIBLE_MACHINE:append:rk3588s = "|rk3588s"
 
 # code bloats with clang and results in error below now
@@ -35,6 +36,10 @@  fixup_baudrate:rk3568() {
 	sed -i "s/#define FPGA_BAUDRATE\s\+.*/#define FPGA_BAUDRATE ${RK_CONSOLE_BAUD}/" ${S}/plat/rockchip/rk3568/rk3568_def.h
 }
 
+fixup_baudrate:rk3576() {
+	sed -i "s/#define RK_DBG_UART_BA
UDRATE\s\+.*/#define RK_DBG_UART_BAUDRATE ${RK_CONSOLE_BAUD}/" ${S}/plat/rockchip/rk3576/rk3576_def.h
+}
+
 fixup_baudrate:rk3588s() {
 	sed -i "s/#define RK_DBG_UART_BAUDRATE\s\+.*/#define RK_DBG_UART_BAUDRATE ${RK_CONSOLE_BAUD}/" ${S}/plat/rockchip/rk3588/rk3588_def.h
 }
diff --git a/recipes-bsp/u-boot/u-boot_%.bbappend b/recipes-bsp/u-boot/u-boot_%.bbappend
index 08e1730..ddb6fd2 100644
--- a/recipes-bsp/u-boot/u-boot_%.bbappend
+++ b/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -4,6 +4,11 @@  FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
 
 SRC_URI:append:rk-u-boot-env = " file://rockchip-enable-environment-mmc.cfg"
 
+SRC_URI:rk3576 = " \
+    git://source.denx.de/u-boot/contributors/kwiboo/u-boot.git;protocol=https;branch=rk3576 \
+"
+SRCREV:rk3576 = "04e6417226f50e4e3cb04272280922eb425c18ab"
+
 DEPENDS:append:rk3308 = " u-boot-tools-native"
 DEPENDS:append:rock-pi-4 = " gnutls-native"
 DEPENDS:append:rk-u-boot-env = " u-boot-mkenvimage-native"