[U-Boot] [PATCH 1/2] spl: atf: add SPL_ATF_NO_PLATFORM_PARAM option

Kever Yang kever.yang at rock-chips.com
Wed Jan 3 02:29:38 UTC 2018



On 01/03/2018 04:16 AM, Philipp Tomsich wrote:
> While we expect to call a pointer to a valid FDT (or NULL) as the
> platform parameter to an ATF, some ATF versions are not U-Boot aware
> and have an insufficiently robust (or an overzealour) parameter
> validation: either way, this may cause a hard-stop with uncooperative
> ATF versions.
>
> This change adds the option to suppress passing a platform parameter
> and will always pass NULL.
>
> Debug output from ATF w/ this option disabled (i.e. default):
>        INFO:    plat_param_from_bl2: 0x291450
> Debug output from ATF w/ this option enabled:
>        INFO:    plat_param_from_bl2: 0
>
> Signed-off-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
> Tested-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
> ---
>
>   common/spl/Kconfig   | 18 ++++++++++++++++--
>   common/spl/spl_atf.c | 12 +++++++++++-
>   2 files changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index aef0034..9d35f41 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -721,10 +721,24 @@ config SPL_ATF
>   	bool "Support ARM Trusted Firmware"
>   	depends on ARM64
>   	help
> -	  ATF(ARM Trusted Firmware) is a component for ARM arch64 which
> -	  is loaded by SPL(which is considered as BL2 in ATF terminology).
> +	  ATF(ARM Trusted Firmware) is a component for ARM AArch64 which
> +	  is loaded by SPL (which is considered as BL2 in ATF terminology).
>   	  More detail at: https://github.com/ARM-software/arm-trusted-firmware
>   
> +config SPL_ATF_NO_PLATFORM_PARAM
> +        bool "Pass no platform parameter"
> +	depends on SPL_ATF
> +	help
> +	  While we expect to call a pointer to a valid FDT (or NULL)
> +	  as the platform parameter to an ATF, some ATF versions are
> +	  not U-Boot aware and have an insufficiently robust parameter
> +	  validation to gracefully reject a FDT being passed.
> +
> +	  If this option is enabled, the spl_atf os-type handler will
> +	  always pass NULL for the platform parameter.
> +
> +	  If your ATF is affected, say Y.
> +
>   config TPL
>   	bool
>   	depends on SUPPORT_TPL
> diff --git a/common/spl/spl_atf.c b/common/spl/spl_atf.c
> index 63557c0..a942de9 100644
> --- a/common/spl/spl_atf.c
> +++ b/common/spl/spl_atf.c
> @@ -144,6 +144,7 @@ void spl_invoke_atf(struct spl_image_info *spl_image)
>   {
>   	uintptr_t  bl33_entry = CONFIG_SYS_TEXT_BASE;
>   	void *blob = spl_image->fdt_addr;
> +	uintptr_t platform_param = (uintptr_t)blob;
>   	int node;
>   
>   	/*
> @@ -158,8 +159,17 @@ void spl_invoke_atf(struct spl_image_info *spl_image)
>   		bl33_entry = spl_fit_images_get_entry(blob, node);
>   
>   	/*
> +	 * If ATF_NO_PLATFORM_PARAM is set, we override the platform
> +	 * parameter and always pass 0.  This is a workaround for
> +	 * older ATF versions that have insufficiently robust (or
> +	 * overzealous) argument validation.
> +	 */
> +	if (CONFIG_IS_ENABLED(ATF_NO_PLATFORM_PARAM))
> +		platform_param = 0;
> +
> +	/*
>   	 * We don't provide a BL3-2 entry yet, but this will be possible
>   	 * using similar logic.
>   	 */
> -	bl31_entry(spl_image->entry_point, bl33_entry, (uintptr_t)blob);
> +	bl31_entry(spl_image->entry_point, bl33_entry, platform_param);
>   }

Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever



More information about the U-Boot mailing list