Index: sys/riscv/riscv/machdep.c =================================================================== --- sys/riscv/riscv/machdep.c +++ sys/riscv/riscv/machdep.c @@ -40,6 +40,7 @@ #include #include +#include #include #include #include @@ -800,6 +801,17 @@ rvbp->kern_phys, rvbp->kern_phys + (lastaddr - KERNBASE)); } +static void +parse_fdt_bootargs(void) +{ + char bootargs[512]; + + bootargs[sizeof(bootargs) - 1] = '\0'; + if (fdt_get_chosen_bootargs(bootargs, sizeof(bootargs) - 1) == 0) { + boothowto |= boot_parse_cmdline(bootargs); + } +} + static vm_offset_t parse_metadata(void) { @@ -819,16 +831,18 @@ /* Read the boot metadata */ boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int); lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND, vm_offset_t); +#ifdef FDT + try_load_dtb(kmdp); +#endif kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *); - if (kern_envp != NULL) + if (kern_envp != NULL) { init_static_kenv(kern_envp, 0); + parse_fdt_bootargs(); + } #ifdef DDB ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t); ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t); db_fetch_ksymtab(ksym_start, ksym_end); -#endif -#ifdef FDT - try_load_dtb(kmdp); #endif return (lastaddr); }