[PATCH v2 1/2] FWU: Add platform hook support for fwu metata
Padmarao Begari
padmarao.begari at amd.com
Mon Jul 7 12:39:17 CEST 2025
FWU metadata information is unavailable for platform-specific
operations since FWU initialization has not yet occurred.
The initialization function is invoked as part of the main
loop event. To address this, the FWU platform hook function
is introduced during FWU initialization, allowing metadata
processing with platform-specific operations.
Signed-off-by: Padmarao Begari <padmarao.begari at amd.com>
---
include/fwu.h | 11 +++++++++++
lib/fwu_updates/fwu.c | 18 ++++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/include/fwu.h b/include/fwu.h
index 6441de370c9..8d0b856cc81 100644
--- a/include/fwu.h
+++ b/include/fwu.h
@@ -129,6 +129,17 @@ int fwu_read_mdata(struct udevice *dev, struct fwu_mdata *mdata,
int fwu_write_mdata(struct udevice *dev, struct fwu_mdata *mdata,
bool primary, uint32_t size);
+/**
+ * fwu_platform_hook() - Hook the given FWU data copy
+ * @dev: FWU metadata device
+ * @data: FWU metadata
+ *
+ * It is a platform-specific function that processes fwu metadata.
+ *
+ * Return: 0 if OK, -ve on error
+ */
+int fwu_platform_hook(struct udevice *dev, struct fwu_data *data);
+
/**
* fwu_get_mdata() - Read, verify and return the FWU metadata
*
diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
index 7f085a0211f..9e913a04ed4 100644
--- a/lib/fwu_updates/fwu.c
+++ b/lib/fwu_updates/fwu.c
@@ -655,6 +655,16 @@ __weak void fwu_plat_get_bootidx(uint *boot_idx)
*boot_idx = 0; /* Dummy value */
}
+/**
+ * fwu_platform_hook() - Hook the given FWU data copy
+ *
+ * Return: 0 if OK, -ve on error
+ */
+__weak int fwu_platform_hook(struct udevice *dev, struct fwu_data *data)
+{
+ return 0;
+}
+
/**
* fwu_update_checks_pass() - Check if FWU update can be done
*
@@ -712,6 +722,7 @@ static int fwu_boottime_checks(void)
{
int ret;
u32 boot_idx, active_idx;
+ struct fwu_data *data;
ret = uclass_first_device_err(UCLASS_FWU_MDATA, &g_dev);
if (ret) {
@@ -770,6 +781,13 @@ static int fwu_boottime_checks(void)
if (!ret)
boottime_check = 1;
+ data = fwu_get_data();
+ ret = fwu_platform_hook(g_dev, data);
+ if (ret && ret != -ENOSYS) {
+ log_err("fwu_platform_hook() failed\n");
+ return ret;
+ }
+
return 0;
}
EVENT_SPY_SIMPLE(EVT_MAIN_LOOP, fwu_boottime_checks);
--
2.25.1
More information about the U-Boot
mailing list