]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dfu: mtd: remove direct call of mtdparts_init function
authorPatrick Delaunay <patrick.delaunay@foss.st.com>
Thu, 8 Jun 2023 15:16:39 +0000 (17:16 +0200)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Fri, 16 Jun 2023 09:01:16 +0000 (11:01 +0200)
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>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
drivers/dfu/Kconfig
drivers/dfu/dfu_mtd.c

index 8d7f13dcb0b570c010946a82387f0e70a4e225ec..c3a0b93b25e039b55a381d87e7a62acb541e0af3 100644 (file)
@@ -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.
 
index c7075f12eca9062ea4845fc9d0c609f4adc7e62a..75e2f6a42151da54844b1d1483f31a5bbee98a95 100644 (file)
@@ -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 {