public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Daniel Golle <daniel@makrotopia.org>
To: Tom Rini <trini@konsulko.com>
Cc: "Simon Glass" <sjg@chromium.org>,
	"Quentin Schulz" <quentin.schulz@cherry.de>,
	"Kory Maincent" <kory.maincent@bootlin.com>,
	"Mattijs Korpershoek" <mkorpershoek@kernel.org>,
	"Martin Schwan" <m.schwan@phytec.de>,
	"Anshul Dalal" <anshuld@ti.com>,
	"Ilias Apalodimas" <ilias.apalodimas@linaro.org>,
	"Sughosh Ganu" <sughosh.ganu@arm.com>,
	"Aristo Chen" <jj251510319013@gmail.com>,
	"牛 志宏" <Zone.Niuzh@hotmail.com>,
	"Marek Vasut" <marek.vasut+renesas@mailbox.org>,
	"Heinrich Schuchardt" <xypron.glpk@gmx.de>,
	"Wolfgang Wallner" <wolfgang.wallner@at.abb.com>,
	"Frank Wunderlich" <frank-w@public-files.de>,
	"David Lechner" <dlechner@baylibre.com>,
	"Osama Abdelkader" <osama.abdelkader@gmail.com>,
	"Mikhail Kshevetskiy" <mikhail.kshevetskiy@iopsys.eu>,
	"Michael Trimarchi" <michael@amarulasolutions.com>,
	"Miquel Raynal" <miquel.raynal@bootlin.com>,
	"Andrew Goodbody" <andrew.goodbody@linaro.org>,
	"Yegor Yefremov" <yegorslists@googlemail.com>,
	"Mike Looijmans" <mike.looijmans@topic.nl>,
	"Weijie Gao" <weijie.gao@mediatek.com>,
	"Alexander Stein" <alexander.stein@ew.tq-group.com>,
	"Neil Armstrong" <neil.armstrong@linaro.org>,
	"Mayuresh Chitale" <mchitale@ventanamicro.com>,
	"Paul HENRYS" <paul.henrys_ext@softathome.com>,
	u-boot@lists.denx.de, "John Crispin" <john@phrozen.org>,
	"Paul Spooren" <mail@aparcar.org>
Subject: Re: [RFC PATCH 00/20] boot: add OpenWrt boot method and on-demand FIT loading
Date: Tue, 17 Feb 2026 21:07:31 +0000	[thread overview]
Message-ID: <aZTYk8E6r4S5zo_Z@makrotopia.org> (raw)
In-Reply-To: <20260217193534.GI2747538@bill-the-cat>

On Tue, Feb 17, 2026 at 01:35:34PM -0600, Tom Rini wrote:
> On Tue, Feb 17, 2026 at 07:28:03PM +0000, Daniel Golle wrote:
> > On Tue, Feb 17, 2026 at 12:13:58PM -0600, Tom Rini wrote:
> > > On Mon, Feb 16, 2026 at 09:21:14PM +0000, Daniel Golle wrote:
> > > > Hi all,
> > > > 
> > > > This RFC series adds a new boot method for OpenWrt's "uImage.FIT with
> > > > embedded rootfs" firmware model, along with the underlying infrastructure
> > > > to load FIT images on-demand directly from storage devices without copying
> > > > them entirely to RAM first.
> > > > 
> > > > I would like to discuss the design with U-Boot maintainers and fellow
> > > > OpenWrt developers before submitting a formal patch series.
> > > [snip]
> > > > Three storage backends:
> > > > 
> > > >   - Block device (eMMC, SD, SATA, NVMe, USB mass storage, virtio)
> > > >   - MTD (SPI-NOR, raw NOR, raw NAND with bad block skipping)
> > > >   - UBI volume (SPI-NAND, raw NAND)
> > > > 
> > > > The "bootm" command is extended to accept a storage device specification
> > > > instead of a RAM address:
> > > > 
> > > >   bootm mmc 0:4         # boot FIT from eMMC partition 4
> > > >   bootm mtd recovery    # boot FIT from MTD partition "recovery"
> > > >   bootm ubi recovery    # boot FIT from UBI volume "recovery"
> > > > 
> > > > This infrastructure is independently useful beyond the OpenWrt boot
> > > > method. Any board that stores a FIT image directly in a partition
> > > > (rather than as a file on a filesystem) can benefit from on-demand
> > > > subimage loading.
> > > 
> > > For the user interface portion of this, since this is implementing
> > > bootmeths, this should all be handled under bootflow/bootdev/etc
> > > commands, and not adding further options to bootm.
> > 
> > I thought it would be useful independently of bootmeth/bootflow/bootdev
> > for `bootm` to have these options, as it will allow to gradually migrate
> > a large number of our downstream boards. Many of them at this point
> > still require scripts to handle things like extracting MAC addresses
> > from flash (in ways the original vendor has decided to store them),
> > updating U-Boot or TF-A blobs, ... and migrating all of that to use
> > bootmeth/bootflow/... will take time.
> > 
> > In the meantime, already getting rid of (duplicate) scripts "read
> > firmware from mmc/ubi/mtd" would be feasible, is less of a burden and
> > easy to test for people who got the respective board at hand.
> > 
> > Also, testing loading (partial) images directly from storage outside
> > of bootmeth has been very useful during development.
> > 
> > Would it be an option to hide the new bootm cmdline features behind an
> > additional Kconfig option maybe?
> 
> I worry that if we add this to bootm upstream, it'll be another
> interface that can't ever go away. Building off of another bit of
> feedback I sent after this message here, I think the testing side of
> this support should be handled with CMD_something.._GENERIC, similar to
> CMD_FS_GENERIC.

Hm... The tricky part is kinda not the "load from somewhere" as that
just ends up calling the .read() op, which usually is more or less
identical to what some existing commands are already doing, hence easy
to use 'mmc read ...', 'mtd read ...', 'ubi read ...' for testing.
Seeing that all the steps in 'bootm' are working, sub-images are
correctly loaded (or skipped), verification steps (hashes, signature,
...) are all working was the more difficult part...

> But perhaps not as one other part of this I wanted to ask about is,
> does this only support reading FIT images which set their load
> address? Or is there a call somewhere to lmb_alloc to grab an arbitrary
> hunk of memory somewhere?

In order to kinda do the same as was happening previously when first
loading the whole image from flash to $loadaddr, I've implemented a
trivial allocator for chunks with no defined load address in FIT.
In this case, image_loader_map() is called and loads to alloc_ptr,
which points to $loadaddr on init, and is then bumped by the
size loaded. I can use the lmb allocator instead, it's cleaner than
open-coding this.
In case of known load address (ie. specified for that sub-image in FIT)
and compression being IH_COMP_NONE, image_loader_map_to() is called
which directly loads that sub-image to the specified target address, no
allocation what-so-ever.

> 
> > > Since you're also talking about an A/B mechanism, looking at the RAUC
> > > support may also be helpful as that's another widely deployed
> > > methodology we support now via standard boot.
> > 
> > Yes, I've looked into RAUC and it has (more or less) recently gained
> > support for UBI, which indeed brings it closer to being useful in the
> > context of OpenWrt.
> 
> To be clear, I just meant in terms of how to implement a bootmeth that
> is not just EFI or distro boot but instead something else also aimed at
> real world end user devices. Lots of people have a Steam Deck and a
> router built on top of OpenWrt :)

+1

  reply	other threads:[~2026-02-17 21:08 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-16 21:21 [RFC PATCH 00/20] boot: add OpenWrt boot method and on-demand FIT loading Daniel Golle
2026-02-16 21:21 ` [RFC PATCH 01/20] boot: add image_loader on-demand loading abstraction Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:21 ` [RFC PATCH 02/20] boot: image-loader: add block device backend Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:21 ` [RFC PATCH 03/20] mtd: add mtd_read_skip_bad() helper Daniel Golle
2026-02-16 21:21 ` [RFC PATCH 04/20] boot: image-loader: add MTD backend Daniel Golle
2026-02-16 21:21 ` [RFC PATCH 05/20] cmd: ubi: export ubi_find_volume() Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:22 ` [RFC PATCH 06/20] mtd: set flash_node on DT-created partitions Daniel Golle
2026-02-16 21:22 ` [RFC PATCH 07/20] cmd: ubi: add ubi_part_from_mtd() Daniel Golle
2026-02-16 21:22 ` [RFC PATCH 08/20] boot: image-loader: add UBI volume backend Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-19 16:51     ` Daniel Golle
2026-02-23 17:51       ` Simon Glass
2026-02-23 19:24         ` Daniel Golle
2026-02-23 19:30           ` Mikhail Kshevetskiy
2026-02-23 19:32             ` Mikhail Kshevetskiy
2026-02-24  0:12               ` Daniel Golle
2026-02-24  0:40                 ` Mikhail Kshevetskiy
2026-02-24  1:06                   ` Daniel Golle
2026-02-23 20:06             ` Daniel Golle
2026-02-16 21:22 ` [RFC PATCH 09/20] boot: fit: support on-demand loading in fit_image_load() Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-19 16:47     ` Daniel Golle
2026-02-23 17:51       ` Simon Glass
2026-02-24 12:41         ` Daniel Golle
2026-02-16 21:22 ` [RFC PATCH 10/20] cmd: bootm: accept storage device as image source Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:22 ` [RFC PATCH 11/20] test: boot: add image_loader unit tests Daniel Golle
2026-02-17 19:05   ` Tom Rini
2026-02-19 13:10   ` Simon Glass
2026-02-19 14:04     ` Tom Rini
2026-02-19 14:34       ` Simon Glass
2026-02-19 15:41         ` Tom Rini
2026-02-16 21:23 ` [RFC PATCH 12/20] doc: bootm: document direct storage boot Daniel Golle
2026-02-16 21:23 ` [RFC PATCH 13/20] boot: bootmeth: add OpenWrt boot method skeleton Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-19 14:00     ` Tom Rini
2026-02-19 14:31       ` Simon Glass
2026-02-19 15:31         ` Tom Rini
2026-02-19 16:52     ` Daniel Golle
2026-02-16 21:23 ` [RFC PATCH 14/20] boot: bootmeth: openwrt: implement read_bootflow for block devices Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:23 ` [RFC PATCH 15/20] boot: bootmeth: openwrt: implement boot via bootm storage path Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:23 ` [RFC PATCH 16/20] boot: bootdev: add MTD boot device Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:24 ` [RFC PATCH 17/20] boot: bootdev: add UBI " Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-19 16:56     ` Daniel Golle
2026-02-23 17:51       ` Simon Glass
2026-02-16 21:24 ` [RFC PATCH 18/20] boot: bootmeth: openwrt: support MTD and UBI bootdevs Daniel Golle
2026-02-19 13:09   ` Simon Glass
2026-02-16 21:24 ` [RFC PATCH 19/20] boot: bootmeth: openwrt: add openwrt_boot_script hook for bootconf Daniel Golle
2026-02-19 13:11   ` Simon Glass
2026-02-16 21:24 ` [RFC PATCH 20/20] boot: bootmeth: openwrt: add slot configuration from environment Daniel Golle
2026-02-19 13:11   ` Simon Glass
2026-02-16 22:16 ` [RFC PATCH 00/20] boot: add OpenWrt boot method and on-demand FIT loading Marek Vasut
2026-02-17  1:18   ` Daniel Golle
2026-02-17  2:04     ` Marek Vasut
2026-02-17 13:02       ` Daniel Golle
2026-02-17 19:15         ` Tom Rini
2026-02-17 13:32 ` Simon Glass
2026-02-17 15:08 ` Tom Rini
2026-02-17 17:46 ` Tom Rini
2026-02-23 19:32   ` Tom Rini
2026-02-24 11:57     ` Daniel Golle
2026-02-24 17:24       ` Tom Rini
2026-02-25 14:34         ` Daniel Golle
2026-02-25 22:16           ` Tom Rini
2026-02-25 23:49             ` Daniel Golle
2026-02-26 18:45               ` Tom Rini
2026-02-26 23:44                 ` Simon Glass
2026-02-17 18:13 ` Tom Rini
2026-02-17 19:28   ` Daniel Golle
2026-02-17 19:35     ` Tom Rini
2026-02-17 21:07       ` Daniel Golle [this message]
2026-02-17 21:18         ` Tom Rini
     [not found]           ` <aZTqyRfqYe1iJ9EY@makrotopia.org>
2026-02-18 15:58             ` Tom Rini
2026-02-18 17:25               ` Daniel Golle
2026-02-18 20:33                 ` Tom Rini
2026-02-24  0:37                   ` Daniel Golle
2026-02-24 14:24                     ` Tom Rini
2026-02-24 14:36                       ` Daniel Golle
2026-02-18 23:08                 ` Daniel Golle
2026-02-19 15:29                   ` Tom Rini
2026-02-17 19:20 ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aZTYk8E6r4S5zo_Z@makrotopia.org \
    --to=daniel@makrotopia.org \
    --cc=Zone.Niuzh@hotmail.com \
    --cc=alexander.stein@ew.tq-group.com \
    --cc=andrew.goodbody@linaro.org \
    --cc=anshuld@ti.com \
    --cc=dlechner@baylibre.com \
    --cc=frank-w@public-files.de \
    --cc=ilias.apalodimas@linaro.org \
    --cc=jj251510319013@gmail.com \
    --cc=john@phrozen.org \
    --cc=kory.maincent@bootlin.com \
    --cc=m.schwan@phytec.de \
    --cc=mail@aparcar.org \
    --cc=marek.vasut+renesas@mailbox.org \
    --cc=mchitale@ventanamicro.com \
    --cc=michael@amarulasolutions.com \
    --cc=mike.looijmans@topic.nl \
    --cc=mikhail.kshevetskiy@iopsys.eu \
    --cc=miquel.raynal@bootlin.com \
    --cc=mkorpershoek@kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=osama.abdelkader@gmail.com \
    --cc=paul.henrys_ext@softathome.com \
    --cc=quentin.schulz@cherry.de \
    --cc=sjg@chromium.org \
    --cc=sughosh.ganu@arm.com \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=weijie.gao@mediatek.com \
    --cc=wolfgang.wallner@at.abb.com \
    --cc=xypron.glpk@gmx.de \
    --cc=yegorslists@googlemail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox