mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-24 00:18:36 -07:00
hw/riscv: Add a new struct RISCVBootInfo
Add a new struct RISCVBootInfo to sync boot information between multiple boot functions. Signed-off-by: Jim Shu <jim.shu@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20241120153935.24706-3-jim.shu@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
b4132a9e62
commit
d3592955af
8 changed files with 91 additions and 57 deletions
|
|
@ -526,6 +526,7 @@ static void sifive_u_machine_init(MachineState *machine)
|
|||
BlockBackend *blk;
|
||||
DeviceState *flash_dev, *sd_dev, *card_dev;
|
||||
qemu_irq flash_cs, sd_cs;
|
||||
RISCVBootInfo boot_info;
|
||||
|
||||
/* Initialize SoC */
|
||||
object_initialize_child(OBJECT(machine), "soc", &s->soc, TYPE_RISCV_U_SOC);
|
||||
|
|
@ -591,12 +592,13 @@ static void sifive_u_machine_init(MachineState *machine)
|
|||
firmware_end_addr = riscv_find_and_load_firmware(machine, firmware_name,
|
||||
&start_addr, NULL);
|
||||
|
||||
riscv_boot_info_init(&boot_info, &s->soc.u_cpus);
|
||||
if (machine->kernel_filename) {
|
||||
kernel_start_addr = riscv_calc_kernel_start_addr(&s->soc.u_cpus,
|
||||
kernel_start_addr = riscv_calc_kernel_start_addr(&boot_info,
|
||||
firmware_end_addr);
|
||||
|
||||
kernel_entry = riscv_load_kernel(machine, &s->soc.u_cpus,
|
||||
kernel_start_addr, true, NULL);
|
||||
riscv_load_kernel(machine, &boot_info, kernel_start_addr,
|
||||
true, NULL);
|
||||
kernel_entry = boot_info.image_low_addr;
|
||||
} else {
|
||||
/*
|
||||
* If dynamic firmware is used, it doesn't know where is the next mode
|
||||
|
|
@ -607,7 +609,7 @@ static void sifive_u_machine_init(MachineState *machine)
|
|||
|
||||
fdt_load_addr = riscv_compute_fdt_addr(memmap[SIFIVE_U_DEV_DRAM].base,
|
||||
memmap[SIFIVE_U_DEV_DRAM].size,
|
||||
machine, &s->soc.u_cpus);
|
||||
machine, &boot_info);
|
||||
riscv_load_fdt(fdt_load_addr, machine->fdt);
|
||||
|
||||
if (!riscv_is_32bit(&s->soc.u_cpus)) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue