summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/fwu.h11
-rw-r--r--lib/fwu_updates/fwu.c18
2 files changed, 29 insertions, 0 deletions
diff --git a/include/fwu.h b/include/fwu.h
index 77e60167fc7..e7bd1d492af 100644
--- a/include/fwu.h
+++ b/include/fwu.h
@@ -129,6 +129,17 @@ int fwu_write_mdata(struct udevice *dev, struct fwu_mdata *mdata,
bool primary, uint32_t size);
/**
+ * fwu_platform_hook() - Platform specific processing with FWU metadata
+ * @dev: FWU metadata device
+ * @data: FWU metadata
+ *
+ * Provide a platform specific function for processing with the 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
*
* Read both the metadata copies from the storage media, verify their checksum,
diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
index 7f085a0211f..0f5ef2ba515 100644
--- a/lib/fwu_updates/fwu.c
+++ b/lib/fwu_updates/fwu.c
@@ -656,6 +656,16 @@ __weak void fwu_plat_get_bootidx(uint *boot_idx)
}
/**
+ * fwu_platform_hook() - Platform specific processing with FWU metadata
+ *
+ * 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
*
* Check if the FWU update can be executed. The updates are
@@ -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) {
+ log_err("fwu_platform_hook() failed\n");
+ return ret;
+ }
+
return 0;
}
EVENT_SPY_SIMPLE(EVT_MAIN_LOOP, fwu_boottime_checks);