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