linux/drivers/mtd
Robert Jarzmik c3de8a8a5a mtd: docg3: add fast mode
Docg3 chips can work in 3 modes : normal MLC mode, fast
mode and reliable mode. Normally, as docg3 is a MLC chip, it
should be configured to work in normal mode.

In both normal mode, each page is distinct. This
means that writing to page 12 of blocks 14,15 writes only to
that page, and reading from page 12 of blocks 14,15 reads
only from that page.

In reliable and fast modes, pages are coupled by pairs, and
are clones one of each other. This means that the available
capacity of the chip is halved. Pages are coupled in each
block, and page of index 2*n contains the same data as page
2*n+1 of the same block.

In fast mode, the reads occur a bit faster, but are a bit
less reliable that in normal mode.

When reading from page 2*n, the chip reads bytes from both
page 2*n and page 2*n+1, makes a logical and for each byte,
and returns the result. As programming a page means
"clearing bits", even if a bit was not cleared on one page
because the flash is worn out, the other page has the bit
cleared, and the result of the "AND" gives a correct result.

When writing to page 2*n, the chip writes data to both page
2*n and page 2*n+1.

Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Reviewed-by: Ivan Djelic <ivan.djelic@parrot.com>
Reviewed-by: Mike Dunn <mikedunn@newsguy.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2012-01-09 18:07:29 +00:00
..
chips mtd: cfi: Allow per-mapping CFI device endianness 2012-01-09 18:06:13 +00:00
devices mtd: docg3: add fast mode 2012-01-09 18:07:29 +00:00
lpddr mtd: Add module.h to drivers users that were implicitly using it. 2011-10-31 19:31:12 -04:00
maps mtd: plat_ram: call mtd_device_register only if partition data exists 2011-12-19 11:13:52 +00:00
nand mtd: nand: Making MTD_NAND_OMAP2 depend on ARCH_OMAP2PLUS 2012-01-09 18:07:04 +00:00
onenand Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
tests mtd: tests: don't use mtd0 as a default 2011-10-30 14:31:04 +02:00
ubi Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
afs.c mtd: abstract last MTD partition parser argument 2011-09-11 15:02:10 +03:00
ar7part.c Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
cmdlinepart.c Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
ftl.c mtd: spelling fixes 2011-09-11 15:02:16 +03:00
inftlcore.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
inftlmount.c mtd: spelling fixes 2011-09-11 15:02:16 +03:00
Kconfig Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
Makefile mtd: make ofpart buildable as a separate module 2011-09-11 15:02:13 +03:00
mtd_blkdevs.c mtd: mtd_blkdevs: don't increase 'open' count on error path 2012-01-09 18:04:01 +00:00
mtdblock_ro.c mtd: Add module.h to drivers users that were implicitly using it. 2011-10-31 19:31:12 -04:00
mtdblock.c mtd: replace DEBUG() with pr_debug() 2011-09-11 15:02:16 +03:00
mtdchar.c Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
mtdconcat.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdcore.c mtd: check parts pointer before using it 2011-09-11 15:02:18 +03:00
mtdcore.h mtd: hide parse_mtd_partitions 2011-09-11 15:02:13 +03:00
mtdoops.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdpart.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdsuper.c Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
mtdswap.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
nftlcore.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
nftlmount.c mtd: spelling fixes 2011-09-11 15:02:16 +03:00
ofpart.c mtd: ofpart: add ofoldpart alias 2011-09-11 15:02:14 +03:00
redboot.c Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
rfd_ftl.c mtd: Add module.h to drivers users that were implicitly using it. 2011-10-31 19:31:12 -04:00
sm_ftl.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
sm_ftl.h
ssfdc.c mtd: rename MTD_OOB_* to MTD_OPS_* 2011-09-11 15:28:59 +03:00