[U-Boot] [PATCH 4/5] arm: Provide common PSCI based reset handler

Michal Simek michal.simek at xilinx.com
Fri Aug 19 08:36:38 CEST 2016


Hi Alex,

On 16.8.2016 21:08, Alexander Graf wrote:
> Most armv8 systems have PSCI support enabled in EL3, either through
> ARM Trusted Firmware or other firmware.
> 
> On these systems, we do not need to implement system reset manually,
> but can instead rely on higher level firmware to deal with it.
> 
> The exclude list seems excessive right now, but NXP is working on
> providing an in-tree PSCI implementation, so that all NXP systems
> can eventually use PSCI as well.
> 
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
>  arch/arm/cpu/armv8/Kconfig   | 18 ++++++++++++++++++
>  arch/arm/cpu/armv8/fwcall.c  |  7 +++++++
>  arch/arm/mach-meson/board.c  |  5 -----
>  board/xilinx/zynqmp/zynqmp.c |  5 -----
>  4 files changed, 25 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
> index 7e1fc4c..cd2d9bb 100644
> --- a/arch/arm/cpu/armv8/Kconfig
> +++ b/arch/arm/cpu/armv8/Kconfig
> @@ -21,4 +21,22 @@ config ARMV8_SPIN_TABLE
>  	    - Reserve the code for the spin-table and the release address
>  	      via a /memreserve/ region in the Device Tree.
>  
> +config PSCI_RESET
> +	bool "Use PSCI for reset and shutdown"
> +	default y
> +	depends on !ARCH_EXYNOS7 && !ARCH_BCM283X && !TARGET_LS2080A_EMU && \
> +		   !TARGET_LS2080A_SIMU && !TARGET_LS2080AQDS && \
> +		   !TARGET_LS2080ARDB && !TARGET_LS1012AQDS && \
> +		   !TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
> +		   !TARGET_LS1043ARDB && !ARCH_UNIPHIER && !ARCH_SNAPDRAGON && \
> +		   !TARGET_S32V234EVB
> +	help
> +	  Most armv8 systems have PSCI support enabled in EL3, either through
> +	  ARM Trusted Firmware or other firmware.
> +
> +	  On these systems, we do not need to implement system reset manually,
> +	  but can instead rely on higher level firmware to deal with it.
> +
> +	  Select Y here to make use of PSCI calls for system reset
> +
>  endif
> diff --git a/arch/arm/cpu/armv8/fwcall.c b/arch/arm/cpu/armv8/fwcall.c
> index b3ef7c0..c57b15f 100644
> --- a/arch/arm/cpu/armv8/fwcall.c
> +++ b/arch/arm/cpu/armv8/fwcall.c
> @@ -112,3 +112,10 @@ void __noreturn psci_system_off(void)
>  	while (1)
>  		;
>  }
> +
> +#ifdef CONFIG_PSCI_RESET
> +void reset_misc(void)
> +{
> +	psci_system_reset();


maybe we should also consider to check which level we are running at.

if (current_el() != 3) {
...
}

But maybe this should be in checked in smc_call and hvc_call.

Thanks,
Michal





More information about the U-Boot mailing list