[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 09/21] arm/acpi: Add ACPI support for SMP initialization
On Sat, 23 Jan 2016, Shannon Zhao wrote: > From: Shannon Zhao <shannon.zhao@xxxxxxxxxx> > > ACPI 5.1 only has two explicit methods to boot up SMP, PSCI and Parking > protocol, but the Parking protocol is only specified for ARMv7 now, so > make PSCI as the only way for the SMP boot protocol before some updates > for the ACPI spec or the Parking protocol spec. > > ACPI only supports PSCI 0.2+, since prior to PSCI 0.2 function IDs are > not well-defined. > > Signed-off-by: Hanjun Guo <hanjun.guo@xxxxxxxxxx> > Signed-off-by: Parth Dixit <parth.dixit@xxxxxxxxxx> > Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx> Reviewed-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > V4: explain why only support PSCI 0.2+ and print an error message for > PSCI 0.1 and SMC not present > --- > > xen/arch/arm/arm64/smpboot.c | 7 ++++++- > xen/arch/arm/psci.c | 35 ++++++++++++++++++++++++++++------- > xen/arch/arm/smpboot.c | 7 ++++++- > 3 files changed, 40 insertions(+), 9 deletions(-) > > diff --git a/xen/arch/arm/arm64/smpboot.c b/xen/arch/arm/arm64/smpboot.c > index 7928f69..4fd0ac6 100644 > --- a/xen/arch/arm/arm64/smpboot.c > +++ b/xen/arch/arm/arm64/smpboot.c > @@ -7,6 +7,7 @@ > #include <xen/vmap.h> > #include <asm/io.h> > #include <asm/psci.h> > +#include <asm/acpi.h> > > struct smp_enable_ops { > int (*prepare_cpu)(int); > @@ -96,7 +97,11 @@ static int __init dt_arch_cpu_init(int cpu, struct > dt_device_node *dn) > > int __init arch_cpu_init(int cpu, struct dt_device_node *dn) > { > - return dt_arch_cpu_init(cpu, dn); > + if ( acpi_disabled ) > + return dt_arch_cpu_init(cpu, dn); > + else > + /* acpi only supports psci at present */ > + return smp_psci_init(cpu); > } > > int __init arch_cpu_up(int cpu) > diff --git a/xen/arch/arm/psci.c b/xen/arch/arm/psci.c > index d800cb6..7966b5e 100644 > --- a/xen/arch/arm/psci.c > +++ b/xen/arch/arm/psci.c > @@ -22,6 +22,7 @@ > #include <xen/mm.h> > #include <xen/smp.h> > #include <asm/psci.h> > +#include <asm/acpi.h> > > /* > * While a 64-bit OS can make calls with SMC32 calling conventions, for > @@ -86,6 +87,12 @@ int __init psci_init_0_1(void) > int ret; > const struct dt_device_node *psci; > > + if ( !acpi_disabled ) > + { > + printk("PSCI 0.1 is not supported when using ACPI\n"); > + return -EINVAL; > + } > + > psci = dt_find_compatible_node(NULL, NULL, "arm,psci"); > if ( !psci ) > return -EOPNOTSUPP; > @@ -116,15 +123,26 @@ int __init psci_init_0_2(void) > { /* sentinel */ }, > }; > int ret; > - const struct dt_device_node *psci; > > - psci = dt_find_matching_node(NULL, psci_ids); > - if ( !psci ) > - return -EOPNOTSUPP; > + if ( acpi_disabled ) > + { > + const struct dt_device_node *psci; > > - ret = psci_is_smc_method(psci); > - if ( ret ) > - return -EINVAL; > + psci = dt_find_matching_node(NULL, psci_ids); > + if ( !psci ) > + return -EOPNOTSUPP; > + > + ret = psci_is_smc_method(psci); > + if ( ret ) > + return -EINVAL; > + } > + else > + { > + if ( acpi_psci_hvc_present() ) { > + printk("PSCI conduit must be SMC, but is HVC\n"); > + return -EINVAL; > + } > + } > > psci_ver = call_smc(PSCI_0_2_FN_PSCI_VERSION, 0, 0, 0); > > @@ -148,6 +166,9 @@ int __init psci_init(void) > { > int ret; > > + if ( !acpi_disabled && !acpi_psci_present() ) > + return -EOPNOTSUPP; > + > ret = psci_init_0_2(); > if ( ret ) > ret = psci_init_0_1(); > diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c > index b6119d1..c5109bf 100644 > --- a/xen/arch/arm/smpboot.c > +++ b/xen/arch/arm/smpboot.c > @@ -31,6 +31,7 @@ > #include <xen/console.h> > #include <asm/gic.h> > #include <asm/psci.h> > +#include <asm/acpi.h> > > cpumask_t cpu_online_map; > cpumask_t cpu_present_map; > @@ -247,7 +248,11 @@ void __init smp_init_cpus(void) > return; > } > > - dt_smp_init_cpus(); > + if ( acpi_disabled ) > + dt_smp_init_cpus(); > + else > + acpi_smp_init_cpus(); > + > } > > int __init > -- > 2.0.4 > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |