[PATCH 4/7] rockchip: Add DFU to SPL for RK3568
Jonas Karlman
jonas at kwiboo.se
Sun Apr 13 11:51:59 CEST 2025
Hi,
On 2025-02-11 06:33, FUKAUMI Naoki wrote:
> Boot the RK3568 from the USB OTG port using rkflashtool[1] or
> rkusbboot[2] and dfu-util.
>
> 1a. Download the TPL and SPL using rkflashtool
>
> $ rkflashtool l < mkimage-in-simple-bin.mkimage-rockchip-tpl
> $ rkflashtool L < mkimage-in-simple-bin.mkimage-u-boot-spl
>
> 1b. Download the TPL and SPL using rkusbboot
>
> $ rkusbboot \
> mkimage-in-simple-bin.mkimage-rockchip-tpl \
> mkimage-in-simple-bin.mkimage-u-boot-spl
>
> 2. Download the U-Boot
>
> $ dfu-util -a 0 -D u-boot.itb
>
> [1] https://github.com/linux-rockchip/rkflashtool
> [2] https://github.com/RadxaNaoki/rkusbboot
>
> Signed-off-by: FUKAUMI Naoki <naoki at radxa.com>
> ---
> arch/arm/dts/rk356x-u-boot.dtsi | 5 +++++
> arch/arm/mach-rockchip/rk3568/rk3568.c | 1 +
> configs/generic-rk3568_defconfig | 9 +++++++++
> include/configs/rk3568_common.h | 7 +++++++
> 4 files changed, 22 insertions(+)
>
> diff --git a/arch/arm/dts/rk356x-u-boot.dtsi b/arch/arm/dts/rk356x-u-boot.dtsi
> index 24a976cf7e2..8d2485586bd 100644
> --- a/arch/arm/dts/rk356x-u-boot.dtsi
> +++ b/arch/arm/dts/rk356x-u-boot.dtsi
> @@ -170,6 +170,11 @@
> bootph-all;
> };
>
> +&usb_host0_xhci {
> + bootph-pre-ram;
> + bootph-some-ram;
Same as in the RK3588 review, and same goes for remaining SoCs.
Please drop the bootph-some-ram and wrap the bootph-pre-ram in
IF_ENABLED(CONFIG_SPL_DFU).
> +};
> +
> &xin24m {
> bootph-all;
> };
> diff --git a/arch/arm/mach-rockchip/rk3568/rk3568.c b/arch/arm/mach-rockchip/rk3568/rk3568.c
> index c2b96902d2d..b087c08b3d0 100644
> --- a/arch/arm/mach-rockchip/rk3568/rk3568.c
> +++ b/arch/arm/mach-rockchip/rk3568/rk3568.c
> @@ -88,6 +88,7 @@ const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = {
> [BROM_BOOTSOURCE_EMMC] = "/mmc at fe310000",
> [BROM_BOOTSOURCE_SPINOR] = "/spi at fe300000/flash at 0",
> [BROM_BOOTSOURCE_SD] = "/mmc at fe2b0000",
> + [BROM_BOOTSOURCE_USB] = "/usb at fcc00000",
> };
>
> struct mm_region *mem_map = rk3568_mem_map;
> diff --git a/configs/generic-rk3568_defconfig b/configs/generic-rk3568_defconfig
> index f79f0e84400..32c6fdc2846 100644
> --- a/configs/generic-rk3568_defconfig
> +++ b/configs/generic-rk3568_defconfig
> @@ -25,9 +25,11 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3568-generic.dtb"
> CONFIG_SPL_MAX_SIZE=0x40000
> CONFIG_SPL_PAD_TO=0x7f8000
> # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
> +CONFIG_SPL_ENV_SUPPORT=y
> CONFIG_SPL_SPI_LOAD=y
> CONFIG_SYS_SPI_U_BOOT_OFFS=0x60000
> CONFIG_SPL_ATF=y
> +CONFIG_CMD_DFU=y
> CONFIG_CMD_GPIO=y
> CONFIG_CMD_GPT=y
> CONFIG_CMD_MISC=y
> @@ -47,6 +49,9 @@ CONFIG_SPL_REGMAP=y
> CONFIG_SPL_SYSCON=y
> # CONFIG_ADC is not set
> CONFIG_SPL_CLK=y
> +CONFIG_DFU_RAM=y
> +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x100000
> +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x200000
> # CONFIG_USB_FUNCTION_FASTBOOT is not set
> CONFIG_ROCKCHIP_GPIO=y
> CONFIG_MISC=y
> @@ -74,9 +79,13 @@ CONFIG_ROCKCHIP_SFC=y
> CONFIG_SYSRESET=y
> CONFIG_SYSRESET_PSCI=y
> CONFIG_USB=y
> +CONFIG_SPL_DM_USB_GADGET=y
> CONFIG_USB_DWC3=y
> CONFIG_USB_DWC3_GENERIC=y
> +CONFIG_SPL_USB_DWC3_GENERIC=y
Back when Eugen Hristev sent a "rockchip: rk3588: add support for DFU in
SPL" series [1] there was a few dwc3 patches required for stable
operation. Are these no longer required or was only for rk3588 dwc3
affected?
[1] https://patchwork.ozlabs.org/cover/1815387/
> CONFIG_USB_GADGET=y
> +CONFIG_SPL_USB_GADGET=y
> CONFIG_USB_GADGET_DOWNLOAD=y
> CONFIG_USB_FUNCTION_ROCKUSB=y
> +CONFIG_SPL_DFU=y
> CONFIG_ERRNO_STR=y
> diff --git a/include/configs/rk3568_common.h b/include/configs/rk3568_common.h
> index 09b7b71c6af..7b6aeca2a15 100644
> --- a/include/configs/rk3568_common.h
> +++ b/include/configs/rk3568_common.h
> @@ -27,11 +27,18 @@
> "ramdisk_addr_r=0x12180000\0" \
> "kernel_comp_size=0x8000000\0"
>
> +#if defined(CONFIG_SPL_DFU) && defined(CONFIG_XPL_BUILD)
> +#define CFG_EXTRA_ENV_SETTINGS \
> + "dfu_alt_info_ram=u-boot.itb ram " \
> + __stringify(CONFIG_SPL_LOAD_FIT_ADDRESS) " " \
> + __stringify(CONFIG_SYS_DFU_MAX_FILE_SIZE) "\0"
Same as in the RK3588 review, and same goes for remaining SoCs.
Do we not need to set similar for U-Boot proper if we want to use DFU
from U-Boot cli?
Regards,
Jonas
> +#else
> #define CFG_EXTRA_ENV_SETTINGS \
> "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
> "partitions=" PARTS_DEFAULT \
> ENV_MEM_LAYOUT_SETTINGS \
> ROCKCHIP_DEVICE_SETTINGS \
> "boot_targets=" BOOT_TARGETS "\0"
> +#endif
>
> #endif /* __CONFIG_RK3568_COMMON_H */
More information about the U-Boot
mailing list