riscv: bootm: Support to boot riscv-linux

riscv-linux should use BBL (Berkeley bootloader) for
loading the Linux kernel.

U-Boot can play as FSBL(first stage bootloader)
to boot BBL and riscv-linux.

In BBL's init_first_hart(), it will pass dtb with a1.
So implement bootm to pass arguments to BBL correctly.

Signed-off-by: Rick Chen <rick@andestech.com>
Signed-off-by: Rick Chen <rickchen36@gmail.com>
master
Rick Chen 7 years ago committed by Andes
parent 22e8c0f02b
commit 0462358b62
  1. 8
      arch/riscv/lib/bootm.c

@ -46,7 +46,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
bd_t *bd = gd->bd; bd_t *bd = gd->bd;
char *s; char *s;
int machid = bd->bi_arch_number; int machid = bd->bi_arch_number;
void (*theKernel)(int zero, int arch, uint params); void (*theKernel)(int arch, uint params);
#ifdef CONFIG_CMDLINE_TAG #ifdef CONFIG_CMDLINE_TAG
char *commandline = env_get("bootargs"); char *commandline = env_get("bootargs");
@ -61,7 +61,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
return 1; return 1;
theKernel = (void (*)(int, int, uint))images->ep; theKernel = (void (*)(int, uint))images->ep;
s = env_get("machid"); s = env_get("machid");
if (s) { if (s) {
@ -120,9 +120,9 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
} }
cleanup_before_linux(); cleanup_before_linux();
if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
theKernel(0, machid, (unsigned long)images->ft_addr); theKernel(machid, (unsigned long)images->ft_addr);
else else
theKernel(0, machid, bd->bi_boot_params); theKernel(machid, bd->bi_boot_params);
/* does not return */ /* does not return */
return 1; return 1;

Loading…
Cancel
Save