aboutsummaryrefslogtreecommitdiff
path: root/hw/riscv
diff options
context:
space:
mode:
authorBin Meng <bmeng@tinylab.org>2023-02-28 15:45:21 +0800
committerPalmer Dabbelt <palmer@rivosinc.com>2023-03-01 17:19:13 -0800
commitd43d54ca2b27077974928ee7783a0ae1f9838a8d (patch)
tree09d069cc7be44b45a0beb91929a8d583e0bfbc84 /hw/riscv
parentb8e1f32cda7805236c2bd497106a9356431c2d60 (diff)
downloadqemu-d43d54ca2b27077974928ee7783a0ae1f9838a8d.zip
qemu-d43d54ca2b27077974928ee7783a0ae1f9838a8d.tar.gz
qemu-d43d54ca2b27077974928ee7783a0ae1f9838a8d.tar.bz2
hw/riscv: Skip re-generating DT nodes for a given DTB
Launch qemu-system-riscv64 with a given dtb for 'sifive_u' and 'virt' machines, QEMU complains: qemu_fdt_add_subnode: Failed to create subnode /soc: FDT_ERR_EXISTS The whole DT generation logic should be skipped when a given DTB is present. Fixes: b1f19f238cae ("hw/riscv: write bootargs 'chosen' FDT after riscv_load_kernel()") Signed-off-by: Bin Meng <bmeng@tinylab.org> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20230228074522.1845007-1-bmeng@tinylab.org> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Diffstat (limited to 'hw/riscv')
-rw-r--r--hw/riscv/sifive_u.c1
-rw-r--r--hw/riscv/virt.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
index ad3bb35..76db5ed 100644
--- a/hw/riscv/sifive_u.c
+++ b/hw/riscv/sifive_u.c
@@ -118,6 +118,7 @@ static void create_fdt(SiFiveUState *s, const MemMapEntry *memmap,
error_report("load_device_tree() failed");
exit(1);
}
+ return;
} else {
fdt = ms->fdt = create_device_tree(&fdt_size);
if (!fdt) {
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index 49f2c15..981392c 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -1015,6 +1015,7 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap)
error_report("load_device_tree() failed");
exit(1);
}
+ return;
} else {
ms->fdt = create_device_tree(&s->fdt_size);
if (!ms->fdt) {