1*eb4d4185SGhennadi Procopciuc /* 2*eb4d4185SGhennadi Procopciuc * Copyright 2024 NXP 3*eb4d4185SGhennadi Procopciuc * 4*eb4d4185SGhennadi Procopciuc * SPDX-License-Identifier: BSD-3-Clause 5*eb4d4185SGhennadi Procopciuc */ 6*eb4d4185SGhennadi Procopciuc #include <errno.h> 7*eb4d4185SGhennadi Procopciuc 8*eb4d4185SGhennadi Procopciuc #include <common/bl_common.h> 9*eb4d4185SGhennadi Procopciuc #include <lib/xlat_tables/xlat_tables_v2.h> 10*eb4d4185SGhennadi Procopciuc 11*eb4d4185SGhennadi Procopciuc #include <s32cc-bl-common.h> 12*eb4d4185SGhennadi Procopciuc 13*eb4d4185SGhennadi Procopciuc int s32cc_bl_mmu_setup(void) 14*eb4d4185SGhennadi Procopciuc { 15*eb4d4185SGhennadi Procopciuc const unsigned long code_start = BL_CODE_BASE; 16*eb4d4185SGhennadi Procopciuc const unsigned long rw_start = BL_CODE_END; 17*eb4d4185SGhennadi Procopciuc unsigned long code_size; 18*eb4d4185SGhennadi Procopciuc unsigned long rw_size; 19*eb4d4185SGhennadi Procopciuc 20*eb4d4185SGhennadi Procopciuc if (code_start > BL_CODE_END) { 21*eb4d4185SGhennadi Procopciuc return -EINVAL; 22*eb4d4185SGhennadi Procopciuc } 23*eb4d4185SGhennadi Procopciuc 24*eb4d4185SGhennadi Procopciuc if (rw_start > BL_END) { 25*eb4d4185SGhennadi Procopciuc return -EINVAL; 26*eb4d4185SGhennadi Procopciuc } 27*eb4d4185SGhennadi Procopciuc 28*eb4d4185SGhennadi Procopciuc code_size = BL_CODE_END - code_start; 29*eb4d4185SGhennadi Procopciuc rw_size = BL_END - rw_start; 30*eb4d4185SGhennadi Procopciuc 31*eb4d4185SGhennadi Procopciuc mmap_add_region(code_start, code_start, code_size, 32*eb4d4185SGhennadi Procopciuc MT_RO | MT_MEMORY | MT_SECURE); 33*eb4d4185SGhennadi Procopciuc mmap_add_region(rw_start, rw_start, rw_size, 34*eb4d4185SGhennadi Procopciuc MT_RW | MT_MEMORY | MT_SECURE); 35*eb4d4185SGhennadi Procopciuc 36*eb4d4185SGhennadi Procopciuc init_xlat_tables(); 37*eb4d4185SGhennadi Procopciuc enable_mmu_el3(0); 38*eb4d4185SGhennadi Procopciuc 39*eb4d4185SGhennadi Procopciuc return 0; 40*eb4d4185SGhennadi Procopciuc } 41