[PATCH 1/1] board: sifive: unmatched: move kernel load address to 0x80200000

Yong-Xuan Wang yongxuan.wang at sifive.com
Thu Nov 2 11:27:37 CET 2023


Hi Tom,

On Tue, Oct 31, 2023 at 7:54 PM Tom Rini <trini at konsulko.com> wrote:
>
> On Tue, Oct 31, 2023 at 03:56:45PM +0800, Yong-Xuan Wang wrote:
>
> > Hi Tom,
> >
> > 0x80200000 comes from the result of the relocated_addr in booti_setup()
> > on HiFive Unmatched board. If we load the Kernel Image to this address,
> > it will not be moved. Currently one of the first two 8-byte of RISC-V
> > Kernel Image is j _start_kernel instruction, so it's OK to execute the
> > header of the Image.
>
> Thanks for confirming.
>
> Reviewed-by: Tom Rini <trini at konsulko.com>
>
> As a follow-up, can you please work on migrating to plain text
> environment?
>
> >
> > Regards,
> > Yong-Xuan
> >
> >
> > On Sat, Oct 28, 2023 at 12:43 AM Tom Rini <trini at konsulko.com> wrote:
> > >
> > > On Thu, Oct 26, 2023 at 03:22:52AM +0000, Yong-Xuan Wang wrote:
> > >
> > > > U-boot initially loads the kernel image to the kernel_addr_r, and
> > > > subsequently relocates it to memory address 0x80200000. Setting
> > > > kernel_addr_r to 0x80200000 can eliminate one copy operation.
> > > >
> > > > Signed-off-by: Yong-Xuan Wang <yongxuan.wang at sifive.com>
> > > > ---
> > > >  include/configs/sifive-unmatched.h | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/include/configs/sifive-unmatched.h b/include/configs/sifive-unmatched.h
> > > > index 74150b7d4b..de8bfc1123 100644
> > > > --- a/include/configs/sifive-unmatched.h
> > > > +++ b/include/configs/sifive-unmatched.h
> > > > @@ -36,7 +36,7 @@
> > > >       "name=system,size=-,bootable,type=${type_guid_gpt_system};"
> > > >
> > > >  #define CFG_EXTRA_ENV_SETTINGS \
> > > > -     "kernel_addr_r=0x84000000\0" \
> > > > +     "kernel_addr_r=0x80200000\0" \
> > > >       "kernel_comp_addr_r=0x88000000\0" \
> > > >       "kernel_comp_size=0x4000000\0" \
> > > >       "fdt_addr_r=0x8c000000\0" \
> > >
> > > This is I believe subtly wrong. If you want an execute in place kernel
> > > image (and are using FIT images), this can be made to work. But if you
> > > load your (Linux Kernel) Image to this address, the header will be at
> > > 0x80200000 and not the payload so you still end up moving it. Are you
> > > sure this is (a) not still moving it and (b) it's OK to be executing the
> > > header of the image like it's code (or is there some catch in the header
> > > to lead to a jump over it, in that case) ?
> > >
> > > --
> > > Tom
>
> --
> Tom

Sure. Could you please provide more details or examples of the plain text
environment? I want to ensure I fully understand your request before
proceeding.

Regards,
Yong-Xuan


More information about the U-Boot mailing list