From: Abdellatif El Khlifi <abdellatif.elkhl...@arm.com> Provide the update_info structure and FWU configs for Corstone-1000
update_info defines the image to be used for FWU. The FWU configs enabled are the FWU Arm PSA configs. Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhl...@arm.com> Cc: Tom Rini <tr...@konsulko.com> Cc: Hugues Kamba Mpiana <hugues.kambampi...@arm.com> --- board/armltd/corstone1000/corstone1000.c | 138 ++++++++++++++++++++++- configs/corstone1000_defconfig | 10 +- 2 files changed, 146 insertions(+), 2 deletions(-) diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c index 3ad77f51949..d2176b9174d 100644 --- a/board/armltd/corstone1000/corstone1000.c +++ b/board/armltd/corstone1000/corstone1000.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * (C) Copyright 2022 ARM Limited + * (C) Copyright 2022, 2025 Arm Limited * (C) Copyright 2022 Linaro * Rui Miguel Silva <rui.si...@linaro.org> */ @@ -8,8 +8,11 @@ #include <blk.h> #include <cpu_func.h> #include <dm.h> +#include <generated/dt.h> #include <env.h> +#include <efi_loader.h> #include <fwu.h> +#include <fwu_arm_psa.h> #include <netdev.h> #include <nvmxip.h> #include <part.h> @@ -21,6 +24,133 @@ #define CORSTONE1000_KERNEL_PRIMARY "kernel_primary" #define CORSTONE1000_KERNEL_SECONDARY "kernel_secondary" +#if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) + +/* The total number of upgradable images including the start and end dummy payloads */ +#define CAPSULE_PAYLOADS_MAX_COUNT (CONFIG_FWU_NUM_IMAGES_PER_BANK + 2) + +/* + * GUIDs for capsule updatable firmware images + * + * The GUIDs are generating with the UUIDv5 format. + * Namespace used for FVP GUIDs: 989f3a4e-46e0-4cd0-9877-a25c70c01329 + * Namespace used for MPS3 GUIDs: df1865d1-90fb-4d59-9c38-c9f2c1bba8cc + * Names: the image names stated in the fw_name field + */ + +#define FWU_FVP_BL2_IMAGE_GUID \ + EFI_GUID(0xf1d883f9, 0xdfeb, 0x5363, 0x98, 0xd8, \ + 0x68, 0x6e, 0xe3, 0xb6, 0x9f, 0x4f) + +#define FWU_MPS3_BL2_IMAGE_GUID \ + EFI_GUID(0xfbfbefaa, 0x0a56, 0x50d5, 0xb6, 0x51, \ + 0x74, 0x09, 0x1d, 0x3d, 0x62, 0xcf) + +#define FWU_FVP_TFM_S_IMAGE_GUID \ + EFI_GUID(0x7fad470e, 0x5ec5, 0x5c03, 0xa2, 0xc1, \ + 0x47, 0x56, 0xb4, 0x95, 0xde, 0x61) + +#define FWU_MPS3_TFM_S_IMAGE_GUID \ + EFI_GUID(0xaf4cc7ad, 0xee2e, 0x5a39, 0xaa, 0xd5, \ + 0xfa, 0xc8, 0xa1, 0xe6, 0x17, 0x3c) + +#define FWU_FVP_FIP_IMAGE_GUID \ + EFI_GUID(0xf1933675, 0x5a8c, 0x5b6d, 0x9e, 0xf4, \ + 0x84, 0x67, 0x39, 0xe8, 0x9b, 0xc8) + +#define FWU_MPS3_FIP_IMAGE_GUID \ + EFI_GUID(0x55302f96, 0xc4f0, 0x5cf9, 0x86, 0x24, \ + 0xe7, 0xcc, 0x38, 0x8f, 0x2b, 0x68) + +#define FWU_FVP_INITRAMFS_IMAGE_GUID \ + EFI_GUID(0xf771aff9, 0xc7e9, 0x5f99, 0x9e, 0xda, \ + 0x23, 0x69, 0xdd, 0x69, 0x4f, 0x61) + +#define FWU_MPS3_INITRAMFS_IMAGE_GUID \ + EFI_GUID(0x3e8ac972, 0xc33c, 0x5cc9, 0x90, 0xa0, \ + 0xcd, 0xd3, 0x15, 0x96, 0x83, 0xea) + +enum fw_image_index { + FW_IMAGE_INDEX_BL2 = 1, + FW_IMAGE_INDEX_TFM_S, + FW_IMAGE_INDEX_FIP, + FW_IMAGE_INDEX_INITRAMFS, + FW_IMAGE_INDEX_DUMMY_START, + FW_IMAGE_INDEX_DUMMY_END +}; + +struct efi_fw_image fw_mps3_images[] = { + { + .image_type_id = FWU_MPS3_BL2_IMAGE_GUID, + .fw_name = u"BL2", + .image_index = FW_IMAGE_INDEX_BL2, + }, + { + .image_type_id = FWU_MPS3_TFM_S_IMAGE_GUID, + .fw_name = u"TFM_S", + .image_index = FW_IMAGE_INDEX_TFM_S, + }, + { + .image_type_id = FWU_MPS3_FIP_IMAGE_GUID, + .fw_name = u"FIP", + .image_index = FW_IMAGE_INDEX_FIP, + }, + { + .image_type_id = FWU_MPS3_INITRAMFS_IMAGE_GUID, + .fw_name = u"INITRAMFS", + .image_index = FW_IMAGE_INDEX_INITRAMFS, + }, + { + .image_type_id = FWU_DUMMY_START_IMAGE_GUID, + .fw_name = u"DUMMY_START", + .image_index = FW_IMAGE_INDEX_DUMMY_START, + }, + { + .image_type_id = FWU_DUMMY_END_IMAGE_GUID, + .fw_name = u"DUMMY_END", + .image_index = FW_IMAGE_INDEX_DUMMY_END, + }, +}; + +struct efi_fw_image fw_fvp_images[] = { + { + .image_type_id = FWU_FVP_BL2_IMAGE_GUID, + .fw_name = u"BL2", + .image_index = FW_IMAGE_INDEX_BL2, + }, + { + .image_type_id = FWU_FVP_TFM_S_IMAGE_GUID, + .fw_name = u"TFM_S", + .image_index = FW_IMAGE_INDEX_TFM_S, + }, + { + .image_type_id = FWU_FVP_FIP_IMAGE_GUID, + .fw_name = u"FIP", + .image_index = FW_IMAGE_INDEX_FIP, + }, + { + .image_type_id = FWU_FVP_INITRAMFS_IMAGE_GUID, + .fw_name = u"INITRAMFS", + .image_index = FW_IMAGE_INDEX_INITRAMFS, + }, + { + .image_type_id = FWU_DUMMY_START_IMAGE_GUID, + .fw_name = u"DUMMY_START", + .image_index = FW_IMAGE_INDEX_DUMMY_START, + }, + { + .image_type_id = FWU_DUMMY_END_IMAGE_GUID, + .fw_name = u"DUMMY_END", + .image_index = FW_IMAGE_INDEX_DUMMY_END, + }, +}; + +struct efi_capsule_update_info update_info = { + .num_images = CAPSULE_PAYLOADS_MAX_COUNT, +}; + +#endif /* EFI_HAVE_CAPSULE_SUPPORT */ + static int corstone1000_boot_idx; static struct mm_region corstone1000_mem_map[] = { @@ -79,6 +209,12 @@ struct mm_region *mem_map = corstone1000_mem_map; int board_init(void) { +#if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) + if (!strcmp(DEVICE_TREE, "corstone1000-fvp")) + update_info.images = fw_fvp_images; + else + update_info.images = fw_mps3_images; +#endif return 0; } diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig index 80163580f85..5b10e3f7484 100644 --- a/configs/corstone1000_defconfig +++ b/configs/corstone1000_defconfig @@ -10,11 +10,16 @@ CONFIG_DEFAULT_DEVICE_TREE="corstone1000-mps3" CONFIG_SYS_BOOTM_LEN=0x800000 CONFIG_SYS_LOAD_ADDR=0x82100000 CONFIG_IDENT_STRING=" corstone1000 aarch64 " +CONFIG_FWU_NUM_IMAGES_PER_BANK=4 CONFIG_EFI_MM_COMM_TEE=y CONFIG_FFA_SHARED_MM_BUF_SIZE=4096 CONFIG_FFA_SHARED_MM_BUF_OFFSET=0 CONFIG_FFA_SHARED_MM_BUF_ADDR=0x02000000 +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y CONFIG_EFI_CAPSULE_ON_DISK=y +CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y +CONFIG_EFI_CAPSULE_AUTHENTICATE=y +CONFIG_EFI_CAPSULE_CRT_FILE="CRT.crt" CONFIG_FIT=y CONFIG_DISTRO_DEFAULTS=y CONFIG_BOOTDELAY=3 @@ -38,6 +43,7 @@ CONFIG_CMD_LOADM=y CONFIG_CMD_USB=y # CONFIG_CMD_SETEXPR is not set CONFIG_CMD_CACHE=y +CONFIG_CMD_EFIDEBUG=y CONFIG_CMD_RTC=y CONFIG_CMD_TIME=y CONFIG_CMD_GETTIME=y @@ -67,4 +73,6 @@ CONFIG_USB_ISP1760=y # CONFIG_RANDOM_UUID is not set CONFIG_ERRNO_STR=y CONFIG_FWU_MULTI_BANK_UPDATE=y -CONFIG_FWU_MDATA_V1=y +CONFIG_FWU_MDATA_V2=y +CONFIG_FWU_ARM_PSA=y +# CONFIG_TOOLS_MKEFICAPSULE is not set -- 2.25.1