Thank you
On Sat, Oct 11, 2025 at 06:16:23PM +0000, Ferass El Hafidi wrote: > Previously, few Amlogic devices supported EFI capsule updates. > Generally only the Libre Computer ones with SPI flash supported it, > thanks to board-specific code. > > This commit commonises capsule update support across supported > Amlogic boards. Similar to Qualcomm's support for it, the dfu string > and firmware name is automatically generated at runtime depending on > which device we are booted from. Right now this supports flashing to > the eMMC/SD and SPI flash. > > As usual, the capsule UUID is automatically generated. You can get it > by enabling CONFIG_CMD_EFIDEBUG and running: > > => efidebug capsule esrt > ======================================== > ESRT: fw_resource_count=1 > ESRT: fw_resource_count_max=1 > ESRT: fw_resource_version=1 > [entry 0]============================== > ESRT: fw_class=796180D4-AAB2-50F1-B16A-53DFF9CA89B2 > ESRT: fw_type=unknown > ESRT: fw_version=0 > ESRT: lowest_supported_fw_version=0 > ESRT: capsule_flags=0 > ESRT: last_attempt_version=0 > ESRT: last_attempt_status=success > ======================================== > > Signed-off-by: Ferass El Hafidi <[email protected]> > --- > Currently EFI capsule updates are only supported on the following > Amlogic-based boards: > > - Libre Computer AML-S805X-AC > - Libre Computer AML-A311D-CC > - Libre Computer AML-S905D3-CC > > This is done with board-specific configuration in board/libre-computer/. > > With this patch, EFI capsule updates can now work on most of the other > Amlogic boards supported by u-boot, such as the Libre Computer > AML-S905X-CC, without the need for board-specific configuration > beforehand. > > Please note that flashing to the eMMC bootX partitions is not yet > supported. > --- > Changes in v2: > - Don't run meson_setup_capsule unless CONFIG_DFU and CONFIG_EFI_LOADER > are enabled > - Coding style fixes > - Return when boot device is unsupported > - Link to v1: > https://lore.kernel.org/r/[email protected] > --- > arch/arm/include/asm/arch-meson/boot.h | 2 ++ > arch/arm/mach-meson/Makefile | 2 +- > arch/arm/mach-meson/board-common.c | 5 +++ > arch/arm/mach-meson/capsule.c | 61 > ++++++++++++++++++++++++++++++++++ > 4 files changed, 69 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/include/asm/arch-meson/boot.h > b/arch/arm/include/asm/arch-meson/boot.h > index > a11dfde719e3e48e10bcb1f6b1b84eb8586ca9e7..e66b45983fe2f5d81f83642c01502a72773213b2 > 100644 > --- a/arch/arm/include/asm/arch-meson/boot.h > +++ b/arch/arm/include/asm/arch-meson/boot.h > @@ -21,6 +21,8 @@ int meson_get_boot_device(void); > > int meson_get_soc_rev(char *buff, size_t buff_len); > > +void meson_setup_capsule(void); > + > /** > * meson_get_socinfo - retrieve cpu_id of the Amlogic SoC > * > diff --git a/arch/arm/mach-meson/Makefile b/arch/arm/mach-meson/Makefile > index > 535b0878b9105e7a83729bea65fa4cd70cd4beac..640921e2b8e9b4777f0b212991edea26de2987d4 > 100644 > --- a/arch/arm/mach-meson/Makefile > +++ b/arch/arm/mach-meson/Makefile > @@ -2,7 +2,7 @@ > # > # Copyright (c) 2016 Beniamino Galvani <[email protected]> > > -obj-y += board-common.o sm.o board-info.o > +obj-y += board-common.o sm.o board-info.o capsule.o > obj-$(CONFIG_MESON_GX) += board-gx.o > obj-$(CONFIG_MESON_AXG) += board-axg.o > obj-$(CONFIG_MESON_G12A) += board-g12a.o > diff --git a/arch/arm/mach-meson/board-common.c > b/arch/arm/mach-meson/board-common.c > index > 39774c43049a40ed11578086603717571bedd23b..e8012604c33376ee031b89bbfcf16ef34d6dec73 > 100644 > --- a/arch/arm/mach-meson/board-common.c > +++ b/arch/arm/mach-meson/board-common.c > @@ -145,6 +145,11 @@ int board_late_init(void) > { > meson_set_boot_source(); > > + if (CONFIG_IS_ENABLED(DFU) && CONFIG_IS_ENABLED(EFI_LOADER)) { > + /* Generate dfu_string for EFI capsule updates */ > + meson_setup_capsule(); > + } > + > return meson_board_late_init(); > } > > diff --git a/arch/arm/mach-meson/capsule.c b/arch/arm/mach-meson/capsule.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..6e968a59c2cf26db179e11caac1eb6c3f76b2d2c > --- /dev/null > +++ b/arch/arm/mach-meson/capsule.c > @@ -0,0 +1,61 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright (c) 2025, Ferass El Hafidi <[email protected]> > + */ > + > +#include <asm/arch/boot.h> > +#include <dm.h> > +#include <efi_loader.h> > +#include <mmc.h> > + > +/* > + * To be able to support multiple devices and flash to the correct one we > need > + * to automatically generate the dfu_string and fw_name to match the device > we > + * are booted from. This is done by meson_setup_capsule() which is then > called > + * in board_late_init(). Right now we support EFI capsule updates on SPI > flash, > + * eMMC and SD cards. > + */ > +struct efi_fw_image fw_images[] = { > + { > + .image_index = 1, > + }, > +}; > + > +struct efi_capsule_update_info update_info = { > + .dfu_string = NULL, /* to be set in meson_capsule_setup */ > + .num_images = ARRAY_SIZE(fw_images), > + .images = fw_images, > +}; > + > +/* > + * TODO: Support usecase e.g. FIT image on eMMC + SPL on SD. > + */ > +void meson_setup_capsule(void) > +{ > + static char dfu_string[32] = { 0 }; > + int mmc_devnum = 0; /* mmc0 => SD card */ > + u32 max_size = 0x2000; /* 4 MB (MMC sectors are 512 bytes each) */ > + u32 offset = 0x1; /* offset for flashing to eMMC/SD */ > + int boot_device = meson_get_boot_device(); > + > + switch (boot_device) { > + case BOOT_DEVICE_EMMC: > + mmc_devnum = 1; /* mmc1 is always eMMC */ > + fallthrough; > + case BOOT_DEVICE_SD: > + snprintf(dfu_string, 32, "mmc %d=u-boot.bin raw %d %d", > mmc_devnum, offset, max_size); > + fw_images[0].fw_name = u"U_BOOT_MESON_MMC"; > + break; > + case BOOT_DEVICE_SPI: > + /* We assume there's only one SPI flash */ > + fw_images[0].fw_name = u"U_BOOT_MESON_SPI"; > + snprintf(dfu_string, 32, "sf 0:0=u-boot.bin raw 0 %d", > max_size); > + break; > + default: > + debug("setup_capsule: Boot device %d unsupported\n", > boot_device); > + return; > + } > + debug("EFI Capsule DFU string: %s", dfu_string); > + > + update_info.dfu_string = dfu_string; > +} > > --- > base-commit: 072264c4b3406aee50dad08355588577a547ab48 > change-id: 20251007-meson-capsule-a19539e0a54e > > Best regards, Reviewed-by: Evgeny Bachinin <[email protected]>

