[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/23] PPC: E500: Use spin code for secondary CPUs
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 11/23] PPC: E500: Use spin code for secondary CPUs |
Date: |
Thu, 21 Jul 2011 03:27:22 +0200 |
When running with more than one CPU in -kernel mode, we need to have the
secondary CPUs spin in a special u-boot compatible loop that reads out a
so called "spin table" and checks for updates.
This patch makes sure secondary CPUs use the spin code and execute it
first thing when they execute.
Signed-off-by: Alexander Graf <address@hidden>
---
hw/ppce500_mpc8544ds.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
index 7ce9bc7..0c6cdf2 100644
--- a/hw/ppce500_mpc8544ds.c
+++ b/hw/ppce500_mpc8544ds.c
@@ -227,6 +227,8 @@ static void mpc8544ds_init(ram_addr_t ram_size,
{
PCIBus *pci_bus;
CPUState *env = NULL;
+ char *spin_filename;
+ uint64_t spin_entry;
uint64_t elf_entry;
uint64_t elf_lowaddr;
target_phys_addr_t entry=0;
@@ -242,6 +244,15 @@ static void mpc8544ds_init(ram_addr_t ram_size,
struct boot_info *boot_info;
CPUState *firstenv = NULL;
+ /* Register Memory */
+ cpu_register_physical_memory(0, ram_size, qemu_ram_alloc(NULL,
+ "mpc8544ds.ram", ram_size));
+
+ /* Load Spin Code */
+ spin_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "ppc_spin.elf");
+ load_elf(spin_filename, NULL, NULL, &spin_entry,
+ NULL, NULL, 1, ELF_MACHINE, 0);
+
/* Setup CPUs */
if (cpu_model == NULL) {
cpu_model = "e500v2_v30";
@@ -276,6 +287,8 @@ static void mpc8544ds_init(ram_addr_t ram_size,
/* Register reset handler */
boot_info = qemu_mallocz(sizeof(struct boot_info));
qemu_register_reset(mpc8544ds_cpu_reset, env);
+ boot_info->entry = spin_entry;
+ boot_info->dt_base = 0x7800000 + (i * 0x100);
env->load_info = boot_info;
}
@@ -284,10 +297,6 @@ static void mpc8544ds_init(ram_addr_t ram_size,
/* Fixup Memory size on a alignment boundary */
ram_size &= ~(RAM_SIZES_ALIGN - 1);
- /* Register Memory */
- cpu_register_physical_memory(0, ram_size, qemu_ram_alloc(NULL,
- "mpc8544ds.ram", ram_size));
-
/* MPIC */
mpic = mpic_init(MPC8544_MPIC_REGS_BASE, smp_cpus, irqs, NULL);
--
1.6.0.2
- [Qemu-devel] [PATCH 08/23] PPC: Bump MPIC up to 32 supported CPUs, (continued)
- [Qemu-devel] [PATCH 08/23] PPC: Bump MPIC up to 32 supported CPUs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 23/23] PPC: E500: Bump CPU count to 32, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 15/23] PPC: E500: Use generic kvm function for freq, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 05/23] PPC: Extend MPIC MMIO range, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 12/23] device tree: add nop_node, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 10/23] PPC: E500: Generate IRQ lines for many CPUs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 09/23] PPC: E500: create multiple envs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 13/23] PPC: bamboo: Move host fdt copy to target, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 11/23] PPC: E500: Use spin code for secondary CPUs,
Alexander Graf <=
- [Qemu-devel] [PATCH 20/23] PPC: E500: Update freqs for all CPUs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 17/23] PPC: bamboo: Use kvm api for freq and clock frequencies, Alexander Graf, 2011/07/20