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)