[PATCH v6 0/6] Enable full UFS boot on Rockchip RK3576

Alexey Charkov alchark at flipper.net
Tue May 12 21:18:51 CEST 2026


On Wed, Mar 11, 2026 at 5:31 PM Alexey Charkov <alchark at flipper.net> wrote:
>
> Rockchip RK3576 can load its bootloader from UFS among other options,
> so this series adds the necessary bits and pieces to enable an end-to-end
> boot from UFS (boot ROM -> SPL -> U-boot proper -> kernel).
>
> This series contains the Rockchip-specific code to enable UFS boot in SPL,
> and relies on the architecture-independent bits [1], [2] already applied
> by Neil Armstrong to the u-boot-ufs custodian tree.
>
> It also depends on the recent addition of Rockchip-specific code to allow
> DMA writes to PMU SRAM by Jonas Karlman [3] already applied by Kever Yang
> to the u-boot-rockchip custodian tree.
>
> To achieve the above, this series goes through the following:
>  - Patches 1-2 cherry-pick recent additions to the upstream DTS files
>    required to properly configure the pin mode for the UFS device reset
>    pin on RK3576, as well as enable the UFSHC node on the NanoPi M5 board
>  - Patch 3 adds an option to build the Rockchip reset driver for SPL
>  - Patch 4 ties it all together for Rockchip RK3576
>  - Patches 5-6 update defconfigs for two example boards to enable UFS boot
>
> This has been tested on a FriendlyElec NanoPi M5 board with a Biwin
> BWU3AKC46C256G UFS module.
>
> Note that in my experience none of the RK3576 boards actually boot current
> mainline U-boot versions without a single-word SRAM write before jumping
> to DDR initialization, as done in Kwiboo's commit at [4]. Therefore, to
> test this series I additionally applied commits 117cd97627fd..04e6417226f5
> from Kwiboo's rk3576 branch [5] (including 117cd97627fd), so any testers
> might want to:
>
> git cherry-pick 117cd97627fd^..04e6417226f5
>
> from there before or after applying this series
>
> [1] https://source.denx.de/u-boot/custodians/u-boot-ufs/-/commit/8ce3df3ebe6b8c0022a0c79780a2e1ce3e1c792a
> [2] https://source.denx.de/u-boot/custodians/u-boot-ufs/-/commit/42dd7a5ae1b166127766ce7e39f98badb311e56d
> [3] https://source.denx.de/u-boot/custodians/u-boot-rockchip/-/commit/4015faa32342fd9c494c318c21de106f98dd4674
> [4] https://source.denx.de/u-boot/contributors/kwiboo/u-boot/-/commit/04e6417226f50e4e3cb04272280922eb425c18ab
> [5] https://source.denx.de/u-boot/contributors/kwiboo/u-boot/-/commits/rk3576?ref_type=heads
>
> Signed-off-by: Alexey Charkov <alchark at flipper.net>
> ---
> Changes in v6:
> - Dropped patches already applied by Neil to the u-boot-ufs custodian tree (thanks Neil)
> - Rebased to current next (thanks Jonas)
> - Fixed the dependency on SPL_CLK instead of CLK for the SPL reset driver (thanks Jonas)
> - Included newly required DT nodes into bootph-* filters for the u-boot-spl.dtb (thanks Jonas)
> - Cherry-picked the relevant DTS additions from devicetree-rebasing (thanks Jonas)
> - Added a preprocessor conditional around the GPIO4 bootph-* node to avoid its inclusion
>   without CONFIG_SPL_UFS_SUPPORT (thanks Jonas)
> - Added relevant defconfig changes for Rock 4D and NanoPi M5 (thanks Jonas)
> - Link to v5: https://lore.kernel.org/r/20260120-rk3576-ufs-v5-0-0edb61b301b7@gmail.com
>
> Changes in v5:
> - Reverse X-mas tree in spl_ufs:spl_ufs_load_image (thanks Quentin)
> - Explicit "depends on UFS" from CONFIG_SPL_UFS_SUPPORT (thanks Quentin).
>   This also pulls in SCSI to avoid compilation errors.
> - Split out the patch enabling the Rockchip reset driver for SPL builds
>   (thanks Quentin)
> - Reworded the error message when requesting the UFS reset GPIO fails
>   (thanks Quentin)
> - Added a note in the commit message about reset-gpios being required by
>   the DT binding (thanks Quentin)
> - Dropped the redundant check of GPIO validity in the reset function
>   (thanks Quentin)
> - Added a note about GPIO4_D0 being the only GPIO usable for UFS reset
>   on RK3576 (thanks Shawn)
> - Dropped "imply" symbols from the arch Kconfig, now that both GPIO
>   and RESET drivers are explicitly depended on from the UFS driver
>   (thanks Quentinq)
> - Link to v4: https://lore.kernel.org/r/20260108-rk3576-ufs-v4-0-e8e67649f3f8@gmail.com
>
> Changes in v4:
> - Added a dependency in b4 metadata on Jonas' new series enabling DMA
>   writes to PMU SRAM (thanks Jonas)
> - Dropped the bounce buffer quirk altogether, as it now works as-is
> - Link to v3: https://lore.kernel.org/r/20260106-rk3576-ufs-v3-0-bfe259fd6d17@gmail.com
>
> Changes in v3:
> - Added a UFSHC quirk to use the SCSI bounce buffer for addresses outside
>   SDRAM, and enabled it on Rockchip (thanks Neil and Tom)
> - Dropped the open-coded bounce buffer from spl_ufs.c, now unneeded
> - Link to v2: https://lore.kernel.org/r/20260105-rk3576-ufs-v2-0-caba979a0d6b@gmail.com
>
> Changes in v2:
> - Rename the SPL UFS read helper function more self-descriptively (thanks Neil)
> - Add an option to configure the UFS LUN used to look for the U-boot image
>   in raw offset mode - or rather the SCSI device number, which most of the
>   time coincides with the UFS LUN as long as the UFS device is the only
>   SCSI block device the SPL sees (thanks Neil)
> - Add an option to use a bounce buffer in RAM while loading U-boot from UFS,
>   which helps avoid changes to common spl_fit.c code which in v1 achieved a
>   similar result at a performance cost to unrelated platforms (thanks Jonas)
> - Link to v1: https://lore.kernel.org/r/20251210-rk3576-ufs-v1-0-a3f9e76eb66e@gmail.com
>
> ---
> Alexey Charkov (5):
>       arm64: dts: rockchip: Explicitly request UFS reset pin on RK3576
>       arm64: dts: rockchip: enable UFS controller on FriendlyElec NanoPi M5
>       reset: rockchip: make device resets available in SPL
>       rockchip: spl: Add support for booting from UFS
>       rockchip: rk3576-nanopi-m5: Enable UFS support
>
> Jonas Karlman (1):
>       rockchip: rk3576-rock-4d: Enable UFS support
>
>  arch/arm/dts/rk3576-u-boot.dtsi                    | 33 +++++++++++++++++++++-
>  arch/arm/include/asm/arch-rockchip/bootrom.h       |  1 +
>  arch/arm/mach-rockchip/rk3576/rk3576.c             |  1 +
>  arch/arm/mach-rockchip/spl-boot-order.c            | 14 +++++++++
>  configs/nanopi-m5-rk3576_defconfig                 |  7 +++++
>  configs/rock-4d-rk3576_defconfig                   |  7 +++++
>  drivers/reset/Kconfig                              |  9 ++++++
>  drivers/reset/Makefile                             |  2 +-
>  .../src/arm64/rockchip/rk3576-nanopi-m5.dts        | 24 ++++++++++++++++
>  .../src/arm64/rockchip/rk3576-pinctrl.dtsi         |  7 +++++
>  dts/upstream/src/arm64/rockchip/rk3576.dtsi        |  2 +-
>  11 files changed, 104 insertions(+), 3 deletions(-)

Hi Kever,

Gentle ping regarding this series. Would you mind applying it? Shall I
rebase and resend?

Best regards,
Alexey


More information about the U-Boot mailing list