1 /* 2 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <arch_helpers.h> 8 #include <arm_def.h> 9 #include <assert.h> 10 #include <bl_common.h> 11 #include <generic_delay_timer.h> 12 #include <plat_arm.h> 13 #include <platform_def.h> 14 #include <platform.h> 15 #include <string.h> 16 17 /* Weak definitions may be overridden in specific ARM standard platform */ 18 #pragma weak bl2u_platform_setup 19 #pragma weak bl2u_early_platform_setup 20 #pragma weak bl2u_plat_arch_setup 21 22 #define MAP_BL2U_TOTAL MAP_REGION_FLAT( \ 23 BL2U_BASE, \ 24 BL2U_LIMIT - BL2U_BASE, \ 25 MT_MEMORY | MT_RW | MT_SECURE) 26 27 /* 28 * Perform ARM standard platform setup for BL2U 29 */ 30 void arm_bl2u_platform_setup(void) 31 { 32 /* Initialize the secure environment */ 33 plat_arm_security_setup(); 34 } 35 36 void bl2u_platform_setup(void) 37 { 38 arm_bl2u_platform_setup(); 39 } 40 41 void arm_bl2u_early_platform_setup(struct meminfo *mem_layout, void *plat_info) 42 { 43 /* Initialize the console to provide early debug support */ 44 arm_console_boot_init(); 45 46 generic_delay_timer_init(); 47 } 48 49 /******************************************************************************* 50 * BL1 can pass platform dependent information to BL2U in x1. 51 * In case of ARM CSS platforms x1 contains SCP_BL2U image info. 52 * In case of ARM FVP platforms x1 is not used. 53 * In both cases, x0 contains the extents of the memory available to BL2U 54 ******************************************************************************/ 55 void bl2u_early_platform_setup(struct meminfo *mem_layout, void *plat_info) 56 { 57 arm_bl2u_early_platform_setup(mem_layout, plat_info); 58 } 59 60 /******************************************************************************* 61 * Perform the very early platform specific architectural setup here. At the 62 * moment this is only initializes the mmu in a quick and dirty way. 63 * The memory that is used by BL2U is only mapped. 64 ******************************************************************************/ 65 void arm_bl2u_plat_arch_setup(void) 66 { 67 68 #if USE_COHERENT_MEM 69 /* Ensure ARM platforms dont use coherent memory in BL2U */ 70 assert((BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE) == 0U); 71 #endif 72 73 const mmap_region_t bl_regions[] = { 74 MAP_BL2U_TOTAL, 75 ARM_MAP_BL_RO, 76 {0} 77 }; 78 79 arm_setup_page_tables(bl_regions, plat_arm_get_mmap()); 80 81 #ifdef AARCH32 82 enable_mmu_secure(0); 83 #else 84 enable_mmu_el1(0); 85 #endif 86 } 87 88 void bl2u_plat_arch_setup(void) 89 { 90 arm_bl2u_plat_arch_setup(); 91 } 92