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