Message ID | 20230608171614.3.I620daeba9c6dbeed0f0164229d65403d36291bb1@changeid |
---|---|
State | Accepted |
Commit | 28d3439f1b343f1299c8e92a673ceca2d9296baa |
Delegated to: | Patrice Chotard |
Headers | show |
Series | stm32mp1: use U-Boot device tree to configure MTD partitions | expand |
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@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@foss.st.com> Thanks Patrice
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 {
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@foss.st.com> --- drivers/dfu/Kconfig | 1 - drivers/dfu/dfu_mtd.c | 34 +++++++++++++++++++--------------- 2 files changed, 19 insertions(+), 16 deletions(-)