
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@theobroma-systems.com Tested-by: Philipp Tomsich philipp.tomsich@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
More detail at: https://github.com/ARM-software/arm-trusted-firmwareis loaded by SPL (which is considered as BL2 in ATF terminology).
+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@rock-chips.com
Thanks, - Kever