Due to popular demand, I got involved in the dirty arts of SMP programming :). This patch set adds support for the MPC8544DS board (e500v2) to run with up to 32 virtual CPUs.
This works fine with emulation and Linux guests. It also works with KVM. For non-Linux guests, TLB invalidation broadcasting is still missing, but for now this is enough to get Linux up and running. I've used the chance while touching the code to also clean up ugly code that just diverged over time between the 3 KVM capable PPC targets (frequency device-tree entries). They're intertwined with this series, but I hope not too hard to understand, so they don't hurt being there. v1 -> v2: - MPIC: Use MAX_IPI instead of hardcoded 4 - MPIC: Max cpus is 15 due to cINT routing - MPIC: Drop cINT patch - MPIC: Report nb_cpus not MAX_CPUS in MPIC capabilities - MPIC: Add cINT patch to fix CINT dispatch - Clockfreq: enable 64bit clockfreq values - Spin: New MMIO based device - Spin: map the secondary NIP instead of 0 1:1 - Spin: only map 64MB for TLB, same as u-boot - Spin: prepare code for 64-bit spinnings - MPC8544: Generate CPU nodes on demand, not ahead of time Alexander Graf (28): PPC: Move openpic to target specific code compilation PPC: Add CPU local MMIO regions to MPIC PPC: Extend MPIC MMIO range PPC: Fix IPI support in MPIC PPC: Set MPIC IDE for IPI to 0 PPC: MPIC: Remove read functionality for WO registers PPC: MPIC: Fix CI bit definitions PPC: Bump MPIC up to 32 supported CPUs PPC: E500: create multiple envs PPC: E500: Generate IRQ lines for many CPUs device tree: add nop_node PPC: bamboo: Move host fdt copy to target PPC: KVM: Add generic function to read host clockfreq PPC: E500: Use generic kvm function for freq PPC: E500: Remove mpc8544_copy_soc_cell PPC: bamboo: Use kvm api for freq and clock frequencies PPC: KVM: Remove kvmppc_read_host_property PPC: KVM: Add stubs for kvm helper functions PPC: E500: Update freqs for all CPUs PPC: E500: Remove unneeded CPU nodes PPC: E500: Add PV spinning code PPC: E500: Update cpu-release-addr property in cpu nodes device tree: add add_subnode command device tree: dont fail operations device tree: give dt more size MPC8544DS: Remove CPU nodes MPC8544DS: Generate CPU nodes on init PPC: E500: Bump CPU count to 15 Makefile.objs | 1 - Makefile.target | 4 +- device_tree.c | 92 +++++++++++++++++++---- device_tree.h | 2 + hw/openpic.c | 160 +++++++++++++++++++++++++--------------- hw/ppc440_bamboo.c | 16 ++++- hw/ppce500_mpc8544ds.c | 191 ++++++++++++++++++++++++++++-------------------- hw/ppce500_spin.c | 182 +++++++++++++++++++++++++++++++++++++++++++++ pc-bios/mpc8544ds.dtb | Bin 2277 -> 2028 bytes pc-bios/mpc8544ds.dts | 12 --- target-ppc/kvm.c | 67 +++++++++++++++++ target-ppc/kvm_ppc.c | 65 ---------------- target-ppc/kvm_ppc.h | 39 +++++++--- 13 files changed, 584 insertions(+), 247 deletions(-) create mode 100644 hw/ppce500_spin.c