xref: /rk3399_ARM-atf/include/drivers/fwu/fwu_metadata.h (revision a89d58bb204c00db260225859bce0b55aa5e2385)
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