xref: /rk3399_ARM-atf/plat/rockchip/common/sp_min_plat_setup.c (revision 3e02c7436cf40fb7f7eb4d3038b7fc1ed1eeaa5f)
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