From: Weijie Gao Date: Mon, 8 Sep 2025 08:34:02 +0000 (+0800) Subject: misc: fs_loader: allow returning actual firmware data size in request_firmware_into_b... X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=63585689686fee83b382edacad249a4ec35d7c3d;p=thirdparty%2Fu-boot.git misc: fs_loader: allow returning actual firmware data size in request_firmware_into_buf_via_script() 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 --- 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