From f474d3b4727c838ece492661be420387e4e55866 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Fri, 20 Sep 2013 23:29:44 +0100 Subject: xen: arm: implement arch/platform SMP and CPU initialisation framework Includes an implementation for vexpress using the sysflags interface and support for the ARMv8 "spin-table" method. Unused until "rewrite start of day page table and cpu bring up", split out to simplify review. Signed-off-by: Ian Campbell Acked-by: Tim Deegan Acked-by: Julien Grall --- xen/include/asm-arm/platform.h | 9 +++++++++ xen/include/asm-arm/smp.h | 9 +++++++++ 2 files changed, 18 insertions(+) (limited to 'xen/include') diff --git a/xen/include/asm-arm/platform.h b/xen/include/asm-arm/platform.h index a19dbf732b..dbd2a15ed4 100644 --- a/xen/include/asm-arm/platform.h +++ b/xen/include/asm-arm/platform.h @@ -15,6 +15,11 @@ struct platform_desc { /* Platform initialization */ int (*init)(void); int (*init_time)(void); +#ifdef CONFIG_ARM_32 + /* SMP */ + int (*smp_init)(void); + int (*cpu_up)(int cpu); +#endif /* Specific mapping for dom0 */ int (*specific_mapping)(struct domain *d); /* Platform reset */ @@ -43,6 +48,10 @@ struct platform_desc { int __init platform_init(void); int __init platform_init_time(void); int __init platform_specific_mapping(struct domain *d); +#ifdef CONFIG_ARM_32 +int platform_smp_init(void); +int platform_cpu_up(int cpu); +#endif void platform_reset(void); void platform_poweroff(void); bool_t platform_has_quirk(uint32_t quirk); diff --git a/xen/include/asm-arm/smp.h b/xen/include/asm-arm/smp.h index 1c2746b763..1added5550 100644 --- a/xen/include/asm-arm/smp.h +++ b/xen/include/asm-arm/smp.h @@ -4,6 +4,7 @@ #ifndef __ASSEMBLY__ #include #include +#include #include #endif @@ -22,9 +23,17 @@ extern void stop_cpu(void); extern void make_cpus_ready(unsigned int max_cpus, unsigned long boot_phys_offset); +extern int arch_smp_init(void); +extern int arch_cpu_init(int cpu, struct dt_device_node *dn); +extern int arch_cpu_up(int cpu); + +/* Secondary CPU entry point */ +extern void init_secondary(void); + extern void smp_clear_cpu_maps (void); extern int smp_get_max_cpus (void); #endif + /* * Local variables: * mode: C -- cgit v1.2.3