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 <bl_common.h> 10 #include <generic_delay_timer.h> 11 #include <plat_arm.h> 12 #include <platform_def.h> 13 #include <platform.h> 14 #include <string.h> 15 16 /* Weak definitions may be overridden in specific ARM standard platform */ 17 #pragma weak bl2u_platform_setup 18 #pragma weak bl2u_early_platform_setup 19 #pragma weak bl2u_plat_arch_setup 20 21 /* 22 * Perform ARM standard platform setup for BL2U 23 */ 24 void arm_bl2u_platform_setup(void) 25 { 26 /* Initialize the secure environment */ 27 plat_arm_security_setup(); 28 } 29 30 void bl2u_platform_setup(void) 31 { 32 arm_bl2u_platform_setup(); 33 } 34 35 void arm_bl2u_early_platform_setup(struct meminfo *mem_layout, void *plat_info) 36 { 37 /* Initialize the console to provide early debug support */ 38 arm_console_boot_init(); 39 40 generic_delay_timer_init(); 41 } 42 43 /******************************************************************************* 44 * BL1 can pass platform dependent information to BL2U in x1. 45 * In case of ARM CSS platforms x1 contains SCP_BL2U image info. 46 * In case of ARM FVP platforms x1 is not used. 47 * In both cases, x0 contains the extents of the memory available to BL2U 48 ******************************************************************************/ 49 void bl2u_early_platform_setup(struct meminfo *mem_layout, void *plat_info) 50 { 51 arm_bl2u_early_platform_setup(mem_layout, plat_info); 52 } 53 54 /******************************************************************************* 55 * Perform the very early platform specific architectural setup here. At the 56 * moment this is only initializes the mmu in a quick and dirty way. 57 * The memory that is used by BL2U is only mapped. 58 ******************************************************************************/ 59 void arm_bl2u_plat_arch_setup(void) 60 { 61 arm_setup_page_tables(BL2U_BASE, 62 BL31_LIMIT, 63 BL_CODE_BASE, 64 BL_CODE_END, 65 BL_RO_DATA_BASE, 66 BL_RO_DATA_END 67 #if USE_COHERENT_MEM 68 , 69 BL_COHERENT_RAM_BASE, 70 BL_COHERENT_RAM_END 71 #endif 72 ); 73 #ifdef AARCH32 74 enable_mmu_secure(0); 75 #else 76 enable_mmu_el1(0); 77 #endif 78 } 79 80 void bl2u_plat_arch_setup(void) 81 { 82 arm_bl2u_plat_arch_setup(); 83 } 84