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....@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