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