]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
misc: fs_loader: allow returning actual firmware data size in request_firmware_into_b...
authorWeijie Gao <weijie.gao@mediatek.com>
Mon, 8 Sep 2025 08:34:02 +0000 (16:34 +0800)
committerTom Rini <trini@konsulko.com>
Thu, 18 Sep 2025 21:43:05 +0000 (15:43 -0600)
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@mediatek.com>
drivers/misc/fs_loader.c
include/fs_loader.h

index 60296d55f23631d503bcee87ca2a7e020133b182..87acd385e231b1a6a74797e3b5130a9f381b33bf 100644 (file)
@@ -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;
index a433be1eb99a7bf8a97832f833fdce673d7d451b..1cf6d6dd05faf8a38050a7a68fd2ab86ade72518 100644 (file)
@@ -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