[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 3/4] xen/arm: Add PSCI system_off and system_reset support



On Wed, 1 Oct 2014, suravee.suthikulpanit@xxxxxxx wrote:
> 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);
> +}

This assumes PSCI 0.2 but actually the cpu_on function is still reading
the id from device tree.
Could you please change that too for uniformity?


>  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();
> -}

Please mention this change in the commit message.


>  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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.