mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-14 15:02:54 +00:00
RISC-V: Minimal QEMU 2.12 fix for sifive_u machine
The 'sifive_u' board has a bug where the ROM is
created as RAM at the wrong address and marked
readonly. The bug renders the board unusable.
This is a minimal fix and allows booting Linux.
5aec3247c1
"RISC-V: Mark ROM read-only after copying in code"
contains a comprehensive fix using the ROM APIs
memory_region_init_rom and rom_add_blob_fixed_as
which could be backported.
Cc: Sagar Karandikar <sagark@eecs.berkeley.edu>
Cc: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Cc: Palmer Dabbelt <palmer@sifive.com>
Cc: Alistair Francis <Alistair.Francis@wdc.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Michael Clark <mjc@sifive.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
9363c34825
commit
4a67f4a953
|
@ -250,9 +250,9 @@ static void riscv_sifive_u_init(MachineState *machine)
|
||||||
|
|
||||||
/* boot rom */
|
/* boot rom */
|
||||||
memory_region_init_ram(boot_rom, NULL, "riscv.sifive.u.mrom",
|
memory_region_init_ram(boot_rom, NULL, "riscv.sifive.u.mrom",
|
||||||
memmap[SIFIVE_U_MROM].base, &error_fatal);
|
memmap[SIFIVE_U_MROM].size, &error_fatal);
|
||||||
memory_region_set_readonly(boot_rom, true);
|
memory_region_add_subregion(sys_memory, memmap[SIFIVE_U_MROM].base,
|
||||||
memory_region_add_subregion(sys_memory, 0x0, boot_rom);
|
boot_rom);
|
||||||
|
|
||||||
if (machine->kernel_filename) {
|
if (machine->kernel_filename) {
|
||||||
load_kernel(machine->kernel_filename);
|
load_kernel(machine->kernel_filename);
|
||||||
|
@ -282,6 +282,7 @@ static void riscv_sifive_u_init(MachineState *machine)
|
||||||
qemu_fdt_dumpdtb(s->fdt, s->fdt_size);
|
qemu_fdt_dumpdtb(s->fdt, s->fdt_size);
|
||||||
cpu_physical_memory_write(memmap[SIFIVE_U_MROM].base +
|
cpu_physical_memory_write(memmap[SIFIVE_U_MROM].base +
|
||||||
sizeof(reset_vec), s->fdt, s->fdt_size);
|
sizeof(reset_vec), s->fdt, s->fdt_size);
|
||||||
|
memory_region_set_readonly(boot_rom, true);
|
||||||
|
|
||||||
/* MMIO */
|
/* MMIO */
|
||||||
s->plic = sifive_plic_create(memmap[SIFIVE_U_PLIC].base,
|
s->plic = sifive_plic_create(memmap[SIFIVE_U_PLIC].base,
|
||||||
|
|
Loading…
Reference in a new issue