#include <xen/smp.h>
#include <xen/vmap.h>
#include <asm/io.h>
+#include <asm/psci.h>
struct smp_enable_ops {
int (*prepare_cpu)(int);
smp_enable_ops[cpu].prepare_cpu = smp_spin_table_cpu_up;
}
+static int __init smp_psci_init(int cpu)
+{
+ if ( !psci_available )
+ {
+ printk("CPU%d asks for PSCI, but DTB has no PSCI node\n", cpu);
+ return -ENODEV;
+ }
+
+ smp_enable_ops[cpu].prepare_cpu = call_psci_cpu_on;
+ return 0;
+}
+
int __init arch_smp_init(void)
{
/* Nothing */
if ( !strcmp(enable_method, "spin-table") )
smp_spin_table_init(cpu, dn);
- /* TODO: method "psci" */
+ else if ( !strcmp(enable_method, "psci") )
+ return smp_psci_init(cpu);
else
{
printk("CPU%d has unknown enable method \"%s\"\n", cpu, enable_method);