summary refs log tree commit diff stats
path: root/hw/riscv/virt.c
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/virt.c
parentb8e1f32cda7805236c2bd497106a9356431c2d60 (diff)
downloadfocaccia-qemu-d43d54ca2b27077974928ee7783a0ae1f9838a8d.tar.gz
focaccia-qemu-d43d54ca2b27077974928ee7783a0ae1f9838a8d.zip
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/virt.c')
-rw-r--r--hw/riscv/virt.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index 49f2c157f7..981392c0bb 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) {