[PATCH] firmware: Do not allow harts with different XLEN to boot

Atish Patra atishp at atishpatra.org
Thu Jun 3 10:48:48 PDT 2021


On Wed, Jun 2, 2021 at 5:22 AM Anup Patel <Anup.Patel at wdc.com> wrote:
>
>
>
> > -----Original Message-----
> > From: Atish Patra <atish.patra at wdc.com>
> > Sent: 02 June 2021 07:12
> > To: opensbi at lists.infradead.org
> > Cc: Anup Patel <Anup.Patel at wdc.com>; Atish Patra <Atish.Patra at wdc.com>
> > Subject: [PATCH] firmware: Do not allow harts with different XLEN to boot
> >
> > OpenSBI is built separately for RV32/RV64. Thus, it shouldn't try to boot harts
> > with a different XLEN compared to what it is compiled with.
> >
> > This patch fixes the issue observed in beagleV which has two U74(RV64) and
> > one E24 (RV32) harts.
> >
> > Signed-off-by: Atish Patra <atish.patra at wdc.com>
> > ---
> >  firmware/fw_base.S | 10 ++++++++++
> >  1 file changed, 10 insertions(+)
> >
> > diff --git a/firmware/fw_base.S b/firmware/fw_base.S index
> > a5ce946aa3fe..ae12a126ca66 100644
> > --- a/firmware/fw_base.S
> > +++ b/firmware/fw_base.S
> > @@ -47,6 +47,16 @@
> >       .globl _start
> >       .globl _start_warm
> >  _start:
> > +     csrr   t0, misa
> > +     slti   t1, t0, 0
> > +     slli   t1, t1, 1
> > +     slli   t0, t0, 1
> > +     slti   t0, t0, 0
> > +     add    t2, t0, t1
> > +     li     t3, __riscv_xlen
> > +     srli   t3, t3, 5
> > +     bne    t2, t3, _start_hang
> > +
>
> Unfortunately, MISA can be wired to zero in which case
> platform will provide non-standard hooks to check
> extensions.
>
> How about this ?
>
>         li    t0, 1
>         slli t0, t0, 32
> #if __riscv_xlen == 32
>         bne t0, zero, _start_hang
> #else
>         beq t0, zero, _start_hang
> #endif
>
> Probably above can be ASM macro so that we can call
> this macro at start of both _start() and _start_warm()
>

Sure. I will do that.

Just to clarify, we don't need this for Beagleboard.
After talking to StarFive engineers, it was confirmed that the U74 and
E24 are in different clusters and both contain hart0.
However,  E24 never enters OpenSBI as it executes code compiled for RV32 only.

This patch will just serve as an improved sanity check.

> >       /* Find preferred boot HART id */
> >       MOV_3R  s0, a0, s1, a1, s2, a2
> >       call    fw_boot_hart
> > --
> > 2.31.1
>
> Regards,
> Anup
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



-- 
Regards,
Atish



More information about the opensbi mailing list