mtd: Parse mtdparts/mtdids again when the MTD list has been updated
authorBoris Brezillon <boris.brezillon@bootlin.com>
Sun, 2 Dec 2018 09:54:23 +0000 (10:54 +0100)
committerJagan Teki <jagan@amarulasolutions.com>
Wed, 5 Dec 2018 19:15:36 +0000 (00:45 +0530)
Updates to the MTD device list should trigger a new parsing of the
mtdids/mtdparts vars even if those vars haven't changed.

Fixes: 5db66b3aee6f ("cmd: mtd: add 'mtd' command")
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Tested-by: Heiko Schocher <hs@denx.de>
drivers/mtd/mtd_uboot.c

index 5ca560c..6a3e643 100644 (file)
@@ -161,9 +161,13 @@ int mtd_probe_devices(void)
 
        mtd_probe_uclass_mtd_devs();
 
-       /* Check if mtdparts/mtdids changed since last call, otherwise: exit */
+       /*
+        * Check if mtdparts/mtdids changed or if the MTD dev list was updated
+        * since last call, otherwise: exit
+        */
        if ((!mtdparts && !old_mtdparts && !mtdids && !old_mtdids) ||
            (mtdparts && old_mtdparts && mtdids && old_mtdids &&
+            !mtd_dev_list_updated() &&
             !strcmp(mtdparts, old_mtdparts) &&
             !strcmp(mtdids, old_mtdids)))
                return 0;
@@ -201,6 +205,12 @@ int mtd_probe_devices(void)
                }
        }
 
+       /*
+        * Call mtd_dev_list_updated() to clear updates generated by our own
+        * parts removal loop.
+        */
+       mtd_dev_list_updated();
+
        /* If either mtdparts or mtdids is empty, then exit */
        if (!mtdparts || !mtdids)
                return 0;
@@ -281,6 +291,12 @@ int mtd_probe_devices(void)
                put_mtd_device(mtd);
        }
 
+       /*
+        * Call mtd_dev_list_updated() to clear updates generated by our own
+        * parts registration loop.
+        */
+       mtd_dev_list_updated();
+
        return 0;
 }
 #else