From 224d261a16435389cc349b0e1640d489f117189d Mon Sep 17 00:00:00 2001 From: Philipp Tomsich Date: Tue, 2 Jan 2018 18:43:37 +0100 Subject: [PATCH 1/3] rockchip: board: lion-rk3368: reduce env-size default to 8KiB We want to have the same configuration defaults for the RK3368-uQ7 as for the RK3399-Q7: this change reduces the default env-size to 8KiB to ensure that it does not overlap the boot-payload on SD/MMC configurations. References: commit fe529e6597c0 ("rockchip: rk3399-puma: reduce env size to 8kiB") Signed-off-by: Philipp Tomsich --- board/theobroma-systems/lion_rk3368/Kconfig | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/board/theobroma-systems/lion_rk3368/Kconfig b/board/theobroma-systems/lion_rk3368/Kconfig index d7aa487abd..fddbf826df 100644 --- a/board/theobroma-systems/lion_rk3368/Kconfig +++ b/board/theobroma-systems/lion_rk3368/Kconfig @@ -12,4 +12,10 @@ config SYS_CONFIG_NAME config BOARD_SPECIFIC_OPTIONS # dummy def_bool y +config ENV_SIZE + default 0x2000 + +config ENV_OFFSET + default 0x3c000 if ENV_IS_IN_SPI_FLASH + endif From d21fb63d772d32373600abeb7afcb53033e087a7 Mon Sep 17 00:00:00 2001 From: Philipp Tomsich Date: Tue, 2 Jan 2018 21:16:43 +0100 Subject: [PATCH 2/3] spl: atf: add SPL_ATF_NO_PLATFORM_PARAM option 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 Tested-by: Philipp Tomsich Reviewed-by: Kever Yang --- 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 aef0034b33..9d35f41233 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 63557c01e8..a942de9964 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; /* @@ -157,9 +158,18 @@ void spl_invoke_atf(struct spl_image_info *spl_image) if (node >= 0) 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); } From e2a75f022d3503b6a5bfcbee660e56383666d107 Mon Sep 17 00:00:00 2001 From: Philipp Tomsich Date: Tue, 2 Jan 2018 21:16:44 +0100 Subject: [PATCH 3/3] rockchip: firefly-rk3399: enable SPL_ATF_NO_PLATFORM_PARAM The Rockchip-released ATF for the Firefly apparently (i.e. Kever reported this) does not tolerate a FDT being passed as the platform parameter and will run into a hard stop. To work around this limitation in the ATF parameter handling, we enable SPL_ATF_NO_PLATFORM_PARAM (which will force passing NULL for the platform parameters). Note that this only affects this platform, as the ATF releases for the RK3368 and RK3399 have always either ignored the platform parameter (i.e. before the FDT-based parameters were supported) or support receiving a pointer to a FDT. Signed-off-by: Philipp Tomsich Reviewed-by: Kever Yang --- configs/firefly-rk3399_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/firefly-rk3399_defconfig b/configs/firefly-rk3399_defconfig index ab2501528f..4071fea933 100644 --- a/configs/firefly-rk3399_defconfig +++ b/configs/firefly-rk3399_defconfig @@ -15,6 +15,7 @@ CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.py" CONFIG_SPL_STACK_R=y CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x4000 CONFIG_SPL_ATF=y +CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y CONFIG_CMD_BOOTZ=y CONFIG_CMD_GPT=y CONFIG_CMD_MMC=y