[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/4] xen/arm: Add PSCI system_off and system_reset support
From: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx> This patch adds SMC calls to suport PSCI-0.2 system_off and system_reset, It also adds a call to platform_power_off in machine_halt(). This would allow platform, which implements PSCI-0.2 to properly handle system off and reset. Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx> --- xen/arch/arm/psci.c | 10 ++++++++++ xen/arch/arm/shutdown.c | 16 ++++++++++------ xen/include/asm-arm/psci.h | 2 ++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/xen/arch/arm/psci.c b/xen/arch/arm/psci.c index b6360d5..b0d94a8 100644 --- a/xen/arch/arm/psci.c +++ b/xen/arch/arm/psci.c @@ -58,6 +58,16 @@ int call_psci_cpu_on(int cpu) cpu_logical_map(cpu), __pa(init_secondary), 0); } +void call_psci_system_off(void) +{ + __invoke_psci_fn_smc(PSCI_0_2_FN_SYSTEM_OFF, 0, 0, 0); +} + +void call_psci_system_reset(void) +{ + __invoke_psci_fn_smc(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); +} + int __init psci_init(void) { const struct dt_device_node *psci; diff --git a/xen/arch/arm/shutdown.c b/xen/arch/arm/shutdown.c index adc0529..2f63674 100644 --- a/xen/arch/arm/shutdown.c +++ b/xen/arch/arm/shutdown.c @@ -6,11 +6,6 @@ #include <xen/smp.h> #include <asm/platform.h> -static void raw_machine_reset(void) -{ - platform_reset(); -} - static void noreturn halt_this_cpu(void *arg) { stop_cpu(); @@ -18,10 +13,19 @@ static void noreturn halt_this_cpu(void *arg) void machine_halt(void) { + int timeout = 10; + watchdog_disable(); console_start_sync(); local_irq_enable(); smp_call_function(halt_this_cpu, NULL, 0); + local_irq_disable(); + + /* Wait at most another 10ms for all other CPUs to go offline. */ + while ( (num_online_cpus() > 1) && (timeout-- > 0) ) + mdelay(1); + + platform_poweroff(); halt_this_cpu(NULL); } @@ -41,7 +45,7 @@ void machine_restart(unsigned int delay_millisecs) while ( 1 ) { - raw_machine_reset(); + platform_reset(); mdelay(100); } } diff --git a/xen/include/asm-arm/psci.h b/xen/include/asm-arm/psci.h index 9777c03..de00ee2 100644 --- a/xen/include/asm-arm/psci.h +++ b/xen/include/asm-arm/psci.h @@ -17,6 +17,8 @@ extern bool_t psci_available; int psci_init(void); int call_psci_cpu_on(int cpu); +void call_psci_system_off(void); +void call_psci_system_reset(void); /* functions to handle guest PSCI requests */ int32_t do_psci_cpu_on(uint32_t vcpuid, register_t entry_point); -- 1.9.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |