xref: /rk3399_ARM-atf/plat/arm/board/fvp/fvp_bl2_setup.c (revision 7fb9bcd846bac26d5382175fe39e0344665456f7)
13fc4124cSDan Handley /*
2e6937287SZelalem  * Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
33fc4124cSDan Handley  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
53fc4124cSDan Handley  */
63fc4124cSDan Handley 
7*7fb9bcd8SManish V Badarkhe #include <assert.h>
8*7fb9bcd8SManish V Badarkhe 
9*7fb9bcd8SManish V Badarkhe #include <common/desc_image_load.h>
1009d40e0eSAntonio Nino Diaz #include <drivers/arm/sp804_delay_timer.h>
11*7fb9bcd8SManish V Badarkhe #include <lib/fconf/fconf.h>
12*7fb9bcd8SManish V Badarkhe #include <lib/fconf/fconf_dyn_cfg_getter.h>
13*7fb9bcd8SManish V Badarkhe 
14bd9344f6SAntonio Nino Diaz #include <plat/arm/common/plat_arm.h>
1509d40e0eSAntonio Nino Diaz #include <plat/common/platform.h>
16234bc7f8SAntonio Nino Diaz #include <platform_def.h>
1709d40e0eSAntonio Nino Diaz 
183fc4124cSDan Handley #include "fvp_private.h"
193fc4124cSDan Handley 
200c306cc0SSoby Mathew void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3)
213fc4124cSDan Handley {
22cab0b5b0SSoby Mathew 	arm_bl2_early_platform_setup((uintptr_t)arg0, (meminfo_t *)arg1);
233fc4124cSDan Handley 
243fc4124cSDan Handley 	/* Initialize the platform config for future decision making */
253fc4124cSDan Handley 	fvp_config_setup();
263fc4124cSDan Handley }
27b49b3221SRyan Harkin 
28b49b3221SRyan Harkin void bl2_platform_setup(void)
29b49b3221SRyan Harkin {
30b49b3221SRyan Harkin 	arm_bl2_platform_setup();
31b49b3221SRyan Harkin 
321b597c22SAlexei Fedorov 	/* Initialize System level generic or SP804 timer */
331b597c22SAlexei Fedorov 	fvp_timer_init();
34b49b3221SRyan Harkin }
35*7fb9bcd8SManish V Badarkhe 
36*7fb9bcd8SManish V Badarkhe /*******************************************************************************
37*7fb9bcd8SManish V Badarkhe  * This function returns the list of executable images
38*7fb9bcd8SManish V Badarkhe  ******************************************************************************/
39*7fb9bcd8SManish V Badarkhe struct bl_params *plat_get_next_bl_params(void)
40*7fb9bcd8SManish V Badarkhe {
41*7fb9bcd8SManish V Badarkhe 	struct bl_params *arm_bl_params;
42*7fb9bcd8SManish V Badarkhe 
43*7fb9bcd8SManish V Badarkhe 	arm_bl_params = arm_get_next_bl_params();
44*7fb9bcd8SManish V Badarkhe 
45*7fb9bcd8SManish V Badarkhe #if __aarch64__ && !BL2_AT_EL3
46*7fb9bcd8SManish V Badarkhe 	const struct dyn_cfg_dtb_info_t *fw_config_info;
47*7fb9bcd8SManish V Badarkhe 	bl_mem_params_node_t *param_node;
48*7fb9bcd8SManish V Badarkhe 	uintptr_t fw_config_base = 0U;
49*7fb9bcd8SManish V Badarkhe 	entry_point_info_t *ep_info;
50*7fb9bcd8SManish V Badarkhe 
51*7fb9bcd8SManish V Badarkhe 	/* Get BL31 image node */
52*7fb9bcd8SManish V Badarkhe 	param_node = get_bl_mem_params_node(BL31_IMAGE_ID);
53*7fb9bcd8SManish V Badarkhe 	assert(param_node != NULL);
54*7fb9bcd8SManish V Badarkhe 
55*7fb9bcd8SManish V Badarkhe 	/* get fw_config load address */
56*7fb9bcd8SManish V Badarkhe 	fw_config_info = FCONF_GET_PROPERTY(dyn_cfg, dtb, FW_CONFIG_ID);
57*7fb9bcd8SManish V Badarkhe 	assert(fw_config_info != NULL);
58*7fb9bcd8SManish V Badarkhe 
59*7fb9bcd8SManish V Badarkhe 	fw_config_base = fw_config_info->config_addr;
60*7fb9bcd8SManish V Badarkhe 	assert(fw_config_base != 0U);
61*7fb9bcd8SManish V Badarkhe 
62*7fb9bcd8SManish V Badarkhe 	/*
63*7fb9bcd8SManish V Badarkhe 	 * Get the entry point info of BL31 image and override
64*7fb9bcd8SManish V Badarkhe 	 * arg1 of entry point info with fw_config base address
65*7fb9bcd8SManish V Badarkhe 	 */
66*7fb9bcd8SManish V Badarkhe 	ep_info = &param_node->ep_info;
67*7fb9bcd8SManish V Badarkhe 	ep_info->args.arg1 = (uint32_t)fw_config_base;
68*7fb9bcd8SManish V Badarkhe #endif /* __aarch64__ && !BL2_AT_EL3 */
69*7fb9bcd8SManish V Badarkhe 
70*7fb9bcd8SManish V Badarkhe 	return arm_bl_params;
71*7fb9bcd8SManish V Badarkhe }
72