xref: /rk3399_ARM-atf/include/drivers/fwu/fwu_metadata.h (revision bd435c525ec49b9b084e8787385efe0f82e3c410)
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 
17a89d58bbSSughosh Ganu #define NR_OF_MAX_FW_BANKS	4
18a89d58bbSSughosh Ganu 
195357f83dSManish V Badarkhe /* Properties of image in a bank */
20*8d08a1dfSSughosh Ganu struct fwu_image_bank_info {
215357f83dSManish V Badarkhe 
22*8d08a1dfSSughosh Ganu 	/* GUID of the image in this bank */
23*8d08a1dfSSughosh Ganu 	struct efi_guid img_guid;
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 
39*8d08a1dfSSughosh Ganu 	/* GUID identifying the image type */
40*8d08a1dfSSughosh Ganu 	struct efi_guid img_type_guid;
415357f83dSManish V Badarkhe 
42*8d08a1dfSSughosh Ganu 	/* GUID of the storage volume where the image is located */
43*8d08a1dfSSughosh Ganu 	struct efi_guid location_guid;
445357f83dSManish V Badarkhe 
45*8d08a1dfSSughosh Ganu 	/* Properties of images with img_type_guid in the different FW banks */
46*8d08a1dfSSughosh Ganu 	struct fwu_image_bank_info img_bank_info[NR_OF_FW_BANKS];
475357f83dSManish V Badarkhe 
485357f83dSManish V Badarkhe } __packed;
495357f83dSManish V Badarkhe 
50a89d58bbSSughosh Ganu /* Firmware Image descriptor */
51a89d58bbSSughosh Ganu struct fwu_fw_store_descriptor {
52a89d58bbSSughosh Ganu 
53a89d58bbSSughosh Ganu 	/* Number of Banks */
54a89d58bbSSughosh Ganu 	uint8_t num_banks;
55a89d58bbSSughosh Ganu 
56a89d58bbSSughosh Ganu 	/* Reserved */
57a89d58bbSSughosh Ganu 	uint8_t reserved;
58a89d58bbSSughosh Ganu 
59a89d58bbSSughosh Ganu 	/* Number of images per bank */
60a89d58bbSSughosh Ganu 	uint16_t num_images;
61a89d58bbSSughosh Ganu 
62a89d58bbSSughosh Ganu 	/* Size of image_entry(all banks) in bytes */
63a89d58bbSSughosh Ganu 	uint16_t img_entry_size;
64a89d58bbSSughosh Ganu 
65a89d58bbSSughosh Ganu 	/* Size of image bank info structure in bytes */
66a89d58bbSSughosh Ganu 	uint16_t bank_info_entry_size;
67a89d58bbSSughosh Ganu 
68a89d58bbSSughosh Ganu 	/* Array of fwu_image_entry structs */
69a89d58bbSSughosh Ganu 	struct fwu_image_entry img_entry[NR_OF_IMAGES_IN_FW_BANK];
70a89d58bbSSughosh Ganu 
71a89d58bbSSughosh Ganu } __packed;
72a89d58bbSSughosh 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 
94a89d58bbSSughosh Ganu 	/* Size of the entire metadata in bytes */
95a89d58bbSSughosh Ganu 	uint32_t metadata_size;
96a89d58bbSSughosh Ganu 
97a89d58bbSSughosh Ganu 	/* Offset of the image descriptor structure */
98a89d58bbSSughosh Ganu 	uint16_t desc_offset;
99a89d58bbSSughosh Ganu 
100a89d58bbSSughosh Ganu 	/* Reserved */
101a89d58bbSSughosh Ganu 	uint16_t reserved1;
102a89d58bbSSughosh Ganu 
103a89d58bbSSughosh Ganu 	/* Bank state */
104a89d58bbSSughosh Ganu 	uint8_t bank_state[NR_OF_MAX_FW_BANKS];
105a89d58bbSSughosh Ganu 
106a89d58bbSSughosh Ganu 	/* Reserved */
107a89d58bbSSughosh Ganu 	uint32_t reserved2;
108a89d58bbSSughosh Ganu 
109a89d58bbSSughosh Ganu #if PSA_FWU_METADATA_FW_STORE_DESC
1105357f83dSManish V Badarkhe 	/* Image entry information */
111a89d58bbSSughosh Ganu 	struct fwu_fw_store_descriptor fw_desc;
112a89d58bbSSughosh Ganu #endif
1135357f83dSManish V Badarkhe 
1145357f83dSManish V Badarkhe } __packed;
1155357f83dSManish V Badarkhe 
1165357f83dSManish V Badarkhe #endif /* FWU_METADATA_H */
117