135527fb4SYann Gautier /* 2a846a235SYann Gautier * Copyright (c) 2023-2024, STMicroelectronics - All Rights Reserved 335527fb4SYann Gautier * 435527fb4SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 535527fb4SYann Gautier */ 635527fb4SYann Gautier 7a846a235SYann Gautier #include <common/bl_common.h> 835527fb4SYann Gautier #include <common/desc_image_load.h> 9a846a235SYann Gautier #include <plat/common/platform.h> 10a846a235SYann Gautier 11a846a235SYann Gautier #include <platform_def.h> 1235527fb4SYann Gautier 13*c900760dSYann Gautier #if STM32MP_BL33_EL1 14*c900760dSYann Gautier #define BL33_MODE MODE_EL1 15*c900760dSYann Gautier #else 16*c900760dSYann Gautier #define BL33_MODE MODE_EL2 17*c900760dSYann Gautier #endif 18*c900760dSYann Gautier 1935527fb4SYann Gautier /******************************************************************************* 2035527fb4SYann Gautier * Following descriptor provides BL image/ep information that gets used 2135527fb4SYann Gautier * by BL2 to load the images and also subset of this information is 2235527fb4SYann Gautier * passed to next BL image. The image loading sequence is managed by 2335527fb4SYann Gautier * populating the images in required loading order. The image execution 2435527fb4SYann Gautier * sequence is managed by populating the `next_handoff_image_id` with 2535527fb4SYann Gautier * the next executable image id. 2635527fb4SYann Gautier ******************************************************************************/ 2735527fb4SYann Gautier static bl_mem_params_node_t bl2_mem_params_descs[] = { 28ae84525fSMaxime Méré #if STM32MP_DDR_FIP_IO_STORAGE 29ae84525fSMaxime Méré /* Fill FW_DDR related information if it exists */ 30ae84525fSMaxime Méré { 31ae84525fSMaxime Méré .image_id = DDR_FW_ID, 32ae84525fSMaxime Méré SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 33ae84525fSMaxime Méré VERSION_2, entry_point_info_t, 34ae84525fSMaxime Méré SECURE | NON_EXECUTABLE), 35ae84525fSMaxime Méré SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 36ae84525fSMaxime Méré VERSION_2, image_info_t, 37ae84525fSMaxime Méré 0), 38ae84525fSMaxime Méré 39ae84525fSMaxime Méré .image_info.image_base = STM32MP_DDR_FW_BASE, 40ae84525fSMaxime Méré .image_info.image_max_size = STM32MP_DDR_FW_MAX_SIZE, 41ae84525fSMaxime Méré 42ae84525fSMaxime Méré .next_handoff_image_id = INVALID_IMAGE_ID, 43ae84525fSMaxime Méré }, 44ae84525fSMaxime Méré #endif 45ae84525fSMaxime Méré 46a846a235SYann Gautier /* Fill FW_CONFIG related information if it exists */ 47a846a235SYann Gautier { 48a846a235SYann Gautier .image_id = FW_CONFIG_ID, 49a846a235SYann Gautier SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 50a846a235SYann Gautier VERSION_2, entry_point_info_t, 51a846a235SYann Gautier SECURE | NON_EXECUTABLE), 52a846a235SYann Gautier SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 53a846a235SYann Gautier VERSION_2, image_info_t, 54a846a235SYann Gautier IMAGE_ATTRIB_PLAT_SETUP), 55a846a235SYann Gautier 56a846a235SYann Gautier .image_info.image_base = STM32MP_FW_CONFIG_BASE, 57a846a235SYann Gautier .image_info.image_max_size = STM32MP_FW_CONFIG_MAX_SIZE, 58a846a235SYann Gautier 59a846a235SYann Gautier .next_handoff_image_id = INVALID_IMAGE_ID, 60a846a235SYann Gautier }, 6103020b66SYann Gautier 6203020b66SYann Gautier /* Fill BL31 related information */ 6303020b66SYann Gautier { 6403020b66SYann Gautier .image_id = BL31_IMAGE_ID, 6503020b66SYann Gautier 6603020b66SYann Gautier SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 6703020b66SYann Gautier VERSION_2, entry_point_info_t, 6803020b66SYann Gautier SECURE | EXECUTABLE | EP_FIRST_EXE), 6903020b66SYann Gautier 7003020b66SYann Gautier .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS), 7103020b66SYann Gautier 7203020b66SYann Gautier SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 7303020b66SYann Gautier VERSION_2, image_info_t, 7403020b66SYann Gautier IMAGE_ATTRIB_SKIP_LOADING), 7503020b66SYann Gautier 769a0cad39SYann Gautier .next_handoff_image_id = BL32_IMAGE_ID, 779a0cad39SYann Gautier }, 789a0cad39SYann Gautier 7927dd11dbSMaxime Méré /* Fill SoC FW config related information */ 8027dd11dbSMaxime Méré { 8127dd11dbSMaxime Méré .image_id = SOC_FW_CONFIG_ID, 8227dd11dbSMaxime Méré 8327dd11dbSMaxime Méré SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 8427dd11dbSMaxime Méré VERSION_2, entry_point_info_t, 8527dd11dbSMaxime Méré SECURE | NON_EXECUTABLE), 8627dd11dbSMaxime Méré 8727dd11dbSMaxime Méré SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 8827dd11dbSMaxime Méré VERSION_2, image_info_t, 8927dd11dbSMaxime Méré IMAGE_ATTRIB_SKIP_LOADING), 9027dd11dbSMaxime Méré 9127dd11dbSMaxime Méré .next_handoff_image_id = INVALID_IMAGE_ID, 9227dd11dbSMaxime Méré }, 9327dd11dbSMaxime Méré 949a0cad39SYann Gautier /* Fill BL32 related information */ 959a0cad39SYann Gautier { 969a0cad39SYann Gautier .image_id = BL32_IMAGE_ID, 979a0cad39SYann Gautier 989a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 999a0cad39SYann Gautier VERSION_2, entry_point_info_t, 1009a0cad39SYann Gautier SECURE | EXECUTABLE), 1019a0cad39SYann Gautier 1029a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1039a0cad39SYann Gautier VERSION_2, image_info_t, 1049a0cad39SYann Gautier IMAGE_ATTRIB_SKIP_LOADING), 1059a0cad39SYann Gautier 1069a0cad39SYann Gautier .next_handoff_image_id = BL33_IMAGE_ID, 1079a0cad39SYann Gautier }, 1089a0cad39SYann Gautier 1099a0cad39SYann Gautier /* Fill BL32 external 1 image related information */ 1109a0cad39SYann Gautier { 1119a0cad39SYann Gautier .image_id = BL32_EXTRA1_IMAGE_ID, 1129a0cad39SYann Gautier 1139a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 1149a0cad39SYann Gautier VERSION_2, entry_point_info_t, 1159a0cad39SYann Gautier SECURE | NON_EXECUTABLE), 1169a0cad39SYann Gautier 1179a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1189a0cad39SYann Gautier VERSION_2, image_info_t, 1199a0cad39SYann Gautier IMAGE_ATTRIB_SKIP_LOADING), 1209a0cad39SYann Gautier 12103020b66SYann Gautier .next_handoff_image_id = INVALID_IMAGE_ID, 12203020b66SYann Gautier }, 1239a0cad39SYann Gautier 1249a0cad39SYann Gautier /* Fill HW_CONFIG related information if it exists */ 1259a0cad39SYann Gautier { 1269a0cad39SYann Gautier .image_id = HW_CONFIG_ID, 1279a0cad39SYann Gautier 1289a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 1299a0cad39SYann Gautier VERSION_2, entry_point_info_t, 1309a0cad39SYann Gautier NON_SECURE | NON_EXECUTABLE), 1319a0cad39SYann Gautier 1329a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 1339a0cad39SYann Gautier VERSION_2, image_info_t, 1349a0cad39SYann Gautier IMAGE_ATTRIB_SKIP_LOADING), 1359a0cad39SYann Gautier 1369a0cad39SYann Gautier .next_handoff_image_id = INVALID_IMAGE_ID, 1379a0cad39SYann Gautier }, 1389a0cad39SYann Gautier 1399a0cad39SYann Gautier /* Fill BL33 related information */ 1409a0cad39SYann Gautier { 1419a0cad39SYann Gautier .image_id = BL33_IMAGE_ID, 1429a0cad39SYann Gautier 1439a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 1449a0cad39SYann Gautier VERSION_2, entry_point_info_t, 1459a0cad39SYann Gautier NON_SECURE | EXECUTABLE), 1469a0cad39SYann Gautier 147*c900760dSYann Gautier .ep_info.spsr = SPSR_64(BL33_MODE, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS), 1489a0cad39SYann Gautier 1499a0cad39SYann Gautier SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1509a0cad39SYann Gautier VERSION_2, image_info_t, 1519a0cad39SYann Gautier IMAGE_ATTRIB_SKIP_LOADING), 1529a0cad39SYann Gautier 1539a0cad39SYann Gautier .next_handoff_image_id = INVALID_IMAGE_ID, 1549a0cad39SYann Gautier } 15535527fb4SYann Gautier }; 15635527fb4SYann Gautier 15735527fb4SYann Gautier REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 158