[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 30/58] MPC8544DS: Generate CPU nodes on init
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [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
- [Qemu-devel] [PULL 00/58] ppc patch queue 2011-09-14, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 08/58] PPC: Set MPIC IDE for IPI to 0, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 06/58] PPC: Extend MPIC MMIO range, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 04/58] PPC: Move openpic to target specific code compilation, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 15/58] PPC: bamboo: Move host fdt copy to target, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 12/58] PPC: E500: create multiple envs, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 03/58] spapr: make irq customizable via qdev, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 30/58] MPC8544DS: Generate CPU nodes on init,
Alexander Graf <=
- [Qemu-devel] [PATCH 21/58] PPC: KVM: Add stubs for kvm helper functions, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 22/58] PPC: E500: Update freqs for all CPUs, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 09/58] PPC: MPIC: Remove read functionality for WO registers, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 39/58] pseries: More complete WIMG validation in H_ENTER code, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 32/58] PPC: Add new target config for pseries, Alexander Graf, 2011/09/14
- [Qemu-devel] [PATCH 05/58] PPC: Add CPU local MMIO regions to MPIC, Alexander Graf, 2011/09/14