Re: [yocto-patches] [rockchip][PATCH 1/2] rk3576: add initial support

Martin Herren <[email protected]> Fri, 26 Jun 2026 22:03:15 +0000
Newsgroups org.yoctoproject.lists.yocto-patches
Message-ID <wqFhhmvEU8IvVm-VKlhlKIoLe478JMbTdYPyVVmFL3jn31hrfMVNkhRblvUlKwTqlDaVMEfBLPnbtLjX7qgECZqsT-P4qBpMymgRijbVFrk=@on-the-web.ch>
Hi Quentin,


On Tuesday, June 23rd, 2026 at 2:49 PM, Quentin Schulz via lists.yoctoproject.org <[email protected]> wrote:
> Hi Martin,
> 

> On 6/23/26 2:16 PM, Martin Herren wrote:
> > Hej Quentin,
> >
> > On Monday, June 22nd, 2026 at 6:58 PM, Quentin Schulz via lists.yoctoproject.org <[email protected]> wrote:
> >
> >> Hi Martin,
> >>
> >
> >> On 6/21/26 11:19 PM, Martin Herren via lists.yoctoproject.org wrote:
> >>> From: Martin Herren <[email protected]>
> >>>
> >>> 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.
> >>>
> >>
> >
> >> Did you actually boot a U-Boot with OP-TEE OS from rkbin? As far as I
> >> know, this isn't supported by upstream U-Boot but maybe something's
> >> changed /me shrugs. How did you test?
> >
> > True, while I use rkbin's BL32 to build the image, it doesn't work, no OP-TEE support yet. Will clarify that.
> >
> 

> In Yocto? I don't think it's supported at the moment, c.f.
> https://lore.kernel.org/yocto-patches/[email protected]/
> where I added support for building and packaging OP-TEE OS in U-Boot
> binary on Rockchip. I have yet to come back to it, but I'm not finding
> time to do it at the moment :(
> 

> >>> 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 <[email protected]>
> >>> ---
> >>>    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 --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"
> >>
> >
> >> Please use =, there's no reason to override the SOC_FAMILY for any board
> >> based on rk3576. If you took inspiration from RK3588S, it's because it's
> >> a mess with RK3588S and RK3588 being covered by the same override for
> >> convenience.
> >
> > Yes, used rk3588(S) as a template as I believed it to be the most mature on the rk35xx serie. Will fix.
> 

> Possibly, but due to the RK3588S/RK3588 reuse, it may be more complex
> than needed. (Let's not talk about RK3582 and RK3583 until someone tries
> to add support for it :) ).
> 

> >
> >>> +MACHINEOVERRIDES =. "rk3576:"
> >>
> >
> >> I don't think you need this MACHINEOVERRIDES with the SOC_FAMILY above.
> >
> > Same, inherited from 3588, will remove and retest.
> >
> >>> +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"
> >>> +
> >>
> >
> >> Please keep this in the machine conf file, the debug output is not
> >> specific to the SoC and thus shouldn't be defined in the SoC include file.
> >
> > Used the other SoC's includes where it is overriden at SoC level as a reference. Can move it to machine conf.
> >
> 

> I *guess* it could be acceptable if if we losely set it (with ?=; and
> for this to work it needs to be set before the require
> rockchip-defaults.inc) such that the actually machine configuration can
> set it anywhere with an = sign and be done with it.
> 

> Considering the RK3568 hardware design guide says UART2 is the default
> UART for RK3568, I guess that is fine. See
> https://dl.xkwy2018.com/downloads/RK3568/RK356X/Hardware/Rockchip_RK3568_Hardware_Design_Guide_V1.2_EN.pdf
> 

> >>> +KBUILD_DEFCONFIG ?= "defconfig"
> >>> +
> >>> +PREFERRED_PROVIDER_trusted-firmware-a
> >>> = "rockchip-rkbin-tf-a"
> >>
> >
> >> Can you use ?= here? Upstream TF-A supports RK3576 since version 2.13
> >> which is available in meta-arm already.
> >
> > Will fix, also the next one.
> >
> >>> +PREFERRED_PROVIDER_optee-os = "rockchip-rkbin-optee-os"
> >>> +
> >>
> >
> >> Same here. OP-TEE OS just gained support for RK3576, see commit
> >> bddd9f2ea837 ("plat-rockchip: add support for RK3576"). No release yet
> >> though so that's fine I guess.
> >>
> >
> >>> +UBOOT_SUFFIX ?= "itb"
> >>> +UBOOT_ENTRYPOINT ?= "0x4a000000"
> >>> +
> >>
> >
> >> Why this address specifically? We use 0x06000000 for all other SoCs and
> >> the DRAM address start at 0 for them. Considering the RK3576 starts DRAM
> >> at 0x40000000, why not use the same offset and have it at
> >>
> >
> >> 0x46000000
> >>
> >
> >> ?
> >>
> >
> >> At the same time, we default to 0x40800000 for RK3576 in upstream U-Boot
> >> for the load/entry properties (c.f. CONFIG_TEXT_BASE in
> >> arch/arm/rockchip-u-boot.dts).
> >
> > Used the value of kernel_comp_addr_r taken from u-boot's include/configs/rk3576_common.h as a reference.
> > As for other boards it is also defined as 0x0a000000 in u-boot and 0x06000000 is used in Yocto, i will update to 0x46000000 to have a coherent offset and retest.
> >
> 

> Yeah, maybe something I can have a look at when I have some spare time :)
> 

> >>> +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"
> >>> +
> >>
> >
> >> We have much newer ddrbin, bl31 and bl32 in current master of rkbin,
> >> should we consider updating? I haven't looked at the various changelogs
> >> but maybe it's fixing important stuff.
> >
> > Didn't look yet. Tried to be the least invasive possible so used the ones at the same commit as the other SoCs. Can try to override the SRC_REV for this SoC to get the latest and try.
> >
> 

> That's fine with me (if the SD card issue isn't also fixed in newer
> revisions of rkbin git repo). We would need a separate (from RK3576
> support) patch for bumping everything so that we can revert it if we
> need to.
> 

> >>>    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"
> >>> +
> >>
> >
> >> This is a no, sorry.
> >>
> >
> >> We do not accept non-upstream fork in meta-rockchip.
> >>
> >
> >> And even if we did, it should be its own recipe and not piggy-backing on
> >> the upstream U-Boot recipe which reports a different version than the
> >> one in Jonas (Kwiboo)'s current branch.
> >>
> >
> >> Jonas may rebase at his liking and we wouldn't be able to build this
> >> anymore. It happened in the past and likely would again.
> >
> > Was afraid this won't pass, even the same seems to have been done in the past for other boards (rock 3 ?).
> >
> 

> Yes, and it's been an issue a few times already :) Hence why we're
> trying to learn from our mistakes.
> 

> 1cdcb4960374 ("u-boot: use upstream for radxa-zero-3{e|w}")
> 

> Removed it in master, and you can see that someone sent a patch (for
> another branch I'm assuming where this commit isn't present) to fix the
> build issue.
> 

> We also used to use some linux-next tag and the tag and/or commit
> disappeared a few times.
> 

> b2470c03340c ("linux-torvalds-next: SRCREV with nobranch")
> ce1ce3465a53 ("linux-torvalds-next: use tag")
> 

> >> It seems you have found the commit that fixes the issue for you, so
> >> maybe we should include this patch on top of upstream U-Boot here as a
> >> ".patch" in SRC_URI. This would be acceptable to me.
> >
> > I started trying only to backport the last commit, unfortunately it depends on a bunch of previous ones. Thus my switching completely to this fork.
> 

> Ah yes, likely the mkimage patches at the very least.
> 

> > Now that it boots will try to cleanup my patch to use the upstream u-boot at 2026.04 with a minimal patch set. If too much, maybe worth to postpone this patch and wait u-boot 2026.07 and until yocto switches officially to it.
> >
> > A quick analysis shows it might require 9 patches. The WiP patch, 6 patches submitted without being merged yet and 2 already merged in upstream (not in v2026.04).
> >
> 

> Would appreciate if you have the links so I can have a look and maybe
> help push this in U-Boot.

In addition to the wip commit, the 6 patches already submitted without being merged is the following serie related to mkimage:
https://patchwork.ozlabs.org/project/uboot/list/?series=442233


Thanks to your precious feedback I've got already a lot of material to work on a cleaned up v2 of this patch.
It will take some time before i can submit it. Also some time on the u-boot chat will probably be a good idea.

Thanks for your help !

Martin

> >> I vaguely recall this was somehow related to boost DDR blob... Jonas
> >> hasn't sent the patch yet to the mailing list so I'm assuming he's still
> >> unhappy with it (or is lacking time like most of us :) ).
> >
> > Yes, the main issue is this boost.bin plus the prerequisites to bundle it into the image.
> >
> >> Wondering if
> >> an update of the DDR blob from rkbin would make this work? Would this be
> >> something you could try? Change SRC_URI to ecb4fcbe954e ("README:
> >> Update" and update the version numbers for rk3576 to point at the right one.
> >
> > Yes, this is something i can try. Although as with the latest ddr bins there is still a boost available, it is probably still required.
> >
> 

> Rockchip isn't known for cleaning up their repos so it could be a
> leftover. Also, they mention in the introducing commit log that boost is
> for accelerating UFS boot speed, so doesn't seem so much related to SD
> card (but eh, could be).
> I unfortunately do not have an RK3576 device so cannot test.
> 

> Please note that I'm not a maintainer of meta-rockchip, only Trevor is.
> 

> Cheers,
> Quentin
> 

> 

> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#4281): https://lists.yoctoproject.org/g/yocto-patches/message/4281
> Mute This Topic: https://lists.yoctoproject.org/mt/119915816/10317775
> Group Owner: [email protected]
> Unsubscribe: https://lists.yoctoproject.org/g/yocto-patches/leave/15057071/10317775/2038727303/xyzzy [[email protected]]
> -=-=-=-=-=-=-=-=-=-=-=-
> 

> 

>
signature.asc (application/pgp-signature, 343 B)
-----BEGIN PGP SIGNATURE-----
Version: ProtonMail

wrsEARYKAG0Fgmo+9xYJEIiu+thqKlAPRRQAAAAAABwAIHNhbHRAbm90YXRp
b25zLm9wZW5wZ3Bqcy5vcmdwFO/GdtbrK0sv8GoNek7h5MOTR6bwIvH/r0GO
2Qor6hYhBCYHlZbYUMXC4ILtW4iu+thqKlAPAACpjwD9FqZoPNfXXCRPVEM9
sr5jE5lrDh1OyYx5K5HWnKp1HEkA/R1PXZ+UnjG/kbo3JeF5Pbnh8T+8+iKj
xeUySTT78qoL
=65SR
-----END PGP SIGNATURE-----