[PATCH v2] ARM: MCPM: ensure not to enter __hyp_soft_restart from loopback and cpu_power_down

Nicolas Pitre nicolas.pitre at linaro.org
Thu May 18 09:01:04 PDT 2017


On Thu, 18 May 2017, Sudeep Holla wrote:

> Commit 9da5ac236de6 ("ARM: soft-reboot into same mode that we entered
> the kernel") added support to enter the new kernel in the same processor
> mode as the previous one when we soft-reboot from one kernel into
> another by pass a flag to cpu_reset() so it knows what to do exactly.
> 
> However it missed to make similar changes in MCPM code. Due to the
> missing flag, the CPUs enter HYP mode which is not supported with MCPM.
> MCPM works only in secure mode as it manages CCI.
> 
> This patch aligns the cpu_reset call in MCPM with other changes in the
> above mentioned commit by making phys_reset_t to follow the prototype
> of cpu_reset().
> 
> Fixes: 9da5ac236de6 ("ARM: soft-reboot into same mode that we entered the kernel")
> Cc: Russell King <linux at armlinux.org.uk>
> Cc: Nicolas Pitre <nicolas.pitre at linaro.org>

Acked-by: Nicolas Pitre <nico at linaro.org>

Please send it to RMK's patch system.


> Signed-off-by: Sudeep Holla <sudeep.holla at arm.com>
> ---
>  arch/arm/common/mcpm_entry.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> Hi Nico, Russell,
> 
> I am seeing a boot failure without this patch on my TC2 where MCPM is
> enabled and active. The loopback test fails on primary, if skipped fails
> later on resume path.
> 
> Regards,
> Sudeep
> 
> v1->v2:
> 	- As suggested by Russell, changed phys_reset_t typedef to follow
> 	  cpu_reset() prototype
> 
> diff --git a/arch/arm/common/mcpm_entry.c b/arch/arm/common/mcpm_entry.c
> index cf062472e07b..2b913f17d50f 100644
> --- a/arch/arm/common/mcpm_entry.c
> +++ b/arch/arm/common/mcpm_entry.c
> @@ -235,7 +235,7 @@ int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster)
>  	return ret;
>  }
> 
> -typedef void (*phys_reset_t)(unsigned long);
> +typedef typeof(cpu_reset) phys_reset_t;
> 
>  void mcpm_cpu_power_down(void)
>  {
> @@ -300,7 +300,7 @@ void mcpm_cpu_power_down(void)
>  	 * on the CPU.
>  	 */
>  	phys_reset = (phys_reset_t)(unsigned long)__pa_symbol(cpu_reset);
> -	phys_reset(__pa_symbol(mcpm_entry_point));
> +	phys_reset(__pa_symbol(mcpm_entry_point), false);
> 
>  	/* should never get here */
>  	BUG();
> @@ -389,7 +389,7 @@ static int __init nocache_trampoline(unsigned long _arg)
>  	__mcpm_cpu_down(cpu, cluster);
> 
>  	phys_reset = (phys_reset_t)(unsigned long)__pa_symbol(cpu_reset);
> -	phys_reset(__pa_symbol(mcpm_entry_point));
> +	phys_reset(__pa_symbol(mcpm_entry_point), false);
>  	BUG();
>  }
> 
> --
> 2.7.4
> 
> 



More information about the linux-arm-kernel mailing list