Align FWU metadata v2 with the specification

Align FWU metadata v2 structures, tests and the FWU tool with the
specification.

Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I2d6a0785cf954b1834c5b75376d73f6999ea55e1
diff --git a/components/app/fwu-tool/cmd_print_metadata_v2.cpp b/components/app/fwu-tool/cmd_print_metadata_v2.cpp
index 69e09d7..666dcb2 100644
--- a/components/app/fwu-tool/cmd_print_metadata_v2.cpp
+++ b/components/app/fwu-tool/cmd_print_metadata_v2.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
+ * Copyright (c) 2023-2024, Arm Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -42,15 +42,15 @@
 	printf("\tcrc_32 : 0x%x\n", metadata->crc_32);
 	printf("\tversion : %d\n", metadata->version);
 	printf("\tmetadata_size : %d\n", metadata->metadata_size);
-	printf("\theader_size : %d\n", metadata->header_size);
+	printf("\tdescriptor_offset : %d\n", metadata->descriptor_offset);
 	printf("\tactive_index : %d\n", metadata->active_index);
 	printf("\tprevious_active_index : %d\n", metadata->previous_active_index);
 	printf("\tbank_state : 0x%x 0x%x\n", metadata->bank_state[0], metadata->bank_state[1]);
 
-	if (metadata->metadata_size <= metadata->header_size)
+	if (metadata->metadata_size <= metadata->descriptor_offset)
 		return;
 
-	size_t fw_store_desc_size = metadata->metadata_size - metadata->header_size;
+	size_t fw_store_desc_size = metadata->metadata_size - metadata->descriptor_offset;
 
 	if (fw_store_desc_size < sizeof(fwu_fw_store_desc)) {
 		printf("\tInsufficient space for fw store descriptor\n");
@@ -59,13 +59,13 @@
 
 	/* Print optional fw store descriptor */
 	struct fwu_fw_store_desc *fw_store_desc =
-		(struct fwu_fw_store_desc *)&fetched_object[metadata->header_size];
+		(struct fwu_fw_store_desc *)&fetched_object[metadata->descriptor_offset];
 
 	printf("\tfw_store_desc :\n");
 	printf("\t\tnum_banks : %d\n", fw_store_desc->num_banks);
 	printf("\t\tnum_images : %d\n", fw_store_desc->num_images);
 	printf("\t\timg_entry_size : %d\n", fw_store_desc->img_entry_size);
-	printf("\t\tbank_entry_size : %d\n", fw_store_desc->bank_entry_size);
+	printf("\t\tbank_info_entry_size : %d\n", fw_store_desc->bank_info_entry_size);
 
 	for (unsigned int i = 0; i < fw_store_desc->num_images; i++) {
 		struct fwu_image_entry *img_entry = &fw_store_desc->img_entry[i];
diff --git a/components/service/fwu/fw_store/banked/metadata_serializer/v2/metadata_serializer_v2.c b/components/service/fwu/fw_store/banked/metadata_serializer/v2/metadata_serializer_v2.c
index 1ef61e4..65fd411 100644
--- a/components/service/fwu/fw_store/banked/metadata_serializer/v2/metadata_serializer_v2.c
+++ b/components/service/fwu/fw_store/banked/metadata_serializer/v2/metadata_serializer_v2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023, Arm Limited. All rights reserved.
+ * Copyright (c) 2023-2024, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -104,7 +104,7 @@
 	fw_store_desc->num_banks = BANK_SCHEME_NUM_BANKS;
 	fw_store_desc->num_images = fw_directory_num_images(fw_dir);
 	fw_store_desc->img_entry_size = sizeof(struct fwu_image_entry);
-	fw_store_desc->bank_entry_size = sizeof(struct fwu_img_bank_info);
+	fw_store_desc->bank_info_entry_size = sizeof(struct fwu_img_bank_info);
 
 	return serialize_image_entries(fw_store_desc, fw_dir, bank_tracker);
 }
@@ -126,7 +126,7 @@
 		metadata->crc_32 = 0;
 		metadata->version = 2;
 		metadata->metadata_size = (uint32_t)serialized_size;
-		metadata->header_size = (uint16_t)sizeof(struct fwu_metadata);
+		metadata->descriptor_offset = (uint16_t)sizeof(struct fwu_metadata);
 		metadata->active_index = active_index;
 		metadata->previous_active_index = previous_active_index;
 
@@ -150,9 +150,9 @@
 		}
 
 		/* Serialize optional fw store descriptor if required */
-		if (serialized_size > metadata->header_size)
+		if (serialized_size > metadata->descriptor_offset)
 			status = serialize_fw_store_desc(fw_dir, bank_tracker,
-							 &buf[metadata->header_size]);
+							 &buf[metadata->descriptor_offset]);
 		else
 			status = FWU_STATUS_SUCCESS;
 
@@ -170,7 +170,8 @@
 	const struct fwu_metadata *metadata = (const struct fwu_metadata *)serialized_metadata;
 
 	/* Sanity check size values in header */
-	if ((metadata->header_size > metadata_len) || (metadata->metadata_size > metadata_len))
+	if ((metadata->descriptor_offset > metadata_len) ||
+	    (metadata->metadata_size > metadata_len))
 		return;
 
 	/* Deserialize bank state in header and update bank_tracker to reflect the same state */
@@ -183,20 +184,20 @@
 
 	/* If present, deserialize the fw_store_desc */
 	if (metadata->metadata_size >=
-	    metadata->header_size + offsetof(struct fwu_fw_store_desc, img_entry)) {
+	    metadata->descriptor_offset + offsetof(struct fwu_fw_store_desc, img_entry)) {
 		const struct fwu_fw_store_desc *fw_store_desc =
 			(const struct fwu_fw_store_desc *)(serialized_metadata +
-							   metadata->header_size);
+							   metadata->descriptor_offset);
 
-		size_t fw_store_desc_size = metadata->metadata_size - metadata->header_size;
+		size_t fw_store_desc_size = metadata->metadata_size - metadata->descriptor_offset;
 		size_t total_img_entries_size =
 			fw_store_desc_size - offsetof(struct fwu_fw_store_desc, img_entry);
 		size_t per_img_entry_bank_info_size =
-			fw_store_desc->num_banks * fw_store_desc->bank_entry_size;
+			fw_store_desc->num_banks * fw_store_desc->bank_info_entry_size;
 
 		/* Sanity check fw_store_desc values */
 		if ((fw_store_desc->img_entry_size < sizeof(struct fwu_image_entry)) ||
-		    (fw_store_desc->bank_entry_size < sizeof(struct fwu_img_bank_info)) ||
+		    (fw_store_desc->bank_info_entry_size < sizeof(struct fwu_img_bank_info)) ||
 		    (fw_store_desc->num_banks > BANK_SCHEME_NUM_BANKS) ||
 		    (fw_store_desc->img_entry_size <
 		     offsetof(struct fwu_image_entry, img_bank_info) +
@@ -217,9 +218,9 @@
 			for (size_t bank_index = 0; bank_index < fw_store_desc->num_banks;
 			     bank_index++) {
 				const struct fwu_img_bank_info *bank_info =
-					(const struct fwu_img_bank_info
-						 *)((const uint8_t *)image_entry->img_bank_info +
-						    bank_index * fw_store_desc->bank_entry_size);
+					(const struct fwu_img_bank_info *)((const uint8_t *)
+					image_entry->img_bank_info + bank_index *
+					fw_store_desc->bank_info_entry_size);
 
 				if (bank_info->accepted)
 					bank_tracker_accept(bank_tracker, bank_index, image_index);
diff --git a/components/service/fwu/fw_store/banked/test/metadata_v2_tests.cpp b/components/service/fwu/fw_store/banked/test/metadata_v2_tests.cpp
index 7e59c6f..ecc83b4 100644
--- a/components/service/fwu/fw_store/banked/test/metadata_v2_tests.cpp
+++ b/components/service/fwu/fw_store/banked/test/metadata_v2_tests.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
+ * Copyright (c) 2023-2024, Arm Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -21,26 +21,24 @@
 	/* Check header structure offsets against offsets from spec */
 	UNSIGNED_LONGS_EQUAL(0x00, offsetof(fwu_metadata, crc_32));
 	UNSIGNED_LONGS_EQUAL(0x04, offsetof(fwu_metadata, version));
-	UNSIGNED_LONGS_EQUAL(0x08, offsetof(fwu_metadata, metadata_size));
-	UNSIGNED_LONGS_EQUAL(0x0c, offsetof(fwu_metadata, header_size));
-	/* Note: spec incorrectly says 0x0d - fed back */
-	UNSIGNED_LONGS_EQUAL(0x0e, offsetof(fwu_metadata, active_index));
-	UNSIGNED_LONGS_EQUAL(0x0f, offsetof(fwu_metadata, previous_active_index));
-	UNSIGNED_LONGS_EQUAL(0x10, offsetof(fwu_metadata, bank_state));
+	UNSIGNED_LONGS_EQUAL(0x08, offsetof(fwu_metadata, active_index));
+	UNSIGNED_LONGS_EQUAL(0x0c, offsetof(fwu_metadata, previous_active_index));
+	UNSIGNED_LONGS_EQUAL(0x10, offsetof(fwu_metadata, metadata_size));
+	UNSIGNED_LONGS_EQUAL(0x14, offsetof(fwu_metadata, descriptor_offset));
+	UNSIGNED_LONGS_EQUAL(0x18, offsetof(fwu_metadata, bank_state));
 
 	/* Check header size aligns with expected offset of optional fw_store_desc */
-	/* Note: spec incorrectly says 0x11 - fed back */
-	UNSIGNED_LONGS_EQUAL(0x14, sizeof(struct fwu_metadata));
+	UNSIGNED_LONGS_EQUAL(0x20, sizeof(struct fwu_metadata));
 }
 
 TEST(FwuMetadataV2Tests, checkFwStoreDescStructure)
 {
 	/* Check fw_store_desc structure offsets against offsets from spec */
 	UNSIGNED_LONGS_EQUAL(0x00, offsetof(fwu_fw_store_desc, num_banks));
-	UNSIGNED_LONGS_EQUAL(0x01, offsetof(fwu_fw_store_desc, num_images));
-	UNSIGNED_LONGS_EQUAL(0x03, offsetof(fwu_fw_store_desc, img_entry_size));
-	UNSIGNED_LONGS_EQUAL(0x05, offsetof(fwu_fw_store_desc, bank_entry_size));
-	UNSIGNED_LONGS_EQUAL(0x07, offsetof(fwu_fw_store_desc, img_entry));
+	UNSIGNED_LONGS_EQUAL(0x02, offsetof(fwu_fw_store_desc, num_images));
+	UNSIGNED_LONGS_EQUAL(0x04, offsetof(fwu_fw_store_desc, img_entry_size));
+	UNSIGNED_LONGS_EQUAL(0x06, offsetof(fwu_fw_store_desc, bank_info_entry_size));
+	UNSIGNED_LONGS_EQUAL(0x08, offsetof(fwu_fw_store_desc, img_entry));
 }
 
 TEST(FwuMetadataV2Tests, checkImgEntryStructure)