diff options
author | Sathees Balya <sathees.balya@arm.com> | 2018-11-15 14:22:30 +0000 |
---|---|---|
committer | Sathees Balya <sathees.balya@arm.com> | 2019-01-23 16:01:19 +0000 |
commit | 5b8d50e40701ebb6a7ba548ccaa96ba879587fb9 (patch) | |
tree | a286d0657cb05879b66a6d35ff91ca160c1fc61f /include/plat | |
parent | a0d894397d5729aa72840dc49120f4d198174e22 (diff) |
plat/arm: Save BL2 descriptors to reserved memory.
On ARM platforms, the BL2 memory can be overlaid by BL31/BL32. The memory
descriptors describing the list of executable images are created in BL2
R/W memory, which could be possibly corrupted later on by BL31/BL32 due
to overlay. This patch creates a reserved location in SRAM for these
descriptors and are copied over by BL2 before handing over to next BL
image.
Also this patch increases the PLAT_ARM_MAX_BL2_SIZE for juno when TBBR
is enabled.
Fixes ARM-Software/tf-issues#626
Change-Id: I755735706fa702024b4032f51ed4895b3687377f
Signed-off-by: Sathees Balya <sathees.balya@arm.com>
Diffstat (limited to 'include/plat')
-rw-r--r-- | include/plat/arm/common/arm_def.h | 19 | ||||
-rw-r--r-- | include/plat/arm/common/plat_arm.h | 1 |
2 files changed, 17 insertions, 3 deletions
diff --git a/include/plat/arm/common/arm_def.h b/include/plat/arm/common/arm_def.h index e27dd80e..62623c1b 100644 --- a/include/plat/arm/common/arm_def.h +++ b/include/plat/arm/common/arm_def.h @@ -348,7 +348,20 @@ * and limit. Leave enough space of BL2 meminfo. */ #define ARM_TB_FW_CONFIG_BASE (ARM_BL_RAM_BASE + sizeof(meminfo_t)) -#define ARM_TB_FW_CONFIG_LIMIT (ARM_BL_RAM_BASE + PAGE_SIZE) +#define ARM_TB_FW_CONFIG_LIMIT (ARM_BL_RAM_BASE + (PAGE_SIZE / 2U)) + +/* + * Boot parameters passed from BL2 to BL31/BL32 are stored here + */ +#define ARM_BL2_MEM_DESC_BASE ARM_TB_FW_CONFIG_LIMIT +#define ARM_BL2_MEM_DESC_LIMIT (ARM_BL2_MEM_DESC_BASE + \ + (PAGE_SIZE / 2U)) + +/* + * Define limit of firmware configuration memory: + * ARM_TB_FW_CONFIG + ARM_BL2_MEM_DESC memory + */ +#define ARM_FW_CONFIG_LIMIT (ARM_BL_RAM_BASE + PAGE_SIZE) /******************************************************************************* * BL1 specific defines. @@ -443,7 +456,7 @@ * SP_MIN is the only BL image in SRAM. Allocate the whole of SRAM (excluding * the page reserved for fw_configs) to BL32 */ -# define BL32_BASE ARM_TB_FW_CONFIG_LIMIT +# define BL32_BASE ARM_FW_CONFIG_LIMIT # define BL32_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) # else /* Put BL32 below BL2 in the Trusted SRAM.*/ @@ -481,7 +494,7 @@ # define TSP_SEC_MEM_BASE ARM_BL_RAM_BASE # define TSP_SEC_MEM_SIZE ARM_BL_RAM_SIZE # define TSP_PROGBITS_LIMIT BL31_BASE -# define BL32_BASE ARM_TB_FW_CONFIG_LIMIT +# define BL32_BASE ARM_FW_CONFIG_LIMIT # define BL32_LIMIT BL31_BASE # elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_DRAM_ID # define TSP_SEC_MEM_BASE PLAT_ARM_TRUSTED_DRAM_BASE diff --git a/include/plat/arm/common/plat_arm.h b/include/plat/arm/common/plat_arm.h index b5edc74b..9d6786f5 100644 --- a/include/plat/arm/common/plat_arm.h +++ b/include/plat/arm/common/plat_arm.h @@ -188,6 +188,7 @@ void arm_bl2_plat_arch_setup(void); uint32_t arm_get_spsr_for_bl32_entry(void); uint32_t arm_get_spsr_for_bl33_entry(void); int arm_bl2_handle_post_image_load(unsigned int image_id); +struct bl_params *arm_get_next_bl_params(void); /* BL2 at EL3 functions */ void arm_bl2_el3_early_platform_setup(void); |