Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nand.h
Go to the documentation of this file.
1 /*
2  * linux/include/linux/mtd/nand.h
3  *
4  * Copyright © 2000-2010 David Woodhouse <[email protected]>
5  * Steven J. Hill <[email protected]>
6  * Thomas Gleixner <[email protected]>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * Info:
13  * Contains standard defines and IDs for NAND flash devices
14  *
15  * Changelog:
16  * See git changelog.
17  */
18 #ifndef __LINUX_MTD_NAND_H
19 #define __LINUX_MTD_NAND_H
20 
21 #include <linux/wait.h>
22 #include <linux/spinlock.h>
23 #include <linux/mtd/mtd.h>
24 #include <linux/mtd/flashchip.h>
25 #include <linux/mtd/bbm.h>
26 
27 struct mtd_info;
28 struct nand_flash_dev;
29 /* Scan and identify a NAND device */
30 extern int nand_scan(struct mtd_info *mtd, int max_chips);
31 /*
32  * Separate phases of nand_scan(), allowing board driver to intervene
33  * and override command or ECC setup according to flash type.
34  */
35 extern int nand_scan_ident(struct mtd_info *mtd, int max_chips,
36  struct nand_flash_dev *table);
37 extern int nand_scan_tail(struct mtd_info *mtd);
38 
39 /* Free resources held by the NAND device */
40 extern void nand_release(struct mtd_info *mtd);
41 
42 /* Internal helper for board drivers which need to override command function */
43 extern void nand_wait_ready(struct mtd_info *mtd);
44 
45 /* locks all blocks present in the device */
46 extern int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
47 
48 /* unlocks specified locked blocks */
49 extern int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
50 
51 /* The maximum number of NAND chips in an array */
52 #define NAND_MAX_CHIPS 8
53 
54 /*
55  * This constant declares the max. oobsize / page, which
56  * is supported now. If you add a chip with bigger oobsize/page
57  * adjust this accordingly.
58  */
59 #define NAND_MAX_OOBSIZE 640
60 #define NAND_MAX_PAGESIZE 8192
61 
62 /*
63  * Constants for hardware specific CLE/ALE/NCE function
64  *
65  * These are bits which can be or'ed to set/clear multiple
66  * bits in one go.
67  */
68 /* Select the chip by setting nCE to low */
69 #define NAND_NCE 0x01
70 /* Select the command latch by setting CLE to high */
71 #define NAND_CLE 0x02
72 /* Select the address latch by setting ALE to high */
73 #define NAND_ALE 0x04
74 
75 #define NAND_CTRL_CLE (NAND_NCE | NAND_CLE)
76 #define NAND_CTRL_ALE (NAND_NCE | NAND_ALE)
77 #define NAND_CTRL_CHANGE 0x80
78 
79 /*
80  * Standard NAND flash commands
81  */
82 #define NAND_CMD_READ0 0
83 #define NAND_CMD_READ1 1
84 #define NAND_CMD_RNDOUT 5
85 #define NAND_CMD_PAGEPROG 0x10
86 #define NAND_CMD_READOOB 0x50
87 #define NAND_CMD_ERASE1 0x60
88 #define NAND_CMD_STATUS 0x70
89 #define NAND_CMD_STATUS_MULTI 0x71
90 #define NAND_CMD_SEQIN 0x80
91 #define NAND_CMD_RNDIN 0x85
92 #define NAND_CMD_READID 0x90
93 #define NAND_CMD_ERASE2 0xd0
94 #define NAND_CMD_PARAM 0xec
95 #define NAND_CMD_GET_FEATURES 0xee
96 #define NAND_CMD_SET_FEATURES 0xef
97 #define NAND_CMD_RESET 0xff
98 
99 #define NAND_CMD_LOCK 0x2a
100 #define NAND_CMD_UNLOCK1 0x23
101 #define NAND_CMD_UNLOCK2 0x24
102 
103 /* Extended commands for large page devices */
104 #define NAND_CMD_READSTART 0x30
105 #define NAND_CMD_RNDOUTSTART 0xE0
106 #define NAND_CMD_CACHEDPROG 0x15
107 
108 /* Extended commands for AG-AND device */
109 /*
110  * Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but
111  * there is no way to distinguish that from NAND_CMD_READ0
112  * until the remaining sequence of commands has been completed
113  * so add a high order bit and mask it off in the command.
114  */
115 #define NAND_CMD_DEPLETE1 0x100
116 #define NAND_CMD_DEPLETE2 0x38
117 #define NAND_CMD_STATUS_MULTI 0x71
118 #define NAND_CMD_STATUS_ERROR 0x72
119 /* multi-bank error status (banks 0-3) */
120 #define NAND_CMD_STATUS_ERROR0 0x73
121 #define NAND_CMD_STATUS_ERROR1 0x74
122 #define NAND_CMD_STATUS_ERROR2 0x75
123 #define NAND_CMD_STATUS_ERROR3 0x76
124 #define NAND_CMD_STATUS_RESET 0x7f
125 #define NAND_CMD_STATUS_CLEAR 0xff
126 
127 #define NAND_CMD_NONE -1
128 
129 /* Status bits */
130 #define NAND_STATUS_FAIL 0x01
131 #define NAND_STATUS_FAIL_N1 0x02
132 #define NAND_STATUS_TRUE_READY 0x20
133 #define NAND_STATUS_READY 0x40
134 #define NAND_STATUS_WP 0x80
135 
136 /*
137  * Constants for ECC_MODES
138  */
139 typedef enum {
147 
148 /*
149  * Constants for Hardware ECC
150  */
151 /* Reset Hardware ECC for read */
152 #define NAND_ECC_READ 0
153 /* Reset Hardware ECC for write */
154 #define NAND_ECC_WRITE 1
155 /* Enable Hardware ECC before syndrome is read back from flash */
156 #define NAND_ECC_READSYN 2
157 
158 /* Bit mask for flags passed to do_nand_read_ecc */
159 #define NAND_GET_DEVICE 0x80
160 
161 
162 /*
163  * Option constants for bizarre disfunctionality and real
164  * features.
165  */
166 /* Buswidth is 16 bit */
167 #define NAND_BUSWIDTH_16 0x00000002
168 /* Device supports partial programming without padding */
169 #define NAND_NO_PADDING 0x00000004
170 /* Chip has cache program function */
171 #define NAND_CACHEPRG 0x00000008
172 /* Chip has copy back function */
173 #define NAND_COPYBACK 0x00000010
174 /*
175  * AND Chip which has 4 banks and a confusing page / block
176  * assignment. See Renesas datasheet for further information.
177  */
178 #define NAND_IS_AND 0x00000020
179 /*
180  * Chip has a array of 4 pages which can be read without
181  * additional ready /busy waits.
182  */
183 #define NAND_4PAGE_ARRAY 0x00000040
184 /*
185  * Chip requires that BBT is periodically rewritten to prevent
186  * bits from adjacent blocks from 'leaking' in altering data.
187  * This happens with the Renesas AG-AND chips, possibly others.
188  */
189 #define BBT_AUTO_REFRESH 0x00000080
190 /* Chip does not allow subpage writes */
191 #define NAND_NO_SUBPAGE_WRITE 0x00000200
192 
193 /* Device is one of 'new' xD cards that expose fake nand command set */
194 #define NAND_BROKEN_XD 0x00000400
195 
196 /* Device behaves just like nand, but is readonly */
197 #define NAND_ROM 0x00000800
198 
199 /* Device supports subpage reads */
200 #define NAND_SUBPAGE_READ 0x00001000
201 
202 /* Options valid for Samsung large page devices */
203 #define NAND_SAMSUNG_LP_OPTIONS \
204  (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
205 
206 /* Macros to identify the above */
207 #define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
208 #define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
209 #define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
210 #define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
211 
212 /* Non chip related options */
213 /* This option skips the bbt scan during initialization. */
214 #define NAND_SKIP_BBTSCAN 0x00010000
215 /*
216  * This option is defined if the board driver allocates its own buffers
217  * (e.g. because it needs them DMA-coherent).
218  */
219 #define NAND_OWN_BUFFERS 0x00020000
220 /* Chip may not exist, so silence any errors in scan */
221 #define NAND_SCAN_SILENT_NODEV 0x00040000
222 
223 /* Options set by nand scan */
224 /* Nand scan has allocated controller struct */
225 #define NAND_CONTROLLER_ALLOC 0x80000000
226 
227 /* Cell info constants */
228 #define NAND_CI_CHIPNR_MSK 0x03
229 #define NAND_CI_CELLTYPE_MSK 0x0C
230 
231 /* Keep gcc happy */
232 struct nand_chip;
233 
234 /* ONFI timing mode, used in both asynchronous and synchronous mode */
235 #define ONFI_TIMING_MODE_0 (1 << 0)
236 #define ONFI_TIMING_MODE_1 (1 << 1)
237 #define ONFI_TIMING_MODE_2 (1 << 2)
238 #define ONFI_TIMING_MODE_3 (1 << 3)
239 #define ONFI_TIMING_MODE_4 (1 << 4)
240 #define ONFI_TIMING_MODE_5 (1 << 5)
241 #define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
242 
243 /* ONFI feature address */
244 #define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
245 
246 /* ONFI subfeature parameters length */
247 #define ONFI_SUBFEATURE_PARAM_LEN 4
248 
250  /* rev info and features block */
251  /* 'O' 'N' 'F' 'I' */
252  u8 sig[4];
257 
258  /* manufacturer information block */
259  char manufacturer[12];
260  char model[20];
264 
265  /* memory organization block */
285 
286  /* electrical parameter block */
304 
305  /* vendor */
307 
309 } __attribute__((packed));
310 
311 #define ONFI_CRC_BASE 0x4F4E
323  struct nand_chip *active;
325 };
359  int steps;
360  int size;
361  int bytes;
362  int total;
363  int strength;
364  int prepad;
365  int postpad;
367  void *priv;
368  void (*hwctl)(struct mtd_info *mtd, int mode);
369  int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
370  uint8_t *ecc_code);
371  int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
372  uint8_t *calc_ecc);
373  int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
374  uint8_t *buf, int oob_required, int page);
375  int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
376  const uint8_t *buf, int oob_required);
377  int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
378  uint8_t *buf, int oob_required, int page);
379  int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
381  int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
382  const uint8_t *buf, int oob_required);
383  int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
384  int page);
385  int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
386  int page);
387  int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
388  int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
389  int page);
390 };
391 
401 struct nand_buffers {
405 };
406 
493 struct nand_chip {
496 
497  uint8_t (*read_byte)(struct mtd_info *mtd);
498  u16 (*read_word)(struct mtd_info *mtd);
499  void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
500  void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
501  void (*select_chip)(struct mtd_info *mtd, int chip);
502  int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
503  int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
504  void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
505  int (*init_size)(struct mtd_info *mtd, struct nand_chip *this,
506  u8 *id_data);
507  int (*dev_ready)(struct mtd_info *mtd);
508  void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
509  int page_addr);
510  int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
511  void (*erase_cmd)(struct mtd_info *mtd, int page);
512  int (*scan_bbt)(struct mtd_info *mtd);
513  int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
514  int status, int page);
515  int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
516  const uint8_t *buf, int oob_required, int page,
517  int cached, int raw);
518  int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
519  int feature_addr, uint8_t *subfeature_para);
520  int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
521  int feature_addr, uint8_t *subfeature_para);
522 
524  unsigned int options;
525  unsigned int bbt_options;
526 
531  int numchips;
533  int pagemask;
534  int pagebuf;
535  unsigned int pagebuf_bitflips;
540 
543 
545 
549 
553 
557 
559 
560  void *priv;
561 };
562 
563 /*
564  * NAND Flash Manufacturer ID Codes
565  */
566 #define NAND_MFR_TOSHIBA 0x98
567 #define NAND_MFR_SAMSUNG 0xec
568 #define NAND_MFR_FUJITSU 0x04
569 #define NAND_MFR_NATIONAL 0x8f
570 #define NAND_MFR_RENESAS 0x07
571 #define NAND_MFR_STMICRO 0x20
572 #define NAND_MFR_HYNIX 0xad
573 #define NAND_MFR_MICRON 0x2c
574 #define NAND_MFR_AMD 0x01
575 #define NAND_MFR_MACRONIX 0xc2
576 #define NAND_MFR_EON 0x92
577 
590 struct nand_flash_dev {
591  char *name;
592  int id;
593  unsigned long pagesize;
594  unsigned long chipsize;
595  unsigned long erasesize;
596  unsigned long options;
597 };
598 
605  int id;
606  char *name;
607 };
608 
609 extern struct nand_flash_dev nand_flash_ids[];
610 extern struct nand_manufacturers nand_manuf_ids[];
611 
612 extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd);
613 extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs);
614 extern int nand_default_bbt(struct mtd_info *mtd);
615 extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
616 extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
617  int allowbbt);
618 extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
619  size_t *retlen, uint8_t *buf);
620 
634  int nr_chips;
640  unsigned int options;
641  unsigned int bbt_options;
642  const char **part_probe_types;
643 };
644 
645 /* Keep gcc happy */
646 struct platform_device;
647 
666  void (*remove)(struct platform_device *pdev);
667  void (*hwcontrol)(struct mtd_info *mtd, int cmd);
668  int (*dev_ready)(struct mtd_info *mtd);
669  void (*select_chip)(struct mtd_info *mtd, int chip);
670  void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
671  void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
672  void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
673  unsigned char (*read_byte)(struct mtd_info *mtd);
674  void *priv;
675 };
676 
685 };
686 
687 /* Some helpers to access the data structures */
688 static inline
689 struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
690 {
691  struct nand_chip *chip = mtd->priv;
692 
693  return chip->priv;
694 }
695 
696 /* return the supported asynchronous timing mode. */
697 static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
698 {
699  if (!chip->onfi_version)
701  return le16_to_cpu(chip->onfi_params.async_timing_mode);
702 }
703 
704 /* return the supported synchronous timing mode. */
705 static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
706 {
707  if (!chip->onfi_version)
709  return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
710 }
711 
712 #endif /* __LINUX_MTD_NAND_H */