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