diff options
author | Dimitris Papastamos <dimitris.papastamos@arm.com> | 2018-06-07 14:49:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-07 14:49:25 +0100 |
commit | 4b557325835d49276a2a2f13e17dc4e3816d6af4 (patch) | |
tree | 1172a432f35749ad2c9d9a4c4bca848b4d056dda /plat | |
parent | d003b190938fa9e50ad351015da4b5225c78ce14 (diff) | |
parent | 0f57fabf7f7928bd065e1bfc269dbed09be95445 (diff) | |
download | platform_external_arm-trusted-firmware-4b557325835d49276a2a2f13e17dc4e3816d6af4.tar.gz platform_external_arm-trusted-firmware-4b557325835d49276a2a2f13e17dc4e3816d6af4.tar.bz2 platform_external_arm-trusted-firmware-4b557325835d49276a2a2f13e17dc4e3816d6af4.zip |
Merge pull request #1404 from soby-mathew/sm/bl_layout_change
ARM platforms: Change memory layout and update documentation
Diffstat (limited to 'plat')
-rw-r--r-- | plat/arm/board/fvp/platform.mk | 6 | ||||
-rw-r--r-- | plat/arm/board/juno/include/platform_def.h | 21 | ||||
-rw-r--r-- | plat/arm/common/arm_bl2_setup.c | 14 | ||||
-rw-r--r-- | plat/arm/common/arm_bl31_setup.c | 5 | ||||
-rw-r--r-- | plat/arm/common/arm_dyn_cfg.c | 4 | ||||
-rw-r--r-- | plat/arm/common/sp_min/arm_sp_min_setup.c | 5 | ||||
-rw-r--r-- | plat/arm/css/drivers/scp/css_bom_bootloader.c | 16 | ||||
-rw-r--r-- | plat/arm/css/drivers/scp/css_scp.h | 16 |
8 files changed, 41 insertions, 46 deletions
diff --git a/plat/arm/board/fvp/platform.mk b/plat/arm/board/fvp/platform.mk index c02831ac3..f807dc6e4 100644 --- a/plat/arm/board/fvp/platform.mk +++ b/plat/arm/board/fvp/platform.mk @@ -225,12 +225,6 @@ ifneq (${BL2_AT_EL3}, 0) override BL1_SOURCES = endif -ifeq (${ENABLE_SPM},1) -ifneq (${ARM_BL31_IN_DRAM},1) - $(error "Error: SPM needs BL31 to be located in DRAM.") -endif -endif - include plat/arm/board/common/board_common.mk include plat/arm/common/arm_common.mk diff --git a/plat/arm/board/juno/include/platform_def.h b/plat/arm/board/juno/include/platform_def.h index e616e1fcf..75ee991ca 100644 --- a/plat/arm/board/juno/include/platform_def.h +++ b/plat/arm/board/juno/include/platform_def.h @@ -139,22 +139,21 @@ #endif /* - * PLAT_ARM_MAX_BL31_SIZE is calculated using the current BL31 debug size plus a - * little space for growth. - * SCP_BL2 image is loaded into the space BL31 -> BL1_RW_BASE. - * For TBB use case, PLAT_ARM_MAX_BL1_RW_SIZE has been increased and therefore - * PLAT_ARM_MAX_BL31_SIZE has been increased to ensure SCP_BL2 has the same - * space available. + * Since BL31 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL31_SIZE is + * calculated using the current BL31 PROGBITS debug size plus the sizes of + * BL2 and BL1-RW. SCP_BL2 image is loaded into the space BL31 -> BL2_BASE. + * Hence the BL31 PROGBITS size should be >= PLAT_CSS_MAX_SCP_BL2_SIZE. */ -#define PLAT_ARM_MAX_BL31_SIZE 0x1E000 +#define PLAT_ARM_MAX_BL31_SIZE 0x3E000 #if JUNO_AARCH32_EL3_RUNTIME /* - * PLAT_ARM_MAX_BL32_SIZE is calculated for SP_MIN as the AArch32 Secure - * Payload. We also need to take care of SCP_BL2 size as well, as the SCP_BL2 - * is loaded into the space BL32 -> BL1_RW_BASE + * Since BL32 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL32_SIZE is + * calculated using the current BL32 PROGBITS debug size plus the sizes of + * BL2 and BL1-RW. SCP_BL2 image is loaded into the space BL32 -> BL2_BASE. + * Hence the BL32 PROGBITS size should be >= PLAT_CSS_MAX_SCP_BL2_SIZE. */ -# define PLAT_ARM_MAX_BL32_SIZE 0x1E000 +#define PLAT_ARM_MAX_BL32_SIZE 0x3E000 #endif /* diff --git a/plat/arm/common/arm_bl2_setup.c b/plat/arm/common/arm_bl2_setup.c index d490f83c8..4ef3a9b0f 100644 --- a/plat/arm/common/arm_bl2_setup.c +++ b/plat/arm/common/arm_bl2_setup.c @@ -25,18 +25,10 @@ static meminfo_t bl2_tzram_layout __aligned(CACHE_WRITEBACK_GRANULE); /* - * Check that BL2_BASE is atleast a page over ARM_BL_RAM_BASE. The page is for - * `meminfo_t` data structure and TB_FW_CONFIG passed from BL1. Not needed - * when BL2 is compiled for BL_AT_EL3 as BL2 doesn't need any info from BL1 and - * BL2 is loaded at base of usable SRAM. + * Check that BL2_BASE is above ARM_TB_FW_CONFIG_LIMIT. This reserved page is + * for `meminfo_t` data structure and fw_configs passed from BL1. */ -#if BL2_AT_EL3 -#define BL1_MEMINFO_OFFSET 0x0 -#else -#define BL1_MEMINFO_OFFSET PAGE_SIZE -#endif - -CASSERT(BL2_BASE >= (ARM_BL_RAM_BASE + BL1_MEMINFO_OFFSET), assert_bl2_base_overflows); +CASSERT(BL2_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_bl2_base_overflows); /* Weak definitions may be overridden in specific ARM standard platform */ #pragma weak bl2_early_platform_setup2 diff --git a/plat/arm/common/arm_bl31_setup.c b/plat/arm/common/arm_bl31_setup.c index 551e7002f..46f7ae0e5 100644 --- a/plat/arm/common/arm_bl31_setup.c +++ b/plat/arm/common/arm_bl31_setup.c @@ -25,6 +25,11 @@ static entry_point_info_t bl32_image_ep_info; static entry_point_info_t bl33_image_ep_info; +/* + * Check that BL31_BASE is above ARM_TB_FW_CONFIG_LIMIT. The reserved page + * is required for SOC_FW_CONFIG/TOS_FW_CONFIG passed from BL2. + */ +CASSERT(BL31_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_bl31_base_overflows); /* Weak definitions may be overridden in specific ARM standard platform */ #pragma weak bl31_early_platform_setup2 diff --git a/plat/arm/common/arm_dyn_cfg.c b/plat/arm/common/arm_dyn_cfg.c index 3f0a9b4cf..32a515b56 100644 --- a/plat/arm/common/arm_dyn_cfg.c +++ b/plat/arm/common/arm_dyn_cfg.c @@ -143,8 +143,8 @@ void arm_bl2_dyn_cfg_init(void) if (check_uptr_overflow(image_base, image_size) != 0) continue; - /* Ensure the configs don't overlap with BL2 */ - if ((image_base > BL2_BASE) || ((image_base + image_size) > BL2_BASE)) + /* Ensure the configs don't overlap with BL31 */ + if ((image_base > BL31_BASE) || ((image_base + image_size) > BL31_BASE)) continue; /* Ensure the configs are loaded in a valid address */ diff --git a/plat/arm/common/sp_min/arm_sp_min_setup.c b/plat/arm/common/sp_min/arm_sp_min_setup.c index 9a6c0740b..b42e35f3a 100644 --- a/plat/arm/common/sp_min/arm_sp_min_setup.c +++ b/plat/arm/common/sp_min/arm_sp_min_setup.c @@ -22,6 +22,11 @@ static entry_point_info_t bl33_image_ep_info; #pragma weak sp_min_plat_arch_setup #pragma weak plat_arm_sp_min_early_platform_setup +/* + * Check that BL32_BASE is above ARM_TB_FW_CONFIG_LIMIT. The reserved page + * is required for SOC_FW_CONFIG/TOS_FW_CONFIG passed from BL2. + */ +CASSERT(BL32_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_bl32_base_overflows); /******************************************************************************* * Return a pointer to the 'entry_point_info' structure of the next image for the diff --git a/plat/arm/css/drivers/scp/css_bom_bootloader.c b/plat/arm/css/drivers/scp/css_bom_bootloader.c index 42ed30d3d..5268510db 100644 --- a/plat/arm/css/drivers/scp/css_bom_bootloader.c +++ b/plat/arm/css/drivers/scp/css_bom_bootloader.c @@ -47,16 +47,16 @@ typedef struct { } cmd_data_payload_t; /* - * All CSS platforms load SCP_BL2/SCP_BL2U just below BL rw-data and above - * BL2/BL2U (this is where BL31 usually resides except when ARM_BL31_IN_DRAM is - * set. Ensure that SCP_BL2/SCP_BL2U do not overflow into BL1 rw-data nor - * BL2/BL2U. + * All CSS platforms load SCP_BL2/SCP_BL2U just below BL2 (this is where BL31 + * usually resides except when ARM_BL31_IN_DRAM is + * set). Ensure that SCP_BL2/SCP_BL2U do not overflow into shared RAM and + * the tb_fw_config. */ -CASSERT(SCP_BL2_LIMIT <= BL1_RW_BASE, assert_scp_bl2_overwrite_bl1); -CASSERT(SCP_BL2U_LIMIT <= BL1_RW_BASE, assert_scp_bl2u_overwrite_bl1); +CASSERT(SCP_BL2_LIMIT <= BL2_BASE, assert_scp_bl2_overwrite_bl2); +CASSERT(SCP_BL2U_LIMIT <= BL2_BASE, assert_scp_bl2u_overwrite_bl2); -CASSERT(SCP_BL2_BASE >= BL2_LIMIT, assert_scp_bl2_overwrite_bl2); -CASSERT(SCP_BL2U_BASE >= BL2U_LIMIT, assert_scp_bl2u_overwrite_bl2u); +CASSERT(SCP_BL2_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2_overflow); +CASSERT(SCP_BL2U_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2u_overflow); static void scp_boot_message_start(void) { diff --git a/plat/arm/css/drivers/scp/css_scp.h b/plat/arm/css/drivers/scp/css_scp.h index 1f0cf8e24..671612a80 100644 --- a/plat/arm/css/drivers/scp/css_scp.h +++ b/plat/arm/css/drivers/scp/css_scp.h @@ -34,17 +34,17 @@ int css_scp_boot_image_xfer(void *image, unsigned int image_size); int css_scp_boot_ready(void); #if CSS_LOAD_SCP_IMAGES + /* - * All CSS platforms load SCP_BL2/SCP_BL2U just below BL rw-data and above - * BL2/BL2U (this is where BL31 usually resides except when ARM_BL31_IN_DRAM is - * set. Ensure that SCP_BL2/SCP_BL2U do not overflow into BL1 rw-data nor - * BL2/BL2U. + * All CSS platforms load SCP_BL2/SCP_BL2U just below BL2 (this is where BL31 + * usually resides except when ARM_BL31_IN_DRAM is + * set). Ensure that SCP_BL2/SCP_BL2U do not overflow into tb_fw_config. */ -CASSERT(SCP_BL2_LIMIT <= BL1_RW_BASE, assert_scp_bl2_limit_overwrite_bl1); -CASSERT(SCP_BL2U_LIMIT <= BL1_RW_BASE, assert_scp_bl2u_limit_overwrite_bl1); +CASSERT(SCP_BL2_LIMIT <= BL2_BASE, assert_scp_bl2_overwrite_bl2); +CASSERT(SCP_BL2U_LIMIT <= BL2_BASE, assert_scp_bl2u_overwrite_bl2); -CASSERT(SCP_BL2_BASE >= BL2_LIMIT, assert_scp_bl2_overwrite_bl2); -CASSERT(SCP_BL2U_BASE >= BL2U_LIMIT, assert_scp_bl2u_overwrite_bl2u); +CASSERT(SCP_BL2_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2_overflow); +CASSERT(SCP_BL2U_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2u_overflow); #endif #endif /* __CSS_SCP_H__ */ |