[Uboot-stm32] [PATCH 03/12] dfu: mtd: remove direct call of mtdparts_init function
Patrice CHOTARD
patrice.chotard at foss.st.com
Tue Jun 13 08:26:21 CEST 2023
On 6/8/23 17:16, Patrick Delaunay wrote:
> With MTD support in driver model, the direct call of mtdparts_init
> should be avoided and replaced by mtd_probe_devices.
>
> With the modificaton when MTDIDS/MTDPARTS are empty the OF fallback
> with partition describe in device tree is correctly performed,
> introduced by commit dc339bf784f0 ("mtd: add support for parsing
> partitions defined in OF").
> With this patch the dependency with CONFIG_CMD_MTDPARTS is removed.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
>
> drivers/dfu/Kconfig | 1 -
> drivers/dfu/dfu_mtd.c | 34 +++++++++++++++++++---------------
> 2 files changed, 19 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/dfu/Kconfig b/drivers/dfu/Kconfig
> index 8d7f13dcb0b5..c3a0b93b25e0 100644
> --- a/drivers/dfu/Kconfig
> +++ b/drivers/dfu/Kconfig
> @@ -41,7 +41,6 @@ config DFU_MMC
> config DFU_MTD
> bool "MTD back end for DFU"
> depends on DM_MTD
> - depends on CMD_MTDPARTS
> help
> This option enables using DFU to read and write to on any MTD device.
>
> diff --git a/drivers/dfu/dfu_mtd.c b/drivers/dfu/dfu_mtd.c
> index c7075f12eca9..75e2f6a42151 100644
> --- a/drivers/dfu/dfu_mtd.c
> +++ b/drivers/dfu/dfu_mtd.c
> @@ -10,7 +10,6 @@
> #include <common.h>
> #include <dfu.h>
> #include <mtd.h>
> -#include <jffs2/load_kernel.h>
> #include <linux/err.h>
> #include <linux/ctype.h>
>
> @@ -275,7 +274,7 @@ int dfu_fill_entity_mtd(struct dfu_entity *dfu, char *devstr, char **argv, int a
> {
> char *s;
> struct mtd_info *mtd;
> - int ret, part;
> + int part;
>
> mtd = get_mtd_device_nm(devstr);
> if (IS_ERR_OR_NULL(mtd))
> @@ -299,10 +298,9 @@ int dfu_fill_entity_mtd(struct dfu_entity *dfu, char *devstr, char **argv, int a
> if (*s)
> return -EINVAL;
> } else if ((!strcmp(argv[0], "part")) || (!strcmp(argv[0], "partubi"))) {
> - char mtd_id[32];
> - struct mtd_device *mtd_dev;
> - u8 part_num;
> - struct part_info *pi;
> + struct mtd_info *partition;
> + int partnum = 0;
> + bool part_found = false;
>
> if (argc != 2)
> return -EINVAL;
> @@ -313,19 +311,25 @@ int dfu_fill_entity_mtd(struct dfu_entity *dfu, char *devstr, char **argv, int a
> if (*s)
> return -EINVAL;
>
> - sprintf(mtd_id, "%s,%d", devstr, part - 1);
> - printf("using id '%s'\n", mtd_id);
> + /* register partitions with MTDIDS/MTDPARTS or OF fallback */
> + mtd_probe_devices();
>
> - mtdparts_init();
> -
> - ret = find_dev_and_part(mtd_id, &mtd_dev, &part_num, &pi);
> - if (ret != 0) {
> - printf("Could not locate '%s'\n", mtd_id);
> + partnum = 0;
> + list_for_each_entry(partition, &mtd->partitions, node) {
> + partnum++;
> + if (partnum == part) {
> + part_found = true;
> + break;
> + }
> + }
> + if (!part_found) {
> + printf("No partition %d in %s\n", part, mtd->name);
> return -1;
> }
> + log_debug("partition %d:%s in %s\n", partnum, partition->name, mtd->name);
>
> - dfu->data.mtd.start = pi->offset;
> - dfu->data.mtd.size = pi->size;
> + dfu->data.mtd.start = partition->offset;
> + dfu->data.mtd.size = partition->size;
> if (!strcmp(argv[0], "partubi"))
> dfu->data.mtd.ubi = 1;
> } else {
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Thanks
Patrice
More information about the U-Boot
mailing list