Re: [PATCH v7 06/13] FWU: stm32mp1: Add helper functions for accessing FWU metadata
On Fri, 22 Jul 2022 at 09:09, Jassi Brar wrote: > > On Thu, 14 Jul 2022 at 13:40, Sughosh Ganu wrote: > > > > Add helper functions needed for accessing the FWU metadata which > > contains information on the updatable images. These functions have > > been added for the STM32MP157C-DK2 board which has the updatable > > images on the uSD card, formatted as GPT partitions. > > > > Signed-off-by: Sughosh Ganu > > Reviewed-by: Patrick Delaunay > > --- > > Changes since V6: None > > > > board/st/stm32mp1/stm32mp1.c | 40 > > include/fwu.h| 3 ++ > > lib/fwu_updates/Makefile | 6 +++ > > lib/fwu_updates/fwu_gpt.c| 88 > > 4 files changed, 137 insertions(+) > > create mode 100644 lib/fwu_updates/Makefile > > create mode 100644 lib/fwu_updates/fwu_gpt.c > > > fwu_gpt is to be used by all platforms that have the gpt-scheme, not just STM. > > So do you want to break this patch into two ? One generic that > introduces the helper functions and another for stm using that api Ilias has suggested moving the two API functions to common files and having them defined as weak functions. I will be making this change in the next version. > > Also, you may want to specify GPL-2.0-or-later everywhere. I thought I had changed that in this version of the patchset, but unfortunately these two files have not been changed. I will change this in the next version. -sughosh
Re: [PATCH v7 06/13] FWU: stm32mp1: Add helper functions for accessing FWU metadata
On Thu, 14 Jul 2022 at 13:40, Sughosh Ganu wrote: > > Add helper functions needed for accessing the FWU metadata which > contains information on the updatable images. These functions have > been added for the STM32MP157C-DK2 board which has the updatable > images on the uSD card, formatted as GPT partitions. > > Signed-off-by: Sughosh Ganu > Reviewed-by: Patrick Delaunay > --- > Changes since V6: None > > board/st/stm32mp1/stm32mp1.c | 40 > include/fwu.h| 3 ++ > lib/fwu_updates/Makefile | 6 +++ > lib/fwu_updates/fwu_gpt.c| 88 > 4 files changed, 137 insertions(+) > create mode 100644 lib/fwu_updates/Makefile > create mode 100644 lib/fwu_updates/fwu_gpt.c > fwu_gpt is to be used by all platforms that have the gpt-scheme, not just STM. So do you want to break this patch into two ? One generic that introduces the helper functions and another for stm using that api Also, you may want to specify GPL-2.0-or-later everywhere. thanks.
Re: [PATCH v7 06/13] FWU: stm32mp1: Add helper functions for accessing FWU metadata
Hi Sughosh, On Thu, 14 Jul 2022 at 21:40, Sughosh Ganu wrote: > > Add helper functions needed for accessing the FWU metadata which > contains information on the updatable images. These functions have > been added for the STM32MP157C-DK2 board which has the updatable > images on the uSD card, formatted as GPT partitions. > > Signed-off-by: Sughosh Ganu > Reviewed-by: Patrick Delaunay > --- > Changes since V6: None > > board/st/stm32mp1/stm32mp1.c | 40 > include/fwu.h| 3 ++ > lib/fwu_updates/Makefile | 6 +++ > lib/fwu_updates/fwu_gpt.c| 88 > 4 files changed, 137 insertions(+) > create mode 100644 lib/fwu_updates/Makefile > create mode 100644 lib/fwu_updates/fwu_gpt.c > > diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c > index e3a04f8d8a..44c7943f1d 100644 > --- a/board/st/stm32mp1/stm32mp1.c > +++ b/board/st/stm32mp1/stm32mp1.c > @@ -7,9 +7,11 @@ > > #include > #include > +#include > #include > #include > #include > +#include > #include > #include > #include > @@ -25,9 +27,11 @@ > #include > #include > #include > +#include > #include > #include > #include > +#include > #include > #include > #include > @@ -962,3 +966,39 @@ static void board_copro_image_process(ulong fw_image, > size_t fw_size) > } > > U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_COPRO, board_copro_image_process); > + > +#if defined(CONFIG_FWU_MULTI_BANK_UPDATE) > + > +#include > +#include > + > +int fwu_plat_get_alt_num(struct udevice *dev, efi_guid_t *image_guid, > +int *alt_num) > +{ > + struct blk_desc *desc; > + struct fwu_mdata_gpt_blk_priv *priv = dev_get_priv(dev); > + > + desc = dev_get_uclass_plat(priv->blk_dev); > + if (!desc) { > + log_err("Block device not found\n"); > + return -ENODEV; > + } > + > + return fwu_gpt_get_alt_num(desc, image_guid, alt_num, DFU_DEV_MMC); > +} > + > +int fwu_plat_get_update_index(u32 *update_idx) > +{ > + int ret; > + u32 active_idx; > + > + ret = fwu_get_active_index(&active_idx); > + > + if (ret < 0) > + return -1; > + > + *update_idx = active_idx ^= 0x1; > + > + return ret; > +} I'dl ike to move those 2 out to the generic API as well. Sure a device might be paranoid and have more than 2 banks for firmware redundancy, however I believe 2 will be the main case. So we can use these 2 as generic weak functions and special devices can override that Regards /Ilias > +#endif /* CONFIG_FWU_MULTI_BANK_UPDATE */ > diff --git a/include/fwu.h b/include/fwu.h > index 8259c75d12..38dceca9c5 100644 > --- a/include/fwu.h > +++ b/include/fwu.h [...]
[PATCH v7 06/13] FWU: stm32mp1: Add helper functions for accessing FWU metadata
Add helper functions needed for accessing the FWU metadata which contains information on the updatable images. These functions have been added for the STM32MP157C-DK2 board which has the updatable images on the uSD card, formatted as GPT partitions. Signed-off-by: Sughosh Ganu Reviewed-by: Patrick Delaunay --- Changes since V6: None board/st/stm32mp1/stm32mp1.c | 40 include/fwu.h| 3 ++ lib/fwu_updates/Makefile | 6 +++ lib/fwu_updates/fwu_gpt.c| 88 4 files changed, 137 insertions(+) create mode 100644 lib/fwu_updates/Makefile create mode 100644 lib/fwu_updates/fwu_gpt.c diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c index e3a04f8d8a..44c7943f1d 100644 --- a/board/st/stm32mp1/stm32mp1.c +++ b/board/st/stm32mp1/stm32mp1.c @@ -7,9 +7,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -25,9 +27,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -962,3 +966,39 @@ static void board_copro_image_process(ulong fw_image, size_t fw_size) } U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_COPRO, board_copro_image_process); + +#if defined(CONFIG_FWU_MULTI_BANK_UPDATE) + +#include +#include + +int fwu_plat_get_alt_num(struct udevice *dev, efi_guid_t *image_guid, +int *alt_num) +{ + struct blk_desc *desc; + struct fwu_mdata_gpt_blk_priv *priv = dev_get_priv(dev); + + desc = dev_get_uclass_plat(priv->blk_dev); + if (!desc) { + log_err("Block device not found\n"); + return -ENODEV; + } + + return fwu_gpt_get_alt_num(desc, image_guid, alt_num, DFU_DEV_MMC); +} + +int fwu_plat_get_update_index(u32 *update_idx) +{ + int ret; + u32 active_idx; + + ret = fwu_get_active_index(&active_idx); + + if (ret < 0) + return -1; + + *update_idx = active_idx ^= 0x1; + + return ret; +} +#endif /* CONFIG_FWU_MULTI_BANK_UPDATE */ diff --git a/include/fwu.h b/include/fwu.h index 8259c75d12..38dceca9c5 100644 --- a/include/fwu.h +++ b/include/fwu.h @@ -51,4 +51,7 @@ int fwu_clear_accept_image(efi_guid_t *img_type_id, u32 bank); int fwu_plat_get_alt_num(struct udevice *dev, efi_guid_t *image_guid, int *alt_num); +int fwu_gpt_get_alt_num(struct blk_desc *desc, efi_guid_t *image_guid, + int *alt_num, unsigned char dfu_dev); +int fwu_plat_get_update_index(u32 *update_idx); #endif /* _FWU_H_ */ diff --git a/lib/fwu_updates/Makefile b/lib/fwu_updates/Makefile new file mode 100644 index 00..5a59e4a833 --- /dev/null +++ b/lib/fwu_updates/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (c) 2022, Linaro Limited +# + +obj-$(CONFIG_FWU_MDATA_GPT_BLK) += fwu_gpt.o diff --git a/lib/fwu_updates/fwu_gpt.c b/lib/fwu_updates/fwu_gpt.c new file mode 100644 index 00..434ec76bde --- /dev/null +++ b/lib/fwu_updates/fwu_gpt.c @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2022, Linaro Limited + */ + +#include +#include +#include +#include +#include +#include + +#include + +static int get_gpt_dfu_identifier(struct blk_desc *desc, efi_guid_t *image_guid) +{ + int i; + struct disk_partition info; + efi_guid_t unique_part_guid; + + for (i = 1; i < MAX_SEARCH_PARTITIONS; i++) { + if (part_get_info(desc, i, &info)) + continue; + uuid_str_to_bin(info.uuid, unique_part_guid.b, + UUID_STR_FORMAT_GUID); + + if (!guidcmp(&unique_part_guid, image_guid)) + return i; + } + + log_err("No partition found with image_guid %pUs\n", image_guid); + return -ENOENT; +} + +int fwu_gpt_get_alt_num(struct blk_desc *desc, efi_guid_t *image_guid, + int *alt_num, unsigned char dfu_dev) +{ + int ret = -1; + int i, part, dev_num; + int nalt; + struct dfu_entity *dfu; + + dev_num = desc->devnum; + part = get_gpt_dfu_identifier(desc, image_guid); + if (part < 0) + return -ENOENT; + + dfu_init_env_entities(NULL, NULL); + + nalt = 0; + list_for_each_entry(dfu, &dfu_list, list) { + nalt++; + } + + if (!nalt) { + log_warning("No entities in dfu_alt_info\n"); + dfu_free_entities(); + return -ENOENT; + } + + for (i = 0; i < nalt; i++) { + dfu = dfu_get_entity(i); + + if (!dfu) + continue; + + /* +* Currently, Multi Bank update +* feature is being supported +* only on GPT partitioned +* MMC/SD devices. +*/ +