|
[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 |