blob: 8fe8c337267e28ed8649456007307fe569c869a4 [file] [log] [blame]
Louis Mayencourtbadcac82019-10-24 15:18:46 +01001/*
Rob Hughesa45a2dd2023-01-20 10:43:41 +00002 * Copyright (c) 2019-2023, ARM Limited. All rights reserved.
Louis Mayencourtbadcac82019-10-24 15:18:46 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <assert.h>
8
9#include <common/debug.h>
10#include <common/fdt_wrappers.h>
11#include <drivers/io/io_storage.h>
Manish V Badarkhedd6f2522021-02-22 17:30:17 +000012#include <drivers/partition/partition.h>
Louis Mayencourtbadcac82019-10-24 15:18:46 +010013#include <lib/object_pool.h>
14#include <libfdt.h>
15#include <tools_share/firmware_image_package.h>
16
17#include <plat/arm/common/arm_fconf_getter.h>
18#include <plat/arm/common/arm_fconf_io_storage.h>
19#include <platform_def.h>
20
Manish V Badarkhed2f0a7a2021-06-25 23:43:33 +010021#if PSA_FWU_SUPPORT
22/* metadata entry details */
23static io_block_spec_t fwu_metadata_spec;
24#endif /* PSA_FWU_SUPPORT */
25
Manish V Badarkhedd6f2522021-02-22 17:30:17 +000026io_block_spec_t fip_block_spec = {
27/*
28 * This is fixed FIP address used by BL1, BL2 loads partition table
29 * to get FIP address.
30 */
31#if ARM_GPT_SUPPORT
32 .offset = PLAT_ARM_FLASH_IMAGE_BASE + PLAT_ARM_FIP_OFFSET_IN_GPT,
33#else
Manish V Badarkhe443ccbc2021-04-22 11:13:21 +010034 .offset = PLAT_ARM_FLASH_IMAGE_BASE,
Manish V Badarkhedd6f2522021-02-22 17:30:17 +000035#endif /* ARM_GPT_SUPPORT */
Manish V Badarkhe443ccbc2021-04-22 11:13:21 +010036 .length = PLAT_ARM_FLASH_IMAGE_MAX_SIZE
Louis Mayencourtbadcac82019-10-24 15:18:46 +010037};
38
Manish V Badarkhedd6f2522021-02-22 17:30:17 +000039#if ARM_GPT_SUPPORT
40static const io_block_spec_t gpt_spec = {
41 .offset = PLAT_ARM_FLASH_IMAGE_BASE,
42 /*
43 * PLAT_PARTITION_BLOCK_SIZE = 512
44 * PLAT_PARTITION_MAX_ENTRIES = 128
45 * each sector has 4 partition entries, and there are
46 * 2 reserved sectors i.e. protective MBR and primary
47 * GPT header hence length gets calculated as,
48 * length = 512 * (128/4 + 2)
49 */
50 .length = PLAT_PARTITION_BLOCK_SIZE *
51 (PLAT_PARTITION_MAX_ENTRIES / 4 + 2),
52};
Govindraj Rajad2706562023-10-16 09:30:16 -050053
54/*
55 * length will be assigned at runtime based on MBR header data.
56 * Backup GPT Header is present in Last LBA-1 and its entries
57 * are last 32 blocks starts at LBA-33, On runtime update these
58 * before device usage. Update offset to beginning LBA-33 and
59 * length to LBA-33.
60 */
61static io_block_spec_t bkup_gpt_spec = {
62 .offset = PLAT_ARM_FLASH_IMAGE_BASE,
63 .length = 0,
64};
Manish V Badarkhedd6f2522021-02-22 17:30:17 +000065#endif /* ARM_GPT_SUPPORT */
Louis Mayencourtbadcac82019-10-24 15:18:46 +010066
67const io_uuid_spec_t arm_uuid_spec[MAX_NUMBER_IDS] = {
68 [BL2_IMAGE_ID] = {UUID_TRUSTED_BOOT_FIRMWARE_BL2},
69 [TB_FW_CONFIG_ID] = {UUID_TB_FW_CONFIG},
Louis Mayencourt244027d2020-06-11 21:15:15 +010070 [FW_CONFIG_ID] = {UUID_FW_CONFIG},
Louis Mayencourt6b232d92020-02-28 16:57:30 +000071#if !ARM_IO_IN_DTB
72 [SCP_BL2_IMAGE_ID] = {UUID_SCP_FIRMWARE_SCP_BL2},
73 [BL31_IMAGE_ID] = {UUID_EL3_RUNTIME_FIRMWARE_BL31},
74 [BL32_IMAGE_ID] = {UUID_SECURE_PAYLOAD_BL32},
75 [BL32_EXTRA1_IMAGE_ID] = {UUID_SECURE_PAYLOAD_BL32_EXTRA1},
76 [BL32_EXTRA2_IMAGE_ID] = {UUID_SECURE_PAYLOAD_BL32_EXTRA2},
77 [BL33_IMAGE_ID] = {UUID_NON_TRUSTED_FIRMWARE_BL33},
78 [HW_CONFIG_ID] = {UUID_HW_CONFIG},
79 [SOC_FW_CONFIG_ID] = {UUID_SOC_FW_CONFIG},
80 [TOS_FW_CONFIG_ID] = {UUID_TOS_FW_CONFIG},
81 [NT_FW_CONFIG_ID] = {UUID_NT_FW_CONFIG},
Zelalem Aweke96c0bab2021-07-11 18:39:39 -050082 [RMM_IMAGE_ID] = {UUID_REALM_MONITOR_MGMT_FIRMWARE},
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +020083#if ETHOSN_NPU_TZMP1
84 [ETHOSN_NPU_FW_IMAGE_ID] = {UUID_ETHOSN_FW},
85#endif /* ETHOSN_NPU_TZMP1 */
Louis Mayencourt6b232d92020-02-28 16:57:30 +000086#endif /* ARM_IO_IN_DTB */
Louis Mayencourtbadcac82019-10-24 15:18:46 +010087#if TRUSTED_BOARD_BOOT
88 [TRUSTED_BOOT_FW_CERT_ID] = {UUID_TRUSTED_BOOT_FW_CERT},
Louis Mayencourt6b232d92020-02-28 16:57:30 +000089#if !ARM_IO_IN_DTB
laurenw-arm23075462022-04-21 17:03:30 -050090 [CCA_CONTENT_CERT_ID] = {UUID_CCA_CONTENT_CERT},
91 [CORE_SWD_KEY_CERT_ID] = {UUID_CORE_SWD_KEY_CERT},
92 [PLAT_KEY_CERT_ID] = {UUID_PLAT_KEY_CERT},
Louis Mayencourt6b232d92020-02-28 16:57:30 +000093 [TRUSTED_KEY_CERT_ID] = {UUID_TRUSTED_KEY_CERT},
94 [SCP_FW_KEY_CERT_ID] = {UUID_SCP_FW_KEY_CERT},
95 [SOC_FW_KEY_CERT_ID] = {UUID_SOC_FW_KEY_CERT},
96 [TRUSTED_OS_FW_KEY_CERT_ID] = {UUID_TRUSTED_OS_FW_KEY_CERT},
97 [NON_TRUSTED_FW_KEY_CERT_ID] = {UUID_NON_TRUSTED_FW_KEY_CERT},
98 [SCP_FW_CONTENT_CERT_ID] = {UUID_SCP_FW_CONTENT_CERT},
99 [SOC_FW_CONTENT_CERT_ID] = {UUID_SOC_FW_CONTENT_CERT},
100 [TRUSTED_OS_FW_CONTENT_CERT_ID] = {UUID_TRUSTED_OS_FW_CONTENT_CERT},
101 [NON_TRUSTED_FW_CONTENT_CERT_ID] = {UUID_NON_TRUSTED_FW_CONTENT_CERT},
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100102#if defined(SPD_spmd)
Manish Pandeyd07d0172020-07-23 16:54:30 +0100103 [SIP_SP_CONTENT_CERT_ID] = {UUID_SIP_SECURE_PARTITION_CONTENT_CERT},
Manish Pandeyaff80752020-07-31 16:15:16 +0100104 [PLAT_SP_CONTENT_CERT_ID] = {UUID_PLAT_SECURE_PARTITION_CONTENT_CERT},
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100105#endif
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200106#if ETHOSN_NPU_TZMP1
107 [ETHOSN_NPU_FW_KEY_CERT_ID] = {UUID_ETHOSN_FW_KEY_CERTIFICATE},
108 [ETHOSN_NPU_FW_CONTENT_CERT_ID] = {UUID_ETHOSN_FW_CONTENT_CERTIFICATE},
109#endif /* ETHOSN_NPU_TZMP1 */
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000110#endif /* ARM_IO_IN_DTB */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100111#endif /* TRUSTED_BOARD_BOOT */
112};
113
114/* By default, ARM platforms load images from the FIP */
115struct plat_io_policy policies[MAX_NUMBER_IDS] = {
Manish V Badarkhedd6f2522021-02-22 17:30:17 +0000116#if ARM_GPT_SUPPORT
117 [GPT_IMAGE_ID] = {
118 &memmap_dev_handle,
119 (uintptr_t)&gpt_spec,
120 open_memmap
121 },
Govindraj Rajad2706562023-10-16 09:30:16 -0500122 [BKUP_GPT_IMAGE_ID] = {
123 &memmap_dev_handle,
124 (uintptr_t)&bkup_gpt_spec,
125 open_memmap
126 },
Manish V Badarkhedd6f2522021-02-22 17:30:17 +0000127#endif /* ARM_GPT_SUPPORT */
Manish V Badarkhed2f0a7a2021-06-25 23:43:33 +0100128#if PSA_FWU_SUPPORT
129 [FWU_METADATA_IMAGE_ID] = {
130 &memmap_dev_handle,
131 /* filled runtime from partition information */
132 (uintptr_t)&fwu_metadata_spec,
133 open_memmap
134 },
135 [BKUP_FWU_METADATA_IMAGE_ID] = {
136 &memmap_dev_handle,
137 /* filled runtime from partition information */
138 (uintptr_t)&fwu_metadata_spec,
139 open_memmap
140 },
141#endif /* PSA_FWU_SUPPORT */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100142 [FIP_IMAGE_ID] = {
143 &memmap_dev_handle,
144 (uintptr_t)&fip_block_spec,
145 open_memmap
146 },
147 [BL2_IMAGE_ID] = {
148 &fip_dev_handle,
149 (uintptr_t)&arm_uuid_spec[BL2_IMAGE_ID],
150 open_fip
151 },
152 [TB_FW_CONFIG_ID] = {
153 &fip_dev_handle,
154 (uintptr_t)&arm_uuid_spec[TB_FW_CONFIG_ID],
155 open_fip
156 },
Louis Mayencourt244027d2020-06-11 21:15:15 +0100157 [FW_CONFIG_ID] = {
158 &fip_dev_handle,
159 (uintptr_t)&arm_uuid_spec[FW_CONFIG_ID],
160 open_fip
161 },
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000162#if !ARM_IO_IN_DTB
163 [SCP_BL2_IMAGE_ID] = {
164 &fip_dev_handle,
165 (uintptr_t)&arm_uuid_spec[SCP_BL2_IMAGE_ID],
166 open_fip
167 },
168 [BL31_IMAGE_ID] = {
169 &fip_dev_handle,
170 (uintptr_t)&arm_uuid_spec[BL31_IMAGE_ID],
171 open_fip
172 },
173 [BL32_IMAGE_ID] = {
174 &fip_dev_handle,
175 (uintptr_t)&arm_uuid_spec[BL32_IMAGE_ID],
176 open_fip
177 },
178 [BL32_EXTRA1_IMAGE_ID] = {
179 &fip_dev_handle,
180 (uintptr_t)&arm_uuid_spec[BL32_EXTRA1_IMAGE_ID],
181 open_fip
182 },
183 [BL32_EXTRA2_IMAGE_ID] = {
184 &fip_dev_handle,
185 (uintptr_t)&arm_uuid_spec[BL32_EXTRA2_IMAGE_ID],
186 open_fip
187 },
188 [BL33_IMAGE_ID] = {
189 &fip_dev_handle,
190 (uintptr_t)&arm_uuid_spec[BL33_IMAGE_ID],
191 open_fip
192 },
Zelalem Aweke96c0bab2021-07-11 18:39:39 -0500193 [RMM_IMAGE_ID] = {
194 &fip_dev_handle,
195 (uintptr_t)&arm_uuid_spec[RMM_IMAGE_ID],
196 open_fip
197 },
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000198 [HW_CONFIG_ID] = {
199 &fip_dev_handle,
200 (uintptr_t)&arm_uuid_spec[HW_CONFIG_ID],
201 open_fip
202 },
203 [SOC_FW_CONFIG_ID] = {
204 &fip_dev_handle,
205 (uintptr_t)&arm_uuid_spec[SOC_FW_CONFIG_ID],
206 open_fip
207 },
208 [TOS_FW_CONFIG_ID] = {
209 &fip_dev_handle,
210 (uintptr_t)&arm_uuid_spec[TOS_FW_CONFIG_ID],
211 open_fip
212 },
213 [NT_FW_CONFIG_ID] = {
214 &fip_dev_handle,
215 (uintptr_t)&arm_uuid_spec[NT_FW_CONFIG_ID],
216 open_fip
217 },
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200218#if ETHOSN_NPU_TZMP1
219 [ETHOSN_NPU_FW_IMAGE_ID] = {
Rob Hughes9a2177a2023-01-17 16:10:26 +0000220 &fip_dev_handle,
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200221 (uintptr_t)&arm_uuid_spec[ETHOSN_NPU_FW_IMAGE_ID],
Rob Hughes9a2177a2023-01-17 16:10:26 +0000222 open_fip
223 },
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200224#endif /* ETHOSN_NPU_TZMP1 */
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000225#endif /* ARM_IO_IN_DTB */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100226#if TRUSTED_BOARD_BOOT
227 [TRUSTED_BOOT_FW_CERT_ID] = {
228 &fip_dev_handle,
229 (uintptr_t)&arm_uuid_spec[TRUSTED_BOOT_FW_CERT_ID],
230 open_fip
231 },
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000232#if !ARM_IO_IN_DTB
laurenw-arm23075462022-04-21 17:03:30 -0500233 [CCA_CONTENT_CERT_ID] = {
234 &fip_dev_handle,
235 (uintptr_t)&arm_uuid_spec[CCA_CONTENT_CERT_ID],
236 open_fip
237 },
238 [CORE_SWD_KEY_CERT_ID] = {
239 &fip_dev_handle,
240 (uintptr_t)&arm_uuid_spec[CORE_SWD_KEY_CERT_ID],
241 open_fip
242 },
243 [PLAT_KEY_CERT_ID] = {
244 &fip_dev_handle,
245 (uintptr_t)&arm_uuid_spec[PLAT_KEY_CERT_ID],
246 open_fip
247 },
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000248 [TRUSTED_KEY_CERT_ID] = {
249 &fip_dev_handle,
250 (uintptr_t)&arm_uuid_spec[TRUSTED_KEY_CERT_ID],
251 open_fip
252 },
253 [SCP_FW_KEY_CERT_ID] = {
254 &fip_dev_handle,
255 (uintptr_t)&arm_uuid_spec[SCP_FW_KEY_CERT_ID],
256 open_fip
257 },
258 [SOC_FW_KEY_CERT_ID] = {
259 &fip_dev_handle,
260 (uintptr_t)&arm_uuid_spec[SOC_FW_KEY_CERT_ID],
261 open_fip
262 },
263 [TRUSTED_OS_FW_KEY_CERT_ID] = {
264 &fip_dev_handle,
265 (uintptr_t)&arm_uuid_spec[TRUSTED_OS_FW_KEY_CERT_ID],
266 open_fip
267 },
268 [NON_TRUSTED_FW_KEY_CERT_ID] = {
269 &fip_dev_handle,
270 (uintptr_t)&arm_uuid_spec[NON_TRUSTED_FW_KEY_CERT_ID],
271 open_fip
272 },
273 [SCP_FW_CONTENT_CERT_ID] = {
274 &fip_dev_handle,
275 (uintptr_t)&arm_uuid_spec[SCP_FW_CONTENT_CERT_ID],
276 open_fip
277 },
278 [SOC_FW_CONTENT_CERT_ID] = {
279 &fip_dev_handle,
280 (uintptr_t)&arm_uuid_spec[SOC_FW_CONTENT_CERT_ID],
281 open_fip
282 },
283 [TRUSTED_OS_FW_CONTENT_CERT_ID] = {
284 &fip_dev_handle,
285 (uintptr_t)&arm_uuid_spec[TRUSTED_OS_FW_CONTENT_CERT_ID],
286 open_fip
287 },
288 [NON_TRUSTED_FW_CONTENT_CERT_ID] = {
289 &fip_dev_handle,
290 (uintptr_t)&arm_uuid_spec[NON_TRUSTED_FW_CONTENT_CERT_ID],
291 open_fip
292 },
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100293#if defined(SPD_spmd)
Manish Pandeyd07d0172020-07-23 16:54:30 +0100294 [SIP_SP_CONTENT_CERT_ID] = {
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100295 &fip_dev_handle,
Manish Pandeyd07d0172020-07-23 16:54:30 +0100296 (uintptr_t)&arm_uuid_spec[SIP_SP_CONTENT_CERT_ID],
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100297 open_fip
298 },
Manish Pandeyaff80752020-07-31 16:15:16 +0100299 [PLAT_SP_CONTENT_CERT_ID] = {
300 &fip_dev_handle,
301 (uintptr_t)&arm_uuid_spec[PLAT_SP_CONTENT_CERT_ID],
302 open_fip
303 },
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100304#endif
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200305#if ETHOSN_NPU_TZMP1
306 [ETHOSN_NPU_FW_KEY_CERT_ID] = {
Rob Hughes9a2177a2023-01-17 16:10:26 +0000307 &fip_dev_handle,
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200308 (uintptr_t)&arm_uuid_spec[ETHOSN_NPU_FW_KEY_CERT_ID],
Rob Hughes9a2177a2023-01-17 16:10:26 +0000309 open_fip
310 },
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200311 [ETHOSN_NPU_FW_CONTENT_CERT_ID] = {
Rob Hughes9a2177a2023-01-17 16:10:26 +0000312 &fip_dev_handle,
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200313 (uintptr_t)&arm_uuid_spec[ETHOSN_NPU_FW_CONTENT_CERT_ID],
Rob Hughes9a2177a2023-01-17 16:10:26 +0000314 open_fip
315 },
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200316#endif /* ETHOSN_NPU_TZMP1 */
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000317#endif /* ARM_IO_IN_DTB */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100318#endif /* TRUSTED_BOARD_BOOT */
319};
320
321#ifdef IMAGE_BL2
322
Rob Hughesa45a2dd2023-01-20 10:43:41 +0000323#define FCONF_ARM_IO_UUID_NUM_BASE U(10)
324
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200325#if ETHOSN_NPU_TZMP1
Rob Hughes9a2177a2023-01-17 16:10:26 +0000326#define FCONF_ARM_IO_UUID_NUM_NPU U(1)
327#else
328#define FCONF_ARM_IO_UUID_NUM_NPU U(0)
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200329#endif /* ETHOSN_NPU_TZMP1 */
Rob Hughes9a2177a2023-01-17 16:10:26 +0000330
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100331#if TRUSTED_BOARD_BOOT
Rob Hughesa45a2dd2023-01-20 10:43:41 +0000332#define FCONF_ARM_IO_UUID_NUM_TBB U(12)
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100333#else
Rob Hughesa45a2dd2023-01-20 10:43:41 +0000334#define FCONF_ARM_IO_UUID_NUM_TBB U(0)
335#endif /* TRUSTED_BOARD_BOOT */
336
337#if TRUSTED_BOARD_BOOT && defined(SPD_spmd)
338#define FCONF_ARM_IO_UUID_NUM_SPD U(2)
339#else
340#define FCONF_ARM_IO_UUID_NUM_SPD U(0)
341#endif /* TRUSTED_BOARD_BOOT && defined(SPD_spmd) */
342
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200343#if TRUSTED_BOARD_BOOT && ETHOSN_NPU_TZMP1
Rob Hughes9a2177a2023-01-17 16:10:26 +0000344#define FCONF_ARM_IO_UUID_NUM_NPU_TBB U(2)
345#else
346#define FCONF_ARM_IO_UUID_NUM_NPU_TBB U(0)
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200347#endif /* TRUSTED_BOARD_BOOT && ETHOSN_NPU_TZMP1 */
Rob Hughes9a2177a2023-01-17 16:10:26 +0000348
Rob Hughesa45a2dd2023-01-20 10:43:41 +0000349#define FCONF_ARM_IO_UUID_NUMBER FCONF_ARM_IO_UUID_NUM_BASE + \
Rob Hughes9a2177a2023-01-17 16:10:26 +0000350 FCONF_ARM_IO_UUID_NUM_NPU + \
351 FCONF_ARM_IO_UUID_NUM_TBB + \
352 FCONF_ARM_IO_UUID_NUM_SPD + \
353 FCONF_ARM_IO_UUID_NUM_NPU_TBB
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100354
355static io_uuid_spec_t fconf_arm_uuids[FCONF_ARM_IO_UUID_NUMBER];
356static OBJECT_POOL_ARRAY(fconf_arm_uuids_pool, fconf_arm_uuids);
357
358struct policies_load_info {
359 unsigned int image_id;
360 const char *name;
361};
362
363/* image id to property name table */
364static const struct policies_load_info load_info[FCONF_ARM_IO_UUID_NUMBER] = {
365 {SCP_BL2_IMAGE_ID, "scp_bl2_uuid"},
366 {BL31_IMAGE_ID, "bl31_uuid"},
367 {BL32_IMAGE_ID, "bl32_uuid"},
368 {BL32_EXTRA1_IMAGE_ID, "bl32_extra1_uuid"},
369 {BL32_EXTRA2_IMAGE_ID, "bl32_extra2_uuid"},
370 {BL33_IMAGE_ID, "bl33_uuid"},
371 {HW_CONFIG_ID, "hw_cfg_uuid"},
372 {SOC_FW_CONFIG_ID, "soc_fw_cfg_uuid"},
373 {TOS_FW_CONFIG_ID, "tos_fw_cfg_uuid"},
374 {NT_FW_CONFIG_ID, "nt_fw_cfg_uuid"},
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200375#if ETHOSN_NPU_TZMP1
376 {ETHOSN_NPU_FW_IMAGE_ID, "ethosn_npu_fw_uuid"},
377#endif /* ETHOSN_NPU_TZMP1 */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100378#if TRUSTED_BOARD_BOOT
laurenw-arm23075462022-04-21 17:03:30 -0500379 {CCA_CONTENT_CERT_ID, "cca_cert_uuid"},
380 {CORE_SWD_KEY_CERT_ID, "core_swd_cert_uuid"},
381 {PLAT_KEY_CERT_ID, "plat_cert_uuid"},
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100382 {TRUSTED_KEY_CERT_ID, "t_key_cert_uuid"},
383 {SCP_FW_KEY_CERT_ID, "scp_fw_key_uuid"},
384 {SOC_FW_KEY_CERT_ID, "soc_fw_key_uuid"},
385 {TRUSTED_OS_FW_KEY_CERT_ID, "tos_fw_key_cert_uuid"},
386 {NON_TRUSTED_FW_KEY_CERT_ID, "nt_fw_key_cert_uuid"},
387 {SCP_FW_CONTENT_CERT_ID, "scp_fw_content_cert_uuid"},
388 {SOC_FW_CONTENT_CERT_ID, "soc_fw_content_cert_uuid"},
389 {TRUSTED_OS_FW_CONTENT_CERT_ID, "tos_fw_content_cert_uuid"},
390 {NON_TRUSTED_FW_CONTENT_CERT_ID, "nt_fw_content_cert_uuid"},
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100391#if defined(SPD_spmd)
Manish Pandeyd07d0172020-07-23 16:54:30 +0100392 {SIP_SP_CONTENT_CERT_ID, "sip_sp_content_cert_uuid"},
Manish Pandeyaff80752020-07-31 16:15:16 +0100393 {PLAT_SP_CONTENT_CERT_ID, "plat_sp_content_cert_uuid"},
Manish Pandey5f8e1a02020-05-27 22:40:10 +0100394#endif
Rajasekaran Kalidoss85999a82023-05-08 14:55:13 +0200395#if ETHOSN_NPU_TZMP1
396 {ETHOSN_NPU_FW_KEY_CERT_ID, "ethosn_npu_fw_key_cert_uuid"},
397 {ETHOSN_NPU_FW_CONTENT_CERT_ID, "ethosn_npu_fw_content_cert_uuid"},
398#endif /* ETHOSN_NPU_TZMP1 */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100399#endif /* TRUSTED_BOARD_BOOT */
400};
401
402int fconf_populate_arm_io_policies(uintptr_t config)
403{
404 int err, node;
405 unsigned int i;
406
407 union uuid_helper_t uuid_helper;
408 io_uuid_spec_t *uuid_ptr;
409
410 /* As libfdt uses void *, we can't avoid this cast */
411 const void *dtb = (void *)config;
412
413 /* Assert the node offset point to "arm,io-fip-handle" compatible property */
414 const char *compatible_str = "arm,io-fip-handle";
415 node = fdt_node_offset_by_compatible(dtb, -1, compatible_str);
416 if (node < 0) {
417 ERROR("FCONF: Can't find %s compatible in dtb\n", compatible_str);
418 return node;
419 }
420
421 /* Locate the uuid cells and read the value for all the load info uuid */
422 for (i = 0; i < FCONF_ARM_IO_UUID_NUMBER; i++) {
423 uuid_ptr = pool_alloc(&fconf_arm_uuids_pool);
David Horstmannb2df4c12021-04-08 14:50:21 +0100424 err = fdtw_read_uuid(dtb, node, load_info[i].name, 16,
425 (uint8_t *)&uuid_helper);
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100426 if (err < 0) {
427 WARN("FCONF: Read cell failed for %s\n", load_info[i].name);
428 return err;
429 }
430
David Horstmannb2df4c12021-04-08 14:50:21 +0100431 VERBOSE("FCONF: arm-io_policies.%s cell found with value = "
432 "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100433 load_info[i].name,
David Horstmannb2df4c12021-04-08 14:50:21 +0100434 uuid_helper.uuid_struct.time_low[0], uuid_helper.uuid_struct.time_low[1],
435 uuid_helper.uuid_struct.time_low[2], uuid_helper.uuid_struct.time_low[3],
436 uuid_helper.uuid_struct.time_mid[0], uuid_helper.uuid_struct.time_mid[1],
437 uuid_helper.uuid_struct.time_hi_and_version[0],
438 uuid_helper.uuid_struct.time_hi_and_version[1],
439 uuid_helper.uuid_struct.clock_seq_hi_and_reserved,
440 uuid_helper.uuid_struct.clock_seq_low,
441 uuid_helper.uuid_struct.node[0], uuid_helper.uuid_struct.node[1],
442 uuid_helper.uuid_struct.node[2], uuid_helper.uuid_struct.node[3],
443 uuid_helper.uuid_struct.node[4], uuid_helper.uuid_struct.node[5]);
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100444
445 uuid_ptr->uuid = uuid_helper.uuid_struct;
446 policies[load_info[i].image_id].image_spec = (uintptr_t)uuid_ptr;
447 policies[load_info[i].image_id].dev_handle = &fip_dev_handle;
448 policies[load_info[i].image_id].check = open_fip;
449 }
450 return 0;
451}
452
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000453#if ARM_IO_IN_DTB
Madhukar Pappireddy81519692019-12-06 15:46:42 -0600454FCONF_REGISTER_POPULATOR(TB_FW, arm_io, fconf_populate_arm_io_policies);
Louis Mayencourt6b232d92020-02-28 16:57:30 +0000455#endif /* ARM_IO_IN_DTB */
Louis Mayencourtbadcac82019-10-24 15:18:46 +0100456
457#endif /* IMAGE_BL2 */