mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 01:54:22 +00:00
feat(plat/fvp): add RMM image support for FVP platform
This patch adds the necessary changes needed to build and load RMM image for the FVP platform. RMM image is loaded by BL2 after BL32 (if BL32 exists) and before BL33. Signed-off-by: Zelalem Aweke <zelalem.aweke@arm.com> Change-Id: I1ac9eade84c2e35c7479a322ca1d090b4e626819
This commit is contained in:
parent
1839012d5b
commit
9d870b79c1
6 changed files with 75 additions and 9 deletions
|
@ -191,6 +191,15 @@ const mmap_region_t plat_arm_mmap[] = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef IMAGE_RMM
|
||||
const mmap_region_t plat_arm_mmap[] = {
|
||||
V2M_MAP_IOFPGA,
|
||||
MAP_DEVICE0,
|
||||
MAP_DEVICE1,
|
||||
{0}
|
||||
};
|
||||
#endif
|
||||
|
||||
ARM_CASSERT_MMAP
|
||||
|
||||
#if FVP_INTERCONNECT_DRIVER != FVP_CCN
|
||||
|
|
|
@ -185,6 +185,8 @@
|
|||
# define PLATFORM_STACK_SIZE UL(0x800)
|
||||
#elif defined(IMAGE_BL32)
|
||||
# define PLATFORM_STACK_SIZE UL(0x440)
|
||||
#elif defined(IMAGE_RMM)
|
||||
# define PLATFORM_STACK_SIZE UL(0x440)
|
||||
#endif
|
||||
|
||||
#define MAX_IO_DEVICES 3
|
||||
|
|
|
@ -186,6 +186,10 @@ ifeq (${COT_DESC_IN_DTB},1)
|
|||
BL2_SOURCES += plat/arm/common/fconf/fconf_nv_cntr_getter.c
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_RME},1)
|
||||
BL2_SOURCES += plat/arm/board/fvp/aarch64/fvp_helpers.S
|
||||
endif
|
||||
|
||||
ifeq (${BL2_AT_EL3},1)
|
||||
BL2_SOURCES += plat/arm/board/fvp/${ARCH}/fvp_helpers.S \
|
||||
plat/arm/board/fvp/fvp_bl2_el3_setup.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -75,8 +75,10 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = {
|
|||
.image_info.image_base = BL31_BASE,
|
||||
.image_info.image_max_size = BL31_LIMIT - BL31_BASE,
|
||||
|
||||
# ifdef BL32_BASE
|
||||
# if defined(BL32_BASE)
|
||||
.next_handoff_image_id = BL32_IMAGE_ID,
|
||||
# elif ENABLE_RME
|
||||
.next_handoff_image_id = RMM_IMAGE_ID,
|
||||
# else
|
||||
.next_handoff_image_id = BL33_IMAGE_ID,
|
||||
# endif
|
||||
|
@ -99,6 +101,22 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = {
|
|||
VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
|
||||
.next_handoff_image_id = INVALID_IMAGE_ID,
|
||||
},
|
||||
|
||||
# if ENABLE_RME
|
||||
/* Fill RMM related information */
|
||||
{
|
||||
.image_id = RMM_IMAGE_ID,
|
||||
SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
|
||||
VERSION_2, entry_point_info_t, EP_REALM | EXECUTABLE),
|
||||
.ep_info.pc = RMM_BASE,
|
||||
SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
|
||||
VERSION_2, image_info_t, 0),
|
||||
.image_info.image_base = RMM_BASE,
|
||||
.image_info.image_max_size = RMM_LIMIT - RMM_BASE,
|
||||
.next_handoff_image_id = BL33_IMAGE_ID,
|
||||
},
|
||||
# endif
|
||||
|
||||
# ifdef BL32_BASE
|
||||
/* Fill BL32 related information */
|
||||
{
|
||||
|
@ -113,7 +131,11 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = {
|
|||
.image_info.image_base = BL32_BASE,
|
||||
.image_info.image_max_size = BL32_LIMIT - BL32_BASE,
|
||||
|
||||
# if ENABLE_RME
|
||||
.next_handoff_image_id = RMM_IMAGE_ID,
|
||||
# else
|
||||
.next_handoff_image_id = BL33_IMAGE_ID,
|
||||
# endif
|
||||
},
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -25,6 +25,9 @@
|
|||
*/
|
||||
static entry_point_info_t bl32_image_ep_info;
|
||||
static entry_point_info_t bl33_image_ep_info;
|
||||
#if ENABLE_RME
|
||||
static entry_point_info_t rmm_image_ep_info;
|
||||
#endif
|
||||
|
||||
#if !RESET_TO_BL31
|
||||
/*
|
||||
|
@ -80,8 +83,18 @@ struct entry_point_info *bl31_plat_get_next_image_ep_info(uint32_t type)
|
|||
entry_point_info_t *next_image_info;
|
||||
|
||||
assert(sec_state_is_valid(type));
|
||||
next_image_info = (type == NON_SECURE)
|
||||
? &bl33_image_ep_info : &bl32_image_ep_info;
|
||||
if (type == NON_SECURE) {
|
||||
next_image_info = &bl33_image_ep_info;
|
||||
}
|
||||
#if ENABLE_RME
|
||||
else if (type == REALM) {
|
||||
next_image_info = &rmm_image_ep_info;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
next_image_info = &bl32_image_ep_info;
|
||||
}
|
||||
|
||||
/*
|
||||
* None of the images on the ARM development platforms can have 0x0
|
||||
* as the entrypoint
|
||||
|
@ -169,21 +182,31 @@ void __init arm_bl31_early_platform_setup(void *from_bl2, uintptr_t soc_fw_confi
|
|||
bl_params_node_t *bl_params = params_from_bl2->head;
|
||||
|
||||
/*
|
||||
* Copy BL33 and BL32 (if present), entry point information.
|
||||
* Copy BL33, BL32 and RMM (if present), entry point information.
|
||||
* They are stored in Secure RAM, in BL2's address space.
|
||||
*/
|
||||
while (bl_params != NULL) {
|
||||
if (bl_params->image_id == BL32_IMAGE_ID)
|
||||
if (bl_params->image_id == BL32_IMAGE_ID) {
|
||||
bl32_image_ep_info = *bl_params->ep_info;
|
||||
|
||||
if (bl_params->image_id == BL33_IMAGE_ID)
|
||||
}
|
||||
#if ENABLE_RME
|
||||
else if (bl_params->image_id == RMM_IMAGE_ID) {
|
||||
rmm_image_ep_info = *bl_params->ep_info;
|
||||
}
|
||||
#endif
|
||||
else if (bl_params->image_id == BL33_IMAGE_ID) {
|
||||
bl33_image_ep_info = *bl_params->ep_info;
|
||||
}
|
||||
|
||||
bl_params = bl_params->next_params_info;
|
||||
}
|
||||
|
||||
if (bl33_image_ep_info.pc == 0U)
|
||||
panic();
|
||||
#if ENABLE_RME
|
||||
if (rmm_image_ep_info.pc == 0U)
|
||||
panic();
|
||||
#endif
|
||||
#endif /* RESET_TO_BL31 */
|
||||
|
||||
# if ARM_LINUX_KERNEL_AS_BL33
|
||||
|
|
|
@ -67,6 +67,7 @@ const io_uuid_spec_t arm_uuid_spec[MAX_NUMBER_IDS] = {
|
|||
[SOC_FW_CONFIG_ID] = {UUID_SOC_FW_CONFIG},
|
||||
[TOS_FW_CONFIG_ID] = {UUID_TOS_FW_CONFIG},
|
||||
[NT_FW_CONFIG_ID] = {UUID_NT_FW_CONFIG},
|
||||
[RMM_IMAGE_ID] = {UUID_REALM_MONITOR_MGMT_FIRMWARE},
|
||||
#endif /* ARM_IO_IN_DTB */
|
||||
#if TRUSTED_BOARD_BOOT
|
||||
[TRUSTED_BOOT_FW_CERT_ID] = {UUID_TRUSTED_BOOT_FW_CERT},
|
||||
|
@ -162,6 +163,11 @@ struct plat_io_policy policies[MAX_NUMBER_IDS] = {
|
|||
(uintptr_t)&arm_uuid_spec[BL33_IMAGE_ID],
|
||||
open_fip
|
||||
},
|
||||
[RMM_IMAGE_ID] = {
|
||||
&fip_dev_handle,
|
||||
(uintptr_t)&arm_uuid_spec[RMM_IMAGE_ID],
|
||||
open_fip
|
||||
},
|
||||
[HW_CONFIG_ID] = {
|
||||
&fip_dev_handle,
|
||||
(uintptr_t)&arm_uuid_spec[HW_CONFIG_ID],
|
||||
|
|
Loading…
Add table
Reference in a new issue