From 5357f83d4ee89fb831d7e4f6149ae2f652e1b9af Mon Sep 17 00:00:00 2001 From: Manish V Badarkhe Date: Tue, 16 Mar 2021 10:01:27 +0000 Subject: [PATCH] feat(fwu_metadata): add FWU metadata header and build options Added a firmware update metadata structure as per section 4.1 in the specification document[1]. Also, added the build options used in defining the firmware update metadata structure. [1]: https://developer.arm.com/documentation/den0118/a/ Change-Id: I8f43264a46fde777ceae7fd2a5bb0326f1711928 Signed-off-by: Manish V Badarkhe --- Makefile | 4 ++ include/drivers/fwu/fwu_metadata.h | 74 ++++++++++++++++++++++++++++++ make_helpers/defaults.mk | 8 ++++ 3 files changed, 86 insertions(+) create mode 100644 include/drivers/fwu/fwu_metadata.h diff --git a/Makefile b/Makefile index 4dbc2be99..edc0d49fb 100644 --- a/Makefile +++ b/Makefile @@ -967,6 +967,8 @@ $(eval $(call assert_numerics,\ ARM_ARCH_MINOR \ BRANCH_PROTECTION \ FW_ENC_STATUS \ + NR_OF_FW_BANKS \ + NR_OF_IMAGES_IN_FW_BANK \ ))) ifdef KEY_SIZE @@ -1054,6 +1056,8 @@ $(eval $(call add_defines,\ USE_SP804_TIMER \ ENABLE_FEAT_RNG \ ENABLE_FEAT_SB \ + NR_OF_FW_BANKS \ + NR_OF_IMAGES_IN_FW_BANK \ ))) ifeq (${SANITIZE_UB},trap) diff --git a/include/drivers/fwu/fwu_metadata.h b/include/drivers/fwu/fwu_metadata.h new file mode 100644 index 000000000..2e88de5ec --- /dev/null +++ b/include/drivers/fwu/fwu_metadata.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * FWU metadata information as per the specification section 4.1: + * https://developer.arm.com/documentation/den0118/a/ + * + */ + +#ifndef FWU_METADATA_H +#define FWU_METADATA_H + +#include +#include + +/* Properties of image in a bank */ +struct fwu_image_properties { + + /* UUID of the image in this bank */ + uuid_t img_uuid; + + /* [0]: bit describing the image acceptance status – + * 1 means the image is accepted + * [31:1]: MBZ + */ + uint32_t accepted; + + /* reserved (MBZ) */ + uint32_t reserved; + +} __packed; + +/* Image entry information */ +struct fwu_image_entry { + + /* UUID identifying the image type */ + uuid_t img_type_uuid; + + /* UUID of the storage volume where the image is located */ + uuid_t location_uuid; + + /* Properties of images with img_type_uuid in the different FW banks */ + struct fwu_image_properties img_props[NR_OF_FW_BANKS]; + +} __packed; + +/* + * FWU metadata filled by the updater and consumed by TF-A for + * various purposes as below: + * 1. Get active FW bank. + * 2. Rollback to previous working FW bank. + * 3. Get properties of all images present in all banks. + */ +struct fwu_metadata { + + /* Metadata CRC value */ + uint32_t crc_32; + + /* Metadata version */ + uint32_t version; + + /* Bank index with which device boots */ + uint32_t active_index; + + /* Previous bank index with which device booted successfully */ + uint32_t previous_active_index; + + /* Image entry information */ + struct fwu_image_entry img_entry[NR_OF_IMAGES_IN_FW_BANK]; + +} __packed; + +#endif /* FWU_METADATA_H */ diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk index b2d1ee267..53d9605df 100644 --- a/make_helpers/defaults.mk +++ b/make_helpers/defaults.mk @@ -344,3 +344,11 @@ OPENSSL_DIR := /usr # Build option to use the SP804 timer instead of the generic one USE_SP804_TIMER := 0 + +# Build option to define number of firmware banks, used in firmware update +# metadata structure. +NR_OF_FW_BANKS := 2 + +# Build option to define number of images in firmware bank, used in firmware +# update metadata structure. +NR_OF_IMAGES_IN_FW_BANK := 1