xref: /rk3399_ARM-atf/plat/rockchip/common/sp_min_plat_setup.c (revision 220c33a2c5e5590fff774559c5fc81c81b7052f3)
182e18f89SHeiko Stuebner /*
282e18f89SHeiko Stuebner  * Copyright (c) 2016-2018, 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>
1482e18f89SHeiko Stuebner #include <drivers/console.h>
1582e18f89SHeiko Stuebner #include <drivers/generic_delay_timer.h>
1682e18f89SHeiko Stuebner #include <drivers/ti/uart/uart_16550.h>
1782e18f89SHeiko Stuebner #include <lib/coreboot.h>
1882e18f89SHeiko Stuebner #include <lib/mmio.h>
1982e18f89SHeiko Stuebner #include <plat_private.h>
2082e18f89SHeiko Stuebner #include <plat/common/platform.h>
2182e18f89SHeiko Stuebner 
2282e18f89SHeiko Stuebner static entry_point_info_t bl33_ep_info;
2382e18f89SHeiko Stuebner 
2482e18f89SHeiko Stuebner /*******************************************************************************
2582e18f89SHeiko Stuebner  * Return a pointer to the 'entry_point_info' structure of the next image for
2682e18f89SHeiko Stuebner  * the security state specified. BL33 corresponds to the non-secure image type.
2782e18f89SHeiko Stuebner  * A NULL pointer is returned if the image does not exist.
2882e18f89SHeiko Stuebner  ******************************************************************************/
2982e18f89SHeiko Stuebner entry_point_info_t *sp_min_plat_get_bl33_ep_info(void)
3082e18f89SHeiko Stuebner {
3182e18f89SHeiko Stuebner 	entry_point_info_t *next_image_info;
3282e18f89SHeiko Stuebner 
3382e18f89SHeiko Stuebner 	next_image_info = &bl33_ep_info;
3482e18f89SHeiko Stuebner 
3582e18f89SHeiko Stuebner 	if (next_image_info->pc == 0U) {
3682e18f89SHeiko Stuebner 		return NULL;
3782e18f89SHeiko Stuebner 	}
3882e18f89SHeiko Stuebner 
3982e18f89SHeiko Stuebner 	return next_image_info;
4082e18f89SHeiko Stuebner }
4182e18f89SHeiko Stuebner 
4282e18f89SHeiko Stuebner #pragma weak params_early_setup
4382e18f89SHeiko Stuebner void params_early_setup(void *plat_param_from_bl2)
4482e18f89SHeiko Stuebner {
4582e18f89SHeiko Stuebner }
4682e18f89SHeiko Stuebner 
4782e18f89SHeiko Stuebner unsigned int plat_is_my_cpu_primary(void);
4882e18f89SHeiko Stuebner 
4982e18f89SHeiko Stuebner /*******************************************************************************
5082e18f89SHeiko Stuebner  * Perform any BL32 specific platform actions.
5182e18f89SHeiko Stuebner  ******************************************************************************/
5282e18f89SHeiko Stuebner void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1,
5382e18f89SHeiko Stuebner 				  u_register_t arg2, u_register_t arg3)
5482e18f89SHeiko Stuebner {
5582e18f89SHeiko Stuebner 	static console_16550_t console;
5682e18f89SHeiko Stuebner 	struct rockchip_bl31_params *arg_from_bl2 = (struct rockchip_bl31_params *) arg0;
5782e18f89SHeiko Stuebner 	void *plat_params_from_bl2 = (void *) arg1;
5882e18f89SHeiko Stuebner 
5982e18f89SHeiko Stuebner 	params_early_setup(plat_params_from_bl2);
6082e18f89SHeiko Stuebner 
6182e18f89SHeiko Stuebner #if COREBOOT
6282e18f89SHeiko Stuebner 	if (coreboot_serial.type)
6382e18f89SHeiko Stuebner 		console_16550_register(coreboot_serial.baseaddr,
6482e18f89SHeiko Stuebner 				       coreboot_serial.input_hertz,
6582e18f89SHeiko Stuebner 				       coreboot_serial.baud,
6682e18f89SHeiko Stuebner 				       &console);
6782e18f89SHeiko Stuebner #else
68*220c33a2SChristoph Müllner 	console_16550_register(rockchip_get_uart_base(), PLAT_RK_UART_CLOCK,
6982e18f89SHeiko Stuebner 			       PLAT_RK_UART_BAUDRATE, &console);
7082e18f89SHeiko Stuebner #endif
7182e18f89SHeiko Stuebner 	VERBOSE("sp_min_setup\n");
7282e18f89SHeiko Stuebner 
7382e18f89SHeiko Stuebner 	/* Passing a NULL context is a critical programming error */
7482e18f89SHeiko Stuebner 	assert(arg_from_bl2);
7582e18f89SHeiko Stuebner 
7682e18f89SHeiko Stuebner 	assert(arg_from_bl2->h.type == PARAM_BL31);
7782e18f89SHeiko Stuebner 	assert(arg_from_bl2->h.version >= VERSION_1);
7882e18f89SHeiko Stuebner 
7982e18f89SHeiko Stuebner 	bl33_ep_info = *arg_from_bl2->bl33_ep_info;
8082e18f89SHeiko Stuebner }
8182e18f89SHeiko Stuebner 
8282e18f89SHeiko Stuebner /*******************************************************************************
8382e18f89SHeiko Stuebner  * Perform any sp_min platform setup code
8482e18f89SHeiko Stuebner  ******************************************************************************/
8582e18f89SHeiko Stuebner void sp_min_platform_setup(void)
8682e18f89SHeiko Stuebner {
8782e18f89SHeiko Stuebner 	generic_delay_timer_init();
8882e18f89SHeiko Stuebner 	plat_rockchip_soc_init();
8982e18f89SHeiko Stuebner 
9082e18f89SHeiko Stuebner 	/* Initialize the gic cpu and distributor interfaces */
9182e18f89SHeiko Stuebner 	plat_rockchip_gic_driver_init();
9282e18f89SHeiko Stuebner 	plat_rockchip_gic_init();
9382e18f89SHeiko Stuebner 	plat_rockchip_pmu_init();
9482e18f89SHeiko Stuebner }
9582e18f89SHeiko Stuebner 
9682e18f89SHeiko Stuebner /*******************************************************************************
9782e18f89SHeiko Stuebner  * Perform the very early platform specific architectural setup here. At the
9882e18f89SHeiko Stuebner  * moment this is only intializes the mmu in a quick and dirty way.
9982e18f89SHeiko Stuebner  ******************************************************************************/
10082e18f89SHeiko Stuebner void sp_min_plat_arch_setup(void)
10182e18f89SHeiko Stuebner {
10282e18f89SHeiko Stuebner 	plat_cci_init();
10382e18f89SHeiko Stuebner 	plat_cci_enable();
10482e18f89SHeiko Stuebner 
10582e18f89SHeiko Stuebner 	plat_configure_mmu_svc_mon(BL_CODE_BASE,
10682e18f89SHeiko Stuebner 				   BL_COHERENT_RAM_END - BL_CODE_BASE,
10782e18f89SHeiko Stuebner 				   BL_CODE_BASE,
10882e18f89SHeiko Stuebner 				   BL_CODE_END,
10982e18f89SHeiko Stuebner 				   BL_COHERENT_RAM_BASE,
11082e18f89SHeiko Stuebner 				   BL_COHERENT_RAM_END);
11182e18f89SHeiko Stuebner }
11282e18f89SHeiko Stuebner 
11382e18f89SHeiko Stuebner void sp_min_plat_fiq_handler(uint32_t id)
11482e18f89SHeiko Stuebner {
11582e18f89SHeiko Stuebner 	VERBOSE("[sp_min] interrupt #%d\n", id);
11682e18f89SHeiko Stuebner }
117