[PATCH v4 5/5] rockchip: rk3399-nanopi-4: Enable IO-domain driver in SPL
Kever Yang
kever.yang at rock-chips.com
Fri Jun 6 11:20:56 CEST 2025
On 2025/5/24 00:53, Justin Klaassen wrote:
> The NanoPi RK3399 boards support UHS-I (up to SDR104) SD cards, however
> using any of these 1.8v modes results in a boot failure in SPL upon soft
> reboot.
>
> The issue is that the "vcc_sdio" regulator is left at 1.8v on reboot
> and the corresponding GPIO defaults to 3.3v. This prevents the SD card
> from being reinitialized and read successfully.
>
> This change enables the RK8XX regulators and Rockchip IO-domain drivers
> in SPL, which initializes "vcc_sdio" regulator to 3.0v and configures
> the GPIO for the correct level on boot.
>
> Signed-off-by: Justin Klaassen <justin at tidylabs.net>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
>
> Changes in v4:
> - Resolved merge conflict
>
> Changes in v2:
> - Added defconfig changes for all NanoPi RK3399 boards
>
> arch/arm/dts/rk3399-nanopi4-u-boot.dtsi | 9 +++++++++
> configs/nanopc-t4-rk3399_defconfig | 7 +++++++
> configs/nanopi-m4-2gb-rk3399_defconfig | 7 +++++++
> configs/nanopi-m4-rk3399_defconfig | 7 +++++++
> configs/nanopi-m4b-rk3399_defconfig | 7 +++++++
> configs/nanopi-neo4-rk3399_defconfig | 7 +++++++
> configs/nanopi-r4s-rk3399_defconfig | 7 +++++++
> 7 files changed, 51 insertions(+)
>
> diff --git a/arch/arm/dts/rk3399-nanopi4-u-boot.dtsi b/arch/arm/dts/rk3399-nanopi4-u-boot.dtsi
> index ba2b73223d4..62fd21f2ca5 100644
> --- a/arch/arm/dts/rk3399-nanopi4-u-boot.dtsi
> +++ b/arch/arm/dts/rk3399-nanopi4-u-boot.dtsi
> @@ -9,6 +9,14 @@
> bootph-pre-ram;
> };
>
> +&i2c0_xfer {
> + bootph-pre-ram;
> +};
> +
> +&io_domains {
> + bootph-pre-ram;
> +};
> +
> &sdmmc {
> pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_cd>;
> };
> @@ -23,6 +31,7 @@
> };
>
> &vcc_sdio {
> + bootph-pre-ram;
> /delete-property/ regulator-always-on;
> /delete-property/ regulator-boot-on;
> regulator-init-microvolt = <3000000>;
> diff --git a/configs/nanopc-t4-rk3399_defconfig b/configs/nanopc-t4-rk3399_defconfig
> index cf634bdce4c..40e99878016 100644
> --- a/configs/nanopc-t4-rk3399_defconfig
> +++ b/configs/nanopc-t4-rk3399_defconfig
> @@ -8,6 +8,7 @@ CONFIG_ENV_OFFSET=0x3F8000
> CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3399-nanopc-t4"
> CONFIG_DM_RESET=y
> CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_SPL_DRIVERS_MISC=y
> CONFIG_TARGET_EVB_RK3399=y
> CONFIG_SYS_LOAD_ADDR=0x800800
> CONFIG_DEBUG_UART_BASE=0xFF1A0000
> @@ -18,6 +19,8 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopc-t4.dtb"
> CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_SPL_MAX_SIZE=0x40000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_I2C=y
> +CONFIG_SPL_POWER=y
> CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
> CONFIG_TPL=y
> CONFIG_CMD_BOOTZ=y
> @@ -33,6 +36,7 @@ CONFIG_ENV_IS_IN_MMC=y
> CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_SPL_ROCKCHIP_IODOMAIN=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> @@ -46,8 +50,11 @@ CONFIG_NVME_PCI=y
> CONFIG_PHY_ROCKCHIP_INNO_USB2=y
> CONFIG_PHY_ROCKCHIP_TYPEC=y
> CONFIG_PMIC_RK8XX=y
> +CONFIG_SPL_PMIC_RK8XX=y
> +CONFIG_SPL_DM_REGULATOR=y
> CONFIG_SPL_DM_REGULATOR_FIXED=y
> CONFIG_REGULATOR_RK8XX=y
> +CONFIG_SPL_REGULATOR_RK8XX=y
> CONFIG_PWM_ROCKCHIP=y
> CONFIG_BAUDRATE=1500000
> CONFIG_DEBUG_UART_SHIFT=2
> diff --git a/configs/nanopi-m4-2gb-rk3399_defconfig b/configs/nanopi-m4-2gb-rk3399_defconfig
> index e4d6beeb493..5c53293757d 100644
> --- a/configs/nanopi-m4-2gb-rk3399_defconfig
> +++ b/configs/nanopi-m4-2gb-rk3399_defconfig
> @@ -8,6 +8,7 @@ CONFIG_ENV_OFFSET=0x3F8000
> CONFIG_DEFAULT_DEVICE_TREE="rk3399-nanopi-m4-2gb"
> CONFIG_DM_RESET=y
> CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_SPL_DRIVERS_MISC=y
> CONFIG_TARGET_EVB_RK3399=y
> CONFIG_SYS_LOAD_ADDR=0x800800
> CONFIG_DEBUG_UART_BASE=0xFF1A0000
> @@ -19,6 +20,8 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-m4-2gb.dtb"
> CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_SPL_MAX_SIZE=0x40000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_I2C=y
> +CONFIG_SPL_POWER=y
> CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
> CONFIG_TPL=y
> CONFIG_CMD_BOOTZ=y
> @@ -37,6 +40,7 @@ CONFIG_SCSI_AHCI=y
> CONFIG_AHCI_PCI=y
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_SPL_ROCKCHIP_IODOMAIN=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> @@ -50,8 +54,11 @@ CONFIG_NVME_PCI=y
> CONFIG_PHY_ROCKCHIP_INNO_USB2=y
> CONFIG_PHY_ROCKCHIP_TYPEC=y
> CONFIG_PMIC_RK8XX=y
> +CONFIG_SPL_PMIC_RK8XX=y
> +CONFIG_SPL_DM_REGULATOR=y
> CONFIG_SPL_DM_REGULATOR_FIXED=y
> CONFIG_REGULATOR_RK8XX=y
> +CONFIG_SPL_REGULATOR_RK8XX=y
> CONFIG_PWM_ROCKCHIP=y
> CONFIG_SCSI=y
> CONFIG_BAUDRATE=1500000
> diff --git a/configs/nanopi-m4-rk3399_defconfig b/configs/nanopi-m4-rk3399_defconfig
> index 25761e3f9f8..76d2994ae57 100644
> --- a/configs/nanopi-m4-rk3399_defconfig
> +++ b/configs/nanopi-m4-rk3399_defconfig
> @@ -8,6 +8,7 @@ CONFIG_ENV_OFFSET=0x3F8000
> CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3399-nanopi-m4"
> CONFIG_DM_RESET=y
> CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_SPL_DRIVERS_MISC=y
> CONFIG_TARGET_EVB_RK3399=y
> CONFIG_SYS_LOAD_ADDR=0x800800
> CONFIG_DEBUG_UART_BASE=0xFF1A0000
> @@ -19,6 +20,8 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-m4.dtb"
> CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_SPL_MAX_SIZE=0x40000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_I2C=y
> +CONFIG_SPL_POWER=y
> CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
> CONFIG_TPL=y
> CONFIG_CMD_BOOTZ=y
> @@ -36,6 +39,7 @@ CONFIG_SCSI_AHCI=y
> CONFIG_AHCI_PCI=y
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_SPL_ROCKCHIP_IODOMAIN=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> @@ -49,8 +53,11 @@ CONFIG_NVME_PCI=y
> CONFIG_PHY_ROCKCHIP_INNO_USB2=y
> CONFIG_PHY_ROCKCHIP_TYPEC=y
> CONFIG_PMIC_RK8XX=y
> +CONFIG_SPL_PMIC_RK8XX=y
> +CONFIG_SPL_DM_REGULATOR=y
> CONFIG_SPL_DM_REGULATOR_FIXED=y
> CONFIG_REGULATOR_RK8XX=y
> +CONFIG_SPL_REGULATOR_RK8XX=y
> CONFIG_PWM_ROCKCHIP=y
> CONFIG_SCSI=y
> CONFIG_BAUDRATE=1500000
> diff --git a/configs/nanopi-m4b-rk3399_defconfig b/configs/nanopi-m4b-rk3399_defconfig
> index f32d3e5ffd1..17241b38946 100644
> --- a/configs/nanopi-m4b-rk3399_defconfig
> +++ b/configs/nanopi-m4b-rk3399_defconfig
> @@ -8,6 +8,7 @@ CONFIG_ENV_OFFSET=0x3F8000
> CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3399-nanopi-m4b"
> CONFIG_DM_RESET=y
> CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_SPL_DRIVERS_MISC=y
> CONFIG_TARGET_EVB_RK3399=y
> CONFIG_SYS_LOAD_ADDR=0x800800
> CONFIG_DEBUG_UART_BASE=0xFF1A0000
> @@ -19,6 +20,8 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-m4b.dtb"
> CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_SPL_MAX_SIZE=0x40000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_I2C=y
> +CONFIG_SPL_POWER=y
> CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
> CONFIG_TPL=y
> CONFIG_CMD_BOOTZ=y
> @@ -36,6 +39,7 @@ CONFIG_SCSI_AHCI=y
> CONFIG_AHCI_PCI=y
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_SPL_ROCKCHIP_IODOMAIN=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> @@ -49,8 +53,11 @@ CONFIG_NVME_PCI=y
> CONFIG_PHY_ROCKCHIP_INNO_USB2=y
> CONFIG_PHY_ROCKCHIP_TYPEC=y
> CONFIG_PMIC_RK8XX=y
> +CONFIG_SPL_PMIC_RK8XX=y
> +CONFIG_SPL_DM_REGULATOR=y
> CONFIG_SPL_DM_REGULATOR_FIXED=y
> CONFIG_REGULATOR_RK8XX=y
> +CONFIG_SPL_REGULATOR_RK8XX=y
> CONFIG_PWM_ROCKCHIP=y
> CONFIG_SCSI=y
> CONFIG_BAUDRATE=1500000
> diff --git a/configs/nanopi-neo4-rk3399_defconfig b/configs/nanopi-neo4-rk3399_defconfig
> index 00822f7f655..c0aedd5288b 100644
> --- a/configs/nanopi-neo4-rk3399_defconfig
> +++ b/configs/nanopi-neo4-rk3399_defconfig
> @@ -8,6 +8,7 @@ CONFIG_ENV_OFFSET=0x3F8000
> CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3399-nanopi-neo4"
> CONFIG_DM_RESET=y
> CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_SPL_DRIVERS_MISC=y
> CONFIG_TARGET_EVB_RK3399=y
> CONFIG_SYS_LOAD_ADDR=0x800800
> CONFIG_DEBUG_UART_BASE=0xFF1A0000
> @@ -17,6 +18,8 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-neo4.dtb"
> CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_SPL_MAX_SIZE=0x40000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_I2C=y
> +CONFIG_SPL_POWER=y
> CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
> CONFIG_TPL=y
> CONFIG_CMD_BOOTZ=y
> @@ -31,6 +34,7 @@ CONFIG_ENV_IS_IN_MMC=y
> CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_SPL_ROCKCHIP_IODOMAIN=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> @@ -43,8 +47,11 @@ CONFIG_GMAC_ROCKCHIP=y
> CONFIG_PHY_ROCKCHIP_INNO_USB2=y
> CONFIG_PHY_ROCKCHIP_TYPEC=y
> CONFIG_PMIC_RK8XX=y
> +CONFIG_SPL_PMIC_RK8XX=y
> +CONFIG_SPL_DM_REGULATOR=y
> CONFIG_SPL_DM_REGULATOR_FIXED=y
> CONFIG_REGULATOR_RK8XX=y
> +CONFIG_SPL_REGULATOR_RK8XX=y
> CONFIG_PWM_ROCKCHIP=y
> CONFIG_BAUDRATE=1500000
> CONFIG_DEBUG_UART_SHIFT=2
> diff --git a/configs/nanopi-r4s-rk3399_defconfig b/configs/nanopi-r4s-rk3399_defconfig
> index 100b68bb49e..3ce9bad76fe 100644
> --- a/configs/nanopi-r4s-rk3399_defconfig
> +++ b/configs/nanopi-r4s-rk3399_defconfig
> @@ -8,6 +8,7 @@ CONFIG_ENV_OFFSET=0x3F8000
> CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3399-nanopi-r4s"
> CONFIG_DM_RESET=y
> CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_SPL_DRIVERS_MISC=y
> CONFIG_TARGET_EVB_RK3399=y
> CONFIG_SYS_LOAD_ADDR=0x800800
> CONFIG_DEBUG_UART_BASE=0xFF1A0000
> @@ -17,6 +18,8 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-r4s.dtb"
> CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_SPL_MAX_SIZE=0x40000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_I2C=y
> +CONFIG_SPL_POWER=y
> CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
> CONFIG_TPL=y
> CONFIG_CMD_BOOTZ=y
> @@ -31,6 +34,7 @@ CONFIG_ENV_IS_IN_MMC=y
> CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_SPL_ROCKCHIP_IODOMAIN=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> @@ -43,8 +47,11 @@ CONFIG_GMAC_ROCKCHIP=y
> CONFIG_PHY_ROCKCHIP_INNO_USB2=y
> CONFIG_PHY_ROCKCHIP_TYPEC=y
> CONFIG_PMIC_RK8XX=y
> +CONFIG_SPL_PMIC_RK8XX=y
> +CONFIG_SPL_DM_REGULATOR=y
> CONFIG_SPL_DM_REGULATOR_FIXED=y
> CONFIG_REGULATOR_RK8XX=y
> +CONFIG_SPL_REGULATOR_RK8XX=y
> CONFIG_PWM_ROCKCHIP=y
> CONFIG_RAM_ROCKCHIP_LPDDR4=y
> CONFIG_BAUDRATE=1500000
More information about the U-Boot
mailing list