[3/4] fwu: add helper to get image GUID by type and bank index

Message ID 20260328171624.2377527-4-dario.binacchi@amarulasolutions.com
State New
Headers show
Series
  • Support metadata-driven A/B boot for STM32MP25
Related show

Commit Message

Dario Binacchi March 28, 2026, 5:15 p.m. UTC
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>
---

 include/fwu.h         |  3 +++
 lib/fwu_updates/fwu.c | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+)

Comments

Simon Glass March 31, 2026, 3 p.m. UTC | #1
Hi Dario,

On 2026-03-28T17:15:13, Dario Binacchi
<dario.binacchi@amarulasolutions.com> wrote:
> diff --git a/include/fwu.h b/include/fwu.h
> @@ -394,6 +394,9 @@ int fwu_get_mdata_size(uint32_t *mdata_size);
> +int fwu_mdata_get_image_guid(efi_guid_t *image_guid, efi_guid_t image_type_guid,
> +                          u32 bank_index);

Please add a function comment like the other.

Also, all other functions in this file pass efi_guid_t by pointer. How
about 'const efi_guid_t *image_type_guid' instead?

> diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
> @@ -243,6 +243,30 @@ int fwu_sync_mdata(struct fwu_mdata *mdata, int part)
> +}
>  /**
>   * fwu_mdata_copies_allocate() - Allocate memory for metadata

Missing blank line between the closing brace of the new function and
the doc comment of fwu_mdata_copies_allocate().

Regards,
Simon

To unsubscribe from this group and stop receiving emails from it, send an email to linux-amarula+unsubscribe@amarulasolutions.com.

Patch

diff --git a/include/fwu.h b/include/fwu.h
index e7bd1d492af1..47242629e404 100644
--- a/include/fwu.h
+++ b/include/fwu.h
@@ -394,6 +394,9 @@  void fwu_populate_mdata_image_info(struct fwu_data *data);
  */
 int fwu_get_mdata_size(uint32_t *mdata_size);
 
+int fwu_mdata_get_image_guid(efi_guid_t *image_guid, efi_guid_t image_type_guid,
+			     u32 bank_index);
+
 /**
  * fwu_state_machine_updates() - Update FWU state of the platform
  * @trial_state: Is platform transitioning into Trial State
diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
index 0f5ef2ba5153..a2857d369b92 100644
--- a/lib/fwu_updates/fwu.c
+++ b/lib/fwu_updates/fwu.c
@@ -243,6 +243,30 @@  int fwu_sync_mdata(struct fwu_mdata *mdata, int part)
 	return 0;
 }
 
+int fwu_mdata_get_image_guid(efi_guid_t *image_guid, 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