On Tue, Jun 16, 2026 at 6:41 AM Daniel Henrique Barboza <[email protected]> wrote: > > Consolidate the '/cpus' FDT root node creation into a single place. > > Signed-off-by: Daniel Henrique Barboza <[email protected]>
Reviewed-by: Alistair Francis <[email protected]> Alistair > --- > hw/riscv/fdt-common.c | 10 ++++++++++ > hw/riscv/sifive_u.c | 7 +------ > hw/riscv/spike.c | 7 +------ > hw/riscv/virt.c | 11 +++-------- > include/hw/riscv/fdt-common.h | 1 + > 5 files changed, 16 insertions(+), 20 deletions(-) > > diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c > index d2661ec389..02ac9ddcd8 100644 > --- a/hw/riscv/fdt-common.c > +++ b/hw/riscv/fdt-common.c > @@ -83,3 +83,13 @@ void create_fdt_socket_clint(void *fdt, hwaddr addr, > uint64_t size, > qemu_fdt_setprop_cell(fdt, clint_name, "numa-node-id", socket_id); > } > } > + > +void fdt_create_cpu_socket_subnode(void *fdt, uint64_t timebase_frequency) > +{ > + qemu_fdt_add_subnode(fdt, "/cpus"); > + qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency", > + timebase_frequency); > + qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0); > + qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1); > + qemu_fdt_add_subnode(fdt, "/cpus/cpu-map"); > +} > diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c > index a4265fed0f..27c1a74d99 100644 > --- a/hw/riscv/sifive_u.c > +++ b/hw/riscv/sifive_u.c > @@ -139,12 +139,7 @@ static void create_fdt(SiFiveUState *s, const > MemMapEntry *memmap, > create_fdt_socket_memory(fdt, memmap[SIFIVE_U_DEV_DRAM].base, > ms->ram_size, 0, false); > > - qemu_fdt_add_subnode(fdt, "/cpus"); > - qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency", > - CLINT_TIMEBASE_FREQ); > - qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0); > - qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1); > - qemu_fdt_add_subnode(fdt, "/cpus/cpu-map"); > + fdt_create_cpu_socket_subnode(fdt, CLINT_TIMEBASE_FREQ); > > clust_name = g_strdup_printf("/cpus/cpu-map/cluster%d", 0); > qemu_fdt_add_subnode(fdt, clust_name); > diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c > index b15188fb07..ee8232f734 100644 > --- a/hw/riscv/spike.c > +++ b/hw/riscv/spike.c > @@ -73,12 +73,7 @@ static void create_fdt(SpikeState *s, const MemMapEntry > *memmap, > 0x0, memmap[SPIKE_HTIF].base, 0x0, memmap[SPIKE_HTIF].size); > } > > - qemu_fdt_add_subnode(fdt, "/cpus"); > - qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency", > - RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); > - qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0); > - qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1); > - qemu_fdt_add_subnode(fdt, "/cpus/cpu-map"); > + fdt_create_cpu_socket_subnode(fdt, RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); > > for (socket = (riscv_socket_count(ms) - 1); socket >= 0; socket--) { > g_autofree uint32_t *intc_phandles = g_new0(uint32_t, > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index b134f11266..6641b60131 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -694,14 +694,9 @@ static void create_fdt_sockets(RISCVVirtState *s, > int socket_count = riscv_socket_count(ms); > bool numa_enabled = riscv_numa_enabled(ms); > > - qemu_fdt_add_subnode(ms->fdt, "/cpus"); > - qemu_fdt_setprop_cell(ms->fdt, "/cpus", "timebase-frequency", > - kvm_enabled() ? > - > kvm_riscv_get_timebase_frequency(&s->soc->harts[0]) : > - RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); > - qemu_fdt_setprop_cell(ms->fdt, "/cpus", "#size-cells", 0x0); > - qemu_fdt_setprop_cell(ms->fdt, "/cpus", "#address-cells", 0x1); > - qemu_fdt_add_subnode(ms->fdt, "/cpus/cpu-map"); > + fdt_create_cpu_socket_subnode(ms->fdt, > + kvm_enabled() ? kvm_riscv_get_timebase_frequency(&s->soc->harts[0]) : > + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); > > intc_phandles = g_new0(uint32_t, ms->smp.cpus); > > diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h > index 6e81d6cd6c..27020e69c6 100644 > --- a/include/hw/riscv/fdt-common.h > +++ b/include/hw/riscv/fdt-common.h > @@ -18,4 +18,5 @@ void create_fdt_clint(void *fdt, hwaddr addr, uint64_t size, > void create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size, > int socket_id, uint32_t *intc_phandles, > int num_harts, bool numa_enabled); > +void fdt_create_cpu_socket_subnode(void *fdt, uint64_t timebase_frequency); > #endif > -- > 2.43.0 > >
