181528dbcSRoberto Vargas /* 2*88a0523eSAntonio Nino Diaz * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. 381528dbcSRoberto Vargas * 481528dbcSRoberto Vargas * SPDX-License-Identifier: BSD-3-Clause 581528dbcSRoberto Vargas */ 681528dbcSRoberto Vargas #include <generic_delay_timer.h> 781528dbcSRoberto Vargas #include <plat_arm.h> 881528dbcSRoberto Vargas #include <platform.h> 981528dbcSRoberto Vargas 1081528dbcSRoberto Vargas #pragma weak bl2_el3_early_platform_setup 1181528dbcSRoberto Vargas #pragma weak bl2_el3_plat_arch_setup 1281528dbcSRoberto Vargas #pragma weak bl2_el3_plat_prepare_exit 1381528dbcSRoberto Vargas 1481528dbcSRoberto Vargas static meminfo_t bl2_el3_tzram_layout; 1581528dbcSRoberto Vargas 1681528dbcSRoberto Vargas /* 1781528dbcSRoberto Vargas * Perform arm specific early platform setup. At this moment we only initialize 1881528dbcSRoberto Vargas * the console and the memory layout. 1981528dbcSRoberto Vargas */ 2081528dbcSRoberto Vargas void arm_bl2_el3_early_platform_setup(void) 2181528dbcSRoberto Vargas { 2281528dbcSRoberto Vargas /* Initialize the console to provide early debug support */ 23*88a0523eSAntonio Nino Diaz arm_console_boot_init(); 2481528dbcSRoberto Vargas 2581528dbcSRoberto Vargas /* 2681528dbcSRoberto Vargas * Allow BL2 to see the whole Trusted RAM. This is determined 2781528dbcSRoberto Vargas * statically since we cannot rely on BL1 passing this information 2881528dbcSRoberto Vargas * in the BL2_AT_EL3 case. 2981528dbcSRoberto Vargas */ 3081528dbcSRoberto Vargas bl2_el3_tzram_layout.total_base = ARM_BL_RAM_BASE; 3181528dbcSRoberto Vargas bl2_el3_tzram_layout.total_size = ARM_BL_RAM_SIZE; 3281528dbcSRoberto Vargas 3381528dbcSRoberto Vargas /* Initialise the IO layer and register platform IO devices */ 3481528dbcSRoberto Vargas plat_arm_io_setup(); 3581528dbcSRoberto Vargas } 3681528dbcSRoberto Vargas 3781528dbcSRoberto Vargas void bl2_el3_early_platform_setup(u_register_t arg0 __unused, 3881528dbcSRoberto Vargas u_register_t arg1 __unused, 3981528dbcSRoberto Vargas u_register_t arg2 __unused, 4081528dbcSRoberto Vargas u_register_t arg3 __unused) 4181528dbcSRoberto Vargas { 4281528dbcSRoberto Vargas arm_bl2_el3_early_platform_setup(); 4381528dbcSRoberto Vargas 4481528dbcSRoberto Vargas /* 4581528dbcSRoberto Vargas * Initialize Interconnect for this cluster during cold boot. 4681528dbcSRoberto Vargas * No need for locks as no other CPU is active. 4781528dbcSRoberto Vargas */ 4881528dbcSRoberto Vargas plat_arm_interconnect_init(); 4981528dbcSRoberto Vargas /* 5081528dbcSRoberto Vargas * Enable Interconnect coherency for the primary CPU's cluster. 5181528dbcSRoberto Vargas */ 5281528dbcSRoberto Vargas plat_arm_interconnect_enter_coherency(); 5381528dbcSRoberto Vargas 5481528dbcSRoberto Vargas generic_delay_timer_init(); 5581528dbcSRoberto Vargas } 5681528dbcSRoberto Vargas 5781528dbcSRoberto Vargas /******************************************************************************* 5881528dbcSRoberto Vargas * Perform the very early platform specific architectural setup here. At the 5981528dbcSRoberto Vargas * moment this is only initializes the mmu in a quick and dirty way. 6081528dbcSRoberto Vargas ******************************************************************************/ 6181528dbcSRoberto Vargas void arm_bl2_el3_plat_arch_setup(void) 6281528dbcSRoberto Vargas { 6381528dbcSRoberto Vargas arm_setup_page_tables(bl2_el3_tzram_layout.total_base, 6481528dbcSRoberto Vargas bl2_el3_tzram_layout.total_size, 6581528dbcSRoberto Vargas BL_CODE_BASE, 6681528dbcSRoberto Vargas BL_CODE_END, 6781528dbcSRoberto Vargas BL_RO_DATA_BASE, 6881528dbcSRoberto Vargas BL_RO_DATA_END 6981528dbcSRoberto Vargas #if USE_COHERENT_MEM 7081528dbcSRoberto Vargas , BL_COHERENT_RAM_BASE, 7181528dbcSRoberto Vargas BL_COHERENT_RAM_END 7281528dbcSRoberto Vargas #endif 7381528dbcSRoberto Vargas ); 7481528dbcSRoberto Vargas 7581528dbcSRoberto Vargas #ifdef AARCH32 7681528dbcSRoberto Vargas enable_mmu_secure(0); 7781528dbcSRoberto Vargas #else 7881528dbcSRoberto Vargas enable_mmu_el3(0); 7981528dbcSRoberto Vargas #endif 8081528dbcSRoberto Vargas } 8181528dbcSRoberto Vargas 8281528dbcSRoberto Vargas void bl2_el3_plat_arch_setup(void) 8381528dbcSRoberto Vargas { 8481528dbcSRoberto Vargas arm_bl2_el3_plat_arch_setup(); 8581528dbcSRoberto Vargas } 8681528dbcSRoberto Vargas 8781528dbcSRoberto Vargas void bl2_el3_plat_prepare_exit(void) 8881528dbcSRoberto Vargas { 8981528dbcSRoberto Vargas } 90