xref: /rk3399_ARM-atf/plat/rockchip/common/sp_min_plat_setup.c (revision 98964f0523d6c5dc5ee8e6bb8212ffc7df5efe14)
182e18f89SHeiko Stuebner /*
23e02c743SJulius 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>
143e02c743SJulius 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/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
43c1185ffdSJulius Werner void params_early_setup(u_register_t 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 {
55*98964f05SAndre Przywara 	static console_t console;
5682e18f89SHeiko Stuebner 
57c1185ffdSJulius Werner 	params_early_setup(arg1);
5882e18f89SHeiko Stuebner 
59dd4a0d16SHeiko Stuebner 	if (rockchip_get_uart_base() != 0)
60dd4a0d16SHeiko Stuebner 		console_16550_register(rockchip_get_uart_base(),
61dd4a0d16SHeiko Stuebner 				       rockchip_get_uart_clock(),
6230970e0fSHeiko Stuebner 				       rockchip_get_uart_baudrate(), &console);
63dd4a0d16SHeiko Stuebner 
6482e18f89SHeiko Stuebner 	VERBOSE("sp_min_setup\n");
6582e18f89SHeiko Stuebner 
663e02c743SJulius Werner 	bl31_params_parse_helper(arg0, NULL, &bl33_ep_info);
6782e18f89SHeiko Stuebner }
6882e18f89SHeiko Stuebner 
6982e18f89SHeiko Stuebner /*******************************************************************************
7082e18f89SHeiko Stuebner  * Perform any sp_min platform setup code
7182e18f89SHeiko Stuebner  ******************************************************************************/
7282e18f89SHeiko Stuebner void sp_min_platform_setup(void)
7382e18f89SHeiko Stuebner {
7482e18f89SHeiko Stuebner 	generic_delay_timer_init();
7582e18f89SHeiko Stuebner 	plat_rockchip_soc_init();
7682e18f89SHeiko Stuebner 
7782e18f89SHeiko Stuebner 	/* Initialize the gic cpu and distributor interfaces */
7882e18f89SHeiko Stuebner 	plat_rockchip_gic_driver_init();
7982e18f89SHeiko Stuebner 	plat_rockchip_gic_init();
8082e18f89SHeiko Stuebner 	plat_rockchip_pmu_init();
8182e18f89SHeiko Stuebner }
8282e18f89SHeiko Stuebner 
8382e18f89SHeiko Stuebner /*******************************************************************************
8482e18f89SHeiko Stuebner  * Perform the very early platform specific architectural setup here. At the
8582e18f89SHeiko Stuebner  * moment this is only intializes the mmu in a quick and dirty way.
8682e18f89SHeiko Stuebner  ******************************************************************************/
8782e18f89SHeiko Stuebner void sp_min_plat_arch_setup(void)
8882e18f89SHeiko Stuebner {
8982e18f89SHeiko Stuebner 	plat_cci_init();
9082e18f89SHeiko Stuebner 	plat_cci_enable();
9182e18f89SHeiko Stuebner 
9282e18f89SHeiko Stuebner 	plat_configure_mmu_svc_mon(BL_CODE_BASE,
9382e18f89SHeiko Stuebner 				   BL_COHERENT_RAM_END - BL_CODE_BASE,
9482e18f89SHeiko Stuebner 				   BL_CODE_BASE,
9582e18f89SHeiko Stuebner 				   BL_CODE_END,
9682e18f89SHeiko Stuebner 				   BL_COHERENT_RAM_BASE,
9782e18f89SHeiko Stuebner 				   BL_COHERENT_RAM_END);
9882e18f89SHeiko Stuebner }
9982e18f89SHeiko Stuebner 
10082e18f89SHeiko Stuebner void sp_min_plat_fiq_handler(uint32_t id)
10182e18f89SHeiko Stuebner {
10282e18f89SHeiko Stuebner 	VERBOSE("[sp_min] interrupt #%d\n", id);
10382e18f89SHeiko Stuebner }
104