[U-Boot] [PATCH 7/8] riscv: Fix clear bss loop in the start-up code
Rick Chen
rickchen36 at gmail.com
Thu Oct 31 03:10:22 UTC 2019
Hi Bin
>
> Hi Rick,
>
> On Fri, Oct 25, 2019 at 2:18 PM Andes <uboot at andestech.com> wrote:
> >
> > From: Rick Chen <rick at andestech.com>
> >
> > For RV64, it will use sd instruction to clear t0
> > register, and the increament will be 8 bytes. So
> > if the difference between__bss_strat and __bss_end
> > was not 8 bytes aligned, the clear bss loop will
> > overflow and acks like system hang.
> >
> > Signed-off-by: Rick Chen <rick at andestech.com>
> > Cc: KC Lin <kclin at andestech.com>
> > Cc: Alan Kao <alankao at andestech.com>
> > ---
> > 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 0a2ce6d..ee6d471 100644
> > --- a/arch/riscv/cpu/start.S
> > +++ b/arch/riscv/cpu/start.S
> > @@ -174,7 +174,7 @@ spl_clear_bss:
> > spl_clear_bss_loop:
> > SREG zero, 0(t0)
> > addi t0, t0, REGBYTES
> > - bne t0, t1, spl_clear_bss_loop
> > + blt t0, t1, spl_clear_bss_loop
>
> This leaves bss section not completely zeroed.
I don't think this will clear bss section incompletely.
Can you check it again ?
Or explain more details why you think so ?
Thanks
Rick
>
> >
> > spl_stack_gd_setup:
> > jal spl_relocate_stack_gd
> > @@ -324,7 +324,7 @@ clear_bss:
> > clbss_l:
> > SREG zero, 0(t0) /* clear loop... */
> > addi t0, t0, REGBYTES
> > - bne t0, t1, clbss_l
> > + blt t0, t1, clbss_l
> >
> > relocate_secondary_harts:
> > #ifdef CONFIG_SMP
> > --
>
> Regards,
> Bin
More information about the U-Boot
mailing list