[U-Boot] FW: [PATCH 18/30] riscv: invalidate the instruction cache before jumping to Linux

Auer, Lukas lukas.auer at aisec.fraunhofer.de
Fri Oct 26 16:27:47 UTC 2018


Hi Rick,

On Mon, 2018-10-22 at 09:39 +0800, Rick Chen wrote:
> > From: Lukas Auer [mailto:lukas.auer at aisec.fraunhofer.de]
> > Sent: Saturday, October 20, 2018 6:08 AM
> > To: u-boot at lists.denx.de
> > Cc: Bin Meng; Lukas Auer; Greentime Hu; Alexander Graf; Rick Jian-
> > Zhi Chen(陳建志)
> > Subject: [PATCH 18/30] riscv: invalidate the instruction cache
> > before jumping to Linux
> > 
> > Signed-off-by: Lukas Auer <lukas.auer at aisec.fraunhofer.de>
> > ---
> > 
> >  arch/riscv/lib/bootm.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c index
> > a7a9fb921b..bc1d4b2864 100644
> > --- a/arch/riscv/lib/bootm.c
> > +++ b/arch/riscv/lib/bootm.c
> > @@ -38,6 +38,7 @@ int do_bootm_linux(int flag, int argc, char
> > *argv[], bootm_headers_t *images)
> >                 return 1;
> > 
> >         kernel = (void (*)(ulong, void *))images->ep;
> > +       invalidate_icache_all();
> 
> Hi Likas
> 
> I wull use cleanup_before_linux() which is in cpu.c as below
> 

I would prefer to keep the invalidate_icache_all() in bootm.c since it
is important in the context of the function. I do agree that the data
and instruction caches should be disabled in cleanup_before_linux().

Thanks,
Lukas

> int cleanup_before_linux(void)
> {
>   disable_interrupts();
> 
>   /* turn off I/D-cache */
>   cache_flush();
>   icache_disable();
>   dcache_disable();
> 
>   return 0;
> }
> 
> and cache_flush() in cache.c as below
> 
> void cache_flush(void)
> {
>   invalidate_icache_all();
>   flush_dcache_all();
> }
> 
> Rick
> 
> > 
> >         bootstage_mark(BOOTSTAGE_ID_RUN_OS);
> > 
> > --
> > 2.17.2
> > 


More information about the U-Boot mailing list