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 <console.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(meminfo_t *mem_layout, void *plat_info) 36 { 37 /* Initialize the console to provide early debug support */ 38 console_init(PLAT_ARM_BOOT_UART_BASE, PLAT_ARM_BOOT_UART_CLK_IN_HZ, 39 ARM_CONSOLE_BAUDRATE); 40 } 41 42 /******************************************************************************* 43 * BL1 can pass platform dependent information to BL2U in x1. 44 * In case of ARM CSS platforms x1 contains SCP_BL2U image info. 45 * In case of ARM FVP platforms x1 is not used. 46 * In both cases, x0 contains the extents of the memory available to BL2U 47 ******************************************************************************/ 48 void bl2u_early_platform_setup(meminfo_t *mem_layout, void *plat_info) 49 { 50 arm_bl2u_early_platform_setup(mem_layout, plat_info); 51 } 52 53 /******************************************************************************* 54 * Perform the very early platform specific architectural setup here. At the 55 * moment this is only initializes the mmu in a quick and dirty way. 56 * The memory that is used by BL2U is only mapped. 57 ******************************************************************************/ 58 void arm_bl2u_plat_arch_setup(void) 59 { 60 arm_setup_page_tables(BL2U_BASE, 61 BL31_LIMIT, 62 BL_CODE_BASE, 63 BL_CODE_END, 64 BL_RO_DATA_BASE, 65 BL_RO_DATA_END 66 #if USE_COHERENT_MEM 67 , 68 BL_COHERENT_RAM_BASE, 69 BL_COHERENT_RAM_END 70 #endif 71 ); 72 #ifdef AARCH32 73 enable_mmu_secure(0); 74 #else 75 enable_mmu_el1(0); 76 #endif 77 } 78 79 void bl2u_plat_arch_setup(void) 80 { 81 arm_bl2u_plat_arch_setup(); 82 } 83