
On Fri, Jun 26, 2020 at 6:41 AM Simon Glass sjg@chromium.org wrote:
On Wed, 10 Jun 2020 at 04:41, Rayagonda Kokatanur rayagonda.kokatanur@broadcom.com wrote:
From: Abhishek Shah abhishek.shah@broadcom.com
Add API to save boot parameters passed from BL31
Use assembly implementation of save_boot_params instead of c function. Because generally ATF does not set up SP_EL2 on exiting. Thus, usage of a C function immediately after exiting with no stack setup done by ATF explicitly, may cause SP_EL2 to be not sane, which in turn causes a crash if this boot was not lucky to get an SP_EL2 in valid range. Replace C implementation with assembly one which does not use stack this early, and let u-boot to set up its stack later.
Can this be fixed in ATF?
We are passing boot parameters for uboot using arm cpu x0, x1, x2 and x3 registers.
Signed-off-by: Abhishek Shah abhishek.shah@broadcom.com Signed-off-by: Rajesh Ravi rajesh.ravi@broadcom.com Signed-off-by: Vladimir Olovyannikov vladimir.olovyannikov@broadcom.com Signed-off-by: Rayagonda Kokatanur rayagonda.kokatanur@broadcom.com
arch/arm/cpu/armv8/bcmns3/lowlevel.S | 9 +++++++ arch/arm/include/asm/arch-bcmns3/bl33_info.h | 26 ++++++++++++++++++++ board/broadcom/bcmns3/ns3.c | 10 ++++++++ 3 files changed, 45 insertions(+) create mode 100644 arch/arm/include/asm/arch-bcmns3/bl33_info.h
Reviewed-by: Simon Glass sjg@chromium.org
diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c index e38156723c..5e644bd466 100644 --- a/board/broadcom/bcmns3/ns3.c +++ b/board/broadcom/bcmns3/ns3.c @@ -8,6 +8,7 @@ #include <asm/io.h> #include <asm/system.h> #include <asm/armv8/mmu.h> +#include <asm/arch-bcmns3/bl33_info.h>
static struct mm_region ns3_mem_map[] = { { @@ -33,8 +34,17 @@ struct mm_region *mem_map = ns3_mem_map;
DECLARE_GLOBAL_DATA_PTR;
+/*
- Force the bl33_info to the data-section, as .bss will not be valid
- when save_boot_params is invoked.
- */
+struct bl33_info *bl33_info __section(".data");
int board_init(void) {
if (bl33_info->version != BL33_INFO_VERSION)
printf("*** warning: ATF BL31 and u-boot not in sync! ***\n");
Shouldn't this be a fatal error?
It's not a fatal error. Its warning message for the user indicates that BL31 and BL33 are out of sync. By knowing this warning message, users can upgrade the binarie from uboot prompt.
Best regards, Rayagonda
return 0;
}
-- 2.17.1