1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2021, Arm Limited. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu * FWU metadata information as per the specification section 4.1: 7*91f16700Schasinglulu * https://developer.arm.com/documentation/den0118/a/ 8*91f16700Schasinglulu * 9*91f16700Schasinglulu */ 10*91f16700Schasinglulu 11*91f16700Schasinglulu #ifndef FWU_METADATA_H 12*91f16700Schasinglulu #define FWU_METADATA_H 13*91f16700Schasinglulu 14*91f16700Schasinglulu #include <stdint.h> 15*91f16700Schasinglulu #include <tools_share/uuid.h> 16*91f16700Schasinglulu 17*91f16700Schasinglulu /* Properties of image in a bank */ 18*91f16700Schasinglulu struct fwu_image_properties { 19*91f16700Schasinglulu 20*91f16700Schasinglulu /* UUID of the image in this bank */ 21*91f16700Schasinglulu uuid_t img_uuid; 22*91f16700Schasinglulu 23*91f16700Schasinglulu /* [0]: bit describing the image acceptance status – 24*91f16700Schasinglulu * 1 means the image is accepted 25*91f16700Schasinglulu * [31:1]: MBZ 26*91f16700Schasinglulu */ 27*91f16700Schasinglulu uint32_t accepted; 28*91f16700Schasinglulu 29*91f16700Schasinglulu /* reserved (MBZ) */ 30*91f16700Schasinglulu uint32_t reserved; 31*91f16700Schasinglulu 32*91f16700Schasinglulu } __packed; 33*91f16700Schasinglulu 34*91f16700Schasinglulu /* Image entry information */ 35*91f16700Schasinglulu struct fwu_image_entry { 36*91f16700Schasinglulu 37*91f16700Schasinglulu /* UUID identifying the image type */ 38*91f16700Schasinglulu uuid_t img_type_uuid; 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* UUID of the storage volume where the image is located */ 41*91f16700Schasinglulu uuid_t location_uuid; 42*91f16700Schasinglulu 43*91f16700Schasinglulu /* Properties of images with img_type_uuid in the different FW banks */ 44*91f16700Schasinglulu struct fwu_image_properties img_props[NR_OF_FW_BANKS]; 45*91f16700Schasinglulu 46*91f16700Schasinglulu } __packed; 47*91f16700Schasinglulu 48*91f16700Schasinglulu /* 49*91f16700Schasinglulu * FWU metadata filled by the updater and consumed by TF-A for 50*91f16700Schasinglulu * various purposes as below: 51*91f16700Schasinglulu * 1. Get active FW bank. 52*91f16700Schasinglulu * 2. Rollback to previous working FW bank. 53*91f16700Schasinglulu * 3. Get properties of all images present in all banks. 54*91f16700Schasinglulu */ 55*91f16700Schasinglulu struct fwu_metadata { 56*91f16700Schasinglulu 57*91f16700Schasinglulu /* Metadata CRC value */ 58*91f16700Schasinglulu uint32_t crc_32; 59*91f16700Schasinglulu 60*91f16700Schasinglulu /* Metadata version */ 61*91f16700Schasinglulu uint32_t version; 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* Bank index with which device boots */ 64*91f16700Schasinglulu uint32_t active_index; 65*91f16700Schasinglulu 66*91f16700Schasinglulu /* Previous bank index with which device booted successfully */ 67*91f16700Schasinglulu uint32_t previous_active_index; 68*91f16700Schasinglulu 69*91f16700Schasinglulu /* Image entry information */ 70*91f16700Schasinglulu struct fwu_image_entry img_entry[NR_OF_IMAGES_IN_FW_BANK]; 71*91f16700Schasinglulu 72*91f16700Schasinglulu } __packed; 73*91f16700Schasinglulu 74*91f16700Schasinglulu #endif /* FWU_METADATA_H */ 75