diff --git a/include/common/bl_common.h b/include/common/bl_common.h index af598d0..2ecf281 100644 --- a/include/common/bl_common.h +++ b/include/common/bl_common.h @@ -193,6 +193,11 @@ void print_entry_point_info(const entry_point_info_t *ep_info); uintptr_t page_align(uintptr_t value, unsigned dir); +struct mmap_region; + +void setup_page_tables(const struct mmap_region *bl_regions, + const struct mmap_region *plat_regions); + #endif /*__ASSEMBLY__*/ #endif /* __BL_COMMON_H__ */ diff --git a/include/plat/arm/common/plat_arm.h b/include/plat/arm/common/plat_arm.h index b93381d..bdcb144 100644 --- a/include/plat/arm/common/plat_arm.h +++ b/include/plat/arm/common/plat_arm.h @@ -66,12 +66,6 @@ <= MAX_MMAP_REGIONS, \ assert_max_mmap_regions); -/* - * Utility functions common to ARM standard platforms - */ -void arm_setup_page_tables(const mmap_region_t bl_regions[], - const mmap_region_t plat_regions[]); - void arm_setup_romlib(void); #if defined(IMAGE_BL31) || (defined(AARCH32) && defined(IMAGE_BL32)) diff --git a/plat/arm/board/fvp/fvp_common.c b/plat/arm/board/fvp/fvp_common.c index 836fd93..f5198f6 100644 --- a/plat/arm/board/fvp/fvp_common.c +++ b/plat/arm/board/fvp/fvp_common.c @@ -53,8 +53,8 @@ /* * Table of memory regions for various BL stages to map using the MMU. - * This doesn't include Trusted SRAM as arm_setup_page_tables() already - * takes care of mapping it. + * This doesn't include Trusted SRAM as setup_page_tables() already takes care + * of mapping it. * * The flash needs to be mapped as writable in order to erase the FIP's Table of * Contents in case of unrecoverable error (see plat_error_handler()). diff --git a/plat/arm/board/juno/juno_common.c b/plat/arm/board/juno/juno_common.c index 40b1a27..2e6b011 100644 --- a/plat/arm/board/juno/juno_common.c +++ b/plat/arm/board/juno/juno_common.c @@ -8,8 +8,8 @@ /* * Table of memory regions for different BL stages to map using the MMU. - * This doesn't include Trusted SRAM as arm_setup_page_tables() already - * takes care of mapping it. + * This doesn't include Trusted SRAM as setup_page_tables() already takes care + * of mapping it. */ #ifdef IMAGE_BL1 const mmap_region_t plat_arm_mmap[] = { diff --git a/plat/arm/common/arm_bl1_setup.c b/plat/arm/common/arm_bl1_setup.c index d67c0c2..f760e18 100644 --- a/plat/arm/common/arm_bl1_setup.c +++ b/plat/arm/common/arm_bl1_setup.c @@ -123,7 +123,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); #ifdef AARCH32 enable_mmu_svc_mon(0); #else diff --git a/plat/arm/common/arm_bl2_el3_setup.c b/plat/arm/common/arm_bl2_el3_setup.c index c67ab49..4f5e6a9 100644 --- a/plat/arm/common/arm_bl2_el3_setup.c +++ b/plat/arm/common/arm_bl2_el3_setup.c @@ -79,7 +79,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); #ifdef AARCH32 enable_mmu_svc_mon(0); diff --git a/plat/arm/common/arm_bl2_setup.c b/plat/arm/common/arm_bl2_setup.c index d31f6dc..628a50d 100644 --- a/plat/arm/common/arm_bl2_setup.c +++ b/plat/arm/common/arm_bl2_setup.c @@ -125,7 +125,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); #ifdef AARCH32 enable_mmu_svc_mon(0); diff --git a/plat/arm/common/arm_bl2u_setup.c b/plat/arm/common/arm_bl2u_setup.c index b518f0f..3848aa0 100644 --- a/plat/arm/common/arm_bl2u_setup.c +++ b/plat/arm/common/arm_bl2u_setup.c @@ -80,7 +80,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); #ifdef AARCH32 enable_mmu_svc_mon(0); diff --git a/plat/arm/common/arm_bl31_setup.c b/plat/arm/common/arm_bl31_setup.c index 059c9d5..24d5570 100644 --- a/plat/arm/common/arm_bl31_setup.c +++ b/plat/arm/common/arm_bl31_setup.c @@ -302,7 +302,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); enable_mmu_el3(0); diff --git a/plat/arm/common/arm_common.c b/plat/arm/common/arm_common.c index 243159c..6b14785 100644 --- a/plat/arm/common/arm_common.c +++ b/plat/arm/common/arm_common.c @@ -32,42 +32,6 @@ #endif } -/* - * Set up the page tables for the generic and platform-specific memory regions. - * The size of the Trusted SRAM seen by the BL image must be specified as well - * as an array specifying the generic memory regions which can be; - * - Code section; - * - Read-only data section; - * - Init code section, if applicable - * - Coherent memory region, if applicable. - */ - -void __init arm_setup_page_tables(const mmap_region_t bl_regions[], - const mmap_region_t plat_regions[]) -{ -#if LOG_LEVEL >= LOG_LEVEL_VERBOSE - const mmap_region_t *regions = bl_regions; - - while (regions->size != 0U) { - VERBOSE("Region: 0x%lx - 0x%lx has attributes 0x%x\n", - regions->base_va, - (regions->base_va + regions->size), - regions->attr); - regions++; - } -#endif - /* - * Map the Trusted SRAM with appropriate memory attributes. - * Subsequent mappings will adjust the attributes for specific regions. - */ - mmap_add(bl_regions); - /* Now (re-)map the platform-specific memory regions */ - mmap_add(plat_regions); - - /* Create the page tables to reflect the above mappings */ - init_xlat_tables(); -} - uintptr_t plat_get_ns_image_entrypoint(void) { #ifdef PRELOADED_BL33_BASE diff --git a/plat/arm/common/sp_min/arm_sp_min_setup.c b/plat/arm/common/sp_min/arm_sp_min_setup.c index b8234c1..e151073 100644 --- a/plat/arm/common/sp_min/arm_sp_min_setup.c +++ b/plat/arm/common/sp_min/arm_sp_min_setup.c @@ -208,7 +208,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); enable_mmu_svc_mon(0); } diff --git a/plat/arm/common/tsp/arm_tsp_setup.c b/plat/arm/common/tsp/arm_tsp_setup.c index 2d42d8e..3cf8825 100644 --- a/plat/arm/common/tsp/arm_tsp_setup.c +++ b/plat/arm/common/tsp/arm_tsp_setup.c @@ -85,6 +85,6 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); enable_mmu_el1(0); } diff --git a/plat/common/plat_bl_common.c b/plat/common/plat_bl_common.c index 50d79d4..4cf1cc5 100644 --- a/plat/common/plat_bl_common.c +++ b/plat/common/plat_bl_common.c @@ -73,3 +73,40 @@ return 0; } #endif /* TRUSTED_BOARD_BOOT */ + +/* + * Set up the page tables for the generic and platform-specific memory regions. + * The size of the Trusted SRAM seen by the BL image must be specified as well + * as an array specifying the generic memory regions which can be; + * - Code section; + * - Read-only data section; + * - Init code section, if applicable + * - Coherent memory region, if applicable. + */ + +void __init setup_page_tables(const mmap_region_t *bl_regions, + const mmap_region_t *plat_regions) +{ +#if LOG_LEVEL >= LOG_LEVEL_VERBOSE + const mmap_region_t *regions = bl_regions; + + while (regions->size != 0U) { + VERBOSE("Region: 0x%lx - 0x%lx has attributes 0x%x\n", + regions->base_va, + regions->base_va + regions->size, + regions->attr); + regions++; + } +#endif + /* + * Map the Trusted SRAM with appropriate memory attributes. + * Subsequent mappings will adjust the attributes for specific regions. + */ + mmap_add(bl_regions); + + /* Now (re-)map the platform-specific memory regions */ + mmap_add(plat_regions); + + /* Create the page tables to reflect the above mappings */ + init_xlat_tables(); +} diff --git a/plat/ti/k3/common/k3_bl31_setup.c b/plat/ti/k3/common/k3_bl31_setup.c index f84b9d4..e438dc3 100644 --- a/plat/ti/k3/common/k3_bl31_setup.c +++ b/plat/ti/k3/common/k3_bl31_setup.c @@ -108,7 +108,7 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); enable_mmu_el3(0); } diff --git a/plat/xilinx/zynqmp/bl31_zynqmp_setup.c b/plat/xilinx/zynqmp/bl31_zynqmp_setup.c index a14388f..0163450 100644 --- a/plat/xilinx/zynqmp/bl31_zynqmp_setup.c +++ b/plat/xilinx/zynqmp/bl31_zynqmp_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -193,6 +193,6 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); enable_mmu_el3(0); } diff --git a/plat/xilinx/zynqmp/tsp/tsp_plat_setup.c b/plat/xilinx/zynqmp/tsp/tsp_plat_setup.c index 52d4bf8..a27f34b 100644 --- a/plat/xilinx/zynqmp/tsp/tsp_plat_setup.c +++ b/plat/xilinx/zynqmp/tsp/tsp_plat_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -57,6 +57,6 @@ {0} }; - arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); + setup_page_tables(bl_regions, plat_arm_get_mmap()); enable_mmu_el1(0); }