[PATCH v5 12/24] efi_loader: fwu_arm_psa: Add set_image() support

abdellatif.elkhlifi at arm.com abdellatif.elkhlifi at arm.com
Fri Sep 26 16:13:39 CEST 2025


From: Abdellatif El Khlifi <abdellatif.elkhlifi at arm.com>

Implement set_image() using efi_firmware_raw_set_image()

Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi at arm.com>
Signed-off-by: Davidson kumaresan <davidson.kumaresan at arm.com>
Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
Cc: Sughosh Ganu <sughosh.ganu at linaro.org>
Cc: Tom Rini <trini at konsulko.com>
Cc: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Cc: Simon Glass <sjg at chromium.org>
Cc: Michal Simek <michal.simek at amd.com>
Cc: Marek Vasut <marek.vasut+renesas at mailbox.org>
Cc: Casey Connolly <casey.connolly at linaro.org>
Cc: Adriano Cordova <adrianox at gmail.com>

---

Changelog of changes:
===========================

v5:

* As suggested by Ilias: Use efi_fill_image_desc_array() for PSA
  instead of changing efi_firmware_get_image_info()

v2:

* Following Heinrich comment: The changes at efi_firmware_raw_set_image()
    simplified by removing the "else" so it is clear we are just adding FWU_ARM_PSA
    support and skipping the use of DFU in case of FWU_ARM_PSA

v1:

* Add set_image and get_image_info support for FWU_ARM_PSA

 lib/efi_loader/efi_firmware.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c
index 75501e21557..46d500966ad 100644
--- a/lib/efi_loader/efi_firmware.c
+++ b/lib/efi_loader/efi_firmware.c
@@ -14,6 +14,7 @@
 #include <efi_variable.h>
 #include <env.h>
 #include <fwu.h>
+#include <fwu_arm_psa.h>
 #include <image.h>
 #include <signatures.h>
 
@@ -312,14 +313,13 @@ static efi_status_t efi_gen_capsule_guids(void)
  *
  * Return		status code
  */
-static efi_status_t efi_fill_image_desc_array(
-	efi_uintn_t *image_info_size,
-	struct efi_firmware_image_descriptor *image_info,
-	u32 *descriptor_version,
-	u8 *descriptor_count,
-	efi_uintn_t *descriptor_size,
-	u32 *package_version,
-	u16 **package_version_name)
+efi_status_t __weak efi_fill_image_desc_array(efi_uintn_t *image_info_size,
+					      struct efi_firmware_image_descriptor *image_info,
+					      u32 *descriptor_version,
+					      u8 *descriptor_count,
+					      efi_uintn_t *descriptor_size,
+					      u32 *package_version,
+					      u16 **package_version_name)
 {
 	size_t total_size;
 	struct efi_fw_image *fw_array;
@@ -749,6 +749,15 @@ efi_status_t EFIAPI efi_firmware_raw_set_image(
 	if (status != EFI_SUCCESS)
 		return EFI_EXIT(status);
 
+	if (IS_ENABLED(CONFIG_FWU_ARM_PSA)) {
+		if (fwu_update_image(image, image_index, image_size))
+			return EFI_EXIT(EFI_DEVICE_ERROR);
+
+		efi_firmware_set_fmp_state_var(&state, image_index);
+
+		return EFI_EXIT(EFI_SUCCESS);
+	}
+
 	/*
 	 * dfu_alt_num is assigned from 0 while image_index starts from 1.
 	 * dfu_alt_num is calculated by (image_index - 1) when multi bank update
-- 
2.43.0



More information about the U-Boot mailing list