[PATCH v2 2/3] board: samsung: exynos-mobile: add EFI capsule update support

Kaustabh Chakraborty kauschluss at disroot.org
Tue Feb 24 16:37:10 CET 2026


Add support for EFI capsule updates via U-Boot's DFU. This flashes the
boot partition with the new image provided in the capsule.

Signed-off-by: Kaustabh Chakraborty <kauschluss at disroot.org>
---
 board/samsung/exynos-mobile/exynos-mobile.c | 24 ++++++++++++++++++++++++
 configs/exynos-mobile_defconfig             |  6 ++++++
 2 files changed, 30 insertions(+)

diff --git a/board/samsung/exynos-mobile/exynos-mobile.c b/board/samsung/exynos-mobile/exynos-mobile.c
index c5e1b186ae3..6b2b1523663 100644
--- a/board/samsung/exynos-mobile/exynos-mobile.c
+++ b/board/samsung/exynos-mobile/exynos-mobile.c
@@ -10,6 +10,8 @@
 #include <bootflow.h>
 #include <ctype.h>
 #include <dm/ofnode.h>
+#include <efi.h>
+#include <efi_loader.h>
 #include <env.h>
 #include <errno.h>
 #include <init.h>
@@ -24,6 +26,19 @@ DECLARE_GLOBAL_DATA_PTR;
 #define lmb_alloc(size, addr) \
 	lmb_alloc_mem(LMB_MEM_ALLOC_ANY, SZ_2M, addr, size, LMB_NONE)
 
+struct efi_fw_image fw_images[] = {
+	{
+		.fw_name = u"UBOOT_BOOT_PARTITION",
+		.image_index = 1,
+	},
+};
+
+struct efi_capsule_update_info update_info = {
+	.dfu_string = NULL,
+	.images = fw_images,
+	.num_images = ARRAY_SIZE(fw_images),
+};
+
 /*
  * The memory mapping includes all DRAM banks, along with the
  * peripheral block, and a sentinel at the end. This is filled in
@@ -191,6 +206,7 @@ static int exynos_blk_env_setup(void)
 	struct blk_desc *blk_desc;
 	struct disk_partition info = {0};
 	unsigned long largest_part_start = 0, largest_part_size = 0;
+	static char dfu_string[32];
 	int i;
 
 	blk_ifname = "mmc";
@@ -204,6 +220,14 @@ static int exynos_blk_env_setup(void)
 		if (part_get_info(blk_desc, i, &info))
 			continue;
 
+		if (!update_info.dfu_string &&
+		    !strncasecmp(info.name, "boot", strlen("boot"))) {
+			snprintf(dfu_string, sizeof(dfu_string),
+				 "mmc %d=u-boot.bin part %d %d", blk_dev,
+				 blk_dev, i);
+			update_info.dfu_string = dfu_string;
+		}
+
 		if (info.start > largest_part_size) {
 			largest_part_start = info.start;
 			largest_part_size = info.size;
diff --git a/configs/exynos-mobile_defconfig b/configs/exynos-mobile_defconfig
index cee468d9c24..9a4b6a52362 100644
--- a/configs/exynos-mobile_defconfig
+++ b/configs/exynos-mobile_defconfig
@@ -11,6 +11,10 @@ CONFIG_SYS_BOOTM_LEN=0x2000000
 CONFIG_SYS_LOAD_ADDR=0x80000000
 CONFIG_ARMV8_CNTFRQ_BROKEN=y
 # CONFIG_PSCI_RESET is not set
+CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
+CONFIG_EFI_CAPSULE_ON_DISK=y
+CONFIG_EFI_CAPSULE_ON_DISK_EARLY=y
+CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
 CONFIG_BUTTON_CMD=y
 CONFIG_USE_PREBOOT=y
 CONFIG_SAVE_PREV_BL_FDT_ADDR=y
@@ -31,6 +35,8 @@ CONFIG_BLKMAP=y
 CONFIG_BUTTON=y
 CONFIG_BUTTON_REMAP_PHONE_KEYS=y
 CONFIG_CLK_EXYNOS7870=y
+CONFIG_DFU_MMC=y
+CONFIG_SYS_DFU_DATA_BUF_SIZE=0x200000
 CONFIG_USB_FUNCTION_FASTBOOT=y
 CONFIG_FASTBOOT_BUF_ADDR=0xdead0000
 CONFIG_FASTBOOT_FLASH=y

-- 
2.52.0



More information about the U-Boot mailing list