diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-01 19:55:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-01 19:55:42 -0400 |
commit | f5e7e844a571124ffc117d4696787d6afc4fc5ae (patch) | |
tree | 26bb17dc94e9536da540c187b00cedb0c1b24664 /include/linux | |
parent | 48445159e9ecb44a96a4de06c6ae7c54eb43ba5b (diff) | |
parent | 4a43faf54e9173b6acce37cf7f053fc9515a2cdf (diff) |
Merge tag 'for-linus-3.5-20120601' of git://git.infradead.org/linux-mtd
Pull mtd update from David Woodhouse:
- More robust parsing especially of xattr data in JFFS2
- Updates to mxc_nand and gpmi drivers to support new boards and device tree
- Improve consistency of information about ECC strength in NAND devices
- Clean up partition handling of plat_nand
- Support NAND drivers without dedicated access to OOB area
- BCH hardware ECC support for OMAP
- Other fixes and cleanups, and a few new device IDs
Fixed trivial conflict in drivers/mtd/nand/gpmi-nand/gpmi-nand.c due to
added include files next to each other.
* tag 'for-linus-3.5-20120601' of git://git.infradead.org/linux-mtd: (75 commits)
mtd: mxc_nand: move ecc strengh setup before nand_scan_tail
mtd: block2mtd: fix recursive call of mtd_writev
mtd: gpmi-nand: define ecc.strength
mtd: of_parts: fix breakage in Kconfig
mtd: nand: fix scan_read_raw_oob
mtd: docg3 fix in-middle of blocks reads
mtd: cfi_cmdset_0002: Slight cleanup of fixup messages
mtd: add fixup for S29NS512P NOR flash.
jffs2: allow to complete xattr integrity check on first GC scan
jffs2: allow to discriminate between recoverable and non-recoverable errors
mtd: nand: omap: add support for hardware BCH ecc
ARM: OMAP3: gpmc: add BCH ecc api and modes
mtd: nand: check the return code of 'read_oob/read_oob_raw'
mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw'
mtd: m25p80: Add support for Winbond W25Q80BW
jffs2: get rid of jffs2_sync_super
jffs2: remove unnecessary GC pass on sync
jffs2: remove unnecessary GC pass on umount
jffs2: remove lock_super
mtd: gpmi: add gpmi support for mx6q
...
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/mtd/gpmi-nand.h | 8 | ||||
-rw-r--r-- | include/linux/mtd/mtd.h | 11 | ||||
-rw-r--r-- | include/linux/mtd/nand.h | 25 |
3 files changed, 27 insertions, 17 deletions
diff --git a/include/linux/mtd/gpmi-nand.h b/include/linux/mtd/gpmi-nand.h index 69b6dbf46b5e..ed3c4e09f3d1 100644 --- a/include/linux/mtd/gpmi-nand.h +++ b/include/linux/mtd/gpmi-nand.h | |||
@@ -23,12 +23,12 @@ | |||
23 | #define GPMI_NAND_RES_SIZE 6 | 23 | #define GPMI_NAND_RES_SIZE 6 |
24 | 24 | ||
25 | /* Resource names for the GPMI NAND driver. */ | 25 | /* Resource names for the GPMI NAND driver. */ |
26 | #define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "GPMI NAND GPMI Registers" | 26 | #define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "gpmi-nand" |
27 | #define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" | 27 | #define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" |
28 | #define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "GPMI NAND BCH Registers" | 28 | #define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "bch" |
29 | #define GPMI_NAND_BCH_INTERRUPT_RES_NAME "GPMI NAND BCH Interrupt" | 29 | #define GPMI_NAND_BCH_INTERRUPT_RES_NAME "bch" |
30 | #define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" | 30 | #define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" |
31 | #define GPMI_NAND_DMA_INTERRUPT_RES_NAME "GPMI NAND DMA Interrupt" | 31 | #define GPMI_NAND_DMA_INTERRUPT_RES_NAME "gpmi-dma" |
32 | 32 | ||
33 | /** | 33 | /** |
34 | * struct gpmi_nand_platform_data - GPMI NAND driver platform data. | 34 | * struct gpmi_nand_platform_data - GPMI NAND driver platform data. |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index cf5ea8cdcf8e..63dadc0dfb62 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -157,6 +157,15 @@ struct mtd_info { | |||
157 | unsigned int erasesize_mask; | 157 | unsigned int erasesize_mask; |
158 | unsigned int writesize_mask; | 158 | unsigned int writesize_mask; |
159 | 159 | ||
160 | /* | ||
161 | * read ops return -EUCLEAN if max number of bitflips corrected on any | ||
162 | * one region comprising an ecc step equals or exceeds this value. | ||
163 | * Settable by driver, else defaults to ecc_strength. User can override | ||
164 | * in sysfs. N.B. The meaning of the -EUCLEAN return code has changed; | ||
165 | * see Documentation/ABI/testing/sysfs-class-mtd for more detail. | ||
166 | */ | ||
167 | unsigned int bitflip_threshold; | ||
168 | |||
160 | // Kernel-only stuff starts here. | 169 | // Kernel-only stuff starts here. |
161 | const char *name; | 170 | const char *name; |
162 | int index; | 171 | int index; |
@@ -164,7 +173,7 @@ struct mtd_info { | |||
164 | /* ECC layout structure pointer - read only! */ | 173 | /* ECC layout structure pointer - read only! */ |
165 | struct nand_ecclayout *ecclayout; | 174 | struct nand_ecclayout *ecclayout; |
166 | 175 | ||
167 | /* max number of correctible bit errors per writesize */ | 176 | /* max number of correctible bit errors per ecc step */ |
168 | unsigned int ecc_strength; | 177 | unsigned int ecc_strength; |
169 | 178 | ||
170 | /* Data for variable erase regions. If numeraseregions is zero, | 179 | /* Data for variable erase regions. If numeraseregions is zero, |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 1482340d3d9f..57977c640529 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
@@ -161,8 +161,6 @@ typedef enum { | |||
161 | * Option constants for bizarre disfunctionality and real | 161 | * Option constants for bizarre disfunctionality and real |
162 | * features. | 162 | * features. |
163 | */ | 163 | */ |
164 | /* Chip can not auto increment pages */ | ||
165 | #define NAND_NO_AUTOINCR 0x00000001 | ||
166 | /* Buswidth is 16 bit */ | 164 | /* Buswidth is 16 bit */ |
167 | #define NAND_BUSWIDTH_16 0x00000002 | 165 | #define NAND_BUSWIDTH_16 0x00000002 |
168 | /* Device supports partial programming without padding */ | 166 | /* Device supports partial programming without padding */ |
@@ -207,7 +205,6 @@ typedef enum { | |||
207 | (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) | 205 | (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) |
208 | 206 | ||
209 | /* Macros to identify the above */ | 207 | /* Macros to identify the above */ |
210 | #define NAND_CANAUTOINCR(chip) (!(chip->options & NAND_NO_AUTOINCR)) | ||
211 | #define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING)) | 208 | #define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING)) |
212 | #define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG)) | 209 | #define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG)) |
213 | #define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK)) | 210 | #define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK)) |
@@ -216,7 +213,7 @@ typedef enum { | |||
216 | && (chip->page_shift > 9)) | 213 | && (chip->page_shift > 9)) |
217 | 214 | ||
218 | /* Mask to zero out the chip options, which come from the id table */ | 215 | /* Mask to zero out the chip options, which come from the id table */ |
219 | #define NAND_CHIPOPTIONS_MSK (0x0000ffff & ~NAND_NO_AUTOINCR) | 216 | #define NAND_CHIPOPTIONS_MSK 0x0000ffff |
220 | 217 | ||
221 | /* Non chip related options */ | 218 | /* Non chip related options */ |
222 | /* This option skips the bbt scan during initialization. */ | 219 | /* This option skips the bbt scan during initialization. */ |
@@ -363,21 +360,20 @@ struct nand_ecc_ctrl { | |||
363 | int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, | 360 | int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, |
364 | uint8_t *calc_ecc); | 361 | uint8_t *calc_ecc); |
365 | int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 362 | int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
366 | uint8_t *buf, int page); | 363 | uint8_t *buf, int oob_required, int page); |
367 | void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 364 | void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
368 | const uint8_t *buf); | 365 | const uint8_t *buf, int oob_required); |
369 | int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, | 366 | int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, |
370 | uint8_t *buf, int page); | 367 | uint8_t *buf, int oob_required, int page); |
371 | int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, | 368 | int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, |
372 | uint32_t offs, uint32_t len, uint8_t *buf); | 369 | uint32_t offs, uint32_t len, uint8_t *buf); |
373 | void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | 370 | void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |
374 | const uint8_t *buf); | 371 | const uint8_t *buf, int oob_required); |
375 | int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 372 | int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
376 | int page); | 373 | int page); |
377 | int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 374 | int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
378 | int page, int sndcmd); | 375 | int page); |
379 | int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page, | 376 | int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page); |
380 | int sndcmd); | ||
381 | int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, | 377 | int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, |
382 | int page); | 378 | int page); |
383 | }; | 379 | }; |
@@ -459,6 +455,8 @@ struct nand_buffers { | |||
459 | * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 | 455 | * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 |
460 | * @pagebuf: [INTERN] holds the pagenumber which is currently in | 456 | * @pagebuf: [INTERN] holds the pagenumber which is currently in |
461 | * data_buf. | 457 | * data_buf. |
458 | * @pagebuf_bitflips: [INTERN] holds the bitflip count for the page which is | ||
459 | * currently in data_buf. | ||
462 | * @subpagesize: [INTERN] holds the subpagesize | 460 | * @subpagesize: [INTERN] holds the subpagesize |
463 | * @onfi_version: [INTERN] holds the chip ONFI version (BCD encoded), | 461 | * @onfi_version: [INTERN] holds the chip ONFI version (BCD encoded), |
464 | * non 0 if ONFI supported. | 462 | * non 0 if ONFI supported. |
@@ -505,7 +503,8 @@ struct nand_chip { | |||
505 | int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, | 503 | int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, |
506 | int status, int page); | 504 | int status, int page); |
507 | int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | 505 | int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |
508 | const uint8_t *buf, int page, int cached, int raw); | 506 | const uint8_t *buf, int oob_required, int page, |
507 | int cached, int raw); | ||
509 | 508 | ||
510 | int chip_delay; | 509 | int chip_delay; |
511 | unsigned int options; | 510 | unsigned int options; |
@@ -519,6 +518,7 @@ struct nand_chip { | |||
519 | uint64_t chipsize; | 518 | uint64_t chipsize; |
520 | int pagemask; | 519 | int pagemask; |
521 | int pagebuf; | 520 | int pagebuf; |
521 | unsigned int pagebuf_bitflips; | ||
522 | int subpagesize; | 522 | int subpagesize; |
523 | uint8_t cellinfo; | 523 | uint8_t cellinfo; |
524 | int badblockpos; | 524 | int badblockpos; |
@@ -654,6 +654,7 @@ struct platform_nand_ctrl { | |||
654 | void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); | 654 | void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); |
655 | void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); | 655 | void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); |
656 | void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); | 656 | void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); |
657 | unsigned char (*read_byte)(struct mtd_info *mtd); | ||
657 | void *priv; | 658 | void *priv; |
658 | }; | 659 | }; |
659 | 660 | ||