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 "config.h"
22
23#include "linux/compat.h"
24#include "linux/mtd/mtd.h"
25#include "linux/mtd/bbm.h"
26
27
28struct mtd_info;
29struct nand_flash_dev;
30
31extern int nand_scan (struct mtd_info *mtd, int max_chips);
32
33
34extern int nand_scan_ident(struct mtd_info *mtd, int max_chips,
35 const struct nand_flash_dev *table);
36extern int nand_scan_tail(struct mtd_info *mtd);
37
38
39extern void nand_release(struct mtd_info *mtd);
40
41
42extern void nand_wait_ready(struct mtd_info *mtd);
43
44
45
46
47
48
49#define NAND_MAX_OOBSIZE 640
50#define NAND_MAX_PAGESIZE 8192
51
52
53
54
55
56
57
58
59#define NAND_NCE 0x01
60
61#define NAND_CLE 0x02
62
63#define NAND_ALE 0x04
64
65#define NAND_CTRL_CLE (NAND_NCE | NAND_CLE)
66#define NAND_CTRL_ALE (NAND_NCE | NAND_ALE)
67#define NAND_CTRL_CHANGE 0x80
68
69
70
71
72#define NAND_CMD_READ0 0
73#define NAND_CMD_READ1 1
74#define NAND_CMD_RNDOUT 5
75#define NAND_CMD_PAGEPROG 0x10
76#define NAND_CMD_READOOB 0x50
77#define NAND_CMD_ERASE1 0x60
78#define NAND_CMD_STATUS 0x70
79#define NAND_CMD_STATUS_MULTI 0x71
80#define NAND_CMD_SEQIN 0x80
81#define NAND_CMD_RNDIN 0x85
82#define NAND_CMD_READID 0x90
83#define NAND_CMD_ERASE2 0xd0
84#define NAND_CMD_PARAM 0xec
85#define NAND_CMD_GET_FEATURES 0xee
86#define NAND_CMD_SET_FEATURES 0xef
87#define NAND_CMD_RESET 0xff
88
89#define NAND_CMD_LOCK 0x2a
90#define NAND_CMD_LOCK_TIGHT 0x2c
91#define NAND_CMD_UNLOCK1 0x23
92#define NAND_CMD_UNLOCK2 0x24
93#define NAND_CMD_LOCK_STATUS 0x7a
94
95
96#define NAND_CMD_READSTART 0x30
97#define NAND_CMD_RNDOUTSTART 0xE0
98#define NAND_CMD_CACHEDPROG 0x15
99
100
101
102
103
104
105
106
107#define NAND_CMD_DEPLETE1 0x100
108#define NAND_CMD_DEPLETE2 0x38
109#define NAND_CMD_STATUS_MULTI 0x71
110#define NAND_CMD_STATUS_ERROR 0x72
111
112#define NAND_CMD_STATUS_ERROR0 0x73
113#define NAND_CMD_STATUS_ERROR1 0x74
114#define NAND_CMD_STATUS_ERROR2 0x75
115#define NAND_CMD_STATUS_ERROR3 0x76
116#define NAND_CMD_STATUS_RESET 0x7f
117#define NAND_CMD_STATUS_CLEAR 0xff
118
119#define NAND_CMD_NONE -1
120
121
122#define NAND_STATUS_FAIL 0x01
123#define NAND_STATUS_FAIL_N1 0x02
124#define NAND_STATUS_TRUE_READY 0x20
125#define NAND_STATUS_READY 0x40
126#define NAND_STATUS_WP 0x80
127
128
129
130
131typedef enum {
132 NAND_ECC_NONE,
133 NAND_ECC_SOFT,
134 NAND_ECC_HW,
135 NAND_ECC_HW_SYNDROME,
136 NAND_ECC_HW_OOB_FIRST,
137 NAND_ECC_SOFT_BCH,
138} nand_ecc_modes_t;
139
140
141
142
143
144#define NAND_ECC_READ 0
145
146#define NAND_ECC_WRITE 1
147
148#define NAND_ECC_READSYN 2
149
150
151#define NAND_GET_DEVICE 0x80
152
153
154
155
156
157
158
159#define NAND_BUSWIDTH_16 0x00000002
160
161#define NAND_NO_PADDING 0x00000004
162
163#define NAND_CACHEPRG 0x00000008
164
165#define NAND_COPYBACK 0x00000010
166
167
168
169
170#define NAND_IS_AND 0x00000020
171
172
173
174
175#define NAND_4PAGE_ARRAY 0x00000040
176
177
178
179
180
181#define BBT_AUTO_REFRESH 0x00000080
182
183#define NAND_NO_SUBPAGE_WRITE 0x00000200
184
185
186#define NAND_BROKEN_XD 0x00000400
187
188
189#define NAND_ROM 0x00000800
190
191
192#define NAND_SUBPAGE_READ 0x00001000
193
194
195#define NAND_SAMSUNG_LP_OPTIONS \
196 (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
197
198
199#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
200#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
201#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
202#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
203
204
205
206#define NAND_SKIP_BBTSCAN 0x00010000
207
208
209
210
211#define NAND_OWN_BUFFERS 0x00020000
212
213#define NAND_SCAN_SILENT_NODEV 0x00040000
214
215
216
217#define NAND_BBT_SCANNED 0x40000000
218
219#define NAND_CONTROLLER_ALLOC 0x80000000
220
221
222#define NAND_CI_CHIPNR_MSK 0x03
223#define NAND_CI_CELLTYPE_MSK 0x0C
224
225
226struct nand_chip;
227
228
229#define ONFI_TIMING_MODE_0 (1 << 0)
230#define ONFI_TIMING_MODE_1 (1 << 1)
231#define ONFI_TIMING_MODE_2 (1 << 2)
232#define ONFI_TIMING_MODE_3 (1 << 3)
233#define ONFI_TIMING_MODE_4 (1 << 4)
234#define ONFI_TIMING_MODE_5 (1 << 5)
235#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
236
237
238#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
239
240
241#define ONFI_SUBFEATURE_PARAM_LEN 4
242
243struct nand_onfi_params {
244
245
246 u8 sig[4];
247 __le16 revision;
248 __le16 features;
249 __le16 opt_cmd;
250 u8 reserved[22];
251
252
253 char manufacturer[12];
254 char model[20];
255 u8 jedec_id;
256 __le16 date_code;
257 u8 reserved2[13];
258
259
260 __le32 byte_per_page;
261 __le16 spare_bytes_per_page;
262 __le32 data_bytes_per_ppage;
263 __le16 spare_bytes_per_ppage;
264 __le32 pages_per_block;
265 __le32 blocks_per_lun;
266 u8 lun_count;
267 u8 addr_cycles;
268 u8 bits_per_cell;
269 __le16 bb_per_lun;
270 __le16 block_endurance;
271 u8 guaranteed_good_blocks;
272 __le16 guaranteed_block_endurance;
273 u8 programs_per_page;
274 u8 ppage_attr;
275 u8 ecc_bits;
276 u8 interleaved_bits;
277 u8 interleaved_ops;
278 u8 reserved3[13];
279
280
281 u8 io_pin_capacitance_max;
282 __le16 async_timing_mode;
283 __le16 program_cache_timing_mode;
284 __le16 t_prog;
285 __le16 t_bers;
286 __le16 t_r;
287 __le16 t_ccs;
288 __le16 src_sync_timing_mode;
289 __le16 src_ssync_features;
290 __le16 clk_pin_capacitance_typ;
291 __le16 io_pin_capacitance_typ;
292 __le16 input_pin_capacitance_typ;
293 u8 input_pin_capacitance_max;
294 u8 driver_strenght_support;
295 __le16 t_int_r;
296 __le16 t_ald;
297 u8 reserved4[7];
298
299
300 u8 reserved5[90];
301
302 __le16 crc;
303} __attribute__((packed));
304
305#define ONFI_CRC_BASE 0x4F4E
306
307
308
309
310
311
312
313
314
315struct nand_hw_control {
316
317#if 0
318 spinlock_t lock;
319 wait_queue_head_t wq;
320#endif
321 struct nand_chip *active;
322};
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354struct nand_ecc_ctrl {
355 nand_ecc_modes_t mode;
356 int steps;
357 int size;
358 int bytes;
359 int total;
360 int strength;
361 int prepad;
362 int postpad;
363 struct nand_ecclayout *layout;
364 void *priv;
365 void (*hwctl)(struct mtd_info *mtd, int mode);
366 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
367 uint8_t *ecc_code);
368 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
369 uint8_t *calc_ecc);
370 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
371 uint8_t *buf, int oob_required, int page);
372 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
373 const uint8_t *buf, int oob_required);
374 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
375 uint8_t *buf, int oob_required, int page);
376 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
377 uint32_t offs, uint32_t len, uint8_t *buf);
378 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
379 const uint8_t *buf, int oob_required);
380 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
381 int page);
382 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
383 int page);
384 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
385 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
386 int page);
387};
388
389
390
391
392
393
394
395
396
397
398struct nand_buffers {
399 uint8_t ecccalc[ALIGN(NAND_MAX_OOBSIZE, ARCH_DMA_MINALIGN)];
400 uint8_t ecccode[ALIGN(NAND_MAX_OOBSIZE, ARCH_DMA_MINALIGN)];
401 uint8_t databuf[ALIGN(NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE,
402 ARCH_DMA_MINALIGN)];
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
482
483
484
485
486
487
488
489
490
491struct nand_chip {
492 void __iomem *IO_ADDR_R;
493 void __iomem *IO_ADDR_W;
494
495 uint8_t (*read_byte)(struct mtd_info *mtd);
496 u16 (*read_word)(struct mtd_info *mtd);
497 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
498 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
499 int (*verify_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
500 void (*select_chip)(struct mtd_info *mtd, int chip);
501 int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
502 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
503 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
504 int (*init_size)(struct mtd_info *mtd, struct nand_chip *this,
505 u8 *id_data);
506 int (*dev_ready)(struct mtd_info *mtd);
507 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
508 int page_addr);
509 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
510 void (*erase_cmd)(struct mtd_info *mtd, int page);
511 int (*scan_bbt)(struct mtd_info *mtd);
512 int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
513 int status, int page);
514 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
515 const uint8_t *buf, int oob_required, int page,
516 int cached, int raw);
517 int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
518 int feature_addr, uint8_t *subfeature_para);
519 int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
520 int feature_addr, uint8_t *subfeature_para);
521
522 int chip_delay;
523 unsigned int options;
524 unsigned int bbt_options;
525
526 int page_shift;
527 int phys_erase_shift;
528 int bbt_erase_shift;
529 int chip_shift;
530 int numchips;
531 uint64_t chipsize;
532 int pagemask;
533 int pagebuf;
534 int subpagesize;
535 uint8_t cellinfo;
536 int badblockpos;
537 int badblockbits;
538
539 int onfi_version;
540#ifdef CONFIG_SYS_NAND_ONFI_DETECTION
541 struct nand_onfi_params onfi_params;
542#endif
543
544 int state;
545
546 uint8_t *oob_poi;
547 struct nand_hw_control *controller;
548 struct nand_ecclayout *ecclayout;
549
550 struct nand_ecc_ctrl ecc;
551 struct nand_buffers *buffers;
552 struct nand_hw_control hwcontrol;
553
554 uint8_t *bbt;
555 struct nand_bbt_descr *bbt_td;
556 struct nand_bbt_descr *bbt_md;
557
558 struct nand_bbt_descr *badblock_pattern;
559
560 void *priv;
561};
562
563
564
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
578
579
580
581
582
583
584
585
586
587
588
589
590struct 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
599
600
601
602
603
604struct nand_manufacturers {
605 int id;
606 char *name;
607};
608
609extern const struct nand_flash_dev nand_flash_ids[];
610extern const struct nand_manufacturers nand_manuf_ids[];
611
612extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd);
613extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs);
614extern int nand_default_bbt(struct mtd_info *mtd);
615extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
616extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
617 int allowbbt);
618extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
619 size_t *retlen, uint8_t *buf);
620
621
622
623
624#define NAND_SMALL_BADBLOCK_POS 5
625#define NAND_LARGE_BADBLOCK_POS 0
626
627
628
629
630
631
632
633
634
635
636
637
638
639struct platform_nand_chip {
640 int nr_chips;
641 int chip_offset;
642 int nr_partitions;
643 struct mtd_partition *partitions;
644 struct nand_ecclayout *ecclayout;
645 int chip_delay;
646 unsigned int options;
647 unsigned int bbt_options;
648 const char **part_probe_types;
649};
650
651
652struct platform_device;
653
654
655
656
657
658
659
660
661
662
663
664
665struct platform_nand_ctrl {
666 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
667 int (*dev_ready)(struct mtd_info *mtd);
668 void (*select_chip)(struct mtd_info *mtd, int chip);
669 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
670 unsigned char (*read_byte)(struct mtd_info *mtd);
671 void *priv;
672};
673
674
675
676
677
678
679struct platform_nand_data {
680 struct platform_nand_chip chip;
681 struct platform_nand_ctrl ctrl;
682};
683
684
685static inline
686struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
687{
688 struct nand_chip *chip = mtd->priv;
689
690 return chip->priv;
691}
692
693
694void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
695void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len);
696void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
697void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len);
698uint8_t nand_read_byte(struct mtd_info *mtd);
699
700
701
702#ifdef CONFIG_SYS_NAND_ONFI_DETECTION
703static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
704{
705 if (!chip->onfi_version)
706 return ONFI_TIMING_MODE_UNKNOWN;
707 return le16_to_cpu(chip->onfi_params.async_timing_mode);
708}
709
710
711static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
712{
713 if (!chip->onfi_version)
714 return ONFI_TIMING_MODE_UNKNOWN;
715 return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
716}
717#endif
718
719#endif
720