On Mon, 2026-11-02 at 10:31 -0600, David Lechner wrote:
> On 10/30/26 3:57 AM, Steffen Dirkwinkel wrote:
> > From: Steffen Dirkwinkel <[email protected]>
> 
> A couple things in addition to Carlo's comments...
> 
> > 
> > Running through spl without the dcache is very slow, especially when
> > hashing or checking signatures.
> > 
> > Time from the SPL banner to entering BL31 on an MT8370 module loading a
> > 2.7 MB FIT with SHA-256 hashes from SPI NOR, two boots each:
> > 
> >   FIT                    caches off            caches on
> >   unsigned               864.0 / 864.3 ms      95.8 / 95.8 ms
> >   RSA-3072 signature     1903.3 / 1903.8 ms    142.0 / 142.0 ms
> > 
> > Signed-off-by: Steffen Dirkwinkel <[email protected]>
> > ---
> >  arch/arm/mach-mediatek/mt8188/init.c | 14 ++++++++++++++
> >  arch/arm/mach-mediatek/spl.c         |  7 +++++++
> >  2 files changed, 21 insertions(+)
> > 
> > diff --git a/arch/arm/mach-mediatek/mt8188/init.c 
> > b/arch/arm/mach-mediatek/mt8188/init.c
> > index b2cdec8c2189..2e6aa041c38f 100644
> > --- a/arch/arm/mach-mediatek/mt8188/init.c
> > +++ b/arch/arm/mach-mediatek/mt8188/init.c
> > @@ -6,6 +6,7 @@
> >   *         Chris-QJ Chen <[email protected]>
> >   */
> >  
> > +#include <cpu_func.h>
> >  #include <asm/global_data.h>
> >  #include <asm/system.h>
> >  #include <dm/uclass.h>
> > @@ -47,3 +48,16 @@ int print_cpuinfo(void)
> >     printf("CPU:   MediaTek MT8188\n");
> >     return 0;
> >  }
> > +
> > +#if IS_ENABLED(CONFIG_XPL_BUILD) && !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
> > +/* Early page tables, in DRAM unused by SPL and by U-Boot before 
> > relocation */
> > +#define MT8188_EARLY_TLB_ADDR      0x4e000000
> > +
> > +/* Initialize the MMU and activate the data cache in SPL */
> > +void mtk_spl_enable_caches(void)
> > +{
> > +   gd->arch.tlb_addr = MT8188_EARLY_TLB_ADDR;
> > +   gd->arch.tlb_size = PGTABLE_SIZE;
> > +   dcache_enable();
> 
> Why not also icache?

I tested it and it didn't really help (boot wasn't faster). But it's cleaner to
have both on, I'll do it in the next version.

> 
> > +}
> > +#endif
> > diff --git a/arch/arm/mach-mediatek/spl.c b/arch/arm/mach-mediatek/spl.c
> > index 125ebcd784fe..8073101e3ef6 100644
> > --- a/arch/arm/mach-mediatek/spl.c
> > +++ b/arch/arm/mach-mediatek/spl.c
> > @@ -14,10 +14,17 @@ __weak int mtk_soc_early_init(void)
> >     return 0;
> >  }
> >  
> > +__weak void mtk_spl_enable_caches(void)
> > +{
> > +}
> 
> Can we make this a config option instead of a weak function so that we don't
> have to implement the same function on every board?
> 
> > +
> >  void board_init_f(ulong dummy)
> >  {
> >     int ret;
> >  
> > +   /* enable caches early */
> > +   mtk_spl_enable_caches();
> > +
> >     ret = spl_early_init();
> >     if (ret)
> >             hang();
> > 

Reply via email to