Message ID | 20240122181631.2383743-1-jonas@kwiboo.se |
---|---|
State | Superseded |
Delegated to: | Kever Yang |
Headers | show |
Series | [v2] rockchip: spl: Enable caches to speed up checksum validation | expand |
Hi Jonas, On 2024/1/23 02:16, Jonas Karlman wrote: > FIT checksum validation is very slow in SPL due to D-cache not being > enabled. > > Enable caches in SPL to speed up FIT checksum validation, from seconds > to milliseconds. > > This change enables caches in SPL on all Rockchip boards, the Kconfig > options SPL_SYS_ICACHE_OFF and SPL_SYS_DCACHE_OFF can be enabled to > disable caches for a specific board or SoC if needed. It should invalidate cache before go to next stage, but the U-Boot proper and SPL are using different memory area and U-Boot calls cleanup_before_linux() at last, this patch should be safe in current code structure. Reviewed-by: Kever Yang <kever.yang@rock-chips.com> Thanks, - Kever > > Signed-off-by: Jonas Karlman <jonas@kwiboo.se> > --- > Changes in v2: > - None > > This has been tested on multiple RK3288, RK3328, RK3399, RK356x and > RK3588 boards without any issues, vendor U-Boot also enables caches in > SPL for all SoCs. > > Link to RFC: https://patchwork.ozlabs.org/patch/1802303/ > --- > arch/arm/mach-rockchip/spl.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c > index 87280e2ba7cc..e29c841100c8 100644 > --- a/arch/arm/mach-rockchip/spl.c > +++ b/arch/arm/mach-rockchip/spl.c > @@ -136,6 +136,10 @@ 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); > + gd->relocaddr = gd->ram_top; > + > + arch_reserve_mmu(); > + enable_caches(); > #endif > preloader_console_init(); > }
Hi Kever, On 2024-01-23 03:36, Kever Yang wrote: > Hi Jonas, > > On 2024/1/23 02:16, Jonas Karlman wrote: >> FIT checksum validation is very slow in SPL due to D-cache not being >> enabled. >> >> Enable caches in SPL to speed up FIT checksum validation, from seconds >> to milliseconds. >> >> This change enables caches in SPL on all Rockchip boards, the Kconfig >> options SPL_SYS_ICACHE_OFF and SPL_SYS_DCACHE_OFF can be enabled to >> disable caches for a specific board or SoC if needed. > It should invalidate cache before go to next stage, but the U-Boot > proper and SPL > are using different memory area and U-Boot calls cleanup_before_linux() > at last, > this patch should be safe in current code structure. Thanks for input, since the commit 6826c432e351 ("spl: Jump to image at end of board_init_r") the spl_board_prepare_for_boot() will be called before next stage after SPL regardless of TF-A, OPTEE, linux or U-Boot proper. Sounds like I should add something like the following in v3, after some re-testing to ensure all caches are disabled before next stage. void spl_board_prepare_for_boot(void) { cleanup_before_linux(); } Regards, Jonas > > Reviewed-by: Kever Yang <kever.yang@rock-chips.com> > > Thanks, > - Kever > >> >> Signed-off-by: Jonas Karlman <jonas@kwiboo.se> >> --- >> Changes in v2: >> - None >> >> This has been tested on multiple RK3288, RK3328, RK3399, RK356x and >> RK3588 boards without any issues, vendor U-Boot also enables caches in >> SPL for all SoCs. >> >> Link to RFC: https://patchwork.ozlabs.org/patch/1802303/ >> --- >> arch/arm/mach-rockchip/spl.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c >> index 87280e2ba7cc..e29c841100c8 100644 >> --- a/arch/arm/mach-rockchip/spl.c >> +++ b/arch/arm/mach-rockchip/spl.c >> @@ -136,6 +136,10 @@ 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); >> + gd->relocaddr = gd->ram_top; >> + >> + arch_reserve_mmu(); >> + enable_caches(); >> #endif >> preloader_console_init(); >> }
diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c index 87280e2ba7cc..e29c841100c8 100644 --- a/arch/arm/mach-rockchip/spl.c +++ b/arch/arm/mach-rockchip/spl.c @@ -136,6 +136,10 @@ 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); + gd->relocaddr = gd->ram_top; + + arch_reserve_mmu(); + enable_caches(); #endif preloader_console_init(); }
FIT checksum validation is very slow in SPL due to D-cache not being enabled. Enable caches in SPL to speed up FIT checksum validation, from seconds to milliseconds. This change enables caches in SPL on all Rockchip boards, the Kconfig options SPL_SYS_ICACHE_OFF and SPL_SYS_DCACHE_OFF can be enabled to disable caches for a specific board or SoC if needed. Signed-off-by: Jonas Karlman <jonas@kwiboo.se> --- Changes in v2: - None This has been tested on multiple RK3288, RK3328, RK3399, RK356x and RK3588 boards without any issues, vendor U-Boot also enables caches in SPL for all SoCs. Link to RFC: https://patchwork.ozlabs.org/patch/1802303/ --- arch/arm/mach-rockchip/spl.c | 4 ++++ 1 file changed, 4 insertions(+)