diff options
| -rw-r--r-- | include/fwu.h | 11 | ||||
| -rw-r--r-- | lib/fwu_updates/fwu.c | 18 |
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); |
