vbe: Add an implementation of VBE-ABrec

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>
This commit is contained in:
Simon Glass
2025-01-26 11:43:29 -07:00
parent a189bac93d
commit 943f2757e3
9 changed files with 627 additions and 0 deletions

View File

@@ -740,6 +740,20 @@ config BOOTMETH_VBE_SIMPLE
firmware image in boot media such as MMC. It does not support any sort
of rollback, recovery or A/B boot.
config BOOTMETH_VBE_ABREC
bool "Bootdev support for VBE 'a/b/recovery' method"
imply SPL_CRC8
imply VPL_CRC8
help
Enables support for VBE 'abrec' boot. This allows updating one of an
A or B firmware image in boot media such as MMC. The new firmware is
tried and if it boots, it is copied to the other image, so that both
A and B have the same version. If neither firmware image passes the
verification step, a recovery image is booted. This method will
eventually provide rollback protection as well.
if BOOTMETH_VBE_SIMPLE
config BOOTMETH_VBE_SIMPLE_OS
bool "Bootdev support for VBE 'simple' method OS phase"
default y
@@ -798,6 +812,65 @@ config TPL_BOOTMETH_VBE_SIMPLE_FW
endif # BOOTMETH_VBE_SIMPLE
if BOOTMETH_VBE_ABREC
config SPL_BOOTMETH_VBE_ABREC
bool "Bootdev support for VBE 'abrec' method (SPL)"
depends on SPL
default y if VPL
help
Enables support for VBE 'abrec' boot. The SPL part of this
implementation simply loads U-Boot from the image selected by the
VPL phase.
config TPL_BOOTMETH_VBE_ABREC
bool "Bootdev support for VBE 'abrec' method (TPL)"
depends on TPL
select TPL_FIT
default y
help
Enables support for VBE 'abrec' boot. The TPL part of this
implementation simply jumps to VPL after device init is completed.
config VPL_BOOTMETH_VBE_ABREC
bool "Bootdev support for VBE 'abrec' method (VPL)"
depends on VPL
default y
help
Enables support for VBE 'abrec' boot. The VPL part of this
implementation selects which SPL to use (A, B or recovery) and then
boots into SPL.
config SPL_BOOTMETH_VBE_ABREC_FW
bool "Bootdev support for VBE 'abrec' method firmware phase (SPL)"
depends on SPL
default y if VPL
help
Enables support for VBE 'abrec' boot. The SPL part of this
implementation simply loads U-Boot from the image selected by the
VPL phase.
config TPL_BOOTMETH_VBE_ABREC_FW
bool "Bootdev support for VBE 'abrec' method firmware phase (TPL)"
depends on TPL
default y if VPL
help
Enables support for VBE 'abrec' boot. The TPL part of this
implementation simply jumps to VPL after device init is completed.
config VPL_BOOTMETH_VBE_ABREC_FW
bool "Bootdev support for VBE 'abrec' method firmware phase (VPL)"
depends on VPL
default y
help
Enables support for VBE 'abrec' boot. The VPL part of this
implementation selects which SPL to use (A, B or recovery) and then
boots into SPL.
endif # BOOTMETH_VBE_ABREC
endif # BOOTMETH_VBE
config EXPO
bool "Support for expos - groups of scenes displaying a UI"
depends on VIDEO