dfu: Add option to skip empty pages when flashing UBI images to NAND
authorGuillermo Rodríguez <guille.rodriguez@gmail.com>
Mon, 16 Dec 2019 15:27:57 +0000 (16:27 +0100)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Sun, 2 Feb 2020 17:19:52 +0000 (18:19 +0100)
Add a new option to enable the DROP_FFS flag when flashing UBI images to
NAND in order to drop trailing all-0xff pages.

This is similar to the existing FASTBOOT_FLASH_NAND_TRIMFFS option.

Signed-off-by: Guillermo Rodriguez <guille.rodriguez@gmail.com>
Cc: Lukasz Majewski <lukma@denx.de>
drivers/dfu/Kconfig
drivers/dfu/dfu_nand.c

index 9709b6277d65d2c057bbfe6d1980037fc2c4b26e..174fb588a6e995ccb3e445e3358d4771cee74a5b 100644 (file)
@@ -42,6 +42,13 @@ config DFU_NAND
          This option enables using DFU to read and write to NAND based
          storage.
 
+config DFU_NAND_TRIMFFS
+       bool "Skip empty pages when flashing UBI images to NAND"
+       depends on DFU_NAND
+       help
+         When flashing UBI images to NAND, enable the DROP_FFS flag to drop
+         trailing all-0xff pages.
+
 config DFU_RAM
        bool "RAM back end for DFU"
        help
index b812a3dfb136ec954305a76b7bf7555e155619ee..58b94348c95ca6c942e955644edc28253ebffbd0 100644 (file)
@@ -50,6 +50,7 @@ static int nand_block_op(enum dfu_op op, struct dfu_entity *dfu,
                                         lim, buf);
        } else {
                nand_erase_options_t opts;
+               int write_flags = WITH_WR_VERIFY;
 
                memset(&opts, 0, sizeof(opts));
                opts.offset = start;
@@ -62,8 +63,12 @@ static int nand_block_op(enum dfu_op op, struct dfu_entity *dfu,
                if (ret)
                        return ret;
                /* then write */
+#ifdef CONFIG_DFU_NAND_TRIMFFS
+               if (dfu->data.nand.ubi)
+                       write_flags |= WITH_DROP_FFS;
+#endif
                ret = nand_write_skip_bad(mtd, start, &count, &actual,
-                                         lim, buf, WITH_WR_VERIFY);
+                                         lim, buf, write_flags);
        }
 
        if (ret != 0) {