Message ID | 1514924204-18402-1-git-send-email-philipp.tomsich@theobroma-systems.com |
---|---|
State | Accepted |
Commit | d21fb63d772d32373600abeb7afcb53033e087a7 |
Delegated to: | Philipp Tomsich |
Headers | show |
Series | [U-Boot,1/2] spl: atf: add SPL_ATF_NO_PLATFORM_PARAM option | expand |
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 > + 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@rock-chips.com> Thanks, - Kever
> 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> > Reviewed-by: Kever Yang <kever.yang@rock-chips.com> > --- > > common/spl/Kconfig | 18 ++++++++++++++++-- > common/spl/spl_atf.c | 12 +++++++++++- > 2 files changed, 27 insertions(+), 3 deletions(-) > Applied to u-boot-rockchip, thanks!
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); }