1 /* 2 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 #ifndef COMMON_DEF_H 7 #define COMMON_DEF_H 8 9 #include <platform_def.h> 10 11 #include <common/bl_common.h> 12 #include <lib/utils_def.h> 13 #include <lib/xlat_tables/xlat_tables_defs.h> 14 15 /****************************************************************************** 16 * Required platform porting definitions that are expected to be common to 17 * all platforms 18 *****************************************************************************/ 19 20 /* 21 * Platform binary types for linking 22 */ 23 #ifdef __aarch64__ 24 #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 25 #define PLATFORM_LINKER_ARCH aarch64 26 #else 27 #define PLATFORM_LINKER_FORMAT "elf32-littlearm" 28 #define PLATFORM_LINKER_ARCH arm 29 #endif /* __aarch64__ */ 30 31 /* 32 * Generic platform constants 33 */ 34 #define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n" 35 36 #define BL2_IMAGE_DESC { \ 37 .image_id = BL2_IMAGE_ID, \ 38 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, \ 39 VERSION_2, image_info_t, 0), \ 40 .image_info.image_base = BL2_BASE, \ 41 .image_info.image_max_size = BL2_LIMIT - BL2_BASE,\ 42 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, \ 43 VERSION_2, entry_point_info_t, SECURE | EXECUTABLE),\ 44 .ep_info.pc = BL2_BASE, \ 45 } 46 47 /* 48 * The following constants identify the extents of the code & read-only data 49 * regions. These addresses are used by the MMU setup code and therefore they 50 * must be page-aligned. 51 * 52 * When the code and read-only data are mapped as a single atomic section 53 * (i.e. when SEPARATE_CODE_AND_RODATA=0) then we treat the whole section as 54 * code by specifying the read-only data section as empty. 55 * 56 * BL1 is different than the other images in the sense that its read-write data 57 * originally lives in Trusted ROM and needs to be relocated in Trusted SRAM at 58 * run-time. Therefore, the read-write data in ROM can be mapped with the same 59 * memory attributes as the read-only data region. For this reason, BL1 uses 60 * different macros. 61 * 62 * Note that BL1_ROM_END is not necessarily aligned on a page boundary as it 63 * just points to the end of BL1's actual content in Trusted ROM. Therefore it 64 * needs to be rounded up to the next page size in order to map the whole last 65 * page of it with the right memory attributes. 66 */ 67 #if SEPARATE_CODE_AND_RODATA 68 69 #define BL1_CODE_END BL_CODE_END 70 #define BL1_RO_DATA_BASE BL_RO_DATA_BASE 71 #define BL1_RO_DATA_END round_up(BL1_ROM_END, PAGE_SIZE) 72 #if BL2_IN_XIP_MEM 73 #define BL2_CODE_END BL_CODE_END 74 #define BL2_RO_DATA_BASE BL_RO_DATA_BASE 75 #define BL2_RO_DATA_END round_up(BL2_ROM_END, PAGE_SIZE) 76 #endif /* BL2_IN_XIP_MEM */ 77 #else 78 #define BL_RO_DATA_BASE UL(0) 79 #define BL_RO_DATA_END UL(0) 80 #define BL1_CODE_END round_up(BL1_ROM_END, PAGE_SIZE) 81 #if BL2_IN_XIP_MEM 82 #define BL2_RO_DATA_BASE UL(0) 83 #define BL2_RO_DATA_END UL(0) 84 #define BL2_CODE_END round_up(BL2_ROM_END, PAGE_SIZE) 85 #endif /* BL2_IN_XIP_MEM */ 86 #endif /* SEPARATE_CODE_AND_RODATA */ 87 88 #endif /* COMMON_DEF_H */ 89