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_NO_AUTOINCR 0x00000001
166
167#define NAND_BUSWIDTH_16 0x00000002
168
169#define NAND_NO_PADDING 0x00000004
170
171#define NAND_CACHEPRG 0x00000008
172
173#define NAND_COPYBACK 0x00000010
174
175
176
177
178#define NAND_IS_AND 0x00000020
179
180
181
182
183#define NAND_4PAGE_ARRAY 0x00000040
184
185
186
187
188
189#define BBT_AUTO_REFRESH 0x00000080
190
191
192
193
194
195#define NAND_NO_READRDY 0x00000100
196
197#define NAND_NO_SUBPAGE_WRITE 0x00000200
198
199
200#define NAND_BROKEN_XD 0x00000400
201
202
203#define NAND_ROM 0x00000800
204
205
206#define NAND_SAMSUNG_LP_OPTIONS \
207 (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
208
209
210#define NAND_CANAUTOINCR(chip) (!(chip->options & NAND_NO_AUTOINCR))
211#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
212#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
213#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
214
215#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
216 && (chip->page_shift > 9))
217
218
219#define NAND_CHIPOPTIONS_MSK (0x0000ffff & ~NAND_NO_AUTOINCR)
220
221
222
223
224
225
226#define NAND_USE_FLASH_BBT 0x00010000
227
228#define NAND_SKIP_BBTSCAN 0x00020000
229
230
231
232
233#define NAND_OWN_BUFFERS 0x00040000
234
235#define NAND_SCAN_SILENT_NODEV 0x00080000
236
237
238
239
240#define NAND_USE_FLASH_BBT_NO_OOB 0x00800000
241
242#define NAND_CREATE_EMPTY_BBT 0x01000000
243
244
245
246#define NAND_CONTROLLER_ALLOC 0x80000000
247
248
249#define NAND_CI_CHIPNR_MSK 0x03
250#define NAND_CI_CELLTYPE_MSK 0x0C
251
252
253struct nand_chip;
254
255struct nand_onfi_params {
256
257
258 u8 sig[4];
259 __le16 revision;
260 __le16 features;
261 __le16 opt_cmd;
262 u8 reserved[22];
263
264
265 char manufacturer[12];
266 char model[20];
267 u8 jedec_id;
268 __le16 date_code;
269 u8 reserved2[13];
270
271
272 __le32 byte_per_page;
273 __le16 spare_bytes_per_page;
274 __le32 data_bytes_per_ppage;
275 __le16 spare_bytes_per_ppage;
276 __le32 pages_per_block;
277 __le32 blocks_per_lun;
278 u8 lun_count;
279 u8 addr_cycles;
280 u8 bits_per_cell;
281 __le16 bb_per_lun;
282 __le16 block_endurance;
283 u8 guaranteed_good_blocks;
284 __le16 guaranteed_block_endurance;
285 u8 programs_per_page;
286 u8 ppage_attr;
287 u8 ecc_bits;
288 u8 interleaved_bits;
289 u8 interleaved_ops;
290 u8 reserved3[13];
291
292
293 u8 io_pin_capacitance_max;
294 __le16 async_timing_mode;
295 __le16 program_cache_timing_mode;
296 __le16 t_prog;
297 __le16 t_bers;
298 __le16 t_r;
299 __le16 t_ccs;
300 __le16 src_sync_timing_mode;
301 __le16 src_ssync_features;
302 __le16 clk_pin_capacitance_typ;
303 __le16 io_pin_capacitance_typ;
304 __le16 input_pin_capacitance_typ;
305 u8 input_pin_capacitance_max;
306 u8 driver_strenght_support;
307 __le16 t_int_r;
308 __le16 t_ald;
309 u8 reserved4[7];
310
311
312 u8 reserved5[90];
313
314 __le16 crc;
315} __attribute__((packed));
316
317#define ONFI_CRC_BASE 0x4F4E
318
319
320
321
322
323
324
325
326
327struct nand_hw_control {
328 spinlock_t lock;
329 struct nand_chip *active;
330 wait_queue_head_t wq;
331};
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358struct nand_ecc_ctrl {
359 nand_ecc_modes_t mode;
360 int steps;
361 int size;
362 int bytes;
363 int total;
364 int prepad;
365 int postpad;
366 struct nand_ecclayout *layout;
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 page);
375 void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
376 const uint8_t *buf);
377 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
378 uint8_t *buf, int page);
379 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
380 uint32_t offs, uint32_t len, uint8_t *buf);
381 void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
382 const uint8_t *buf);
383 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page,
384 int sndcmd);
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[NAND_MAX_OOBSIZE];
400 uint8_t ecccode[NAND_MAX_OOBSIZE];
401 uint8_t databuf[NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE];
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
482
483
484struct nand_chip {
485 void __iomem *IO_ADDR_R;
486 void __iomem *IO_ADDR_W;
487
488 uint8_t (*read_byte)(struct mtd_info *mtd);
489 u16 (*read_word)(struct mtd_info *mtd);
490 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
491 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
492 int (*verify_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
493 void (*select_chip)(struct mtd_info *mtd, int chip);
494 int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
495 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
496 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
497 int (*init_size)(struct mtd_info *mtd, struct nand_chip *this,
498 u8 *id_data);
499 int (*dev_ready)(struct mtd_info *mtd);
500 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
501 int page_addr);
502 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
503 void (*erase_cmd)(struct mtd_info *mtd, int page);
504 int (*scan_bbt)(struct mtd_info *mtd);
505 int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
506 int status, int page);
507 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
508 const uint8_t *buf, int page, int cached, int raw);
509
510 int chip_delay;
511 unsigned int 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 int subpagesize;
522 uint8_t cellinfo;
523 int badblockpos;
524 int badblockbits;
525
526 int onfi_version;
527 struct nand_onfi_params onfi_params;
528
529 flstate_t state;
530
531 uint8_t *oob_poi;
532 struct nand_hw_control *controller;
533 struct nand_ecclayout *ecclayout;
534
535 struct nand_ecc_ctrl ecc;
536 struct nand_buffers *buffers;
537 struct nand_hw_control hwcontrol;
538
539 struct mtd_oob_ops ops;
540
541 uint8_t *bbt;
542 struct nand_bbt_descr *bbt_td;
543 struct nand_bbt_descr *bbt_md;
544
545 struct nand_bbt_descr *badblock_pattern;
546
547 void *priv;
548};
549
550
551
552
553#define NAND_MFR_TOSHIBA 0x98
554#define NAND_MFR_SAMSUNG 0xec
555#define NAND_MFR_FUJITSU 0x04
556#define NAND_MFR_NATIONAL 0x8f
557#define NAND_MFR_RENESAS 0x07
558#define NAND_MFR_STMICRO 0x20
559#define NAND_MFR_HYNIX 0xad
560#define NAND_MFR_MICRON 0x2c
561#define NAND_MFR_AMD 0x01
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
618
619struct platform_nand_chip {
620 int nr_chips;
621 int chip_offset;
622 int nr_partitions;
623 struct mtd_partition *partitions;
624 struct nand_ecclayout *ecclayout;
625 int chip_delay;
626 unsigned int options;
627 const char **part_probe_types;
628 void (*set_parts)(uint64_t size, struct platform_nand_chip *chip);
629 void *priv;
630};
631
632
633struct platform_device;
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650struct platform_nand_ctrl {
651 int (*probe)(struct platform_device *pdev);
652 void (*remove)(struct platform_device *pdev);
653 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
654 int (*dev_ready)(struct mtd_info *mtd);
655 void (*select_chip)(struct mtd_info *mtd, int chip);
656 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
657 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
658 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
659 void *priv;
660};
661
662
663
664
665
666
667struct platform_nand_data {
668 struct platform_nand_chip chip;
669 struct platform_nand_ctrl ctrl;
670};
671
672
673static inline
674struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
675{
676 struct nand_chip *chip = mtd->priv;
677
678 return chip->priv;
679}
680
681#endif
682