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