[PATCH v3] rockchip: spl: Enable caches to speed up checksum validation

Kever Yang kever.yang at rock-chips.com
Mon Feb 5 01:51:10 CET 2024


Hi Jonas,

     This patch fail to build with armv7 platform:

+arch/arm/mach-rockchip/spl.c: In function 'board_init_f':
+arch/arm/mach-rockchip/spl.c:143:17: error: implicit declaration of 
function 'enable_caches' [-Werror=implicit-function-declaration]
+  143 |                 enable_caches();
+      |                 ^~~~~~~~~~~~~


Thanks,

- Kever

On 2024/1/26 05:19, Jonas Karlman wrote:
> FIT checksum validation is very slow in SPL due to D-cache not being
> enabled.
>
> Enable caches in SPL on ARM64 SoCs to speed up FIT checksum validation,
> from seconds to milliseconds.
>
> This change enables caches in SPL on all Rockchip ARM64 boards, the
> Kconfig options SPL_SYS_ICACHE_OFF and SPL_SYS_DCACHE_OFF can be used to
> disable caches for a specific board or SoC if needed.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
> Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
> ---
> Changes in v3:
> - Limit to ARM64 SoCs
> - Fix build with SPL_SYS_ICACHE_OFF or SPL_SYS_DCACHE_OFF enabled
> - Use cleanup_before_linux() in spl_board_prepare_for_boot() to disable
>    caches before jumping from SPL to next stage
> - Collect r-b tag
>
> Changes in v2:
> - None
>
> This has been tested on multiple RK3328, RK3399, RK356x and RK3588
> boards without any issues, vendor U-Boot also enables caches in SPL for
> all SoCs.
>
> This only worked on RK3288 because the default enable_caches() that does
> not enable caches was being used. Trying to enable caches on my RK3288
> froze my boards in mmu_setup(). So v3 limits the enable_caches() call to
> only include ARM64 SoCs.
>
> Link to RFC: https://patchwork.ozlabs.org/patch/1802303/
> Link to v2: https://patchwork.ozlabs.org/patch/1889319/
> ---
>   arch/arm/mach-rockchip/spl.c | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
>
> diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c
> index 87280e2ba7cc..c4d3983a6735 100644
> --- a/arch/arm/mach-rockchip/spl.c
> +++ b/arch/arm/mach-rockchip/spl.c
> @@ -136,6 +136,20 @@ void board_init_f(ulong dummy)
>   	}
>   	gd->ram_top = gd->ram_base + get_effective_memsize();
>   	gd->ram_top = board_get_usable_ram_top(gd->ram_size);
> +
> +	if (IS_ENABLED(CONFIG_ARM64) && !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) {
> +		gd->relocaddr = gd->ram_top;
> +		arch_reserve_mmu();
> +		enable_caches();
> +	}
>   #endif
>   	preloader_console_init();
>   }
> +
> +void spl_board_prepare_for_boot(void)
> +{
> +	if (!IS_ENABLED(CONFIG_ARM64) || CONFIG_IS_ENABLED(SYS_DCACHE_OFF))
> +		return;
> +
> +	cleanup_before_linux();
> +}


More information about the U-Boot mailing list