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