[U-Boot] [PATCH 2/3] arm/PSCI: Fixed the backward compatiblity issue

york sun york.sun at nxp.com
Fri Jul 29 17:37:19 CEST 2016


On 07/29/2016 03:37 AM, Zhiqiang Hou wrote:
> From: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>
>
> Appended the compatible strings of old version PSCI to the latest version
> supported. And there are some psci functions' property must be added to DT
> only for psci version 0.1, such as 'cpu_on' 'cpu_off' etc.
>
> Note:
> The PSCI version 0.1 isn't supported by ARMv8 Secure Firmware Framework.
>
> Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>
> ---

You missed version number and change log.

>  arch/arm/include/asm/psci.h |  3 +++
>  arch/arm/lib/psci-dt.c      | 61 ++++++++++++++++++++++++++-------------------
>  2 files changed, 38 insertions(+), 26 deletions(-)
>
> diff --git a/arch/arm/include/asm/psci.h b/arch/arm/include/asm/psci.h
> index 8aefaa7..5b8ce4d 100644
> --- a/arch/arm/include/asm/psci.h
> +++ b/arch/arm/include/asm/psci.h
> @@ -18,6 +18,9 @@
>  #ifndef __ARM_PSCI_H__
>  #define __ARM_PSCI_H__
>
> +#define ARM_PSCI_VER_1_0		(0x00010000)
> +#define ARM_PSCI_VER_0_2		(0x00000002)
> +
>  /* PSCI 0.1 interface */
>  #define ARM_PSCI_FN_BASE		0x95c1ba5e
>  #define ARM_PSCI_FN(n)			(ARM_PSCI_FN_BASE + (n))
> diff --git a/arch/arm/lib/psci-dt.c b/arch/arm/lib/psci-dt.c
> index bcd92e7..af49c24 100644
> --- a/arch/arm/lib/psci-dt.c
> +++ b/arch/arm/lib/psci-dt.c
> @@ -19,7 +19,6 @@ int fdt_psci(void *fdt)
>  #if defined(CONFIG_ARMV8_PSCI) || defined(CONFIG_ARMV7_PSCI)
>  	int nodeoff;
>  	unsigned int psci_ver = 0;
> -	char *psci_compt;
>  	int tmp;
>
>  	nodeoff = fdt_path_offset(fdt, "/cpus");
> @@ -68,39 +67,49 @@ init_psci_node:
>  	psci_ver = sec_firmware_support_psci_version();
>  #endif
>  	switch (psci_ver) {
> -	case 0x00010000:
> -		psci_compt = "arm,psci-1.0";
> -		break;
> -	case 0x00000002:
> -		psci_compt = "arm,psci-0.2";
> -		break;
> +	case ARM_PSCI_VER_1_0:
> +		tmp = fdt_setprop_string(fdt, nodeoff,
> +				"compatible", "arm,psci-1.0");
> +		if (tmp)
> +			return tmp;

Add a comment "fall through".

> +	case ARM_PSCI_VER_0_2:
> +		tmp = fdt_appendprop_string(fdt, nodeoff,
> +				"compatible", "arm,psci-0.2");
> +		if (tmp)
> +			return tmp;

Add a comment "fall through".

>  	default:
> -		psci_compt = "arm,psci";
> +	/*
> +	 * The Secure firmware framework isn't able to support PSCI version 0.1.
> +	 */
> +#ifndef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
> +		tmp = fdt_appendprop_string(fdt, nodeoff,
> +				"compatible", "arm,psci");
> +		if (tmp)
> +			return tmp;
> +		tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_suspend",
> +				ARM_PSCI_FN_CPU_SUSPEND);
> +		if (tmp)
> +			return tmp;
> +		tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_off",
> +				ARM_PSCI_FN_CPU_OFF);
> +		if (tmp)
> +			return tmp;
> +		tmp = fdt_setprop_u32(fdt, nodeoff, "cpu_on",
> +				ARM_PSCI_FN_CPU_ON);
> +		if (tmp)
> +			return tmp;
> +		tmp = fdt_setprop_u32(fdt, nodeoff, "migrate",
> +				ARM_PSCI_FN_MIGRATE);
> +		if (tmp)
> +			return tmp;

This may not be a real concern, but I am curious what would happen if 
one of the above fdt_setprop_u32 fails? Would it be better to set 
"arm,psci" last?

York


More information about the U-Boot mailing list