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>
This commit is contained in:
committed by
Alistair Francis
parent
aedd831f41
commit
1d04cd8ff5
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user