182e18f89SHeiko Stuebner /* 2*3e02c743SJulius Werner * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved. 382e18f89SHeiko Stuebner * 482e18f89SHeiko Stuebner * SPDX-License-Identifier: BSD-3-Clause 582e18f89SHeiko Stuebner */ 682e18f89SHeiko Stuebner 782e18f89SHeiko Stuebner #include <assert.h> 882e18f89SHeiko Stuebner 982e18f89SHeiko Stuebner #include <platform_def.h> 1082e18f89SHeiko Stuebner 1182e18f89SHeiko Stuebner #include <arch_helpers.h> 1282e18f89SHeiko Stuebner #include <common/bl_common.h> 1382e18f89SHeiko Stuebner #include <common/debug.h> 14*3e02c743SJulius Werner #include <common/desc_image_load.h> 1582e18f89SHeiko Stuebner #include <drivers/console.h> 1682e18f89SHeiko Stuebner #include <drivers/generic_delay_timer.h> 1782e18f89SHeiko Stuebner #include <drivers/ti/uart/uart_16550.h> 1882e18f89SHeiko Stuebner #include <lib/coreboot.h> 1982e18f89SHeiko Stuebner #include <lib/mmio.h> 2082e18f89SHeiko Stuebner #include <plat_private.h> 2182e18f89SHeiko Stuebner #include <plat/common/platform.h> 2282e18f89SHeiko Stuebner 2382e18f89SHeiko Stuebner static entry_point_info_t bl33_ep_info; 2482e18f89SHeiko Stuebner 2582e18f89SHeiko Stuebner /******************************************************************************* 2682e18f89SHeiko Stuebner * Return a pointer to the 'entry_point_info' structure of the next image for 2782e18f89SHeiko Stuebner * the security state specified. BL33 corresponds to the non-secure image type. 2882e18f89SHeiko Stuebner * A NULL pointer is returned if the image does not exist. 2982e18f89SHeiko Stuebner ******************************************************************************/ 3082e18f89SHeiko Stuebner entry_point_info_t *sp_min_plat_get_bl33_ep_info(void) 3182e18f89SHeiko Stuebner { 3282e18f89SHeiko Stuebner entry_point_info_t *next_image_info; 3382e18f89SHeiko Stuebner 3482e18f89SHeiko Stuebner next_image_info = &bl33_ep_info; 3582e18f89SHeiko Stuebner 3682e18f89SHeiko Stuebner if (next_image_info->pc == 0U) { 3782e18f89SHeiko Stuebner return NULL; 3882e18f89SHeiko Stuebner } 3982e18f89SHeiko Stuebner 4082e18f89SHeiko Stuebner return next_image_info; 4182e18f89SHeiko Stuebner } 4282e18f89SHeiko Stuebner 4382e18f89SHeiko Stuebner #pragma weak params_early_setup 44c1185ffdSJulius Werner void params_early_setup(u_register_t plat_param_from_bl2) 4582e18f89SHeiko Stuebner { 4682e18f89SHeiko Stuebner } 4782e18f89SHeiko Stuebner 4882e18f89SHeiko Stuebner unsigned int plat_is_my_cpu_primary(void); 4982e18f89SHeiko Stuebner 5082e18f89SHeiko Stuebner /******************************************************************************* 5182e18f89SHeiko Stuebner * Perform any BL32 specific platform actions. 5282e18f89SHeiko Stuebner ******************************************************************************/ 5382e18f89SHeiko Stuebner void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, 5482e18f89SHeiko Stuebner u_register_t arg2, u_register_t arg3) 5582e18f89SHeiko Stuebner { 5682e18f89SHeiko Stuebner static console_16550_t console; 5782e18f89SHeiko Stuebner 58c1185ffdSJulius Werner params_early_setup(arg1); 5982e18f89SHeiko Stuebner 6082e18f89SHeiko Stuebner #if COREBOOT 6182e18f89SHeiko Stuebner if (coreboot_serial.type) 6282e18f89SHeiko Stuebner console_16550_register(coreboot_serial.baseaddr, 6382e18f89SHeiko Stuebner coreboot_serial.input_hertz, 6482e18f89SHeiko Stuebner coreboot_serial.baud, 6582e18f89SHeiko Stuebner &console); 6682e18f89SHeiko Stuebner #else 67220c33a2SChristoph Müllner console_16550_register(rockchip_get_uart_base(), PLAT_RK_UART_CLOCK, 6882e18f89SHeiko Stuebner PLAT_RK_UART_BAUDRATE, &console); 6982e18f89SHeiko Stuebner #endif 7082e18f89SHeiko Stuebner VERBOSE("sp_min_setup\n"); 7182e18f89SHeiko Stuebner 72*3e02c743SJulius Werner bl31_params_parse_helper(arg0, NULL, &bl33_ep_info); 7382e18f89SHeiko Stuebner } 7482e18f89SHeiko Stuebner 7582e18f89SHeiko Stuebner /******************************************************************************* 7682e18f89SHeiko Stuebner * Perform any sp_min platform setup code 7782e18f89SHeiko Stuebner ******************************************************************************/ 7882e18f89SHeiko Stuebner void sp_min_platform_setup(void) 7982e18f89SHeiko Stuebner { 8082e18f89SHeiko Stuebner generic_delay_timer_init(); 8182e18f89SHeiko Stuebner plat_rockchip_soc_init(); 8282e18f89SHeiko Stuebner 8382e18f89SHeiko Stuebner /* Initialize the gic cpu and distributor interfaces */ 8482e18f89SHeiko Stuebner plat_rockchip_gic_driver_init(); 8582e18f89SHeiko Stuebner plat_rockchip_gic_init(); 8682e18f89SHeiko Stuebner plat_rockchip_pmu_init(); 8782e18f89SHeiko Stuebner } 8882e18f89SHeiko Stuebner 8982e18f89SHeiko Stuebner /******************************************************************************* 9082e18f89SHeiko Stuebner * Perform the very early platform specific architectural setup here. At the 9182e18f89SHeiko Stuebner * moment this is only intializes the mmu in a quick and dirty way. 9282e18f89SHeiko Stuebner ******************************************************************************/ 9382e18f89SHeiko Stuebner void sp_min_plat_arch_setup(void) 9482e18f89SHeiko Stuebner { 9582e18f89SHeiko Stuebner plat_cci_init(); 9682e18f89SHeiko Stuebner plat_cci_enable(); 9782e18f89SHeiko Stuebner 9882e18f89SHeiko Stuebner plat_configure_mmu_svc_mon(BL_CODE_BASE, 9982e18f89SHeiko Stuebner BL_COHERENT_RAM_END - BL_CODE_BASE, 10082e18f89SHeiko Stuebner BL_CODE_BASE, 10182e18f89SHeiko Stuebner BL_CODE_END, 10282e18f89SHeiko Stuebner BL_COHERENT_RAM_BASE, 10382e18f89SHeiko Stuebner BL_COHERENT_RAM_END); 10482e18f89SHeiko Stuebner } 10582e18f89SHeiko Stuebner 10682e18f89SHeiko Stuebner void sp_min_plat_fiq_handler(uint32_t id) 10782e18f89SHeiko Stuebner { 10882e18f89SHeiko Stuebner VERBOSE("[sp_min] interrupt #%d\n", id); 10982e18f89SHeiko Stuebner } 110