Files
u-boot/include
Lucien.Jheng b5da53046c misc: fs_loader: Add request_firmware_into_buf_via_script() for flexible firmware loading via U-Boot script
This commit introduces a new API,
request_firmware_into_buf_via_script(), to the fs_loader framework.
This function allows firmware to be loaded into memory using
a user-defined U-Boot script, providing greater flexibility for
firmware loading scenarios that cannot be handled by static file
paths or device/partition selection alone.

Key features:
- The API runs a specified U-Boot script (by name), which is responsible
  for loading the firmware into memory by any means (e.g., load from MMC, USB, network, etc.).
- The script must set two environment variables: 'fw_addr'
  (the memory address where the firmware is loaded) and
  'fw_size' (the size of the firmware in bytes).
- The function validates these variables, copies the firmware into a newly
  allocated buffer (using memdup), and returns the pointer
  via the provided double pointer argument.
- The maximum allowed firmware size is checked to prevent buffer overflows.
- The environment variables are cleared after use to avoid stale data.
- Detailed error messages are provided for all failure conditions to aid debugging.

Usage example:
1. Define a U-Boot script in the environment that loads the firmware
   and sets the required variables:
   => env set my_fw_script 'load mmc 0:1 ${loadaddr} firmware.bin &&
   env set fw_addr ${loadaddr} && env set fw_size ${filesize}'

2. In your code, call the new API:
   void *fw_buf = NULL;
   int ret = request_firmware_into_buf_via_script(&fw_buf, 0x46000000, "my_fw_script");
   if (ret < 0)
		return ret;

This approach allows board integrators and users to customize the firmware
loading process without modifying the source code,
simply by changing the script in the U-Boot environment.

Signed-off-by: Lucien.Jheng <lucienzx159@gmail.com>
Reviewed-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
[trini: Fix printf of size_t needing to use %zx]
Signed-off-by: Tom Rini <trini@konsulko.com>
2025-08-26 14:39:15 -06:00
..
2025-08-06 08:36:59 +02:00
2024-10-17 03:12:47 +02:00
2025-08-25 16:20:48 +02:00
2025-06-02 17:26:15 -06:00
2024-07-29 15:01:04 -06:00
2023-12-21 08:54:37 -05:00
2025-07-23 17:37:14 -06:00
2024-08-26 14:05:38 -06:00
2025-06-12 16:14:33 -06:00
2024-02-13 15:38:49 -05:00
2024-07-29 15:01:04 -06:00
2025-06-02 17:26:15 -06:00
2025-06-11 09:42:55 +02:00
2025-05-29 08:29:16 -06:00
2025-06-02 17:26:15 -06:00
2025-08-06 08:41:30 +02:00
2025-06-02 17:26:15 -06:00
2024-06-14 12:59:07 -06:00
2024-07-29 15:01:04 -06:00
2023-05-02 14:23:34 -04:00
2025-06-02 17:26:15 -06:00
2024-09-24 13:41:20 -06:00
2025-08-25 16:20:48 +02:00
2025-05-13 11:30:09 -06:00
2024-07-29 15:01:04 -06:00
2025-06-27 11:48:20 -06:00
2024-07-29 15:01:04 -06:00
2023-11-07 14:50:51 -05:00
2025-06-02 17:26:16 -06:00
2024-07-29 15:01:04 -06:00
2024-08-13 06:23:15 +02:00
2025-08-06 08:41:30 +02:00
2025-06-02 17:26:16 -06:00
2025-06-23 16:15:23 -06:00
2025-03-10 07:41:16 +01:00
2023-12-21 11:59:49 -05:00
2025-04-03 11:41:54 -06:00
2023-12-21 08:54:37 -05:00
2025-04-03 16:54:49 -06:00
2024-07-29 15:01:04 -06:00
2025-03-11 23:06:18 +01:00
2024-07-29 15:01:04 -06:00
2024-10-24 11:21:48 -06:00
2024-07-29 15:01:04 -06:00
2024-07-29 15:01:04 -06:00
2025-07-08 13:11:12 -06:00
2025-05-29 08:30:25 -06:00
2025-07-08 11:07:37 +02:00
2025-08-18 15:47:58 +02:00
2024-11-25 23:07:37 -03:00
2024-09-30 17:48:12 -06:00
2025-07-08 13:11:12 -06:00
2025-05-05 14:16:50 -06:00
2025-03-19 03:38:51 +01:00
2024-09-12 17:35:37 +02:00
2023-12-21 08:54:37 -05:00
2025-07-08 13:11:12 -06:00
2025-05-29 18:35:49 -06:00
2025-01-14 14:29:29 -06:00
2024-07-29 15:01:04 -06:00
2025-04-16 19:57:19 -06:00
2025-06-13 13:22:53 -06:00
2025-02-28 08:41:54 -06:00
2023-02-10 07:41:40 -05:00
2024-07-29 15:01:04 -06:00
2025-02-11 20:10:58 -06:00
2025-01-07 15:45:51 +02:00
2025-01-01 10:40:33 -06:00
2025-07-11 10:43:29 -06:00
2024-07-29 15:01:04 -06:00
2024-07-29 15:01:04 -06:00
2025-02-03 16:01:36 -06:00
2024-11-13 08:14:23 -06:00
2024-07-29 15:01:04 -06:00