blob: c56612b4245a8f0e491d94f6fa4dc5151f5374fe [file] [log] [blame]
Tamas Bana4260892023-06-07 13:35:04 +02001/*
2 * Copyright (c) 2024, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <stdint.h>
8
Tamas Ban0fbe8622023-06-12 11:33:47 +02009#include <common/debug.h>
Tamas Bandc15bf42024-02-22 11:35:28 +010010#include <drivers/arm/rse_comms.h>
Tamas Bana4260892023-06-07 13:35:04 +020011#include <drivers/measured_boot/metadata.h>
Tamas Bandc15bf42024-02-22 11:35:28 +010012#include <drivers/measured_boot/rse/dice_prot_env.h>
Tamas Bana4260892023-06-07 13:35:04 +020013#include <plat/arm/common/plat_arm.h>
14#include <plat/common/platform.h>
15#include <platform_def.h>
Tamas Ban0fbe8622023-06-12 11:33:47 +020016#include <tools_share/tbbr_oid.h>
Tamas Bana4260892023-06-07 13:35:04 +020017
Tamas Ban1bac7b02024-06-14 14:24:15 +020018#include "tc_dpe.h"
Tamas Bana5d3ca82024-01-30 12:56:38 +010019
Tamas Bana4260892023-06-07 13:35:04 +020020/*
21 * The content and the values of this array depends on:
22 * - build config: Which components are loaded: SPMD, TOS, SPx, etc ?
23 * - boot order: the last element in a layer should be treated differently.
24 */
25
26/*
27 * TODO:
28 * - The content of the array must be tailored according to the build
29 * config (TOS, SPMD, etc). All loaded components (executables and
30 * config blobs) must be present in this array.
31 * - Current content is according to the Trusty build config.
32 */
33struct dpe_metadata tc_dpe_metadata[] = {
34 {
35 .id = BL31_IMAGE_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010036 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +020037 .signer_id_size = SIGNER_ID_MIN_SIZE,
38 .sw_type = MBOOT_BL31_IMAGE_STRING,
39 .allow_new_context_to_derive = false,
40 .retain_parent_context = true,
41 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +020042 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +020043 .pk_oid = BL31_IMAGE_KEY_OID },
44 {
45 .id = BL32_IMAGE_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010046 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +020047 .signer_id_size = SIGNER_ID_MIN_SIZE,
48 .sw_type = MBOOT_BL32_IMAGE_STRING,
49 .allow_new_context_to_derive = false,
50 .retain_parent_context = true,
51 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +020052 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +020053 .pk_oid = BL32_IMAGE_KEY_OID },
54 {
55 .id = BL33_IMAGE_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010056 .cert_id = DPE_HYPERVISOR_CERT_ID,
Tamas Bana4260892023-06-07 13:35:04 +020057 .signer_id_size = SIGNER_ID_MIN_SIZE,
58 .sw_type = MBOOT_BL33_IMAGE_STRING,
59 .allow_new_context_to_derive = true,
60 .retain_parent_context = true,
61 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +020062 .target_locality = LOCALITY_AP_NS,
Tamas Bana4260892023-06-07 13:35:04 +020063 .pk_oid = BL33_IMAGE_KEY_OID },
64
65 {
66 .id = HW_CONFIG_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010067 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +020068 .signer_id_size = SIGNER_ID_MIN_SIZE,
69 .sw_type = MBOOT_HW_CONFIG_STRING,
70 .allow_new_context_to_derive = false,
71 .retain_parent_context = true,
72 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +020073 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +020074 .pk_oid = HW_CONFIG_KEY_OID },
75 {
76 .id = NT_FW_CONFIG_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010077 .cert_id = DPE_HYPERVISOR_CERT_ID,
Tamas Bana4260892023-06-07 13:35:04 +020078 .signer_id_size = SIGNER_ID_MIN_SIZE,
79 .sw_type = MBOOT_NT_FW_CONFIG_STRING,
80 .allow_new_context_to_derive = false,
81 .retain_parent_context = true,
82 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +020083 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +020084 .pk_oid = NT_FW_CONFIG_KEY_OID },
85 {
86 .id = SCP_BL2_IMAGE_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010087 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +020088 .signer_id_size = SIGNER_ID_MIN_SIZE,
89 .sw_type = MBOOT_SCP_BL2_IMAGE_STRING,
90 .allow_new_context_to_derive = false,
91 .retain_parent_context = true,
92 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +020093 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +020094 .pk_oid = SCP_BL2_IMAGE_KEY_OID },
95 {
96 .id = SOC_FW_CONFIG_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +010097 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +020098 .signer_id_size = SIGNER_ID_MIN_SIZE,
99 .sw_type = MBOOT_SOC_FW_CONFIG_STRING,
100 .allow_new_context_to_derive = false,
101 .retain_parent_context = true,
102 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200103 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200104 .pk_oid = SOC_FW_CONFIG_KEY_OID },
105 {
106 .id = TOS_FW_CONFIG_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100107 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200108 .signer_id_size = SIGNER_ID_MIN_SIZE,
109 .sw_type = MBOOT_TOS_FW_CONFIG_STRING,
110 .allow_new_context_to_derive = false,
111 .retain_parent_context = true,
112 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200113 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200114 .pk_oid = TOS_FW_CONFIG_KEY_OID },
115#if defined(SPD_spmd)
116 {
117 .id = SP_PKG1_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100118 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200119 .signer_id_size = SIGNER_ID_MIN_SIZE,
120 .sw_type = MBOOT_SP1_STRING,
121 .allow_new_context_to_derive = false,
122 .retain_parent_context = true,
123 .create_certificate = true, /* With Trusty only one SP is loaded */
Tamas Ban817ede32024-06-14 14:55:31 +0200124 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200125 .pk_oid = NULL },
126 {
127 .id = SP_PKG2_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100128 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200129 .signer_id_size = SIGNER_ID_MIN_SIZE,
130 .sw_type = MBOOT_SP2_STRING,
131 .allow_new_context_to_derive = false,
132 .retain_parent_context = true,
133 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200134 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200135 .pk_oid = NULL },
136 {
137 .id = SP_PKG3_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100138 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200139 .signer_id_size = SIGNER_ID_MIN_SIZE,
140 .sw_type = MBOOT_SP3_STRING,
141 .allow_new_context_to_derive = false,
142 .retain_parent_context = true,
143 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200144 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200145 .pk_oid = NULL },
146 {
147 .id = SP_PKG4_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100148 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200149 .signer_id_size = SIGNER_ID_MIN_SIZE,
150 .sw_type = MBOOT_SP4_STRING,
151 .allow_new_context_to_derive = false,
152 .retain_parent_context = true,
153 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200154 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200155 .pk_oid = NULL },
156 {
157 .id = SP_PKG5_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100158 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200159 .signer_id_size = SIGNER_ID_MIN_SIZE,
160 .sw_type = MBOOT_SP5_STRING,
161 .allow_new_context_to_derive = false,
162 .retain_parent_context = true,
163 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200164 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200165 .pk_oid = NULL },
166 {
167 .id = SP_PKG6_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100168 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200169 .signer_id_size = SIGNER_ID_MIN_SIZE,
170 .sw_type = MBOOT_SP6_STRING,
171 .allow_new_context_to_derive = false,
172 .retain_parent_context = true,
173 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200174 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200175 .pk_oid = NULL },
176 {
177 .id = SP_PKG7_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100178 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200179 .signer_id_size = SIGNER_ID_MIN_SIZE,
180 .sw_type = MBOOT_SP7_STRING,
181 .allow_new_context_to_derive = false,
182 .retain_parent_context = true,
183 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200184 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200185 .pk_oid = NULL },
186 {
187 .id = SP_PKG8_ID,
Tamas Bana5d3ca82024-01-30 12:56:38 +0100188 .cert_id = DPE_CERT_ID_SAME_AS_PARENT, /* AP_BL2: DPE_AP_FW_CERT_ID */
Tamas Bana4260892023-06-07 13:35:04 +0200189 .signer_id_size = SIGNER_ID_MIN_SIZE,
190 .sw_type = MBOOT_SP8_STRING,
191 .allow_new_context_to_derive = false,
192 .retain_parent_context = true,
193 .create_certificate = false,
Tamas Ban817ede32024-06-14 14:55:31 +0200194 .target_locality = LOCALITY_NONE, /* won't derive don't care */
Tamas Bana4260892023-06-07 13:35:04 +0200195 .pk_oid = NULL },
196
197#endif
198 {
199 .id = DPE_INVALID_ID }
200};
201
Tamas Ban0fbe8622023-06-12 11:33:47 +0200202/* Context handle is meant to be used by BL33. Sharing it via NT_FW_CONFIG */
203static int new_ctx_handle;
204
Tamas Ban14d82442024-06-03 16:51:49 +0200205void plat_dpe_share_context_handle(int *ctx_handle, int *parent_ctx_handle)
Tamas Ban0fbe8622023-06-12 11:33:47 +0200206{
207 new_ctx_handle = *ctx_handle;
Tamas Ban14d82442024-06-03 16:51:49 +0200208
209 /* Irrelevant in BL2 because cold restart resumes CPU in BL1 */
210 (void)parent_ctx_handle;
Tamas Ban0fbe8622023-06-12 11:33:47 +0200211}
212
Tamas Banae33fa92023-06-07 14:18:46 +0200213void plat_dpe_get_context_handle(int *ctx_handle)
214{
215 int rc;
216
217 rc = arm_get_tb_fw_info(ctx_handle);
218 if (rc != 0) {
219 ERROR("Unable to get DPE context handle from TB_FW_CONFIG\n");
220 /*
221 * It is a fatal error because on FVP platform, BL2 software
222 * assumes that a valid DPE context_handle is passed through
223 * the DTB object by BL1.
224 */
225 plat_panic_handler();
226 }
227
228 VERBOSE("Received DPE context handle: 0x%x\n", *ctx_handle);
229}
230
Tamas Bana4260892023-06-07 13:35:04 +0200231void bl2_plat_mboot_init(void)
232{
Tamas Bandc15bf42024-02-22 11:35:28 +0100233 /* Initialize the communication channel between AP and RSE */
234 (void)rse_comms_init(PLAT_RSE_AP_SND_MHU_BASE,
235 PLAT_RSE_AP_RCV_MHU_BASE);
Tamas Bana4260892023-06-07 13:35:04 +0200236
237 dpe_init(tc_dpe_metadata);
238}
239
240void bl2_plat_mboot_finish(void)
241{
Tamas Ban0fbe8622023-06-12 11:33:47 +0200242 int rc;
243
244 VERBOSE("Share DPE context handle with BL33: 0x%x\n", new_ctx_handle);
245 rc = arm_set_nt_fw_info(&new_ctx_handle);
246 if (rc != 0) {
247 ERROR("Unable to set DPE context handle in NT_FW_CONFIG\n");
248 /*
249 * It is a fatal error because on TC platform, BL33 software
250 * assumes that a valid DPE context_handle is passed through
251 * the DTB object by BL2.
252 */
253 plat_panic_handler();
254 }
Tamas Bana4260892023-06-07 13:35:04 +0200255}