Message ID | 20220420055248.960491-5-alistair.francis@opensource.wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/riscv: Add TPM support to the virt board | expand |
On Wed, Apr 20, 2022 at 1:53 PM Alistair Francis <alistair.francis@opensource.wdc.com> wrote: > > From: Alistair Francis <alistair.francis@wdc.com> > > Similar to the ARM virt machine add support for adding device tree > entries for dynamically created devices. > > Signed-off-by: Alistair Francis <alistair.francis@wdc.com> > Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com> > --- > 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
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); + 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);