From: Michael Clark Date: Wed, 9 May 2018 09:06:40 +0000 (+1200) Subject: RISC-V: Minimal QEMU 2.12 fix for sifive_u machine X-Git-Tag: v2.12.1~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a67f4a9536582e066639387b6610f0b98b195c8;p=thirdparty%2Fqemu.git 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. 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 Cc: Bastian Koppelmann Cc: Palmer Dabbelt Cc: Alistair Francis Cc: qemu-stable@nongnu.org Signed-off-by: Michael Clark Signed-off-by: Michael Roth --- diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 1c2deefa6c2..19b034449c1 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,