]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
fwu: add helper to get image GUID by type and bank index
authorDario Binacchi <dario.binacchi@amarulasolutions.com>
Thu, 30 Apr 2026 08:06:07 +0000 (10:06 +0200)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Tue, 12 May 2026 13:52:01 +0000 (15:52 +0200)
Introduce fwu_mdata_get_image_guid() to retrieve a specific image GUID
from the FWU metadata based on the bank index and image type GUID.

This allows identifying the correct partition in multi-bank (A/B)
scenarios, ensuring the correct image is targeted depending on the
current bank.

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
include/fwu.h
lib/fwu_updates/fwu.c

index 9cee8fb085cb6d6d3d67b54c6c5cb91999e7b53f..68a51fb4296bc1b7a2501974bc25154068cd7d1c 100644 (file)
@@ -396,6 +396,17 @@ void fwu_populate_mdata_image_info(struct fwu_data *data);
  */
 int fwu_get_mdata_size(uint32_t *mdata_size);
 
+/**
+ * fwu_mdata_get_image_guid() - Get image GUID for a type and bank
+ * @image_guid: Pointer to be filled with the found image GUID
+ * @image_type_guid: Pointer to the image type GUID to search for
+ * @bank_index: Index of the bank
+ *
+ * Return: 0 if OK, -ve on error
+ */
+int fwu_mdata_get_image_guid(efi_guid_t *image_guid,
+                            const efi_guid_t *image_type_guid, u32 bank_index);
+
 /**
  * fwu_state_machine_updates() - Update FWU state of the platform
  * @state: FWU bank state
index e82600a29a40060923dab4e1c3d24bbc3ed4fc94..2b11e5da061dedf97abd1f36e18d865c182fd555 100644 (file)
@@ -243,6 +243,39 @@ int fwu_sync_mdata(struct fwu_mdata *mdata, int part)
        return 0;
 }
 
+/**
+ * fwu_mdata_get_image_guid() - Get image GUID for a type and bank
+ * @image_guid: Pointer to be filled with the found image GUID
+ * @image_type_guid: Pointer to the image type GUID to search for
+ * @bank_index: Index of the bank
+ *
+ * Return: 0 if OK, -ve on error
+ */
+int fwu_mdata_get_image_guid(efi_guid_t *image_guid,
+                            const efi_guid_t *image_type_guid, u32 bank_index)
+{
+       struct fwu_data *data = &g_fwu_data;
+       struct fwu_image_entry *image;
+       int i;
+
+       if (bank_index >= data->num_banks)
+               return -EINVAL;
+
+       for (i = 0; i < data->num_images; i++) {
+               image = &data->fwu_images[i];
+
+               if (!guidcmp(image_type_guid, &image->image_type_guid)) {
+                       struct fwu_image_bank_info *bank;
+
+                       bank = &image->img_bank_info[bank_index];
+                       guidcpy(image_guid, &bank->image_guid);
+                       return 0;
+               }
+       }
+
+       return -ENOENT;
+}
+
 /**
  * fwu_mdata_copies_allocate() - Allocate memory for metadata
  * @mdata_size: Size of the metadata structure