@samitouri / QOSamiQemu / commits / 1d04cd8ff5

hw/riscv: add fdt_create_cpu_socket_subnode() helper

Consolidate the '/cpus' FDT root node creation into a single place. Signed-off-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260615203734.954428-10-daniel.barboza@oss.qualcomm.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Daniel Henrique Barboza committed Jun 15, 2026 at 17:37 UTC 1d04cd8ff58cd2c47459b644a9ba5c3fa97722f2
5 files changed +16 -20
hw/riscv/fdt-common.c
+10
@@ -83,3 +83,13 @@ void create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size,
83 qemu_fdt_setprop_cell(fdt, clint_name, "numa-node-id", socket_id);
84 }
85 }
86 +
87 +void fdt_create_cpu_socket_subnode(void *fdt, uint64_t timebase_frequency)
88 +{
89 + qemu_fdt_add_subnode(fdt, "/cpus");
90 + qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency",
91 + timebase_frequency);
92 + qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0);
93 + qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1);
94 + qemu_fdt_add_subnode(fdt, "/cpus/cpu-map");
95 +}
hw/riscv/sifive_u.c
+1 -6
@@ -139,12 +139,7 @@ static void create_fdt(SiFiveUState *s, const MemMapEntry *memmap,
139 create_fdt_socket_memory(fdt, memmap[SIFIVE_U_DEV_DRAM].base,
140 ms->ram_size, 0, false);
141
142 - qemu_fdt_add_subnode(fdt, "/cpus");
143 - qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency",
144 - CLINT_TIMEBASE_FREQ);
145 - qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0);
146 - qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1);
147 - qemu_fdt_add_subnode(fdt, "/cpus/cpu-map");
142 + fdt_create_cpu_socket_subnode(fdt, CLINT_TIMEBASE_FREQ);
143
144 clust_name = g_strdup_printf("/cpus/cpu-map/cluster%d", 0);
145 qemu_fdt_add_subnode(fdt, clust_name);
hw/riscv/spike.c
+1 -6
@@ -73,12 +73,7 @@ static void create_fdt(SpikeState *s, const MemMapEntry *memmap,
73 0x0, memmap[SPIKE_HTIF].base, 0x0, memmap[SPIKE_HTIF].size);
74 }
75
76 - qemu_fdt_add_subnode(fdt, "/cpus");
77 - qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency",
78 - RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ);
79 - qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0);
80 - qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1);
81 - qemu_fdt_add_subnode(fdt, "/cpus/cpu-map");
76 + fdt_create_cpu_socket_subnode(fdt, RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ);
77
78 for (socket = (riscv_socket_count(ms) - 1); socket >= 0; socket--) {
79 g_autofree uint32_t *intc_phandles = g_new0(uint32_t,
hw/riscv/virt.c
+3 -8
@@ -694,14 +694,9 @@ static void create_fdt_sockets(RISCVVirtState *s,
694 int socket_count = riscv_socket_count(ms);
695 bool numa_enabled = riscv_numa_enabled(ms);
696
697 - qemu_fdt_add_subnode(ms->fdt, "/cpus");
698 - qemu_fdt_setprop_cell(ms->fdt, "/cpus", "timebase-frequency",
699 - kvm_enabled() ?
700 - kvm_riscv_get_timebase_frequency(&s->soc->harts[0]) :
701 - RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ);
702 - qemu_fdt_setprop_cell(ms->fdt, "/cpus", "#size-cells", 0x0);
703 - qemu_fdt_setprop_cell(ms->fdt, "/cpus", "#address-cells", 0x1);
704 - qemu_fdt_add_subnode(ms->fdt, "/cpus/cpu-map");
697 + fdt_create_cpu_socket_subnode(ms->fdt,
698 + kvm_enabled() ? kvm_riscv_get_timebase_frequency(&s->soc->harts[0]) :
699 + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ);
700
701 intc_phandles = g_new0(uint32_t, ms->smp.cpus);
702
include/hw/riscv/fdt-common.h
+1
@@ -18,4 +18,5 @@ void create_fdt_clint(void *fdt, hwaddr addr, uint64_t size,
18 void create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size,
19 int socket_id, uint32_t *intc_phandles,
20 int num_harts, bool numa_enabled);
21 +void fdt_create_cpu_socket_subnode(void *fdt, uint64_t timebase_frequency);
22 #endif