[PATCH v4 1/5] misc: fs_loader: allow returning actual firmware data size in request_firmware_into_buf_via_script()

Weijie Gao weijie.gao at mediatek.com
Mon Sep 8 10:34:02 CEST 2025


It's important to return the actual firmware data size as some
firmware files may have no checksum and need the size as the only
way for firmware validation check.

Signed-off-by: Weijie Gao <weijie.gao at mediatek.com>
---
Changes in v4: none
---
 drivers/misc/fs_loader.c | 6 +++++-
 include/fs_loader.h      | 4 +++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c
index 60296d55f23..87acd385e23 100644
--- a/drivers/misc/fs_loader.c
+++ b/drivers/misc/fs_loader.c
@@ -229,7 +229,8 @@ int request_firmware_into_buf(struct udevice *dev,
 }
 
 int request_firmware_into_buf_via_script(void **buf, size_t max_size,
-					 const char *script_name)
+					 const char *script_name,
+					 size_t *retsize)
 {
 	ulong addr, size;
 	int ret;
@@ -269,6 +270,9 @@ int request_firmware_into_buf_via_script(void **buf, size_t max_size,
 		return -E2BIG;
 	}
 
+	if (retsize)
+		*retsize = size;
+
 	memcpy(*buf, (void *)addr, size);
 
 	return 0;
diff --git a/include/fs_loader.h b/include/fs_loader.h
index a433be1eb99..1cf6d6dd05f 100644
--- a/include/fs_loader.h
+++ b/include/fs_loader.h
@@ -71,6 +71,7 @@ int get_fs_loader(struct udevice **dev);
  * @buf: Pointer to a pointer where the firmware buffer will be stored.
  * @max_size: Maximum allowed size for the firmware to be loaded.
  * @script_name: Name of the U-Boot script to execute for firmware loading.
+ * @retsize: Return the actual firmware data size (optional).
  *
  * Executes a U-Boot script (@script_name) that loads firmware into
  * memory and sets the environment variables 'fw_addr' (address) and
@@ -87,5 +88,6 @@ int get_fs_loader(struct udevice **dev);
  * Return: 0 on success, negative value on error.
  */
 int request_firmware_into_buf_via_script(void **buf, size_t max_size,
-					 const char *script_name);
+					 const char *script_name,
+					 size_t *retsize);
 #endif
-- 
2.34.1



More information about the U-Boot mailing list