[RFC PATCH] xilinx: dfu: Fill directly update_info.dfu_string
Michal Simek
michal.simek at amd.com
Mon Feb 10 13:28:25 CET 2025
Do not generate dfu_alt_info string for capsule update but directly fill
value to update_info.dfu_string based on origin logic.
Signed-off-by: Michal Simek <michal.simek at amd.com>
---
Hi Jon,
can you please include this to your series
"EFI Capsule update explicitly sets dfu_alt_info"
or you will break all our boards.
Thanks,
Michal
---
board/xilinx/common/board.h | 3 +++
board/xilinx/versal/board.c | 15 ++++++++-------
board/xilinx/zynq/board.c | 15 ++++++++-------
board/xilinx/zynqmp/zynqmp.c | 15 ++++++++-------
4 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/board/xilinx/common/board.h b/board/xilinx/common/board.h
index 64d657673e92..cb86c4c5b91b 100644
--- a/board/xilinx/common/board.h
+++ b/board/xilinx/common/board.h
@@ -18,4 +18,7 @@ bool board_detection(void);
char *soc_name_decode(void);
bool soc_detection(void);
+
+void configure_capsule_updates(void);
+
#endif /* BOARD_XILINX_COMMON_BOARD_H */
diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c
index b4483d00ad15..789eb81824f6 100644
--- a/board/xilinx/versal/board.c
+++ b/board/xilinx/versal/board.c
@@ -8,6 +8,7 @@
#include <cpu_func.h>
#include <dfu.h>
#include <env.h>
+#include <efi_loader.h>
#include <fdtdec.h>
#include <init.h>
#include <env_internal.h>
@@ -280,6 +281,9 @@ int board_late_init(void)
{
int ret;
+ if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
+ configure_capsule_updates();
+
if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
debug("Saved variables - Skipping\n");
return 0;
@@ -356,7 +360,7 @@ enum env_location env_get_location(enum env_operation op, int prio)
}
#endif
-#if defined(CONFIG_SET_DFU_ALT_INFO)
+#if defined(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)
#define DFU_ALT_BUF_LEN SZ_1K
@@ -385,7 +389,7 @@ static void mtd_found_part(u32 *base, u32 *size)
}
}
-void set_dfu_alt_info(char *interface, char *devstr)
+void configure_capsule_updates(void)
{
int bootseq = 0, len = 0;
u32 multiboot = versal_multi_boot();
@@ -393,9 +397,6 @@ void set_dfu_alt_info(char *interface, char *devstr)
ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
- if (env_get("dfu_alt_info"))
- return;
-
memset(buf, 0, sizeof(buf));
multiboot = env_get_hex("multiboot", multiboot);
@@ -436,7 +437,7 @@ void set_dfu_alt_info(char *interface, char *devstr)
return;
}
- env_set("dfu_alt_info", buf);
- puts("DFU alt info setting: done\n");
+ update_info.dfu_string = strdup(buf);
+ debug("Capsule DFU: %s\n", update_info.dfu_string);
}
#endif
diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c
index 8dbfa5604231..c4a15e1657a9 100644
--- a/board/xilinx/zynq/board.c
+++ b/board/xilinx/zynq/board.c
@@ -7,6 +7,7 @@
#include <config.h>
#include <debug_uart.h>
#include <dfu.h>
+#include <efi_loader.h>
#include <init.h>
#include <log.h>
#include <dm/uclass.h>
@@ -52,6 +53,9 @@ int board_late_init(void)
char *new_targets;
char *env_targets;
+ if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
+ configure_capsule_updates();
+
if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
debug("Saved variables - Skipping\n");
return 0;
@@ -165,17 +169,14 @@ enum env_location env_get_location(enum env_operation op, int prio)
}
}
-#if defined(CONFIG_SET_DFU_ALT_INFO)
+#if defined(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)
#define DFU_ALT_BUF_LEN SZ_1K
-void set_dfu_alt_info(char *interface, char *devstr)
+void configure_capsule_updates(void)
{
ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
- if (env_get("dfu_alt_info"))
- return;
-
memset(buf, 0, sizeof(buf));
switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) {
@@ -199,7 +200,7 @@ void set_dfu_alt_info(char *interface, char *devstr)
return;
}
- env_set("dfu_alt_info", buf);
- puts("DFU alt info setting: done\n");
+ update_info.dfu_string = strdup(buf);
+ debug("Capsule DFU: %s\n", update_info.dfu_string);
}
#endif
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
index 820fb252a3f3..1d7626e9f39d 100644
--- a/board/xilinx/zynqmp/zynqmp.c
+++ b/board/xilinx/zynqmp/zynqmp.c
@@ -11,6 +11,7 @@
#include <dfu.h>
#include <env.h>
#include <env_internal.h>
+#include <efi_loader.h>
#include <init.h>
#include <log.h>
#include <net.h>
@@ -526,6 +527,9 @@ int board_late_init(void)
usb_ether_init();
#endif
+ if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
+ configure_capsule_updates();
+
multiboot = multi_boot();
if (multiboot >= 0)
env_set_hex("multiboot", multiboot);
@@ -631,7 +635,7 @@ enum env_location env_get_location(enum env_operation op, int prio)
}
#endif
-#if defined(CONFIG_SET_DFU_ALT_INFO)
+#if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)
#define DFU_ALT_BUF_LEN SZ_1K
@@ -660,15 +664,12 @@ static void mtd_found_part(u32 *base, u32 *size)
}
}
-void set_dfu_alt_info(char *interface, char *devstr)
+void configure_capsule_updates(void)
{
int multiboot, bootseq = 0, len = 0;
ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
- if (env_get("dfu_alt_info"))
- return;
-
memset(buf, 0, sizeof(buf));
multiboot = multi_boot();
@@ -732,8 +733,8 @@ void set_dfu_alt_info(char *interface, char *devstr)
return;
}
- env_set("dfu_alt_info", buf);
- puts("DFU alt info setting: done\n");
+ update_info.dfu_string = strdup(buf);
+ debug("Capsule DFU: %s\n", update_info.dfu_string);
}
#endif
--
2.43.0
More information about the U-Boot
mailing list