|
@@ -176,10 +176,12 @@ target_ulong riscv_load_firmware(const char *firmware_filename,
|
|
target_ulong riscv_load_kernel(MachineState *machine,
|
|
target_ulong riscv_load_kernel(MachineState *machine,
|
|
RISCVHartArrayState *harts,
|
|
RISCVHartArrayState *harts,
|
|
target_ulong kernel_start_addr,
|
|
target_ulong kernel_start_addr,
|
|
|
|
+ bool load_initrd,
|
|
symbol_fn_t sym_cb)
|
|
symbol_fn_t sym_cb)
|
|
{
|
|
{
|
|
const char *kernel_filename = machine->kernel_filename;
|
|
const char *kernel_filename = machine->kernel_filename;
|
|
uint64_t kernel_load_base, kernel_entry;
|
|
uint64_t kernel_load_base, kernel_entry;
|
|
|
|
+ void *fdt = machine->fdt;
|
|
|
|
|
|
g_assert(kernel_filename != NULL);
|
|
g_assert(kernel_filename != NULL);
|
|
|
|
|
|
@@ -220,6 +222,15 @@ out:
|
|
kernel_entry = extract64(kernel_entry, 0, 32);
|
|
kernel_entry = extract64(kernel_entry, 0, 32);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (load_initrd && machine->initrd_filename) {
|
|
|
|
+ riscv_load_initrd(machine, kernel_entry);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (fdt && machine->kernel_cmdline && *machine->kernel_cmdline) {
|
|
|
|
+ qemu_fdt_setprop_string(fdt, "/chosen", "bootargs",
|
|
|
|
+ machine->kernel_cmdline);
|
|
|
|
+ }
|
|
|
|
+
|
|
return kernel_entry;
|
|
return kernel_entry;
|
|
}
|
|
}
|
|
|
|
|