[U-Boot] [PATCH v3 05/11] riscv: save hart ID in register tp instead of s0

Rick Chen rickchen36 at gmail.com
Mon Mar 18 05:52:11 UTC 2019


> > From: Lukas Auer [mailto:lukas.auer at aisec.fraunhofer.de]
> > Sent: Monday, March 18, 2019 2:29 AM
> > To: u-boot at lists.denx.de
> > Cc: Anup Patel; Andreas Schwab; Bin Meng; Atish Patra; Palmer Dabbelt; Lukas
> > Auer; Atish Patra; Anup Patel; Rick Jian-Zhi Chen(陳建志)
> > Subject: [PATCH v3 05/11] riscv: save hart ID in register tp instead of s0
> >
> > The hart ID passed by the previous boot stage is currently stored in register s0. If
> > we divert the control flow inside a function, which is required as part of
> > multi-hart support, the function epilog may not be called, clobbering register s0.
> > Save the hart ID in the unallocatable register tp instead to protect the hart ID.
> >
> > Signed-off-by: Lukas Auer <lukas.auer at aisec.fraunhofer.de>
> > ---
> >
> > Changes in v3:
> > - New patch to save the hart ID in register tp instead of s0
> >
> > Changes in v2: None
> >
> >  arch/riscv/cpu/start.S | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index
> > a30f6f7194..bcc0ff696d 100644
> > --- a/arch/riscv/cpu/start.S
> > +++ b/arch/riscv/cpu/start.S
> > @@ -36,7 +36,7 @@
> >  .globl _start
> >  _start:
> >       /* save hart id and dtb pointer */
> > -     mv      s0, a0
> > +     mv      tp, a0
> >       mv      s1, a1
> >
> >       la      t0, trap_entry
> > @@ -64,7 +64,7 @@ call_board_init_f_0:
> >       jal     board_init_f_init_reserve
> >
> >       /* save the boot hart id to global_data */
> > -     SREG    s0, GD_BOOT_HART(gp)
> > +     SREG    tp, GD_BOOT_HART(gp)
> >
> >       /* Enable cache */
> >       jal     icache_enable

Reviewed-by: Rick Chen <rick at andestech.com>


More information about the U-Boot mailing list