Message ID | 20240213191736.733334-4-dbarboza@ventanamicro.com |
---|---|
State | New |
Headers | show |
Series | libqos, riscv: libqos fixes, add riscv machine | expand |
On Wed, Feb 14, 2024 at 5:19 AM Daniel Henrique Barboza <dbarboza@ventanamicro.com> wrote: > > Hotplugged FDT nodes will attempt to write this node that, at this > moment, is being created only in create_fdt_pcie() during > finalize_fdt(). > > Create it earlier. > > Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > hw/riscv/virt.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index fd35c74781..b540f4d3da 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -826,7 +826,6 @@ static void create_fdt_pcie(RISCVVirtState *s, const MemMapEntry *memmap, > > name = g_strdup_printf("/soc/pci@%lx", > (long) memmap[VIRT_PCIE_ECAM].base); > - qemu_fdt_add_subnode(ms->fdt, name); > qemu_fdt_setprop_cell(ms->fdt, name, "#address-cells", > FDT_PCI_ADDR_CELLS); > qemu_fdt_setprop_cell(ms->fdt, name, "#interrupt-cells", > @@ -996,6 +995,7 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap) > { > MachineState *ms = MACHINE(s); > uint8_t rng_seed[32]; > + g_autofree char *name = NULL; > > ms->fdt = create_device_tree(&s->fdt_size); > if (!ms->fdt) { > @@ -1014,6 +1014,13 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap) > qemu_fdt_setprop_cell(ms->fdt, "/soc", "#size-cells", 0x2); > qemu_fdt_setprop_cell(ms->fdt, "/soc", "#address-cells", 0x2); > > + /* > + * The "/soc/pci@..." node is needed for PCIE hotplugs > + * that might happen before finalize_fdt(). > + */ > + name = g_strdup_printf("/soc/pci@%lx", (long) memmap[VIRT_PCIE_ECAM].base); > + qemu_fdt_add_subnode(ms->fdt, name); > + > qemu_fdt_add_subnode(ms->fdt, "/chosen"); > > /* Pass seed to RNG */ > -- > 2.43.0 > >
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index fd35c74781..b540f4d3da 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -826,7 +826,6 @@ static void create_fdt_pcie(RISCVVirtState *s, const MemMapEntry *memmap, name = g_strdup_printf("/soc/pci@%lx", (long) memmap[VIRT_PCIE_ECAM].base); - qemu_fdt_add_subnode(ms->fdt, name); qemu_fdt_setprop_cell(ms->fdt, name, "#address-cells", FDT_PCI_ADDR_CELLS); qemu_fdt_setprop_cell(ms->fdt, name, "#interrupt-cells", @@ -996,6 +995,7 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap) { MachineState *ms = MACHINE(s); uint8_t rng_seed[32]; + g_autofree char *name = NULL; ms->fdt = create_device_tree(&s->fdt_size); if (!ms->fdt) { @@ -1014,6 +1014,13 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap) qemu_fdt_setprop_cell(ms->fdt, "/soc", "#size-cells", 0x2); qemu_fdt_setprop_cell(ms->fdt, "/soc", "#address-cells", 0x2); + /* + * The "/soc/pci@..." node is needed for PCIE hotplugs + * that might happen before finalize_fdt(). + */ + name = g_strdup_printf("/soc/pci@%lx", (long) memmap[VIRT_PCIE_ECAM].base); + qemu_fdt_add_subnode(ms->fdt, name); + qemu_fdt_add_subnode(ms->fdt, "/chosen"); /* Pass seed to RNG */
Hotplugged FDT nodes will attempt to write this node that, at this moment, is being created only in create_fdt_pcie() during finalize_fdt(). Create it earlier. Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> --- hw/riscv/virt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)