[RFC PATCH v1 00/14] arm: rockchip: rk3576: BLOB-free TPL DRAM init
Johan Axelsson
johan.axelsson at proton.me
Mon May 25 03:28:41 CEST 2026
This series adds an open-source TPL DRAM initialisation driver for the
Rockchip RK3576 SoC, replacing the proprietary DDR binary blob.
Hardware
--------
The RK3576 DDR subsystem consists of two independent channels, each
containing one Synopsys uMCTL2 DDRCTL and one Synopsys LPDDR4/4X/5
combo PHY. Supported DRAM types: LPDDR4, LPDDR4X, LPDDR5.
The driver follows the TRM §7.6.2 (LPDDR4, 37 steps) and §7.6.3
(LPDDR5, 42 steps) software initialisation procedures.
PHY training
------------
The RK3576 combo PHY includes a hardware training engine controlled by
SCHD_TRAIN_CON0[0] (phy_train_en) and SCHD_TRAIN_CON0[1]
(phy_train_done). No Synopsys PHY training firmware (.bin) is required.
This was confirmed from the TRM and matches the approach used on RK3568.
Timing tables
-------------
Precalculated timing tables are provided as .inc files, one per DRAM
type and speed grade. The values in this RFC are TRM reset defaults
(placeholders) and are NOT correct for actual hardware operation.
Correct values require:
- JEDEC JESD209-5B (LPDDR5) / JESD209-4D (LPDDR4) timing parameters
- Synopsys uMCTL2 SRS field encoding rules
- The specific DRAM part number and its datasheet
Target board
------------
Primary target: Flipper One (rk3576-flipper-one-rev-f0b0c1) with 8 GB
LPDDR5. This addresses the open task in
flipperdevices/flipperone-linux-build-scripts#56. The Flipper One DTS
is not yet upstream; a Flipper One defconfig will follow once it lands.
The series also enables the driver for the ArmSoM Sige5
(configs/sige5-rk3576_defconfig) as an immediately testable board.
Series structure
----------------
01/14 sysreset: guard sysreset_psci.o from XPL builds (prerequisite)
02/14 clk: rk3576: OF_PLATDATA support for TPL
03/14 clk: rk3576: use CONFIG_XPL_BUILD (fixes TPL size exclusion)
04/14 syscon: add DDR GRF region
05/14 sdram_common: LPDDR4X and LPDDR5 type support
06/14 new: sdram_pctl_rk3576.h — uMCTL2 register layout
07/14 new: sdram_rk3576.h — platform structs and addresses
08/14 new: sdram_phy_rk3576.h — combo PHY register layout
09/14 new: sdram_rk3576.c — controller + PHY driver
10/14 new: LPDDR4 timing table placeholder (1560 MHz CK)
11/14 new: LPDDR5 timing table placeholder (2133 MHz PHY 2x clock)
12/14 dts: DMC reg spaces and DDR GRF syscon node
13/14 serial: DM_DRIVER_ALIAS for RK3576 UART
14/14 Kconfig + defconfig: enable TPL for RK3576
Known limitations / TODO
-------------------------
- Timing tables contain only TRM reset values. Hardware bring-up
will fail until values are calculated from JEDEC specs + chip data.
- LPDDR5 MR1/MR2 encoding (initmr0) not yet calculated.
- PHY vref and ODT settings use PHY reset defaults (steps 27-28/31-32).
- Flipper One defconfig pending DTS upstream.
- Not compile-tested on real hardware yet (cross-compiler required).
Modelled on the RK3568 RFC series (20260517-rk3568-raminit-v1,
Pavel Golikov).
Signed-off-by: Johan Axelsson <johan.axelsson at proton.me>
Johan Axelsson (14):
sysreset: psci: exclude from XPL builds
clk: rockchip: rk3576: add OF_PLATDATA support for TPL
clk: rockchip: rk3576: use CONFIG_XPL_BUILD instead of
CONFIG_SPL_BUILD
arm: rockchip: rk3576: add DDR GRF syscon region
ram: rockchip: sdram_common: add LPDDR4X and LPDDR5 support
ram: rockchip: add RK3576 DDRCTL register definitions
ram: rockchip: add RK3576 DRAM platform header
ram: rockchip: add RK3576 DDRPHY register definitions
ram: rockchip: rk3576: add DRAM controller and PHY driver
ram: rockchip: rk3576: add LPDDR4 timing table placeholder (1560 MHz)
ram: rockchip: rk3576: add LPDDR5 timing table placeholder (2133 MHz)
arm: dts: rk3576: add DMC reg spaces and DDR GRF syscon node
serial: rockchip: add DM_DRIVER_ALIAS for RK3576 UART
arm: rockchip: rk3576: enable TPL DRAM init in Kconfig and defconfig
arch/arm/dts/rk3576-u-boot.dtsi | 15 +-
arch/arm/include/asm/arch-rockchip/clock.h | 1 +
.../asm/arch-rockchip/sdram_pctl_rk3576.h | 303 ++++++++
.../asm/arch-rockchip/sdram_phy_rk3576.h | 363 ++++++++++
.../include/asm/arch-rockchip/sdram_rk3576.h | 235 +++++++
arch/arm/mach-rockchip/Kconfig | 11 +
arch/arm/mach-rockchip/rk3576/Kconfig | 3 +
arch/arm/mach-rockchip/rk3576/syscon_rk3576.c | 4 +-
configs/sige5-rk3576_defconfig | 3 +
drivers/clk/rockchip/clk_rk3576.c | 24 +-
drivers/ram/rockchip/Kconfig | 7 +
.../sdram-rk3576-lpddr4-detect-1560.inc | 170 +++++
.../sdram-rk3576-lpddr5-detect-2133.inc | 174 +++++
drivers/ram/rockchip/sdram_common.c | 11 +-
drivers/ram/rockchip/sdram_rk3576.c | 655 +++++++++++++++++-
drivers/serial/serial_rockchip.c | 1 +
drivers/sysreset/Makefile | 2 +
17 files changed, 1963 insertions(+), 19 deletions(-)
create mode 100644 arch/arm/include/asm/arch-rockchip/sdram_pctl_rk3576.h
create mode 100644 arch/arm/include/asm/arch-rockchip/sdram_phy_rk3576.h
create mode 100644 arch/arm/include/asm/arch-rockchip/sdram_rk3576.h
create mode 100644 drivers/ram/rockchip/sdram-rk3576-lpddr4-detect-1560.inc
create mode 100644 drivers/ram/rockchip/sdram-rk3576-lpddr5-detect-2133.inc
--
2.45.1.windows.1
More information about the U-Boot
mailing list