aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mtd
diff options
context:
space:
mode:
authorBrian Norris <computersforpeace@gmail.com>2011-08-30 21:45:38 -0400
committerArtem Bityutskiy <artem.bityutskiy@intel.com>2011-09-11 08:13:38 -0400
commitc46f6483d21e93400e4a110de7902830173d53b0 (patch)
treebac45575c58963f4bc35d13b188c8ff5a32c9823 /include/linux/mtd
parente9195edc59f33e9cabdd32a2959e927806670f45 (diff)
mtd: support reading OOB without ECC
This fixes issues with `nanddump -n' and the MEMREADOOB[64] ioctls on hardware that performs error correction when reading only OOB data. A driver for such hardware needs to know when we're doing a RAW vs. a normal write, but mtd_do_read_oob does not pass such information to the lower layers (e.g., NAND). We should pass MTD_OOB_RAW or MTD_OOB_PLACE based on the MTD file mode. For now, most drivers can get away with just setting: chip->ecc.read_oob_raw = chip->ecc.read_oob This is done by default; but for systems that behave as described above, you must supply your own replacement function. This was tested with nandsim as well as on actual SLC NAND. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Cc: Jim Quinlan <jim2101024@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
Diffstat (limited to 'include/linux/mtd')
-rw-r--r--include/linux/mtd/nand.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index c7113a9cd66d..0b3d464cba13 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -341,6 +341,7 @@ struct nand_hw_control {
341 * @write_page: function to write a page according to the ECC generator 341 * @write_page: function to write a page according to the ECC generator
342 * requirements. 342 * requirements.
343 * @write_oob_raw: function to write chip OOB data without ECC 343 * @write_oob_raw: function to write chip OOB data without ECC
344 * @read_oob_raw: function to read chip OOB data without ECC
344 * @read_oob: function to read chip OOB data 345 * @read_oob: function to read chip OOB data
345 * @write_oob: function to write chip OOB data 346 * @write_oob: function to write chip OOB data
346 */ 347 */
@@ -371,6 +372,8 @@ struct nand_ecc_ctrl {
371 const uint8_t *buf); 372 const uint8_t *buf);
372 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, 373 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
373 int page); 374 int page);
375 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
376 int page, int sndcmd);
374 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page, 377 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page,
375 int sndcmd); 378 int sndcmd);
376 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, 379 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,