1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2016-2019, 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 9*91f16700Schasinglulu #include <platform_def.h> 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <arch_helpers.h> 12*91f16700Schasinglulu #include <common/bl_common.h> 13*91f16700Schasinglulu #include <common/debug.h> 14*91f16700Schasinglulu #include <common/desc_image_load.h> 15*91f16700Schasinglulu #include <drivers/console.h> 16*91f16700Schasinglulu #include <drivers/generic_delay_timer.h> 17*91f16700Schasinglulu #include <drivers/ti/uart/uart_16550.h> 18*91f16700Schasinglulu #include <lib/mmio.h> 19*91f16700Schasinglulu #include <plat_private.h> 20*91f16700Schasinglulu #include <plat/common/platform.h> 21*91f16700Schasinglulu 22*91f16700Schasinglulu static entry_point_info_t bl33_ep_info; 23*91f16700Schasinglulu 24*91f16700Schasinglulu /******************************************************************************* 25*91f16700Schasinglulu * Return a pointer to the 'entry_point_info' structure of the next image for 26*91f16700Schasinglulu * the security state specified. BL33 corresponds to the non-secure image type. 27*91f16700Schasinglulu * A NULL pointer is returned if the image does not exist. 28*91f16700Schasinglulu ******************************************************************************/ 29*91f16700Schasinglulu entry_point_info_t *sp_min_plat_get_bl33_ep_info(void) 30*91f16700Schasinglulu { 31*91f16700Schasinglulu entry_point_info_t *next_image_info; 32*91f16700Schasinglulu 33*91f16700Schasinglulu next_image_info = &bl33_ep_info; 34*91f16700Schasinglulu 35*91f16700Schasinglulu if (next_image_info->pc == 0U) { 36*91f16700Schasinglulu return NULL; 37*91f16700Schasinglulu } 38*91f16700Schasinglulu 39*91f16700Schasinglulu return next_image_info; 40*91f16700Schasinglulu } 41*91f16700Schasinglulu 42*91f16700Schasinglulu #pragma weak params_early_setup 43*91f16700Schasinglulu void params_early_setup(u_register_t plat_param_from_bl2) 44*91f16700Schasinglulu { 45*91f16700Schasinglulu } 46*91f16700Schasinglulu 47*91f16700Schasinglulu unsigned int plat_is_my_cpu_primary(void); 48*91f16700Schasinglulu 49*91f16700Schasinglulu /******************************************************************************* 50*91f16700Schasinglulu * Perform any BL32 specific platform actions. 51*91f16700Schasinglulu ******************************************************************************/ 52*91f16700Schasinglulu void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, 53*91f16700Schasinglulu u_register_t arg2, u_register_t arg3) 54*91f16700Schasinglulu { 55*91f16700Schasinglulu static console_t console; 56*91f16700Schasinglulu 57*91f16700Schasinglulu params_early_setup(arg1); 58*91f16700Schasinglulu 59*91f16700Schasinglulu if (rockchip_get_uart_base() != 0) 60*91f16700Schasinglulu console_16550_register(rockchip_get_uart_base(), 61*91f16700Schasinglulu rockchip_get_uart_clock(), 62*91f16700Schasinglulu rockchip_get_uart_baudrate(), &console); 63*91f16700Schasinglulu 64*91f16700Schasinglulu VERBOSE("sp_min_setup\n"); 65*91f16700Schasinglulu 66*91f16700Schasinglulu bl31_params_parse_helper(arg0, NULL, &bl33_ep_info); 67*91f16700Schasinglulu } 68*91f16700Schasinglulu 69*91f16700Schasinglulu /******************************************************************************* 70*91f16700Schasinglulu * Perform any sp_min platform setup code 71*91f16700Schasinglulu ******************************************************************************/ 72*91f16700Schasinglulu void sp_min_platform_setup(void) 73*91f16700Schasinglulu { 74*91f16700Schasinglulu generic_delay_timer_init(); 75*91f16700Schasinglulu plat_rockchip_soc_init(); 76*91f16700Schasinglulu 77*91f16700Schasinglulu /* Initialize the gic cpu and distributor interfaces */ 78*91f16700Schasinglulu plat_rockchip_gic_driver_init(); 79*91f16700Schasinglulu plat_rockchip_gic_init(); 80*91f16700Schasinglulu plat_rockchip_pmu_init(); 81*91f16700Schasinglulu } 82*91f16700Schasinglulu 83*91f16700Schasinglulu /******************************************************************************* 84*91f16700Schasinglulu * Perform the very early platform specific architectural setup here. At the 85*91f16700Schasinglulu * moment this is only initializes the mmu in a quick and dirty way. 86*91f16700Schasinglulu ******************************************************************************/ 87*91f16700Schasinglulu void sp_min_plat_arch_setup(void) 88*91f16700Schasinglulu { 89*91f16700Schasinglulu plat_cci_init(); 90*91f16700Schasinglulu plat_cci_enable(); 91*91f16700Schasinglulu 92*91f16700Schasinglulu plat_configure_mmu_svc_mon(BL_CODE_BASE, 93*91f16700Schasinglulu BL_COHERENT_RAM_END - BL_CODE_BASE, 94*91f16700Schasinglulu BL_CODE_BASE, 95*91f16700Schasinglulu BL_CODE_END, 96*91f16700Schasinglulu BL_COHERENT_RAM_BASE, 97*91f16700Schasinglulu BL_COHERENT_RAM_END); 98*91f16700Schasinglulu } 99*91f16700Schasinglulu 100*91f16700Schasinglulu void sp_min_plat_fiq_handler(uint32_t id) 101*91f16700Schasinglulu { 102*91f16700Schasinglulu VERBOSE("[sp_min] interrupt #%d\n", id); 103*91f16700Schasinglulu } 104