Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c64038e authored by David Brownell's avatar David Brownell Committed by David Woodhouse
Browse files

[MTD] make dataflash write-verify be optional



This adds a WRITE_VERIFY Kconfig option to the DataFlash driver,
closely mirroring the similar NAND and ONENAND options, giving
an option to disable some code that's currently always enabled.

Removing this step probably saves a millisecond or so per page
when writing data, which will add up quickly since these pages
are small (the largest is 1 KiB).  It doesn't seem to add a
lot in terms of reliability, and wouldn't detect errors which
crop up when transferring data to the on-chip SRAM buffer.

Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Acked-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
Acked-by: default avatarAndrew Victor <linux@maxim.org.za>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent cf93ae02
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,16 @@ config MTD_DATAFLASH
	  Sometimes DataFlash chips are packaged inside MMC-format
	  Sometimes DataFlash chips are packaged inside MMC-format
	  cards; at this writing, the MMC stack won't handle those.
	  cards; at this writing, the MMC stack won't handle those.


config MTD_DATAFLASH_WRITE_VERIFY
	bool "Verify DataFlash page writes"
	depends on MTD_DATAFLASH
	help
	  This adds an extra check when data is written to the flash.
	  It may help if you are verifying chip setup (timings etc) on
	  your board.  There is a rare possibility that even though the
	  device thinks the write was successful, a bit could have been
	  flipped accidentally due to device wear or something else.

config MTD_DATAFLASH_OTP
config MTD_DATAFLASH_OTP
	bool "DataFlash OTP support (Security Register)"
	bool "DataFlash OTP support (Security Register)"
	depends on MTD_DATAFLASH
	depends on MTD_DATAFLASH
+3 −5
Original line number Original line Diff line number Diff line
@@ -30,12 +30,10 @@
 * doesn't (yet) use these for any kind of i/o overlap or prefetching.
 * doesn't (yet) use these for any kind of i/o overlap or prefetching.
 *
 *
 * Sometimes DataFlash is packaged in MMC-format cards, although the
 * Sometimes DataFlash is packaged in MMC-format cards, although the
 * MMC stack can't use SPI (yet), or distinguish between MMC and DataFlash
 * MMC stack can't (yet?) distinguish between MMC and DataFlash
 * protocols during enumeration.
 * protocols during enumeration.
 */
 */


#define CONFIG_DATAFLASH_WRITE_VERIFY

/* reads can bypass the buffers */
/* reads can bypass the buffers */
#define OP_READ_CONTINUOUS	0xE8
#define OP_READ_CONTINUOUS	0xE8
#define OP_READ_PAGE		0xD2
#define OP_READ_PAGE		0xD2
@@ -403,7 +401,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
		(void) dataflash_waitready(priv->spi);
		(void) dataflash_waitready(priv->spi);




#ifdef	CONFIG_DATAFLASH_WRITE_VERIFY
#ifdef CONFIG_MTD_DATAFLASH_VERIFY_WRITE


		/* (3) Compare to Buffer1 */
		/* (3) Compare to Buffer1 */
		addr = pageaddr << priv->page_offset;
		addr = pageaddr << priv->page_offset;
@@ -432,7 +430,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
		} else
		} else
			status = 0;
			status = 0;


#endif	/* CONFIG_DATAFLASH_WRITE_VERIFY */
#endif	/* CONFIG_MTD_DATAFLASH_VERIFY_WRITE */


		remaining = remaining - writelen;
		remaining = remaining - writelen;
		pageaddr++;
		pageaddr++;