public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH 0/5] misc: fs_loader: reorg and split to FS and FW loader + FIP loader
@ 2026-03-03 13:29 Christian Marangi
  2026-03-03 13:29 ` [PATCH 1/5] misc: fs_loader: fix ubifs not unmounted on dev_get_priv error Christian Marangi
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Christian Marangi @ 2026-03-03 13:29 UTC (permalink / raw)
  To: Tom Rini, Simon Glass, Casey Connolly, Christian Marangi,
	Peng Fan, Quentin Schulz, Harsha Vardhan V M, Neha Malcom Francis,
	Chen-Yu Tsai, Jamie Gibbons, Justin Klaassen, Leo Yu-Chi Liang,
	Weijie Gao, Marek Vasut, Lucien.Jheng, Sky Huang,
	Alif Zakuan Yuslaimi, u-boot

This series mainly rework the FS loader to permit reading firmware from
container that are not exactly a readable filesystem.

One scenario is when a firmware is shipped in a FIP container as
a generic blob with an UUID.

FIP are mostly used on ARM in the context of ATF.
In such context U-Boot is loaded as BL31 and the PHY firmware
can't be stored in the FIT image for the kernel as U-Boot should
not depend on the presence of the kernel to correctly enable PHY
for Ethernet port.

To handle such case the PHY firmware is stored in FIP with a
predictable UUID.

One example is with Airoha 8811H firmware where the FIP can
have a blob with UUID "d39d2cf2-9bd0-3ca7-93e9-e71b4f9250b2".
(generated from command "uuidgen -n @dns --md5 --name en8811h.bin")

With these example DTS entry:

fs_loader0: fip-loader {
	bootph-all;
	compatible = "u-boot,fip-loader";
	phandlepart = <&mmc0 0>;
	partoffset = <0x100>;
};

mdio {
  en8811: ethernet-phy@f {
    reg = <0xf>;
    firmware-name = "d39d2cf2-9bd0-3ca7-93e9-e71b4f9250b2";
    firmware-loader = <&fs_loader0>;
  };
};

And PHY driver using the get_fw_loader_from_node() and the
common request_firmware_into_buf() it's possible to
load the PHY firmware transparently by just declaring
the required entry in the DTS.

get_fw_loader_from_node() is implemented to actual get the
loader from DT. This was something that was already in mind
from when the FS loader was implemented but then it was
never implemented in favor of a single loader per device.

The first patch is a minor fixup for something that probably
won't ever happen.

The second one is a good reworking of the FS and FW loader
moving the internal struct to a dedicated header. (this is
really to enforce what drivers should use and what
driver should not mess with)

Then there is the request_firmware_size() new OP to get only
the size of the firmware. Useful for case where the firmware
size is not always the same and change across different version.
(the patter might be get size -> alloc buffer -> get firmware).

Then the FIP loader as a basic parser of FIP. This only
read the FIP header, loop all the entry and search for a
matching UUID. If nothing is found then no firmware blob.
Very simple implementation.

This is being CI tested on [0]

[0] https://github.com/u-boot/u-boot/pull/884

Christian Marangi (5):
  misc: fs_loader: fix ubifs not unmounted on dev_get_priv error
  misc: fs_loader: reorganize and split to FS and FW loader
  misc: fw_loader: implement generic get_fw_loader_from_node()
  misc: fw_loader: introduce FIP loader driver
  misc: fw_loader: implement request_firmware_size() OP

 drivers/misc/Kconfig                     |  16 +
 drivers/misc/Makefile                    |   2 +-
 drivers/misc/fw_loader/Makefile          |   5 +
 drivers/misc/fw_loader/fip_loader.c      | 610 +++++++++++++++++++++++
 drivers/misc/{ => fw_loader}/fs_loader.c | 180 +++----
 drivers/misc/fw_loader/fw_loader.c       | 184 +++++++
 drivers/misc/fw_loader/internal.h        |  63 +++
 include/dm/uclass-id.h                   |   3 +-
 include/fs_loader.h                      |  47 +-
 include/fw_loader.h                      |  41 ++
 10 files changed, 980 insertions(+), 171 deletions(-)
 create mode 100644 drivers/misc/fw_loader/Makefile
 create mode 100644 drivers/misc/fw_loader/fip_loader.c
 rename drivers/misc/{ => fw_loader}/fs_loader.c (62%)
 create mode 100644 drivers/misc/fw_loader/fw_loader.c
 create mode 100644 drivers/misc/fw_loader/internal.h

-- 
2.51.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-03-03 13:53 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-03 13:29 [PATCH 0/5] misc: fs_loader: reorg and split to FS and FW loader + FIP loader Christian Marangi
2026-03-03 13:29 ` [PATCH 1/5] misc: fs_loader: fix ubifs not unmounted on dev_get_priv error Christian Marangi
2026-03-03 13:38   ` Daniel Golle
2026-03-03 13:43     ` Christian Marangi
2026-03-03 13:53       ` Daniel Golle
2026-03-03 13:29 ` [PATCH 2/5] misc: fs_loader: reorganize and split to FS and FW loader Christian Marangi
2026-03-03 13:29 ` [PATCH 3/5] misc: fw_loader: implement generic get_fw_loader_from_node() Christian Marangi
2026-03-03 13:29 ` [PATCH 4/5] misc: fw_loader: introduce FIP loader driver Christian Marangi
2026-03-03 13:29 ` [PATCH 5/5] misc: fw_loader: implement request_firmware_size() OP Christian Marangi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox