
hi Masami,
On Thu, 20 Jan 2022 at 11:23, Masami Hiramatsu masami.hiramatsu@linaro.org wrote:
Hello Sughosh,
2022年1月20日(木) 3:56 Sughosh Ganu sughosh.ganu@linaro.org:
In the FWU Multi Bank Update feature, the information about the updatable images is stored as part of the metadata, which is stored on a dedicated partition. Add the metadata structure, and functions to access the metadata. These are generic API's, and implementations can be added based on parameters like how the metadata partition is accessed and what type of storage device houses the metadata.
Signed-off-by: Sughosh Ganu sughosh.ganu@linaro.org
Changes since V2:
- Use uint*_t types in fwu_mdata.h since the file is to be reused in other projects
- Keep only the FWU metadata structures in fwu_mdata.h
- Move all other function and macro declarations in fwu.h
- Keep common implementations of fwu_update_active_index and fwu_revert_boot_index in fwu_mdata.c
- Add a update_mdata function pointer in the fwu_mdata_ops structure
include/fwu.h | 61 +++++++ include/fwu_mdata.h | 67 ++++++++ lib/fwu_updates/fwu_mdata.c | 329 ++++++++++++++++++++++++++++++++++++ 3 files changed, 457 insertions(+) create mode 100644 include/fwu.h create mode 100644 include/fwu_mdata.h create mode 100644 lib/fwu_updates/fwu_mdata.c
diff --git a/include/fwu.h b/include/fwu.h new file mode 100644 index 0000000000..acba725bc8 --- /dev/null +++ b/include/fwu.h @@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (c) 2021, Linaro Limited
- */
+#if !defined _FWU_H_ +#define _FWU_H_
+#include <blk.h> +#include <efi.h>
+#include <linux/types.h>
+struct fwu_mdata;
+/**
- @get_active_index: get the current active_index value
- @get_image_alt_num: get the alt number to be used for the image
- @mdata_check: check the validity of the FWU metadata partitions
- @set_accept_image: set the accepted bit for the image
- @clear_accept_image: clear the accepted bit for the image
- @get_mdata() - Get a FWU metadata copy
- @update_mdata() - Update the FWU metadata copy
- */
+struct fwu_mdata_ops {
int (*get_active_index)(u32 *active_idx);
int (*get_image_alt_num)(efi_guid_t image_type_id, u32 update_bank,
int *alt_num);
int (*mdata_check)(void);
int (*set_accept_image)(efi_guid_t *img_type_id, u32 bank);
int (*clear_accept_image)(efi_guid_t *img_type_id, u32 bank);
int (*get_mdata)(struct fwu_mdata **mdata);
int (*update_mdata)(struct fwu_mdata *mdata);
+};
We also can remove
- get_active_index
- set_accept_image
- clear_accept_image
from these operations, because those are just reading or modifying metadata. Such functions can be written as below
ops() { op->get_mdata(&mdata); do_some_operation(mdata); if (updated) op->update_mdata(mdata); }
I'll make a series of patches on top of your series for DeveloperBox, which does not use GPT.
I will check how these functions can be put in the common fwu_mdata.c file. Thanks.
-sughosh
Thank you,
-- Masami Hiramatsu