blob: 845f14037409299f6ba39f3cc82cdca973fe823e [file] [log] [blame]
Dan Handley9df48042015-03-19 18:58:55 +00001/*
Soby Mathew96a1c6b2018-01-15 14:45:33 +00002 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
Dan Handley9df48042015-03-19 18:58:55 +00003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Dan Handley9df48042015-03-19 18:58:55 +00005 */
6#ifndef __BOARD_ARM_DEF_H__
7#define __BOARD_ARM_DEF_H__
8
9#include <v2m_def.h>
10
11
12/*
13 * Required platform porting definitions common to all ARM
14 * development platforms
15 */
16
17/* Size of cacheable stacks */
Masahiro Yamada441bfdd2016-12-25 23:36:24 +090018#if defined(IMAGE_BL1)
Dan Handley9df48042015-03-19 18:58:55 +000019#if TRUSTED_BOARD_BOOT
20# define PLATFORM_STACK_SIZE 0x1000
21#else
22# define PLATFORM_STACK_SIZE 0x440
23#endif
Masahiro Yamada441bfdd2016-12-25 23:36:24 +090024#elif defined(IMAGE_BL2)
Dan Handley9df48042015-03-19 18:58:55 +000025# if TRUSTED_BOARD_BOOT
26# define PLATFORM_STACK_SIZE 0x1000
27# else
28# define PLATFORM_STACK_SIZE 0x400
29# endif
Masahiro Yamada441bfdd2016-12-25 23:36:24 +090030#elif defined(IMAGE_BL2U)
Yatharth Kochar3a11eda2015-10-14 15:28:11 +010031# define PLATFORM_STACK_SIZE 0x200
Masahiro Yamada441bfdd2016-12-25 23:36:24 +090032#elif defined(IMAGE_BL31)
Roberto Vargas550eb082018-01-05 16:00:05 +000033#ifdef PLAT_XLAT_TABLES_DYNAMIC
34# define PLATFORM_STACK_SIZE 0x800
35#else
Dan Handley9df48042015-03-19 18:58:55 +000036# define PLATFORM_STACK_SIZE 0x400
Roberto Vargas550eb082018-01-05 16:00:05 +000037#endif
Masahiro Yamada441bfdd2016-12-25 23:36:24 +090038#elif defined(IMAGE_BL32)
Dan Handley9df48042015-03-19 18:58:55 +000039# define PLATFORM_STACK_SIZE 0x440
40#endif
41
42/*
Vikram Kanigirieade34c2016-01-20 15:57:35 +000043 * The constants below are not optimised for memory usage. Platforms that wish
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +010044 * to optimise these constants should set `ARM_BOARD_OPTIMISE_MEM` to 1 and
Vikram Kanigirieade34c2016-01-20 15:57:35 +000045 * provide there own values.
Dan Handley9df48042015-03-19 18:58:55 +000046 */
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +010047#if !ARM_BOARD_OPTIMISE_MEM
Dan Handley9df48042015-03-19 18:58:55 +000048/*
Vikram Kanigirieade34c2016-01-20 15:57:35 +000049 * PLAT_ARM_MMAP_ENTRIES depends on the number of entries in the
50 * plat_arm_mmap array defined for each BL stage.
51 *
52 * Provide relatively optimised values for the runtime images (BL31 and BL32).
53 * Optimisation is less important for the other, transient boot images so a
54 * common, maximum value is used across these images.
Antonio Nino Diazac998032017-02-27 17:23:54 +000055 *
56 * They are also used for the dynamically mapped regions in the images that
57 * enable dynamic memory mapping.
Dan Handley9df48042015-03-19 18:58:55 +000058 */
Antonio Nino Diaz7289f922017-11-09 11:34:09 +000059#if defined(IMAGE_BL31)
60# if ENABLE_SPM
61# define PLAT_ARM_MMAP_ENTRIES 9
62# define MAX_XLAT_TABLES 7
63# define PLAT_SP_IMAGE_MMAP_REGIONS 7
64# define PLAT_SP_IMAGE_MAX_XLAT_TABLES 10
65# else
Roberto Vargas550eb082018-01-05 16:00:05 +000066# define PLAT_ARM_MMAP_ENTRIES 8
Antonio Nino Diaz7289f922017-11-09 11:34:09 +000067# define MAX_XLAT_TABLES 5
68# endif
69#elif defined(IMAGE_BL32)
Roberto Vargas550eb082018-01-05 16:00:05 +000070# define PLAT_ARM_MMAP_ENTRIES 8
David Cunadoc3bd8c22017-10-05 21:24:14 +010071# define MAX_XLAT_TABLES 5
David Wang0ba499f2016-03-07 11:02:57 +080072#else
David Cunadoc3bd8c22017-10-05 21:24:14 +010073# define PLAT_ARM_MMAP_ENTRIES 11
David Wang0ba499f2016-03-07 11:02:57 +080074# define MAX_XLAT_TABLES 5
Dan Handley9df48042015-03-19 18:58:55 +000075#endif
76
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +010077/*
78 * PLAT_ARM_MAX_BL1_RW_SIZE is calculated using the current BL1 RW debug size
79 * plus a little space for growth.
80 */
Qixiang Xua674feb2017-08-24 14:28:08 +080081#define PLAT_ARM_MAX_BL1_RW_SIZE 0xB000
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +010082
83/*
84 * PLAT_ARM_MAX_BL2_SIZE is calculated using the current BL2 debug size plus a
85 * little space for growth.
86 */
87#if TRUSTED_BOARD_BOOT
Qixiang Xude431b12017-10-13 09:23:42 +080088# define PLAT_ARM_MAX_BL2_SIZE 0x1E000
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +010089#else
90# define PLAT_ARM_MAX_BL2_SIZE 0xF000
91#endif
92
93/*
94 * PLAT_ARM_MAX_BL31_SIZE is calculated using the current BL31 debug size plus a
95 * little space for growth.
96 */
Antonio Nino Diazb37eba92018-05-15 13:12:50 +010097#define PLAT_ARM_MAX_BL31_SIZE 0x20000
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +010098
Soby Mathewbf169232017-11-14 14:10:10 +000099#ifdef AARCH32
100/*
101 * PLAT_ARM_MAX_BL32_SIZE is calculated for SP_MIN as the AArch32 Secure
102 * Payload.
103 */
104# define PLAT_ARM_MAX_BL32_SIZE 0x1D000
105#endif
106
Antonio Nino Diaz30ce3ad2016-07-25 12:04:31 +0100107#endif /* ARM_BOARD_OPTIMISE_MEM */
Dan Handley9df48042015-03-19 18:58:55 +0000108
109#define MAX_IO_DEVICES 3
110#define MAX_IO_HANDLES 4
111
112#define PLAT_ARM_TRUSTED_SRAM_SIZE 0x00040000 /* 256 KB */
113
Roberto Vargasa1c16b62017-08-03 09:16:43 +0100114/* Reserve the last block of flash for PSCI MEM PROTECT flag */
Dan Handley9df48042015-03-19 18:58:55 +0000115#define PLAT_ARM_FIP_BASE V2M_FLASH0_BASE
Roberto Vargasa1c16b62017-08-03 09:16:43 +0100116#define PLAT_ARM_FIP_MAX_SIZE (V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE)
Dan Handley9df48042015-03-19 18:58:55 +0000117
Yatharth Kocharf11b29a2016-02-01 11:04:46 +0000118#define PLAT_ARM_NVM_BASE V2M_FLASH0_BASE
Roberto Vargasa1c16b62017-08-03 09:16:43 +0100119#define PLAT_ARM_NVM_SIZE (V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE)
120
121/* PSCI memory protect definitions:
122 * This variable is stored in a non-secure flash because some ARM reference
123 * platforms do not have secure NVRAM. Real systems that provided MEM_PROTECT
124 * support must use a secure NVRAM to store the PSCI MEM_PROTECT definitions.
125 */
126#define PLAT_ARM_MEM_PROT_ADDR (V2M_FLASH0_BASE + \
127 V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE)
Yatharth Kocharf11b29a2016-02-01 11:04:46 +0000128
Roberto Vargasa1c16b62017-08-03 09:16:43 +0100129/*
130 * Map mem_protect flash region with read and write permissions
131 */
132#define ARM_V2M_MAP_MEM_PROTECT MAP_REGION_FLAT(PLAT_ARM_MEM_PROT_ADDR, \
133 V2M_FLASH_BLOCK_SIZE, \
134 MT_DEVICE | MT_RW | MT_SECURE)
Dan Handley9df48042015-03-19 18:58:55 +0000135
136#endif /* __BOARD_ARM_DEF_H__ */