From: Tim Kuo <[email protected]>

spi_nand_idx numbers the "spi-nandN" MTD names and was incremented inside
the sprintf() before chip had been initialized and registered.
If spinand_init() or add_mtd_device() subsequently fails, the index is
consumed anyway and the numbering gets a hole: on a board where the first
SPI NAND fails to probe, the second one comes up as "spi-nand1" and no
"spi-nand0" exists at all.

This patch will pass the current value to sprintf() and increment only
after add_mtd_device() has succeeded, so spi_nand_idx counts the SPI
NAND devices actually registered and the names stay contiguous starting
at spi-nand0.

Signed-off-by: Tim Kuo <[email protected]>
---
 drivers/mtd/nand/spi/core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index 14af4264612..1fa669f3def 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -1691,7 +1691,7 @@ static int spinand_probe(struct udevice *dev)
        mtd->name = malloc(20);
        if (!mtd->name)
                return -ENOMEM;
-       sprintf(mtd->name, "spi-nand%d", spi_nand_idx++);
+       sprintf(mtd->name, "spi-nand%d", spi_nand_idx);
        spinand->slave = slave;
        spinand_set_ofnode(spinand, dev_ofnode(dev));
 #endif
@@ -1709,6 +1709,7 @@ static int spinand_probe(struct udevice *dev)
                goto err_spinand_cleanup;
 
        plat->mtd = mtd;
+       spi_nand_idx++;
 
        return 0;
 
-- 
2.45.2

Reply via email to