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 #include <assert.h> 8*91f16700Schasinglulu #include <common/bl_common.h> 9*91f16700Schasinglulu #include <common/debug.h> 10*91f16700Schasinglulu #include <drivers/console.h> 11*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_compat.h> 12*91f16700Schasinglulu #include <mtk_mmap_pool.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu IMPORT_SYM(uintptr_t, __MTK_MMAP_POINTER_POOL_START__, MTK_MMAP_POINTER_POOL_START); 15*91f16700Schasinglulu IMPORT_SYM(uintptr_t, __MTK_MMAP_POINTER_POOL_END_UNALIGNED__, MTK_MMAP_POINTER_POOL_END_UNALIGNED); 16*91f16700Schasinglulu IMPORT_SYM(uintptr_t, __RW_START__, RW_START); 17*91f16700Schasinglulu IMPORT_SYM(uintptr_t, __DATA_START__, DATA_START); 18*91f16700Schasinglulu 19*91f16700Schasinglulu #define MAP_MTK_SECTIONS MAP_REGION_FLAT(RW_START, \ 20*91f16700Schasinglulu DATA_START - RW_START, \ 21*91f16700Schasinglulu MT_MEMORY | MT_RO | MT_SECURE) 22*91f16700Schasinglulu 23*91f16700Schasinglulu 24*91f16700Schasinglulu static void print_mmap(const mmap_region_t *regions) 25*91f16700Schasinglulu { 26*91f16700Schasinglulu while (regions->size != 0U) { 27*91f16700Schasinglulu VERBOSE("Region: 0x%lx - 0x%lx has attributes 0x%x\n", 28*91f16700Schasinglulu regions->base_va, 29*91f16700Schasinglulu regions->base_va + regions->size, 30*91f16700Schasinglulu regions->attr); 31*91f16700Schasinglulu regions++; 32*91f16700Schasinglulu } 33*91f16700Schasinglulu } 34*91f16700Schasinglulu 35*91f16700Schasinglulu void mtk_xlat_init(const mmap_region_t *bl_regions) 36*91f16700Schasinglulu { 37*91f16700Schasinglulu struct mtk_mmap_descriptor *iter; 38*91f16700Schasinglulu const mmap_region_t *regions = bl_regions; 39*91f16700Schasinglulu 40*91f16700Schasinglulu print_mmap(regions); 41*91f16700Schasinglulu mmap_add(bl_regions); 42*91f16700Schasinglulu if (MTK_MMAP_POINTER_POOL_START != MTK_MMAP_POINTER_POOL_END_UNALIGNED) { 43*91f16700Schasinglulu for (iter = (struct mtk_mmap_descriptor *)MTK_MMAP_POINTER_POOL_START; 44*91f16700Schasinglulu (char *)iter < (char *)MTK_MMAP_POINTER_POOL_END_UNALIGNED; 45*91f16700Schasinglulu iter++) { 46*91f16700Schasinglulu regions = iter->mmap_ptr; 47*91f16700Schasinglulu INFO("mmap_name: %s\n", iter->mmap_name); 48*91f16700Schasinglulu INFO("mmap_size: 0x%x\n", iter->mmap_size); 49*91f16700Schasinglulu print_mmap(regions); 50*91f16700Schasinglulu mmap_add(regions); 51*91f16700Schasinglulu } 52*91f16700Schasinglulu } 53*91f16700Schasinglulu init_xlat_tables(); 54*91f16700Schasinglulu enable_mmu_el3(0); 55*91f16700Schasinglulu } 56