[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