|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xen/arm: Use PSCI-0.2 for machine_halt/restart by default
commit e456d46ce0e17f88c0fcebea75b02d931bddcb9a
Author: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx>
AuthorDate: Fri Oct 3 09:31:11 2014 -0500
Commit: Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Tue Oct 14 10:19:39 2014 +0100
xen/arm: Use PSCI-0.2 for machine_halt/restart by default
"machine_halt()" and "machine_restart()" are modified to use PSCI interface
by default if PSCI-0.2 is supported. The "raw_machine_reset()" is also
removed
since this is unnecessary.
Also, machine_halt() is modified to add 10ms delay to make sure all
auxiliary CPUs
are offlined before calling the shutdown.
For non-PSCI, platform_poweroff() and platform_reset() are used instead.
Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
xen/arch/arm/shutdown.c | 25 +++++++++++++++++++------
1 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/xen/arch/arm/shutdown.c b/xen/arch/arm/shutdown.c
index adc0529..4988b03 100644
--- a/xen/arch/arm/shutdown.c
+++ b/xen/arch/arm/shutdown.c
@@ -5,11 +5,7 @@
#include <xen/lib.h>
#include <xen/smp.h>
#include <asm/platform.h>
-
-static void raw_machine_reset(void)
-{
- platform_reset();
-}
+#include <asm/psci.h>
static void noreturn halt_this_cpu(void *arg)
{
@@ -18,10 +14,23 @@ 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);
+
+ /* This is mainly for PSCI-0.2, which does not return if success. */
+ call_psci_system_off();
+
+ /* Alternative halt procedure */
+ platform_poweroff();
halt_this_cpu(NULL);
}
@@ -39,9 +48,13 @@ void machine_restart(unsigned int delay_millisecs)
while ( (num_online_cpus() > 1) && (timeout-- > 0) )
mdelay(1);
+ /* This is mainly for PSCI-0.2, which does not return if success. */
+ call_psci_system_reset();
+
+ /* Alternative reset procedure */
while ( 1 )
{
- raw_machine_reset();
+ platform_reset();
mdelay(100);
}
}
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |