Merge changes from topic "mb/secure-evlog-cpy" into integration

* changes:
  feat(fvp): copy the Event Log to TZC secured DRAM area
  feat(arm): carveout DRAM1 area for Event Log
This commit is contained in:
Sandrine Bailleux 2023-03-16 09:37:18 +01:00 committed by TrustedFirmware Code Review
commit 579ea67d99
4 changed files with 74 additions and 13 deletions

View file

@ -82,6 +82,7 @@
* - L1 GPT DRAM: Reserved for L1 GPT if RME is enabled
* - REALM DRAM: Reserved for Realm world if RME is enabled
* - TF-A <-> RMM SHARED: Area shared for communication between TF-A and RMM
* - Event Log: Area for Event Log if MEASURED_BOOT feature is enabled
* - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use
*
* RME enabled(64MB) RME not enabled(16MB)
@ -89,13 +90,15 @@
* | | | |
* | AP TZC (~28MB) | | AP TZC (~14MB) |
* -------------------- -------------------
* | Event Log | | Event Log |
* | (4KB) | | (4KB) |
* -------------------- -------------------
* | REALM (RMM) | | |
* | (32MB - 4KB) | | EL3 TZC (2MB) |
* -------------------- -------------------
* | | | |
* | REALM (RMM) | | EL3 TZC (2MB) |
* | (32MB - 4KB) | -------------------
* -------------------- | |
* | | | SCP TZC |
* | TF-A <-> RMM | 0xFFFF_FFFF-------------------
* | SHARED (4KB) |
* | TF-A <-> RMM | | SCP TZC |
* | SHARED (4KB) | 0xFFFF_FFFF-------------------
* --------------------
* | |
* | EL3 TZC (3MB) |
@ -114,7 +117,6 @@
*/
#define ARM_EL3_TZC_DRAM1_SIZE UL(0x00300000) /* 3MB */
#define ARM_L1_GPT_SIZE UL(0x00100000) /* 1MB */
/* 32MB - ARM_EL3_RMM_SHARED_SIZE */
#define ARM_REALM_SIZE (UL(0x02000000) - \
ARM_EL3_RMM_SHARED_SIZE)
@ -134,6 +136,25 @@
#define ARM_SCP_TZC_DRAM1_SIZE PLAT_ARM_SCP_TZC_DRAM1_SIZE
#define ARM_SCP_TZC_DRAM1_END (ARM_SCP_TZC_DRAM1_BASE + \
ARM_SCP_TZC_DRAM1_SIZE - 1U)
# if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \
MEASURED_BOOT
#define ARM_EVENT_LOG_DRAM1_SIZE UL(0x00001000) /* 4KB */
#if ENABLE_RME
#define ARM_EVENT_LOG_DRAM1_BASE (ARM_REALM_BASE - \
ARM_EVENT_LOG_DRAM1_SIZE)
#else
#define ARM_EVENT_LOG_DRAM1_BASE (ARM_EL3_TZC_DRAM1_BASE - \
ARM_EVENT_LOG_DRAM1_SIZE)
#endif /* ENABLE_RME */
#define ARM_EVENT_LOG_DRAM1_END (ARM_EVENT_LOG_DRAM1_BASE + \
ARM_EVENT_LOG_DRAM1_SIZE - \
1U)
#else
#define ARM_EVENT_LOG_DRAM1_SIZE UL(0)
#endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && MEASURED_BOOT */
#if ENABLE_RME
#define ARM_L1_GPT_ADDR_BASE (ARM_DRAM1_BASE + \
ARM_DRAM1_SIZE - \
@ -170,7 +191,9 @@
ARM_EL3_TZC_DRAM1_SIZE + \
ARM_EL3_RMM_SHARED_SIZE + \
ARM_REALM_SIZE + \
ARM_L1_GPT_SIZE))
ARM_L1_GPT_SIZE + \
ARM_EVENT_LOG_DRAM1_SIZE))
#define ARM_AP_TZC_DRAM1_END (ARM_AP_TZC_DRAM1_BASE + \
ARM_AP_TZC_DRAM1_SIZE - 1U)
@ -313,6 +336,15 @@
PLAT_ARM_TRUSTED_DRAM_SIZE, \
MT_MEMORY | MT_RW | MT_SECURE)
# if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \
MEASURED_BOOT
#define ARM_MAP_EVENT_LOG_DRAM1 \
MAP_REGION_FLAT( \
ARM_EVENT_LOG_DRAM1_BASE, \
ARM_EVENT_LOG_DRAM1_SIZE, \
MT_MEMORY | MT_RW | MT_SECURE)
#endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && MEASURED_BOOT */
#if ENABLE_RME
/*
* We add the EL3_RMM_SHARED size to RMM mapping to map the region as a block.

View file

@ -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
*/
@ -15,6 +15,11 @@
#include <plat/arm/common/plat_arm.h>
#include <plat/common/common_def.h>
#if defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)
CASSERT(ARM_EVENT_LOG_DRAM1_SIZE >= PLAT_ARM_EVENT_LOG_MAX_SIZE, \
assert_res_eventlog_mem_insufficient);
#endif /* defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd) */
/* Event Log data */
static uint64_t event_log_base;
@ -195,9 +200,19 @@ void bl2_plat_mboot_finish(void)
event_log_cur_size = event_log_get_cur_size((uint8_t *)event_log_base);
#if defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)
/* Copy Event Log to TZC secured DRAM memory */
(void)memcpy((void *)ARM_EVENT_LOG_DRAM1_BASE,
(const void *)event_log_base,
event_log_cur_size);
/* Ensure that the Event Log is visible in TZC secured DRAM memory */
flush_dcache_range(ARM_EVENT_LOG_DRAM1_BASE, event_log_cur_size);
#endif /* defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd) */
rc = arm_set_nt_fw_info(
#ifdef SPD_opteed
(uintptr_t)event_log_base,
(uintptr_t)ARM_EVENT_LOG_DRAM1_BASE,
#endif
event_log_cur_size, &ns_log_addr);
if (rc != 0) {
@ -222,7 +237,7 @@ void bl2_plat_mboot_finish(void)
#if defined(SPD_tspd) || defined(SPD_spmd)
/* Set Event Log data in TOS_FW_CONFIG */
rc = arm_set_tos_fw_info((uintptr_t)event_log_base,
rc = arm_set_tos_fw_info((uintptr_t)ARM_EVENT_LOG_DRAM1_BASE,
event_log_cur_size);
if (rc != 0) {
ERROR("%s(): Unable to update %s_FW_CONFIG\n",

View file

@ -111,6 +111,15 @@ const mmap_region_t plat_arm_mmap[] = {
* Required to load HW_CONFIG, SPMC and SPs to trusted DRAM.
*/
ARM_MAP_TRUSTED_DRAM,
/*
* Required to load Event Log in TZC secured memory
*/
#if MEASURED_BOOT && (defined(SPD_tspd) || defined(SPD_opteed) || \
defined(SPD_spmd))
ARM_MAP_EVENT_LOG_DRAM1,
#endif /* MEASURED_BOOT && (SPD_tspd || SPD_opteed || SPD_spmd) */
#if ENABLE_RME
ARM_MAP_RMM_DRAM,
ARM_MAP_GPT_L1_DRAM,

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2022, Arm Limited and Contributors. All rights reserved.
* Copyright (c) 2014-2023, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -168,7 +168,12 @@
# define MAX_XLAT_TABLES 5
#else
# define PLAT_ARM_MMAP_ENTRIES 12
# define MAX_XLAT_TABLES 6
# if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \
defined(IMAGE_BL2) && MEASURED_BOOT
# define MAX_XLAT_TABLES 7
# else
# define MAX_XLAT_TABLES 6
# endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && IMAGE_BL2 && MEASURED_BOOT */
#endif
/*