1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
27struct mtd_info;
28struct nand_flash_dev;
29
30extern int nand_scan(struct mtd_info *mtd, int max_chips);
31
32
33
34
35extern int nand_scan_ident(struct mtd_info *mtd, int max_chips,
36 struct nand_flash_dev *table);
37extern int nand_scan_tail(struct mtd_info *mtd);
38
39
40extern void nand_release(struct mtd_info *mtd);
41
42
43extern void nand_wait_ready(struct mtd_info *mtd);
44
45
46extern int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
47
48
49extern int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
50
51
52#define NAND_MAX_CHIPS 8
53
54
55
56
57
58
59#define NAND_MAX_OOBSIZE 576
60#define NAND_MAX_PAGESIZE 8192
61
62
63
64
65
66
67
68
69#define NAND_NCE 0x01
70
71#define NAND_CLE 0x02
72
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
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_RESET 0xff
96
97#define NAND_CMD_LOCK 0x2a
98#define NAND_CMD_UNLOCK1 0x23
99#define NAND_CMD_UNLOCK2 0x24
100
101
102#define NAND_CMD_READSTART 0x30
103#define NAND_CMD_RNDOUTSTART 0xE0
104#define NAND_CMD_CACHEDPROG 0x15
105
106
107
108
109
110
111
112
113#define NAND_CMD_DEPLETE1 0x100
114#define NAND_CMD_DEPLETE2 0x38
115#define NAND_CMD_STATUS_MULTI 0x71
116#define NAND_CMD_STATUS_ERROR 0x72
117
118#define NAND_CMD_STATUS_ERROR0 0x73
119#define NAND_CMD_STATUS_ERROR1 0x74
120#define NAND_CMD_STATUS_ERROR2 0x75
121#define NAND_CMD_STATUS_ERROR3 0x76
122#define NAND_CMD_STATUS_RESET 0x7f
123#define NAND_CMD_STATUS_CLEAR 0xff
124
125#define NAND_CMD_NONE -1
126
127
128#define NAND_STATUS_FAIL 0x01
129#define NAND_STATUS_FAIL_N1 0x02
130#define NAND_STATUS_TRUE_READY 0x20
131#define NAND_STATUS_READY 0x40
132#define NAND_STATUS_WP 0x80
133
134
135
136
137typedef enum {
138 NAND_ECC_NONE,
139 NAND_ECC_SOFT,
140 NAND_ECC_HW,
141 NAND_ECC_HW_SYNDROME,
142 NAND_ECC_HW_OOB_FIRST,
143 NAND_ECC_SOFT_BCH,
144} nand_ecc_modes_t;
145
146
147
148
149
150#define NAND_ECC_READ 0
151
152#define NAND_ECC_WRITE 1
153
154#define NAND_ECC_READSYN 2
155
156
157#define NAND_GET_DEVICE 0x80
158
159
160
161
162
163
164
165#define NAND_BUSWIDTH_16 0x00000002
166
167#define NAND_NO_PADDING 0x00000004
168
169#define NAND_CACHEPRG 0x00000008
170
171#define NAND_COPYBACK 0x00000010
172
173
174
175
176#define NAND_IS_AND 0x00000020
177
178
179
180
181#define NAND_4PAGE_ARRAY 0x00000040
182
183
184
185
186
187#define BBT_AUTO_REFRESH 0x00000080
188
189
190
191
192
193#define NAND_NO_READRDY 0x00000100
194
195#define NAND_NO_SUBPAGE_WRITE 0x00000200
196
197
198#define NAND_BROKEN_XD 0x00000400
199
200
201#define NAND_ROM 0x00000800
202
203
204#define NAND_SAMSUNG_LP_OPTIONS \
205 (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
206
207
208#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
209#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
210#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
211
212#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
213 && (chip->page_shift > 9))
214
215
216#define NAND_CHIPOPTIONS_MSK 0x0000ffff
217
218
219
220#define NAND_SKIP_BBTSCAN 0x00010000
221
222
223
224
225#define NAND_OWN_BUFFERS 0x00020000
226
227#define NAND_SCAN_SILENT_NODEV 0x00040000
228
229
230
231#define NAND_CONTROLLER_ALLOC 0x80000000
232
233
234#define NAND_CI_CHIPNR_MSK 0x03
235#define NAND_CI_CELLTYPE_MSK 0x0C
236
237
238struct nand_chip;
239
240struct nand_onfi_params {
241
242
243 u8 sig[4];
244 __le16 revision;
245 __le16 features;
246 __le16 opt_cmd;
247 u8 reserved[22];
248
249
250 char manufacturer[12];
251 char model[20];
252 u8 jedec_id;
253 __le16 date_code;
254 u8 reserved2[13];
255
256
257 __le32 byte_per_page;
258 __le16 spare_bytes_per_page;
259 __le32 data_bytes_per_ppage;
260 __le16 spare_bytes_per_ppage;
261 __le32 pages_per_block;
262 __le32 blocks_per_lun;
263 u8 lun_count;
264 u8 addr_cycles;
265 u8 bits_per_cell;
266 __le16 bb_per_lun;
267 __le16 block_endurance;
268 u8 guaranteed_good_blocks;
269 __le16 guaranteed_block_endurance;
270 u8 programs_per_page;
271 u8 ppage_attr;
272 u8 ecc_bits;
273 u8 interleaved_bits;
274 u8 interleaved_ops;
275 u8 reserved3[13];
276
277
278 u8 io_pin_capacitance_max;
279 __le16 async_timing_mode;
280 __le16 program_cache_timing_mode;
281 __le16 t_prog;
282 __le16 t_bers;
283 __le16 t_r;
284 __le16 t_ccs;
285 __le16 src_sync_timing_mode;
286 __le16 src_ssync_features;
287 __le16 clk_pin_capacitance_typ;
288 __le16 io_pin_capacitance_typ;
289 __le16 input_pin_capacitance_typ;
290 u8 input_pin_capacitance_max;
291 u8 driver_strenght_support;
292 __le16 t_int_r;
293 __le16 t_ald;
294 u8 reserved4[7];
295
296
297 u8 reserved5[90];
298
299 __le16 crc;
300} __attribute__((packed));
301
302#define ONFI_CRC_BASE 0x4F4E
303
304
305
306
307
308
309
310
311
312struct nand_hw_control {
313 spinlock_t lock;
314 struct nand_chip *active;
315 wait_queue_head_t wq;
316};
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346struct nand_ecc_ctrl {
347 nand_ecc_modes_t mode;
348 int steps;
349 int size;
350 int bytes;
351 int total;
352 int strength;
353 int prepad;
354 int postpad;
355 struct nand_ecclayout *layout;
356 void *priv;
357 void (*hwctl)(struct mtd_info *mtd, int mode);
358 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
359 uint8_t *ecc_code);
360 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
361 uint8_t *calc_ecc);
362 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
363 uint8_t *buf, int oob_required, int page);
364 void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
365 const uint8_t *buf, int oob_required);
366 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
367 uint8_t *buf, int oob_required, int page);
368 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
369 uint32_t offs, uint32_t len, uint8_t *buf);
370 void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
371 const uint8_t *buf, int oob_required);
372 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
373 int page);
374 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
375 int page);
376 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
377 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
378 int page);
379};
380
381
382
383
384
385
386
387
388
389
390struct nand_buffers {
391 uint8_t ecccalc[NAND_MAX_OOBSIZE];
392 uint8_t ecccode[NAND_MAX_OOBSIZE];
393 uint8_t databuf[NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE];
394};
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482struct nand_chip {
483 void __iomem *IO_ADDR_R;
484 void __iomem *IO_ADDR_W;
485
486 uint8_t (*read_byte)(struct mtd_info *mtd);
487 u16 (*read_word)(struct mtd_info *mtd);
488 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
489 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
490 int (*verify_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
491 void (*select_chip)(struct mtd_info *mtd, int chip);
492 int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
493 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
494 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
495 int (*init_size)(struct mtd_info *mtd, struct nand_chip *this,
496 u8 *id_data);
497 int (*dev_ready)(struct mtd_info *mtd);
498 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
499 int page_addr);
500 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
501 void (*erase_cmd)(struct mtd_info *mtd, int page);
502 int (*scan_bbt)(struct mtd_info *mtd);
503 int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
504 int status, int page);
505 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
506 const uint8_t *buf, int oob_required, int page,
507 int cached, int raw);
508
509 int chip_delay;
510 unsigned int options;
511 unsigned int bbt_options;
512
513 int page_shift;
514 int phys_erase_shift;
515 int bbt_erase_shift;
516 int chip_shift;
517 int numchips;
518 uint64_t chipsize;
519 int pagemask;
520 int pagebuf;
521 unsigned int pagebuf_bitflips;
522 int subpagesize;
523 uint8_t cellinfo;
524 int badblockpos;
525 int badblockbits;
526
527 int onfi_version;
528 struct nand_onfi_params onfi_params;
529
530 flstate_t state;
531
532 uint8_t *oob_poi;
533 struct nand_hw_control *controller;
534 struct nand_ecclayout *ecclayout;
535
536 struct nand_ecc_ctrl ecc;
537 struct nand_buffers *buffers;
538 struct nand_hw_control hwcontrol;
539
540 uint8_t *bbt;
541 struct nand_bbt_descr *bbt_td;
542 struct nand_bbt_descr *bbt_md;
543
544 struct nand_bbt_descr *badblock_pattern;
545
546 void *priv;
547};
548
549
550
551
552#define NAND_MFR_TOSHIBA 0x98
553#define NAND_MFR_SAMSUNG 0xec
554#define NAND_MFR_FUJITSU 0x04
555#define NAND_MFR_NATIONAL 0x8f
556#define NAND_MFR_RENESAS 0x07
557#define NAND_MFR_STMICRO 0x20
558#define NAND_MFR_HYNIX 0xad
559#define NAND_MFR_MICRON 0x2c
560#define NAND_MFR_AMD 0x01
561#define NAND_MFR_MACRONIX 0xc2
562
563
564
565
566
567
568
569
570
571
572
573
574
575struct nand_flash_dev {
576 char *name;
577 int id;
578 unsigned long pagesize;
579 unsigned long chipsize;
580 unsigned long erasesize;
581 unsigned long options;
582};
583
584
585
586
587
588
589struct nand_manufacturers {
590 int id;
591 char *name;
592};
593
594extern struct nand_flash_dev nand_flash_ids[];
595extern struct nand_manufacturers nand_manuf_ids[];
596
597extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd);
598extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs);
599extern int nand_default_bbt(struct mtd_info *mtd);
600extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
601extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
602 int allowbbt);
603extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
604 size_t *retlen, uint8_t *buf);
605
606
607
608
609
610
611
612
613
614
615
616
617
618struct platform_nand_chip {
619 int nr_chips;
620 int chip_offset;
621 int nr_partitions;
622 struct mtd_partition *partitions;
623 struct nand_ecclayout *ecclayout;
624 int chip_delay;
625 unsigned int options;
626 unsigned int bbt_options;
627 const char **part_probe_types;
628};
629
630
631struct platform_device;
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648struct platform_nand_ctrl {
649 int (*probe)(struct platform_device *pdev);
650 void (*remove)(struct platform_device *pdev);
651 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
652 int (*dev_ready)(struct mtd_info *mtd);
653 void (*select_chip)(struct mtd_info *mtd, int chip);
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);
656 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
657 unsigned char (*read_byte)(struct mtd_info *mtd);
658 void *priv;
659};
660
661
662
663
664
665
666struct platform_nand_data {
667 struct platform_nand_chip chip;
668 struct platform_nand_ctrl ctrl;
669};
670
671
672static inline
673struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
674{
675 struct nand_chip *chip = mtd->priv;
676
677 return chip->priv;
678}
679
680#endif
681