[U-Boot] [RESEND PATCH v2 03/15] riscv: bootm: Correct the 1st kernel argument to hart id

Rick Chen rickchen36 at gmail.com
Thu Sep 20 03:17:27 UTC 2018


 > From: Bin Meng [mailto:bmeng.cn at gmail.com]
 > Sent: Tuesday, September 11, 2018 12:55 PM
 > To: Rick Jian-Zhi Chen(陳建志); U-Boot Mailing List
 > Cc: Lukas Auer
 > Subject: [RESEND PATCH v2 03/15] riscv: bootm: Correct the 1st
kernel argument
 > to hart id
 >
 > The first argument of Linux kernel is the risc-v core hart id, from
which the kernel
 > is booted from. It is not the mach_id, which seems to be copied from arm.
 >
 > While we are here, this also changes the Linux kernel entry
parameters' type to
 > support both 32-bit and 64-bit.
 >
 > Note the hart id is hardcoded to zero for now, and we should change
to fill in it
 > with the value read from mhartid CSR of the hart which this routine
is currently
 > running on.
 >
 > Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
 >
 > ---
 >
 > Changes in v2:
 > - Change Linux kernel entry parameters' type to support 32/64 bit
 >
 >  arch/riscv/lib/bootm.c | 18 +++++-------------
 >  1 file changed, 5 insertions(+), 13 deletions(-)
 >
 > diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c index
 > 6662aff..6893108 100644
 > --- a/arch/riscv/lib/bootm.c
 > +++ b/arch/riscv/lib/bootm.c
 > @@ -25,10 +25,7 @@ int arch_fixup_fdt(void *blob)
 >
 >  int do_bootm_linux(int flag, int argc, char *argv[],
bootm_headers_t *images)
 > {
 > -     bd_t    *bd = gd->bd;
 > -     char    *s;
 > -     int     machid = bd->bi_arch_number;
 > -     void    (*theKernel)(int arch, uint params);
 > +     void    (*kernel)(ulong hart, void *dtb);
 >
 >       /*
 >        * allow the PREP bootm subcommand, it is required for bootm to work
 > @@ -39,18 +36,12 @@ int do_bootm_linux(int flag, int argc, char *argv[],
 > bootm_headers_t *images)
 >       if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
 >               return 1;
 >
 > -     theKernel = (void (*)(int, uint))images->ep;
 > -
 > -     s = env_get("machid");
 > -     if (s) {
 > -             machid = simple_strtoul(s, NULL, 16);
 > -             printf("Using machid 0x%x from environment\n", machid);
 > -     }
 > +     kernel = (void (*)(ulong, void *))images->ep;
 >
 >       bootstage_mark(BOOTSTAGE_ID_RUN_OS);
 >
 >       debug("## Transferring control to Linux (at address %08lx) ...\n",
 > -            (ulong)theKernel);
 > +            (ulong)kernel);
 >
 >       if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {  #ifdef
 > CONFIG_OF_LIBFDT @@ -66,8 +57,9 @@ int do_bootm_linux(int flag, int argc,
 > char *argv[], bootm_headers_t *images)
 >       printf("\nStarting kernel ...\n\n");
 >
 >       cleanup_before_linux();
 > +     /* TODO: hardcode the hart id to zero for now */
 >       if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
 > -             theKernel(machid, (unsigned long)images->ft_addr);
 > +             kernel(0, images->ft_addr);
 >
 >       /* does not return */
 >

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

 > --
 > 2.7.4


More information about the U-Boot mailing list