mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-03 09:29:57 +00:00
Merge changes from topic "mb/mb-rss-refactor" into integration
* changes: refactor(tc): update RSS driver inteface calls refactor(fvp): update RSS driver inteface calls refactor(rss): make RSS driver standalone for Measured Boot
This commit is contained in:
commit
da36a23270
8 changed files with 31 additions and 47 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2022-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -32,23 +32,10 @@
|
||||||
# error Invalid Measured Boot algorithm.
|
# error Invalid Measured Boot algorithm.
|
||||||
#endif /* MBOOT_ALG_ID */
|
#endif /* MBOOT_ALG_ID */
|
||||||
|
|
||||||
/* Pointer to struct rss_mboot_metadata */
|
|
||||||
static struct rss_mboot_metadata *plat_metadata_ptr;
|
|
||||||
|
|
||||||
/* Functions' declarations */
|
/* Functions' declarations */
|
||||||
void rss_measured_boot_init(void)
|
void rss_measured_boot_init(struct rss_mboot_metadata *metadata_ptr)
|
||||||
{
|
{
|
||||||
/* At this point it is expected that communication channel over MHU
|
assert(metadata_ptr != NULL);
|
||||||
* is already initialised by platform init.
|
|
||||||
*/
|
|
||||||
struct rss_mboot_metadata *metadata_ptr;
|
|
||||||
|
|
||||||
/* Get pointer to platform's struct rss_mboot_metadata structure */
|
|
||||||
plat_metadata_ptr = plat_rss_mboot_get_metadata();
|
|
||||||
assert(plat_metadata_ptr != NULL);
|
|
||||||
|
|
||||||
/* Use a local variable to preserve the value of the global pointer */
|
|
||||||
metadata_ptr = plat_metadata_ptr;
|
|
||||||
|
|
||||||
/* Init the non-const members of the metadata structure */
|
/* Init the non-const members of the metadata structure */
|
||||||
while (metadata_ptr->id != RSS_MBOOT_INVALID_ID) {
|
while (metadata_ptr->id != RSS_MBOOT_INVALID_ID) {
|
||||||
|
@ -58,13 +45,15 @@ void rss_measured_boot_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int rss_mboot_measure_and_record(uintptr_t data_base, uint32_t data_size,
|
int rss_mboot_measure_and_record(struct rss_mboot_metadata *metadata_ptr,
|
||||||
|
uintptr_t data_base, uint32_t data_size,
|
||||||
uint32_t data_id)
|
uint32_t data_id)
|
||||||
{
|
{
|
||||||
unsigned char hash_data[CRYPTO_MD_MAX_SIZE];
|
unsigned char hash_data[CRYPTO_MD_MAX_SIZE];
|
||||||
int rc;
|
int rc;
|
||||||
psa_status_t ret;
|
psa_status_t ret;
|
||||||
const struct rss_mboot_metadata *metadata_ptr = plat_metadata_ptr;
|
|
||||||
|
assert(metadata_ptr != NULL);
|
||||||
|
|
||||||
/* Get the metadata associated with this image. */
|
/* Get the metadata associated with this image. */
|
||||||
while ((metadata_ptr->id != RSS_MBOOT_INVALID_ID) &&
|
while ((metadata_ptr->id != RSS_MBOOT_INVALID_ID) &&
|
||||||
|
@ -103,14 +92,16 @@ int rss_mboot_measure_and_record(uintptr_t data_base, uint32_t data_size,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rss_mboot_set_signer_id(unsigned int img_id,
|
int rss_mboot_set_signer_id(struct rss_mboot_metadata *metadata_ptr,
|
||||||
|
unsigned int img_id,
|
||||||
const void *pk_ptr,
|
const void *pk_ptr,
|
||||||
size_t pk_len)
|
size_t pk_len)
|
||||||
{
|
{
|
||||||
unsigned char hash_data[CRYPTO_MD_MAX_SIZE];
|
unsigned char hash_data[CRYPTO_MD_MAX_SIZE];
|
||||||
struct rss_mboot_metadata *metadata_ptr = plat_metadata_ptr;
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
assert(metadata_ptr != NULL);
|
||||||
|
|
||||||
/* Get the metadata associated with this image. */
|
/* Get the metadata associated with this image. */
|
||||||
while ((metadata_ptr->id != RSS_MBOOT_INVALID_ID) &&
|
while ((metadata_ptr->id != RSS_MBOOT_INVALID_ID) &&
|
||||||
(metadata_ptr->id != img_id)) {
|
(metadata_ptr->id != img_id)) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2022-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -44,12 +44,14 @@ struct rss_mboot_metadata {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Functions' declarations */
|
/* Functions' declarations */
|
||||||
void rss_measured_boot_init(void);
|
void rss_measured_boot_init(struct rss_mboot_metadata *metadata_ptr);
|
||||||
struct rss_mboot_metadata *plat_rss_mboot_get_metadata(void);
|
int rss_mboot_measure_and_record(struct rss_mboot_metadata *metadata_ptr,
|
||||||
int rss_mboot_measure_and_record(uintptr_t data_base, uint32_t data_size,
|
uintptr_t data_base, uint32_t data_size,
|
||||||
uint32_t data_id);
|
uint32_t data_id);
|
||||||
|
|
||||||
/* TODO: These metadata are currently not available during TF-A boot */
|
/* TODO: These metadata are currently not available during TF-A boot */
|
||||||
int rss_mboot_set_signer_id(unsigned int img_id, const void *pk_ptr, size_t pk_len);
|
int rss_mboot_set_signer_id(struct rss_mboot_metadata *metadata_ptr,
|
||||||
|
unsigned int img_id, const void *pk_ptr,
|
||||||
|
size_t pk_len);
|
||||||
|
|
||||||
#endif /* RSS_MEASURED_BOOT_H */
|
#endif /* RSS_MEASURED_BOOT_H */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021-2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2021-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -54,7 +54,7 @@ void bl1_plat_mboot_init(void)
|
||||||
event_log_init(event_log, event_log + sizeof(event_log));
|
event_log_init(event_log, event_log + sizeof(event_log));
|
||||||
event_log_write_header();
|
event_log_write_header();
|
||||||
|
|
||||||
rss_measured_boot_init();
|
rss_measured_boot_init(fvp_rss_mboot_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bl1_plat_mboot_finish(void)
|
void bl1_plat_mboot_finish(void)
|
||||||
|
|
|
@ -117,7 +117,7 @@ void bl2_plat_mboot_init(void)
|
||||||
|
|
||||||
event_log_init((uint8_t *)event_log_start, event_log_finish);
|
event_log_init((uint8_t *)event_log_start, event_log_finish);
|
||||||
|
|
||||||
rss_measured_boot_init();
|
rss_measured_boot_init(fvp_rss_mboot_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
int plat_mboot_measure_critical_data(unsigned int critical_data_id,
|
int plat_mboot_measure_critical_data(unsigned int critical_data_id,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021-2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2021-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -16,11 +16,6 @@
|
||||||
extern event_log_metadata_t fvp_event_log_metadata[];
|
extern event_log_metadata_t fvp_event_log_metadata[];
|
||||||
extern struct rss_mboot_metadata fvp_rss_mboot_metadata[];
|
extern struct rss_mboot_metadata fvp_rss_mboot_metadata[];
|
||||||
|
|
||||||
struct rss_mboot_metadata *plat_rss_mboot_get_metadata(void)
|
|
||||||
{
|
|
||||||
return fvp_rss_mboot_metadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
int plat_mboot_measure_image(unsigned int image_id, image_info_t *image_data)
|
int plat_mboot_measure_image(unsigned int image_id, image_info_t *image_data)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -38,7 +33,8 @@ int plat_mboot_measure_image(unsigned int image_id, image_info_t *image_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate image hash and record data in RSS */
|
/* Calculate image hash and record data in RSS */
|
||||||
err = rss_mboot_measure_and_record(image_data->image_base,
|
err = rss_mboot_measure_and_record(fvp_rss_mboot_metadata,
|
||||||
|
image_data->image_base,
|
||||||
image_data->image_size,
|
image_data->image_size,
|
||||||
image_id);
|
image_id);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2022-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -46,7 +46,7 @@ void bl1_plat_mboot_init(void)
|
||||||
(void)rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE,
|
(void)rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE,
|
||||||
PLAT_RSS_AP_RCV_MHU_BASE);
|
PLAT_RSS_AP_RCV_MHU_BASE);
|
||||||
|
|
||||||
rss_measured_boot_init();
|
rss_measured_boot_init(tc_rss_mboot_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bl1_plat_mboot_finish(void)
|
void bl1_plat_mboot_finish(void)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2022-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -45,7 +45,7 @@ void bl2_plat_mboot_init(void)
|
||||||
(void)rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE,
|
(void)rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE,
|
||||||
PLAT_RSS_AP_RCV_MHU_BASE);
|
PLAT_RSS_AP_RCV_MHU_BASE);
|
||||||
|
|
||||||
rss_measured_boot_init();
|
rss_measured_boot_init(tc_rss_mboot_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bl2_plat_mboot_finish(void)
|
void bl2_plat_mboot_finish(void)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
* Copyright (c) 2022-2023, Arm Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -13,17 +12,13 @@
|
||||||
|
|
||||||
extern struct rss_mboot_metadata tc_rss_mboot_metadata[];
|
extern struct rss_mboot_metadata tc_rss_mboot_metadata[];
|
||||||
|
|
||||||
struct rss_mboot_metadata *plat_rss_mboot_get_metadata(void)
|
|
||||||
{
|
|
||||||
return tc_rss_mboot_metadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
int plat_mboot_measure_image(unsigned int image_id, image_info_t *image_data)
|
int plat_mboot_measure_image(unsigned int image_id, image_info_t *image_data)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Calculate image hash and record data in RSS */
|
/* Calculate image hash and record data in RSS */
|
||||||
err = rss_mboot_measure_and_record(image_data->image_base,
|
err = rss_mboot_measure_and_record(tc_rss_mboot_metadata,
|
||||||
|
image_data->image_base,
|
||||||
image_data->image_size,
|
image_data->image_size,
|
||||||
image_id);
|
image_id);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue