xref: /arm-trusted-firmware/plat/mediatek/include/mtk_mmap_pool.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2022, MediaTek Inc. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef MTK_MMAP_POOL_H
8*91f16700Schasinglulu #define MTK_MMAP_POOL_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <cdefs.h>
11*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_compat.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu struct mtk_mmap_descriptor {
14*91f16700Schasinglulu 	const char *mmap_name;
15*91f16700Schasinglulu 	const mmap_region_t *mmap_ptr;
16*91f16700Schasinglulu 	const uint32_t mmap_size;
17*91f16700Schasinglulu };
18*91f16700Schasinglulu 
19*91f16700Schasinglulu #define MTK_MMAP_SECTION \
20*91f16700Schasinglulu 	__used \
21*91f16700Schasinglulu 	__aligned(sizeof(void *)) \
22*91f16700Schasinglulu 	__section(".mtk_mmap_lists")
23*91f16700Schasinglulu 
24*91f16700Schasinglulu #define DECLARE_MTK_MMAP_REGIONS(_mmap_array) \
25*91f16700Schasinglulu 	static const struct mtk_mmap_descriptor _mtk_mmap_descriptor_##_mmap_array \
26*91f16700Schasinglulu 	__used \
27*91f16700Schasinglulu 	__aligned(sizeof(void *)) \
28*91f16700Schasinglulu 	__section(".mtk_mmap_pool") \
29*91f16700Schasinglulu 	= { \
30*91f16700Schasinglulu 		.mmap_name = #_mmap_array, \
31*91f16700Schasinglulu 		.mmap_ptr = _mmap_array, \
32*91f16700Schasinglulu 		.mmap_size = ARRAY_SIZE(_mmap_array) \
33*91f16700Schasinglulu 	}
34*91f16700Schasinglulu 
35*91f16700Schasinglulu #define MAP_BL_RW MAP_REGION_FLAT( \
36*91f16700Schasinglulu 		DATA_START, \
37*91f16700Schasinglulu 		BL_END - DATA_START, \
38*91f16700Schasinglulu 		MT_MEMORY | MT_RW | MT_SECURE)
39*91f16700Schasinglulu 
40*91f16700Schasinglulu #if SEPARATE_CODE_AND_RODATA
41*91f16700Schasinglulu #define MAP_BL_RO \
42*91f16700Schasinglulu 	MAP_REGION_FLAT( \
43*91f16700Schasinglulu 		BL_CODE_BASE, \
44*91f16700Schasinglulu 		BL_CODE_END - BL_CODE_BASE, \
45*91f16700Schasinglulu 		MT_CODE | MT_SECURE), \
46*91f16700Schasinglulu 	MAP_REGION_FLAT( \
47*91f16700Schasinglulu 		BL_RO_DATA_BASE, \
48*91f16700Schasinglulu 		BL_RO_DATA_END - BL_RO_DATA_BASE, \
49*91f16700Schasinglulu 		MT_RO_DATA | MT_SECURE)
50*91f16700Schasinglulu #else
51*91f16700Schasinglulu #define MAP_BL_RO MAP_REGION_FLAT(BL_CODE_BASE, \
52*91f16700Schasinglulu 				  BL_CODE_END - BL_CODE_BASE,	\
53*91f16700Schasinglulu 				  MT_CODE | MT_SECURE)
54*91f16700Schasinglulu #endif
55*91f16700Schasinglulu 
56*91f16700Schasinglulu void mtk_xlat_init(const mmap_region_t *bl_regions);
57*91f16700Schasinglulu 
58*91f16700Schasinglulu #endif /* MTK_MMAP_POOL_H */
59