summaryrefslogtreecommitdiff
path: root/boot/vbe_common.c
AgeCommit message (Collapse)Author
2025-02-03vbe: Add an implementation of VBE-ABrecSimon Glass
So far only VBE-simple is implemented in U-Boot. This supports a single image which can be updated in situ. It is often necessary to support two images (A and B) so that the board is not bricked if the update is interrupted or is bad. In some cases, a non-updatable recovery image is desirable, so that the board can be returned to a known-good state in the event of a serious failure. Introduce ABrec which provides these features. It supports three independent images and the logic to select the desired one on boot. While we are here, fix a debug message to indicate the function it called. Provide a maintainers entry for VBE. Note that fwupdated only supports VBE-simple so far, but supports for ABrec will appear in time. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-02-03vbe: Allow VBE to disable adding loadables to the FDTSimon Glass
When VBE operates within VPL it does not want the FDT to be changed. Provide a way to disable this feature. Move the FIT_IMAGE_TINY condition out of spl_fit_record_loadable() so that both conditions are together. This makes the code easier to understand. Replace the existing fit_loaded member, which is no-longer used. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-02-03vbe: Tidy up a few commentsSimon Glass
Join the comment block for the fit_image_load() call back to where it should be. Also fix a debug statement. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Update simple-fw to support using the SPL loaderSimon Glass
For a sandbox implementation, where code size is no object, it makes sense to use the full bootstd drivers to load images. For real boards, running from SRAM, this adds quite a bit of overhead. Add a way to load the next phase using just the underlying storage driver, to reduce code size. For now, only MMC is supported. Change the log_debug() to show the load address and size in a more neutral way, rather than suggesting that the load has already happened. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Support loading SPL imagesSimon Glass
VBE needs to load different images from a FIT depending on the xPL phase in use. The IH_PHASE value is used to select the image to load. Add the required logic to handle this. For compatibility with the SPL-loader driver, fill out a struct spl_image_info with the details needed to boot the next phase. This is good enough for VBE-simple but ABrec will need the full set of bootstd features. So add a USE_BOOTMETH define to control this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Support loading an FDT with the relocating loaderSimon Glass
Add FDT support so that this can be copied down in memory after loading and made available to the new image. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Support loading an FDT from the FITSimon Glass
In many cases the FIT includes a devicetree. Add support for loading this into a suitable place in memory. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Allow loading loadables if there is no firmwareSimon Glass
In some cases only the 'loadable' property is present in the FIT. Handle this by loading the first such image. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Handle loading from an unaligned offsetSimon Glass
There is no guarantee that an FIT image starts on a block boundary. When it doesn't, the image starts part-way through the first block. Add logic to detect this and copy the image down into place. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Tidy up error checking with blk_read()Simon Glass
This function can read fewer blocks than requested, so update the checks to handle this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Allow VBE to load FITs on any architectureSimon Glass
At present the VBE implementation is limited to sandbox only. Adjust the call to fit_image_load() to remove this limitation. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Allocate space for the FIT headerSimon Glass
It is convenient to use TEXT_BASE as a place to hold the FIT header, but this does not work in VPL, since SDRAM is not inited yet. Allocate the memory instead. Ensure the size is aligned to the media block-size so that it can be read in directly. Improve the error-checking for blk_read() and add some more debugging. Keep the existing TEXT_BASE mechanism in sandbox to avoid an 'Exec format error' when trying to run the image. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Split out reading a FIT into the common fileSimon Glass
Loading a FIT is useful for other VBE methods, such as ABrec. Create a new function to handling reading it. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Move reading the nvdata into the common fileSimon Glass
All VBE methods read non-volatile data, so move this function into a common file. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Move reading the version into the common fileSimon Glass
All VBE methods read a version string, so move this function into a common file. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-01-22vbe: Create a common function to get the block deviceSimon Glass
Add a vbe_get_blk() function and use it to obtain the block device used by VBE. Signed-off-by: Simon Glass <sjg@chromium.org>