
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;
if (!strcmp(argv[0], "partubi")) dfu->data.mtd.ubi = 1; } else {dfu->data.mtd.size = partition->size;
Reviewed-by: Patrice Chotard patrice.chotard@foss.st.com
Thanks Patrice