[PATCH] board: xilinx: Fold FWU dfu_alt_info into configure_capsule_updates()
Michal Simek
michal.simek at amd.com
Tue Jun 30 15:02:48 CEST 2026
Commit 371a6c1744f3 ("board: xilinx: Add capsule and FWU support") and
commit 818c06faa119 ("board: amd: Add capsule and FWU support")
introduced a separate set_dfu_alt_info() for the FWU multi-bank case
(Versal and Versal Gen 2 respectively) which set the dfu_alt_info
environment variable directly, while configure_capsule_updates() handled
the non-FWU case by filling update_info.dfu_string. Having two functions
generating the DFU description is redundant now that capsule update sets
the dfu_alt_info variable on its own from update_info.dfu_string.
Fold the FWU multi-bank generation (fwu_gen_alt_info_from_mtd() over the
nor0 MTD partitions) into configure_capsule_updates() and drop the
standalone set_dfu_alt_info(). The function now selects the source of the
DFU string at run time via IS_ENABLED(): the MTD partitions when FWU
multi-bank update is enabled, otherwise the boot-mode based layout. Both
paths end up filling update_info.dfu_string.
Signed-off-by: Michal Simek <michal.simek at amd.com>
---
board/amd/versal2/board.c | 63 ++++++++++++++----------------------
board/xilinx/versal/board.c | 64 ++++++++++++++-----------------------
2 files changed, 48 insertions(+), 79 deletions(-)
diff --git a/board/amd/versal2/board.c b/board/amd/versal2/board.c
index 2afd283b8ddd..6e09e408875d 100644
--- a/board/amd/versal2/board.c
+++ b/board/amd/versal2/board.c
@@ -227,8 +227,7 @@ int board_late_init(void)
int ret;
u32 multiboot;
- if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) &&
- !IS_ENABLED(CONFIG_FWU_MULTI_BANK_UPDATE))
+ if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
configure_capsule_updates();
if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
@@ -362,8 +361,6 @@ enum env_location env_get_location(enum env_operation op, int prio)
#define DFU_ALT_BUF_LEN SZ_1K
-#if defined(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) && \
- !defined(CONFIG_FWU_MULTI_BANK_UPDATE)
static void mtd_found_part(u32 *base, u32 *size)
{
struct mtd_info *part, *mtd;
@@ -399,6 +396,29 @@ void configure_capsule_updates(void)
memset(buf, 0, DFU_ALT_BUF_LEN);
+ if (IS_ENABLED(CONFIG_FWU_MULTI_BANK_UPDATE)) {
+ struct mtd_info *mtd;
+ int ret;
+
+ mtd_probe_devices();
+
+ mtd = get_mtd_device_nm("nor0");
+ if (IS_ERR_OR_NULL(mtd))
+ return;
+
+ ret = fwu_gen_alt_info_from_mtd(buf, DFU_ALT_BUF_LEN, mtd);
+ if (ret < 0) {
+ log_err("Error: Failed to generate dfu_alt_info. (%d)\n", ret);
+ return;
+ }
+ log_debug("Make dfu_alt_info: '%s'\n", buf);
+
+ update_info.dfu_string = strdup(buf);
+ debug("Capsule DFU: %s\n", update_info.dfu_string);
+
+ return;
+ }
+
multiboot = env_get_hex("multiboot", multiboot);
switch (bootmode) {
@@ -442,41 +462,6 @@ void configure_capsule_updates(void)
}
#endif
-#if defined(CONFIG_FWU_MULTI_BANK_UPDATE)
-
-/* Generate dfu_alt_info from partitions */
-void set_dfu_alt_info(char *interface, char *devstr)
-{
- int ret;
- struct mtd_info *mtd;
-
- /*
- * It is called multiple times for every image
- * per bank that's why enough to set it up once.
- */
- if (env_get("dfu_alt_info"))
- return;
-
- ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
- memset(buf, 0, DFU_ALT_BUF_LEN);
-
- mtd_probe_devices();
-
- mtd = get_mtd_device_nm("nor0");
- if (IS_ERR_OR_NULL(mtd))
- return;
-
- ret = fwu_gen_alt_info_from_mtd(buf, DFU_ALT_BUF_LEN, mtd);
- if (ret < 0) {
- log_err("Error: Failed to generate dfu_alt_info. (%d)\n", ret);
- return;
- }
- log_debug("Make dfu_alt_info: '%s'\n", buf);
-
- env_set("dfu_alt_info", buf);
-}
-#endif
-
int spi_get_env_dev(void)
{
struct udevice *dev;
diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c
index 0537517b1b2e..f06d3c59d055 100644
--- a/board/xilinx/versal/board.c
+++ b/board/xilinx/versal/board.c
@@ -232,8 +232,7 @@ int board_late_init(void)
{
int ret;
- if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) &&
- !IS_ENABLED(CONFIG_FWU_MULTI_BANK_UPDATE))
+ if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
configure_capsule_updates();
if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
@@ -314,8 +313,6 @@ enum env_location env_get_location(enum env_operation op, int prio)
#define DFU_ALT_BUF_LEN SZ_1K
-#if defined(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) && \
- !defined(CONFIG_FWU_MULTI_BANK_UPDATE)
static void mtd_found_part(u32 *base, u32 *size)
{
struct mtd_info *part, *mtd;
@@ -351,6 +348,29 @@ void configure_capsule_updates(void)
memset(buf, 0, DFU_ALT_BUF_LEN);
+ if (IS_ENABLED(CONFIG_FWU_MULTI_BANK_UPDATE)) {
+ struct mtd_info *mtd;
+ int ret;
+
+ mtd_probe_devices();
+
+ mtd = get_mtd_device_nm("nor0");
+ if (IS_ERR_OR_NULL(mtd))
+ return;
+
+ ret = fwu_gen_alt_info_from_mtd(buf, DFU_ALT_BUF_LEN, mtd);
+ if (ret < 0) {
+ log_err("Error: Failed to generate dfu_alt_info. (%d)\n", ret);
+ return;
+ }
+ log_debug("Make dfu_alt_info: '%s'\n", buf);
+
+ update_info.dfu_string = strdup(buf);
+ debug("Capsule DFU: %s\n", update_info.dfu_string);
+
+ return;
+ }
+
multiboot = env_get_hex("multiboot", multiboot);
switch (bootmode) {
@@ -392,39 +412,3 @@ void configure_capsule_updates(void)
update_info.dfu_string = strdup(buf);
debug("Capsule DFU: %s\n", update_info.dfu_string);
}
-#endif
-
-#if defined(CONFIG_FWU_MULTI_BANK_UPDATE)
-
-/* Generate dfu_alt_info from partitions */
-void set_dfu_alt_info(char *interface, char *devstr)
-{
- int ret;
- struct mtd_info *mtd;
-
- /*
- * It is called multiple times for every image
- * per bank that's why enough to set it up once.
- */
- if (env_get("dfu_alt_info"))
- return;
-
- ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
- memset(buf, 0, DFU_ALT_BUF_LEN);
-
- mtd_probe_devices();
-
- mtd = get_mtd_device_nm("nor0");
- if (IS_ERR_OR_NULL(mtd))
- return;
-
- ret = fwu_gen_alt_info_from_mtd(buf, DFU_ALT_BUF_LEN, mtd);
- if (ret < 0) {
- log_err("Error: Failed to generate dfu_alt_info. (%d)\n", ret);
- return;
- }
- log_debug("Make dfu_alt_info: '%s'\n", buf);
-
- env_set("dfu_alt_info", buf);
-}
-#endif
---
base-commit: 8f4ec2a116ee7ff6d19e6baa60833586df985de7
--
2.43.0
More information about the U-Boot
mailing list