xref: /rk3399_ARM-atf/plat/intel/soc/common/socfpga_image_load.c (revision b3d28508427225f41d55fa3b10fe4f1f1dfbd238)
1d8820789SHadi Asyrafi /*
2d8820789SHadi Asyrafi  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*b3d28508SSieu Mun Tang  * Copyright (c) 2024, Altera Corporation. All rights reserved.
4d8820789SHadi Asyrafi  *
5d8820789SHadi Asyrafi  * SPDX-License-Identifier: BSD-3-Clause
6d8820789SHadi Asyrafi  */
7d8820789SHadi Asyrafi 
8d8820789SHadi Asyrafi #include <common/desc_image_load.h>
9d8820789SHadi Asyrafi 
10d8820789SHadi Asyrafi /*******************************************************************************
11d8820789SHadi Asyrafi  * This function flushes the data structures so that they are visible
12d8820789SHadi Asyrafi  * in memory for the next BL image.
13d8820789SHadi Asyrafi  ******************************************************************************/
14d8820789SHadi Asyrafi void plat_flush_next_bl_params(void)
15d8820789SHadi Asyrafi {
16*b3d28508SSieu Mun Tang 	/*
17*b3d28508SSieu Mun Tang 	 * We cannot flush these descriptors on the Agilex5 platform,
18*b3d28508SSieu Mun Tang 	 * since the BL2 runs on the OCRAM and this OCRAM is not cache coherent.
19*b3d28508SSieu Mun Tang 	 */
20*b3d28508SSieu Mun Tang #if PLATFORM_MODEL != PLAT_SOCFPGA_AGILEX5
21d8820789SHadi Asyrafi 	flush_bl_params_desc();
22*b3d28508SSieu Mun Tang #endif
23d8820789SHadi Asyrafi }
24d8820789SHadi Asyrafi 
25d8820789SHadi Asyrafi /*******************************************************************************
26d8820789SHadi Asyrafi  * This function returns the list of loadable images.
27d8820789SHadi Asyrafi  ******************************************************************************/
28d8820789SHadi Asyrafi bl_load_info_t *plat_get_bl_image_load_info(void)
29d8820789SHadi Asyrafi {
30d8820789SHadi Asyrafi 	return get_bl_load_info_from_mem_params_desc();
31d8820789SHadi Asyrafi }
32d8820789SHadi Asyrafi 
33d8820789SHadi Asyrafi /*******************************************************************************
34d8820789SHadi Asyrafi  * This function returns the list of executable images.
35d8820789SHadi Asyrafi  ******************************************************************************/
36d8820789SHadi Asyrafi bl_params_t *plat_get_next_bl_params(void)
37d8820789SHadi Asyrafi {
3832cf34acSHadi Asyrafi 	unsigned int count;
3932cf34acSHadi Asyrafi 	unsigned int img_id = 0U;
4032cf34acSHadi Asyrafi 	unsigned int link_index = 0U;
4132cf34acSHadi Asyrafi 	bl_params_node_t *bl_exec_node = NULL;
4232cf34acSHadi Asyrafi 	bl_mem_params_node_t *desc_ptr;
4332cf34acSHadi Asyrafi 
4432cf34acSHadi Asyrafi 	/* If there is no image to start with, return NULL */
4532cf34acSHadi Asyrafi 	if (bl_mem_params_desc_num == 0U)
4632cf34acSHadi Asyrafi 		return NULL;
4732cf34acSHadi Asyrafi 
4832cf34acSHadi Asyrafi 	/* Clean next_params_info in BL image node */
4932cf34acSHadi Asyrafi 	for (count = 0U; count < bl_mem_params_desc_num; count++) {
5032cf34acSHadi Asyrafi 
5132cf34acSHadi Asyrafi 		desc_ptr = &bl_mem_params_desc_ptr[link_index];
5232cf34acSHadi Asyrafi 		bl_exec_node = &desc_ptr->params_node_mem;
5332cf34acSHadi Asyrafi 		bl_exec_node->next_params_info = NULL;
5432cf34acSHadi Asyrafi 
5532cf34acSHadi Asyrafi 		/* If no next hand-off image then break out */
5632cf34acSHadi Asyrafi 		img_id = desc_ptr->next_handoff_image_id;
5732cf34acSHadi Asyrafi 		if (img_id == INVALID_IMAGE_ID)
5832cf34acSHadi Asyrafi 			break;
5932cf34acSHadi Asyrafi 
6032cf34acSHadi Asyrafi 		/* Get the index for the next hand-off image */
6132cf34acSHadi Asyrafi 		link_index = get_bl_params_node_index(img_id);
6232cf34acSHadi Asyrafi 	}
6332cf34acSHadi Asyrafi 
64d8820789SHadi Asyrafi 	return get_next_bl_params_from_mem_params_desc();
65d8820789SHadi Asyrafi }
66