diff options
| author | Soby Mathew <soby.mathew@arm.com> | 2015-01-22 11:22:22 +0000 |
|---|---|---|
| committer | Soby Mathew <soby.mathew@arm.com> | 2015-02-12 12:27:37 +0000 |
| commit | ce41250ef6887451aadea6296fc7b1f482c2c401 (patch) | |
| tree | d10947fb2e55c0ac1a188c1fc1eb829b97c799f8 | |
| parent | 68fc81743e8671312a98c364ba2b0d69429cf4c6 (diff) | |
Minimize MAX_MMAP_REGIONS for each BL stage
This patch defines MAX_MMAP_REGIONS separately for each BL stage
as per its requirements. This minimizes the size of the mmap[]
array.
Fixes ARM-Software/tf-issues#201
Change-Id: I19b15e1a91a8365b2ecf24e2cd71937cb73916b2
| -rw-r--r-- | plat/fvp/aarch64/fvp_common.c | 3 | ||||
| -rw-r--r-- | plat/fvp/fvp_def.h | 27 | ||||
| -rw-r--r-- | plat/fvp/include/platform_def.h | 2 | ||||
| -rw-r--r-- | plat/juno/aarch64/juno_common.c | 3 | ||||
| -rw-r--r-- | plat/juno/include/platform_def.h | 2 | ||||
| -rw-r--r-- | plat/juno/juno_def.h | 27 |
6 files changed, 62 insertions, 2 deletions
diff --git a/plat/fvp/aarch64/fvp_common.c b/plat/fvp/aarch64/fvp_common.c index 55c2cbbd..fcda2a87 100644 --- a/plat/fvp/aarch64/fvp_common.c +++ b/plat/fvp/aarch64/fvp_common.c @@ -115,6 +115,9 @@ const mmap_region_t fvp_mmap[] = { }; #endif +CASSERT((sizeof(fvp_mmap)/sizeof(fvp_mmap[0])) + FVP_BL_REGIONS \ + <= MAX_MMAP_REGIONS, assert_max_mmap_regions); + /* Array of secure interrupts to be configured by the gic driver */ const unsigned int irq_sec_array[] = { IRQ_TZ_WDOG, diff --git a/plat/fvp/fvp_def.h b/plat/fvp/fvp_def.h index d1d9adb6..e3442fce 100644 --- a/plat/fvp/fvp_def.h +++ b/plat/fvp/fvp_def.h @@ -150,6 +150,33 @@ #define FUNC_SHUTDOWN 0x08 #define FUNC_REBOOT 0x09 +/* + * The number of regions like RO(code), coherent and data required by + * different BL stages which need to be mapped in the MMU. + */ +#if USE_COHERENT_MEM +#define FVP_BL_REGIONS 3 +#else +#define FVP_BL_REGIONS 2 +#endif + +/* + * The FVP_MAX_MMAP_REGIONS depend on the number of entries in fvp_mmap[] + * defined for each BL stage in fvp_common.c. + */ +#if IMAGE_BL1 +#define FVP_MMAP_ENTRIES 5 +#endif +#if IMAGE_BL2 +#define FVP_MMAP_ENTRIES 7 +#endif +#if IMAGE_BL31 +#define FVP_MMAP_ENTRIES 4 +#endif +#if IMAGE_BL32 +#define FVP_MMAP_ENTRIES 3 +#endif + /* Load address of BL33 in the FVP port */ #define NS_IMAGE_OFFSET (DRAM1_BASE + 0x8000000) /* DRAM + 128MB */ diff --git a/plat/fvp/include/platform_def.h b/plat/fvp/include/platform_def.h index 326ba9d9..7cc9e90a 100644 --- a/plat/fvp/include/platform_def.h +++ b/plat/fvp/include/platform_def.h @@ -208,7 +208,7 @@ # endif #endif -#define MAX_MMAP_REGIONS 16 +#define MAX_MMAP_REGIONS (FVP_MMAP_ENTRIES + FVP_BL_REGIONS) /******************************************************************************* * Declarations and constants to access the mailboxes safely. Each mailbox is diff --git a/plat/juno/aarch64/juno_common.c b/plat/juno/aarch64/juno_common.c index 7ad40d0d..6ea0b155 100644 --- a/plat/juno/aarch64/juno_common.c +++ b/plat/juno/aarch64/juno_common.c @@ -114,6 +114,9 @@ static const mmap_region_t juno_mmap[] = { }; #endif +CASSERT((sizeof(juno_mmap)/sizeof(juno_mmap[0])) + JUNO_BL_REGIONS \ + <= MAX_MMAP_REGIONS, assert_max_mmap_regions); + /* Array of secure interrupts to be configured by the gic driver */ const unsigned int irq_sec_array[] = { IRQ_MHU, diff --git a/plat/juno/include/platform_def.h b/plat/juno/include/platform_def.h index 1071d120..be1fb279 100644 --- a/plat/juno/include/platform_def.h +++ b/plat/juno/include/platform_def.h @@ -183,7 +183,7 @@ # define MAX_XLAT_TABLES 3 #endif -#define MAX_MMAP_REGIONS 16 +#define MAX_MMAP_REGIONS (JUNO_MMAP_ENTRIES + JUNO_BL_REGIONS) /******************************************************************************* * ID of the secure physical generic timer interrupt used by the TSP diff --git a/plat/juno/juno_def.h b/plat/juno/juno_def.h index 8a85aecd..84ceabd5 100644 --- a/plat/juno/juno_def.h +++ b/plat/juno/juno_def.h @@ -140,6 +140,33 @@ #define SYS_LED_EL_SHIFT 0x1 #define SYS_LED_EC_SHIFT 0x3 +/* + * The number of regions like RO(code), coherent and data required by + * different BL stages which need to be mapped in the MMU. + */ +#if USE_COHERENT_MEM +#define JUNO_BL_REGIONS 3 +#else +#define JUNO_BL_REGIONS 2 +#endif + +/* + * The JUNO_MAX_MMAP_REGIONS depend on the number of entries in juno_mmap[] + * defined for each BL stage in juno_common.c. + */ +#if IMAGE_BL1 +#define JUNO_MMAP_ENTRIES 6 +#endif +#if IMAGE_BL2 +#define JUNO_MMAP_ENTRIES 8 +#endif +#if IMAGE_BL31 +#define JUNO_MMAP_ENTRIES 5 +#endif +#if IMAGE_BL32 +#define JUNO_MMAP_ENTRIES 4 +#endif + /******************************************************************************* * GIC-400 & interrupt handling related constants ******************************************************************************/ |
