On Mon, Feb 16, 2026 at 02:35:36PM +0100, Kory Maincent wrote: > The dependency on fwu_mdata.h creates unnecessary configuration > requirements. To generate metadata V1, CONFIG_FWU_MDATA_V1 must be > enabled, which in turn requires enabling FWU_MULTI_BANK_UPDATE, > EFI_CAPSULE_ON_DISK, PARTITION_TYPE_GUID, and other unrelated configs. > This is not suitable for a simple standalone tool. > > Additionally, even with the "-v 1" option to generate V1 metadata, the > tool will still include the firmware store description if > CONFIG_FWU_MDATA_V1 is not enabled. This structure should only be > present in metadata V2. > > Replace the fwu_mdata.h dependency with the new fwumdata header to make > the tool compatible with both V1 and V2 without requiring any defconfig > changes. This also uses the access helper functions from the header to > eliminate code duplication. > > Signed-off-by: Kory Maincent <[email protected]> > ---
Acked-by: Sughosh Ganu <[email protected]> Tested-by: Sughosh Ganu <[email protected]> -sughosh > > Change in v2: > - Fix mdata->desc_offset value. > --- > tools/fwumdata_src/mkfwumdata.c | 96 > ++++++++--------------------------------- > 1 file changed, 17 insertions(+), 79 deletions(-) > > diff --git a/tools/fwumdata_src/mkfwumdata.c b/tools/fwumdata_src/mkfwumdata.c > index 8b25539fd57..b8b60473b91 100644 > --- a/tools/fwumdata_src/mkfwumdata.c > +++ b/tools/fwumdata_src/mkfwumdata.c > @@ -17,26 +17,7 @@ > #include <u-boot/crc.h> > #include <uuid/uuid.h> > > -typedef uint8_t u8; > -typedef int16_t s16; > -typedef uint16_t u16; > -typedef uint32_t u32; > -typedef uint64_t u64; > - > -#undef CONFIG_FWU_NUM_BANKS > -#undef CONFIG_FWU_NUM_IMAGES_PER_BANK > - > -/* This will dynamically allocate the fwu_mdata */ > -#define CONFIG_FWU_NUM_BANKS 0 > -#define CONFIG_FWU_NUM_IMAGES_PER_BANK 0 > - > -/* version 2 supports maximum of 4 banks */ > -#define MAX_BANKS_V2 4 > - > -#define BANK_INVALID (u8)0xFF > -#define BANK_ACCEPTED (u8)0xFC > - > -#include <fwu_mdata.h> > +#include "fwumdata.h" > > static const char *opts_short = "b:i:a:p:v:V:gh"; > > @@ -116,6 +97,7 @@ static struct fwu_mdata_object *fwu_alloc_mdata(size_t > images, size_t banks, > sizeof(struct fwu_image_bank_info) * banks) * images; > } else { > mobj->size = sizeof(struct fwu_mdata) + > + sizeof(struct fwu_mdata_ext) + > sizeof(struct fwu_fw_store_desc) + > (sizeof(struct fwu_image_entry) + > sizeof(struct fwu_image_bank_info) * banks) * images; > @@ -146,50 +128,6 @@ alloc_err: > return NULL; > } > > -static struct fwu_image_entry * > -fwu_get_image(struct fwu_mdata_object *mobj, size_t idx) > -{ > - size_t offset; > - > - if (mobj->version == 1) { > - offset = sizeof(struct fwu_mdata) + > - (sizeof(struct fwu_image_entry) + > - sizeof(struct fwu_image_bank_info) * mobj->banks) * > - idx; > - } else { > - offset = sizeof(struct fwu_mdata) + > - sizeof(struct fwu_fw_store_desc) + > - (sizeof(struct fwu_image_entry) + > - sizeof(struct fwu_image_bank_info) * mobj->banks) * > - idx; > - } > - > - return (struct fwu_image_entry *)((char *)mobj->mdata + offset); > -} > - > -static struct fwu_image_bank_info * > -fwu_get_bank(struct fwu_mdata_object *mobj, size_t img_idx, size_t bnk_idx) > -{ > - size_t offset; > - > - if (mobj->version == 1) { > - offset = sizeof(struct fwu_mdata) + > - (sizeof(struct fwu_image_entry) + > - sizeof(struct fwu_image_bank_info) * mobj->banks) * > - img_idx + sizeof(struct fwu_image_entry) + > - sizeof(struct fwu_image_bank_info) * bnk_idx; > - } else { > - offset = sizeof(struct fwu_mdata) + > - sizeof(struct fwu_fw_store_desc) + > - (sizeof(struct fwu_image_entry) + > - sizeof(struct fwu_image_bank_info) * mobj->banks) * > - img_idx + sizeof(struct fwu_image_entry) + > - sizeof(struct fwu_image_bank_info) * bnk_idx; > - } > - > - return (struct fwu_image_bank_info *)((char *)mobj->mdata + offset); > -} > - > /** > * convert_uuid_to_guid() - convert UUID to GUID > * @buf: UUID binary > @@ -239,11 +177,13 @@ static int > fwu_parse_fill_image_uuid(struct fwu_mdata_object *mobj, > size_t idx, char *uuids) > { > - struct fwu_image_entry *image = fwu_get_image(mobj, idx); > struct fwu_image_bank_info *bank; > + struct fwu_image_entry *image; > char *p = uuids, *uuid; > int i; > > + image = fwu_get_image_entry(mobj->mdata, mobj->version, > + mobj->banks, idx); > if (!image) > return -ENOENT; > > @@ -266,7 +206,8 @@ fwu_parse_fill_image_uuid(struct fwu_mdata_object *mobj, > > /* Fill bank image-UUID */ > for (i = 0; i < mobj->banks; i++) { > - bank = fwu_get_bank(mobj, idx, i); > + bank = fwu_get_bank_info(mobj->mdata, mobj->version, > + mobj->banks, idx, i); > if (!bank) > return -ENOENT; > bank->accepted = 1; > @@ -281,25 +222,22 @@ fwu_parse_fill_image_uuid(struct fwu_mdata_object *mobj, > return 0; > } > > -#if defined(CONFIG_FWU_MDATA_V1) > -static void fwu_fill_version_specific_mdata(struct fwu_mdata_object *mobj) > -{ > -} > -#else > static void fwu_fill_version_specific_mdata(struct fwu_mdata_object *mobj) > { > int i; > struct fwu_fw_store_desc *fw_desc; > - struct fwu_mdata *mdata = mobj->mdata; > + struct fwu_mdata_ext *mdata_ext; > > - mdata->metadata_size = mobj->size; > - mdata->desc_offset = sizeof(struct fwu_mdata); > + mdata_ext = fwu_get_fw_mdata_ext(mobj->mdata); > + mdata_ext->metadata_size = mobj->size; > + mdata_ext->desc_offset = sizeof(struct fwu_mdata) + > + sizeof(struct fwu_mdata_ext); > > for (i = 0; i < MAX_BANKS_V2; i++) > - mdata->bank_state[i] = i < mobj->banks ? > - BANK_ACCEPTED : BANK_INVALID; > + mdata_ext->bank_state[i] = i < mobj->banks ? > + FWU_BANK_ACCEPTED : FWU_BANK_INVALID; > > - fw_desc = (struct fwu_fw_store_desc *)((u8 *)mdata + sizeof(*mdata)); > + fw_desc = fwu_get_fw_desc(mobj->mdata); > fw_desc->num_banks = mobj->banks; > fw_desc->num_images = mobj->images; > fw_desc->img_entry_size = sizeof(struct fwu_image_entry) + > @@ -307,7 +245,6 @@ static void fwu_fill_version_specific_mdata(struct > fwu_mdata_object *mobj) > fw_desc->bank_info_entry_size = > sizeof(struct fwu_image_bank_info); > } > -#endif /* CONFIG_FWU_MDATA_V1 */ > > /* Caller must ensure that @uuids[] has @mobj->images entries. */ > static int fwu_parse_fill_uuids(struct fwu_mdata_object *mobj, char *uuids[]) > @@ -320,7 +257,8 @@ static int fwu_parse_fill_uuids(struct fwu_mdata_object > *mobj, char *uuids[]) > mdata->active_index = active_bank; > mdata->previous_active_index = previous_bank; > > - fwu_fill_version_specific_mdata(mobj); > + if (mdata->version == 2) > + fwu_fill_version_specific_mdata(mobj); > > for (i = 0; i < mobj->images; i++) { > ret = fwu_parse_fill_image_uuid(mobj, i, uuids[i]); > > -- > 2.43.0 > -sughosh

