15357f83dSManish V Badarkhe /* 25357f83dSManish V Badarkhe * Copyright (c) 2021, Arm Limited. All rights reserved. 35357f83dSManish V Badarkhe * 45357f83dSManish V Badarkhe * SPDX-License-Identifier: BSD-3-Clause 55357f83dSManish V Badarkhe * 65357f83dSManish V Badarkhe * FWU metadata information as per the specification section 4.1: 7e106a78eSSughosh Ganu * https://developer.arm.com/documentation/den0118/latest/ 85357f83dSManish V Badarkhe * 95357f83dSManish V Badarkhe */ 105357f83dSManish V Badarkhe 115357f83dSManish V Badarkhe #ifndef FWU_METADATA_H 125357f83dSManish V Badarkhe #define FWU_METADATA_H 135357f83dSManish V Badarkhe 145357f83dSManish V Badarkhe #include <stdint.h> 155357f83dSManish V Badarkhe #include <tools_share/uuid.h> 165357f83dSManish V Badarkhe 17*a89d58bbSSughosh Ganu #define NR_OF_MAX_FW_BANKS 4 18*a89d58bbSSughosh Ganu 195357f83dSManish V Badarkhe /* Properties of image in a bank */ 205357f83dSManish V Badarkhe struct fwu_image_properties { 215357f83dSManish V Badarkhe 225357f83dSManish V Badarkhe /* UUID of the image in this bank */ 235357f83dSManish V Badarkhe uuid_t img_uuid; 245357f83dSManish V Badarkhe 255357f83dSManish V Badarkhe /* [0]: bit describing the image acceptance status – 265357f83dSManish V Badarkhe * 1 means the image is accepted 275357f83dSManish V Badarkhe * [31:1]: MBZ 285357f83dSManish V Badarkhe */ 295357f83dSManish V Badarkhe uint32_t accepted; 305357f83dSManish V Badarkhe 315357f83dSManish V Badarkhe /* reserved (MBZ) */ 325357f83dSManish V Badarkhe uint32_t reserved; 335357f83dSManish V Badarkhe 345357f83dSManish V Badarkhe } __packed; 355357f83dSManish V Badarkhe 365357f83dSManish V Badarkhe /* Image entry information */ 375357f83dSManish V Badarkhe struct fwu_image_entry { 385357f83dSManish V Badarkhe 395357f83dSManish V Badarkhe /* UUID identifying the image type */ 405357f83dSManish V Badarkhe uuid_t img_type_uuid; 415357f83dSManish V Badarkhe 425357f83dSManish V Badarkhe /* UUID of the storage volume where the image is located */ 435357f83dSManish V Badarkhe uuid_t location_uuid; 445357f83dSManish V Badarkhe 455357f83dSManish V Badarkhe /* Properties of images with img_type_uuid in the different FW banks */ 465357f83dSManish V Badarkhe struct fwu_image_properties img_props[NR_OF_FW_BANKS]; 475357f83dSManish V Badarkhe 485357f83dSManish V Badarkhe } __packed; 495357f83dSManish V Badarkhe 50*a89d58bbSSughosh Ganu /* Firmware Image descriptor */ 51*a89d58bbSSughosh Ganu struct fwu_fw_store_descriptor { 52*a89d58bbSSughosh Ganu 53*a89d58bbSSughosh Ganu /* Number of Banks */ 54*a89d58bbSSughosh Ganu uint8_t num_banks; 55*a89d58bbSSughosh Ganu 56*a89d58bbSSughosh Ganu /* Reserved */ 57*a89d58bbSSughosh Ganu uint8_t reserved; 58*a89d58bbSSughosh Ganu 59*a89d58bbSSughosh Ganu /* Number of images per bank */ 60*a89d58bbSSughosh Ganu uint16_t num_images; 61*a89d58bbSSughosh Ganu 62*a89d58bbSSughosh Ganu /* Size of image_entry(all banks) in bytes */ 63*a89d58bbSSughosh Ganu uint16_t img_entry_size; 64*a89d58bbSSughosh Ganu 65*a89d58bbSSughosh Ganu /* Size of image bank info structure in bytes */ 66*a89d58bbSSughosh Ganu uint16_t bank_info_entry_size; 67*a89d58bbSSughosh Ganu 68*a89d58bbSSughosh Ganu /* Array of fwu_image_entry structs */ 69*a89d58bbSSughosh Ganu struct fwu_image_entry img_entry[NR_OF_IMAGES_IN_FW_BANK]; 70*a89d58bbSSughosh Ganu 71*a89d58bbSSughosh Ganu } __packed; 72*a89d58bbSSughosh Ganu 735357f83dSManish V Badarkhe /* 745357f83dSManish V Badarkhe * FWU metadata filled by the updater and consumed by TF-A for 755357f83dSManish V Badarkhe * various purposes as below: 765357f83dSManish V Badarkhe * 1. Get active FW bank. 775357f83dSManish V Badarkhe * 2. Rollback to previous working FW bank. 785357f83dSManish V Badarkhe * 3. Get properties of all images present in all banks. 795357f83dSManish V Badarkhe */ 805357f83dSManish V Badarkhe struct fwu_metadata { 815357f83dSManish V Badarkhe 825357f83dSManish V Badarkhe /* Metadata CRC value */ 835357f83dSManish V Badarkhe uint32_t crc_32; 845357f83dSManish V Badarkhe 855357f83dSManish V Badarkhe /* Metadata version */ 865357f83dSManish V Badarkhe uint32_t version; 875357f83dSManish V Badarkhe 885357f83dSManish V Badarkhe /* Bank index with which device boots */ 895357f83dSManish V Badarkhe uint32_t active_index; 905357f83dSManish V Badarkhe 915357f83dSManish V Badarkhe /* Previous bank index with which device booted successfully */ 925357f83dSManish V Badarkhe uint32_t previous_active_index; 935357f83dSManish V Badarkhe 94*a89d58bbSSughosh Ganu /* Size of the entire metadata in bytes */ 95*a89d58bbSSughosh Ganu uint32_t metadata_size; 96*a89d58bbSSughosh Ganu 97*a89d58bbSSughosh Ganu /* Offset of the image descriptor structure */ 98*a89d58bbSSughosh Ganu uint16_t desc_offset; 99*a89d58bbSSughosh Ganu 100*a89d58bbSSughosh Ganu /* Reserved */ 101*a89d58bbSSughosh Ganu uint16_t reserved1; 102*a89d58bbSSughosh Ganu 103*a89d58bbSSughosh Ganu /* Bank state */ 104*a89d58bbSSughosh Ganu uint8_t bank_state[NR_OF_MAX_FW_BANKS]; 105*a89d58bbSSughosh Ganu 106*a89d58bbSSughosh Ganu /* Reserved */ 107*a89d58bbSSughosh Ganu uint32_t reserved2; 108*a89d58bbSSughosh Ganu 109*a89d58bbSSughosh Ganu #if PSA_FWU_METADATA_FW_STORE_DESC 1105357f83dSManish V Badarkhe /* Image entry information */ 111*a89d58bbSSughosh Ganu struct fwu_fw_store_descriptor fw_desc; 112*a89d58bbSSughosh Ganu #endif 1135357f83dSManish V Badarkhe 1145357f83dSManish V Badarkhe } __packed; 1155357f83dSManish V Badarkhe 1165357f83dSManish V Badarkhe #endif /* FWU_METADATA_H */ 117