From: Michael Clark <m...@sifive.com> 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.
5aec3247c190f10654250203a1742490ae7343a2 "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 <sag...@eecs.berkeley.edu> Cc: Bastian Koppelmann <kbast...@mail.uni-paderborn.de> Cc: Palmer Dabbelt <pal...@sifive.com> Cc: Alistair Francis <alistair.fran...@wdc.com> Cc: qemu-sta...@nongnu.org Signed-off-by: Michael Clark <m...@sifive.com> Signed-off-by: Michael Roth <mdr...@linux.vnet.ibm.com> --- hw/riscv/sifive_u.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 1c2deefa6c..19b034449c 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -250,9 +250,9 @@ static void riscv_sifive_u_init(MachineState *machine) /* boot rom */ memory_region_init_ram(boot_rom, NULL, "riscv.sifive.u.mrom", - memmap[SIFIVE_U_MROM].base, &error_fatal); - memory_region_set_readonly(boot_rom, true); - memory_region_add_subregion(sys_memory, 0x0, boot_rom); + memmap[SIFIVE_U_MROM].size, &error_fatal); + memory_region_add_subregion(sys_memory, memmap[SIFIVE_U_MROM].base, + boot_rom); if (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); cpu_physical_memory_write(memmap[SIFIVE_U_MROM].base + sizeof(reset_vec), s->fdt, s->fdt_size); + memory_region_set_readonly(boot_rom, true); /* MMIO */ s->plic = sifive_plic_create(memmap[SIFIVE_U_PLIC].base, -- 2.17.1