On Wed, Apr 20, 2022 at 1:53 PM Alistair Francis <[email protected]> wrote: > > From: Alistair Francis <[email protected]> > > Similar to the ARM virt machine add support for adding device tree > entries for dynamically created devices. > > Signed-off-by: Alistair Francis <[email protected]> > Reviewed-by: Edgar E. Iglesias <[email protected]> > --- > hw/riscv/virt.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index 169da70350..e4a5c6c28b 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -28,6 +28,7 @@ > #include "hw/qdev-properties.h" > #include "hw/char/serial.h" > #include "target/riscv/cpu.h" > +#include "hw/core/sysbus-fdt.h" > #include "hw/riscv/riscv_hart.h" > #include "hw/riscv/virt.h" > #include "hw/riscv/boot.h" > @@ -411,6 +412,12 @@ static void create_fdt_socket_aclint(RISCVVirtState *s, > qemu_fdt_setprop(mc->fdt, name, "interrupt-controller", NULL, 0); > qemu_fdt_setprop_cell(mc->fdt, name, "#interrupt-cells", 0); > riscv_socket_fdt_write_id(mc, mc->fdt, name, socket); > + > + platform_bus_add_all_fdt_nodes(mc->fdt, name, > + memmap[VIRT_PLATFORM_BUS].base, > + memmap[VIRT_PLATFORM_BUS].size, > + VIRT_PLATFORM_BUS_IRQ);
This one is not needed. > + > g_free(name); > } > > @@ -469,6 +476,12 @@ static void create_fdt_socket_plic(RISCVVirtState *s, > riscv_socket_fdt_write_id(mc, mc->fdt, plic_name, socket); > qemu_fdt_setprop_cell(mc->fdt, plic_name, "phandle", > plic_phandles[socket]); > + > + platform_bus_add_all_fdt_nodes(mc->fdt, plic_name, > + memmap[VIRT_PLATFORM_BUS].base, > + memmap[VIRT_PLATFORM_BUS].size, > + VIRT_PLATFORM_BUS_IRQ); > + > g_free(plic_name); > > g_free(plic_cells); > @@ -546,6 +559,12 @@ static void create_fdt_imsic(RISCVVirtState *s, const > MemMapEntry *memmap, > IMSIC_MMIO_GROUP_MIN_SHIFT); > } > qemu_fdt_setprop_cell(mc->fdt, imsic_name, "phandle", *msi_m_phandle); > + > + platform_bus_add_all_fdt_nodes(mc->fdt, imsic_name, > + memmap[VIRT_PLATFORM_BUS].base, > + memmap[VIRT_PLATFORM_BUS].size, > + VIRT_PLATFORM_BUS_IRQ); > + > g_free(imsic_name); > > /* S-level IMSIC node */ > @@ -683,6 +702,12 @@ static void create_fdt_socket_aplic(RISCVVirtState *s, > VIRT_IRQCHIP_NUM_SOURCES); > riscv_socket_fdt_write_id(mc, mc->fdt, aplic_name, socket); > qemu_fdt_setprop_cell(mc->fdt, aplic_name, "phandle", aplic_s_phandle); > + > + platform_bus_add_all_fdt_nodes(mc->fdt, aplic_name, > + memmap[VIRT_PLATFORM_BUS].base, > + memmap[VIRT_PLATFORM_BUS].size, > + VIRT_PLATFORM_BUS_IRQ); > + > g_free(aplic_name); > > g_free(aplic_cells); > -- Regards, Bin
