[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 30/58] MPC8544DS: Generate CPU nodes on init
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH 30/58] MPC8544DS: Generate CPU nodes on init |
Date: |
Wed, 14 Sep 2011 10:42:54 +0200 |
With this patch, we generate CPU nodes in the machine initialization, giving
us the freedom to generate as many nodes as we want and as the machine supports,
but only those.
This is a first step towards a much cleaner device tree generation
infrastructure, where we would not require precompiled dtb blobs anymore.
Signed-off-by: Alexander Graf <address@hidden>
---
hw/ppce500_mpc8544ds.c | 46 +++++++++++++++++++++++++++++++++-------------
1 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
index a3e1ce4..dfa8034 100644
--- a/hw/ppce500_mpc8544ds.c
+++ b/hw/ppce500_mpc8544ds.c
@@ -123,23 +123,43 @@ static int mpc8544_load_device_tree(CPUState *env,
hypercall, sizeof(hypercall));
}
- for (i = 0; i < smp_cpus; i++) {
+ /* We need to generate the cpu nodes in reverse order, so Linux can pick
+ the first node as boot node and be happy */
+ for (i = smp_cpus - 1; i >= 0; i--) {
char cpu_name[128];
- uint64_t cpu_release_addr[] = {
- cpu_to_be64(MPC8544_SPIN_BASE + (i * 0x20))
- };
+ uint64_t cpu_release_addr = cpu_to_be64(MPC8544_SPIN_BASE + (i *
0x20));
+
+ for (env = first_cpu; env != NULL; env = env->next_cpu) {
+ if (env->cpu_index == i) {
+ break;
+ }
+ }
+
+ if (!env) {
+ continue;
+ }
- snprintf(cpu_name, sizeof(cpu_name), "/cpus/PowerPC,address@hidden",
i);
+ snprintf(cpu_name, sizeof(cpu_name), "/cpus/PowerPC,address@hidden",
env->cpu_index);
+ qemu_devtree_add_subnode(fdt, cpu_name);
qemu_devtree_setprop_cell(fdt, cpu_name, "clock-frequency",
clock_freq);
qemu_devtree_setprop_cell(fdt, cpu_name, "timebase-frequency",
tb_freq);
- qemu_devtree_setprop(fdt, cpu_name, "cpu-release-addr",
- cpu_release_addr, sizeof(cpu_release_addr));
- }
-
- for (i = smp_cpus; i < 32; i++) {
- char cpu_name[128];
- snprintf(cpu_name, sizeof(cpu_name), "/cpus/PowerPC,address@hidden",
i);
- qemu_devtree_nop_node(fdt, cpu_name);
+ qemu_devtree_setprop_string(fdt, cpu_name, "device_type", "cpu");
+ qemu_devtree_setprop_cell(fdt, cpu_name, "reg", env->cpu_index);
+ qemu_devtree_setprop_cell(fdt, cpu_name, "d-cache-line-size",
+ env->dcache_line_size);
+ qemu_devtree_setprop_cell(fdt, cpu_name, "i-cache-line-size",
+ env->icache_line_size);
+ qemu_devtree_setprop_cell(fdt, cpu_name, "d-cache-size", 0x8000);
+ qemu_devtree_setprop_cell(fdt, cpu_name, "i-cache-size", 0x8000);
+ qemu_devtree_setprop_cell(fdt, cpu_name, "bus-frequency", 0);
+ if (env->cpu_index) {
+ qemu_devtree_setprop_string(fdt, cpu_name, "status", "disabled");
+ qemu_devtree_setprop_string(fdt, cpu_name, "enable-method",
"spin-table");
+ qemu_devtree_setprop(fdt, cpu_name, "cpu-release-addr",
+ &cpu_release_addr, sizeof(cpu_release_addr));
+ } else {
+ qemu_devtree_setprop_string(fdt, cpu_name, "status", "okay");
+ }
}
ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
--
1.6.0.2
- Re: [Qemu-ppc] [PATCH 14/58] device tree: add nop_node, (continued)
- [Qemu-ppc] [PATCH 20/58] PPC: KVM: Remove kvmppc_read_host_property, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 32/58] PPC: Add new target config for pseries, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 25/58] PPC: E500: Update cpu-release-addr property in cpu nodes, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 46/58] ppc: booke206: use MAV=2.0 TSIZE definition, fix 4G pages, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 23/58] PPC: E500: Remove unneeded CPU nodes, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 35/58] PPC: SPAPR: Use KVM function for time info, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 49/58] vscsi: send the CHECK_CONDITION status down together with autosense data, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 39/58] pseries: More complete WIMG validation in H_ENTER code, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 30/58] MPC8544DS: Generate CPU nodes on init,
Alexander Graf <=
- [Qemu-ppc] [PATCH 26/58] device tree: add add_subnode command, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 38/58] pseries: interrupt controller should not have a 'reg' property, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 33/58] KVM: update kernel headers, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 31/58] PPC: E500: Bump CPU count to 15, Alexander Graf, 2011/09/14
- [Qemu-ppc] [PATCH 50/58] pseries: Update SLOF firmware image, Alexander Graf, 2011/09/14