diff --git a/include/fwu.h b/include/fwu.h index 77e60167fc7..e7bd1d492af 100644 --- a/include/fwu.h +++ b/include/fwu.h @@ -128,6 +128,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() - 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 * 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 @@ -655,6 +655,16 @@ __weak void fwu_plat_get_bootidx(uint *boot_idx) *boot_idx = 0; /* Dummy value */ } +/** + * 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 * @@ -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);