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