• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024, STMicroelectronics - All Rights Reserved
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <common/bl_common.h>
8 #include <common/desc_image_load.h>
9 #include <plat/common/platform.h>
10 
11 #include <platform_def.h>
12 
13 #if STM32MP_BL33_EL1
14 #define BL33_MODE MODE_EL1
15 #else
16 #define BL33_MODE MODE_EL2
17 #endif
18 
19 /*******************************************************************************
20  * Following descriptor provides BL image/ep information that gets used
21  * by BL2 to load the images and also subset of this information is
22  * passed to next BL image. The image loading sequence is managed by
23  * populating the images in required loading order. The image execution
24  * sequence is managed by populating the `next_handoff_image_id` with
25  * the next executable image id.
26  ******************************************************************************/
27 static bl_mem_params_node_t bl2_mem_params_descs[] = {
28 #if STM32MP_DDR_FIP_IO_STORAGE
29 	/* Fill FW_DDR related information if it exists */
30 	{
31 		.image_id = DDR_FW_ID,
32 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
33 				      VERSION_2, entry_point_info_t,
34 				      SECURE | NON_EXECUTABLE),
35 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
36 				      VERSION_2, image_info_t,
37 				      0),
38 
39 		.image_info.image_base = STM32MP_DDR_FW_BASE,
40 		.image_info.image_max_size = STM32MP_DDR_FW_MAX_SIZE,
41 
42 		.next_handoff_image_id = INVALID_IMAGE_ID,
43 	},
44 #endif
45 
46 	/* Fill FW_CONFIG related information if it exists */
47 	{
48 		.image_id = FW_CONFIG_ID,
49 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
50 				      VERSION_2, entry_point_info_t,
51 				      SECURE | NON_EXECUTABLE),
52 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
53 				      VERSION_2, image_info_t,
54 				      IMAGE_ATTRIB_PLAT_SETUP),
55 
56 		.image_info.image_base = STM32MP_FW_CONFIG_BASE,
57 		.image_info.image_max_size = STM32MP_FW_CONFIG_MAX_SIZE,
58 
59 		.next_handoff_image_id = INVALID_IMAGE_ID,
60 	},
61 
62 	/* Fill BL31 related information */
63 	{
64 		.image_id = BL31_IMAGE_ID,
65 
66 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
67 				      VERSION_2, entry_point_info_t,
68 				      SECURE | EXECUTABLE | EP_FIRST_EXE),
69 
70 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS),
71 
72 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
73 				      VERSION_2, image_info_t,
74 				      IMAGE_ATTRIB_SKIP_LOADING),
75 
76 		.next_handoff_image_id = BL32_IMAGE_ID,
77 	},
78 
79 	/* Fill SoC FW config related information */
80 	{
81 		.image_id = SOC_FW_CONFIG_ID,
82 
83 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
84 				      VERSION_2, entry_point_info_t,
85 				      SECURE | NON_EXECUTABLE),
86 
87 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
88 				      VERSION_2, image_info_t,
89 				      IMAGE_ATTRIB_SKIP_LOADING),
90 
91 		.next_handoff_image_id = INVALID_IMAGE_ID,
92 	},
93 
94 	/* Fill BL32 related information */
95 	{
96 		.image_id = BL32_IMAGE_ID,
97 
98 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
99 				      VERSION_2, entry_point_info_t,
100 				      SECURE | EXECUTABLE),
101 
102 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
103 				      VERSION_2, image_info_t,
104 				      IMAGE_ATTRIB_SKIP_LOADING),
105 
106 		.next_handoff_image_id = BL33_IMAGE_ID,
107 	},
108 
109 	/* Fill BL32 external 1 image related information */
110 	{
111 		.image_id = BL32_EXTRA1_IMAGE_ID,
112 
113 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
114 				      VERSION_2, entry_point_info_t,
115 				      SECURE | NON_EXECUTABLE),
116 
117 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
118 				      VERSION_2, image_info_t,
119 				      IMAGE_ATTRIB_SKIP_LOADING),
120 
121 		.next_handoff_image_id = INVALID_IMAGE_ID,
122 	},
123 
124 	/* Fill HW_CONFIG related information if it exists */
125 	{
126 		.image_id = HW_CONFIG_ID,
127 
128 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
129 				      VERSION_2, entry_point_info_t,
130 				      NON_SECURE | NON_EXECUTABLE),
131 
132 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
133 				      VERSION_2, image_info_t,
134 				      IMAGE_ATTRIB_SKIP_LOADING),
135 
136 		.next_handoff_image_id = INVALID_IMAGE_ID,
137 	},
138 
139 	/* Fill BL33 related information */
140 	{
141 		.image_id = BL33_IMAGE_ID,
142 
143 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
144 				      VERSION_2, entry_point_info_t,
145 				      NON_SECURE | EXECUTABLE),
146 
147 		.ep_info.spsr = SPSR_64(BL33_MODE, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS),
148 
149 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
150 				      VERSION_2, image_info_t,
151 				      IMAGE_ATTRIB_SKIP_LOADING),
152 
153 		.next_handoff_image_id = INVALID_IMAGE_ID,
154 	}
155 };
156 
157 REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs)
158