[PATCH 3/4] rockchip: rk3576: Add SPI Flash boot support
Jonas Karlman
jonas at kwiboo.se
Sat Jul 12 01:06:05 CEST 2025
The bootsource ids reported by BootROM of RK3576 for SPI NOR and USB
differs slightly compared to prior SoCs:
- Booting from sfc0 (ROCK 4D) report the normal bootsource id 0x3.
- Booting from sfc1 M1 (NanoPi M5) report a new bootsource id 0x23.
- Booting from sfc1 M0 has not been tested (no board using this config).
- Booting from USB report a new bootsource id 0x81.
Add a RK3576 specific read_brom_bootsource_id() function to help decode
the new bootsource id values and the required boot_devices mapping of
sfc0 and sfc1 to help support booting from SPI flash on RK3576.
Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
---
arch/arm/dts/rk3576-u-boot.dtsi | 36 ++++++++++++++++++++++++++
arch/arm/mach-rockchip/rk3576/rk3576.c | 23 ++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/arch/arm/dts/rk3576-u-boot.dtsi b/arch/arm/dts/rk3576-u-boot.dtsi
index fb5a107f47d9..c7ed09e03eec 100644
--- a/arch/arm/dts/rk3576-u-boot.dtsi
+++ b/arch/arm/dts/rk3576-u-boot.dtsi
@@ -6,6 +6,11 @@
#include "rockchip-u-boot.dtsi"
/ {
+ aliases {
+ spi5 = &sfc0;
+ spi6 = &sfc1;
+ };
+
chosen {
u-boot,spl-boot-order = "same-as-spl", &sdmmc, &sdhci;
};
@@ -16,6 +21,17 @@
};
};
+#ifdef CONFIG_ROCKCHIP_SPI_IMAGE
+&binman {
+ simple-bin-spi {
+ mkimage {
+ args = "-n", CONFIG_SYS_SOC, "-T", "rksd";
+ offset = <0x8000>;
+ };
+ };
+};
+#endif
+
&cru {
bootph-all;
};
@@ -45,6 +61,16 @@
bootph-some-ram;
};
+&fspi0_csn0 {
+ bootph-pre-ram;
+ bootph-some-ram;
+};
+
+&fspi0_pins {
+ bootph-pre-ram;
+ bootph-some-ram;
+};
+
&ioc_grf {
bootph-all;
};
@@ -116,6 +142,16 @@
bootph-some-ram;
};
+&sfc0 {
+ bootph-some-ram;
+ u-boot,spl-sfc-no-dma;
+};
+
+&sfc1 {
+ bootph-some-ram;
+ u-boot,spl-sfc-no-dma;
+};
+
&sys_grf {
bootph-all;
};
diff --git a/arch/arm/mach-rockchip/rk3576/rk3576.c b/arch/arm/mach-rockchip/rk3576/rk3576.c
index 2b1318f9532f..78f0c4866d5d 100644
--- a/arch/arm/mach-rockchip/rk3576/rk3576.c
+++ b/arch/arm/mach-rockchip/rk3576/rk3576.c
@@ -33,8 +33,17 @@
#define SGRF_DOMAIN_CON4 0x10
#define SGRF_DOMAIN_CON5 0x14
+enum {
+ BROM_BOOTSOURCE_FSPI0 = 3,
+ BROM_BOOTSOURCE_FSPI1_M0 = 4,
+ BROM_BOOTSOURCE_FSPI1_M1 = 6,
+};
+
const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = {
[BROM_BOOTSOURCE_EMMC] = "/soc/mmc at 2a330000",
+ [BROM_BOOTSOURCE_FSPI0] = "/soc/spi at 2a340000/flash at 0",
+ [BROM_BOOTSOURCE_FSPI1_M0] = "/soc/spi at 2a300000/flash at 0",
+ [BROM_BOOTSOURCE_FSPI1_M1] = "/soc/spi at 2a300000/flash at 0",
[BROM_BOOTSOURCE_SD] = "/soc/mmc at 2a310000",
};
@@ -82,6 +91,20 @@ void board_debug_uart_init(void)
{
}
+u32 read_brom_bootsource_id(void)
+{
+ u32 bootsource_id = readl(BROM_BOOTSOURCE_ID_ADDR);
+
+ if (bootsource_id == 0x23)
+ return BROM_BOOTSOURCE_FSPI1_M1;
+ else if (bootsource_id == 0x81)
+ return BROM_BOOTSOURCE_USB;
+ else if (bootsource_id > BROM_LAST_BOOTSOURCE)
+ log_debug("Unknown bootsource %x\n", bootsource_id);
+
+ return bootsource_id;
+}
+
#define HP_TIMER_BASE CONFIG_ROCKCHIP_STIMER_BASE
#define HP_CTRL_REG 0x04
#define TIMER_EN BIT(0)
--
2.49.0
More information about the U-Boot
mailing list