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 640
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_SEQIN 0x80
90#define NAND_CMD_RNDIN 0x85
91#define NAND_CMD_READID 0x90
92#define NAND_CMD_ERASE2 0xd0
93#define NAND_CMD_PARAM 0xec
94#define NAND_CMD_GET_FEATURES 0xee
95#define NAND_CMD_SET_FEATURES 0xef
96#define NAND_CMD_RESET 0xff
97
98#define NAND_CMD_LOCK 0x2a
99#define NAND_CMD_UNLOCK1 0x23
100#define NAND_CMD_UNLOCK2 0x24
101
102
103#define NAND_CMD_READSTART 0x30
104#define NAND_CMD_RNDOUTSTART 0xE0
105#define NAND_CMD_CACHEDPROG 0x15
106
107#define NAND_CMD_NONE -1
108
109
110#define NAND_STATUS_FAIL 0x01
111#define NAND_STATUS_FAIL_N1 0x02
112#define NAND_STATUS_TRUE_READY 0x20
113#define NAND_STATUS_READY 0x40
114#define NAND_STATUS_WP 0x80
115
116
117
118
119typedef enum {
120 NAND_ECC_NONE,
121 NAND_ECC_SOFT,
122 NAND_ECC_HW,
123 NAND_ECC_HW_SYNDROME,
124 NAND_ECC_HW_OOB_FIRST,
125 NAND_ECC_SOFT_BCH,
126} nand_ecc_modes_t;
127
128
129
130
131
132#define NAND_ECC_READ 0
133
134#define NAND_ECC_WRITE 1
135
136#define NAND_ECC_READSYN 2
137
138
139#define NAND_GET_DEVICE 0x80
140
141
142
143
144
145
146
147#define NAND_BUSWIDTH_16 0x00000002
148
149#define NAND_CACHEPRG 0x00000008
150
151
152
153
154
155#define NAND_NEED_READRDY 0x00000100
156
157
158#define NAND_NO_SUBPAGE_WRITE 0x00000200
159
160
161#define NAND_BROKEN_XD 0x00000400
162
163
164#define NAND_ROM 0x00000800
165
166
167#define NAND_SUBPAGE_READ 0x00001000
168
169
170#define NAND_SAMSUNG_LP_OPTIONS NAND_CACHEPRG
171
172
173#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
174#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
175
176
177
178#define NAND_SKIP_BBTSCAN 0x00010000
179
180
181
182
183#define NAND_OWN_BUFFERS 0x00020000
184
185#define NAND_SCAN_SILENT_NODEV 0x00040000
186
187
188
189
190
191
192#define NAND_BUSWIDTH_AUTO 0x00080000
193
194
195
196#define NAND_CONTROLLER_ALLOC 0x80000000
197
198
199#define NAND_CI_CHIPNR_MSK 0x03
200#define NAND_CI_CELLTYPE_MSK 0x0C
201
202
203struct nand_chip;
204
205
206#define ONFI_TIMING_MODE_0 (1 << 0)
207#define ONFI_TIMING_MODE_1 (1 << 1)
208#define ONFI_TIMING_MODE_2 (1 << 2)
209#define ONFI_TIMING_MODE_3 (1 << 3)
210#define ONFI_TIMING_MODE_4 (1 << 4)
211#define ONFI_TIMING_MODE_5 (1 << 5)
212#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
213
214
215#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
216
217
218#define ONFI_SUBFEATURE_PARAM_LEN 4
219
220struct nand_onfi_params {
221
222
223 u8 sig[4];
224 __le16 revision;
225 __le16 features;
226 __le16 opt_cmd;
227 u8 reserved[22];
228
229
230 char manufacturer[12];
231 char model[20];
232 u8 jedec_id;
233 __le16 date_code;
234 u8 reserved2[13];
235
236
237 __le32 byte_per_page;
238 __le16 spare_bytes_per_page;
239 __le32 data_bytes_per_ppage;
240 __le16 spare_bytes_per_ppage;
241 __le32 pages_per_block;
242 __le32 blocks_per_lun;
243 u8 lun_count;
244 u8 addr_cycles;
245 u8 bits_per_cell;
246 __le16 bb_per_lun;
247 __le16 block_endurance;
248 u8 guaranteed_good_blocks;
249 __le16 guaranteed_block_endurance;
250 u8 programs_per_page;
251 u8 ppage_attr;
252 u8 ecc_bits;
253 u8 interleaved_bits;
254 u8 interleaved_ops;
255 u8 reserved3[13];
256
257
258 u8 io_pin_capacitance_max;
259 __le16 async_timing_mode;
260 __le16 program_cache_timing_mode;
261 __le16 t_prog;
262 __le16 t_bers;
263 __le16 t_r;
264 __le16 t_ccs;
265 __le16 src_sync_timing_mode;
266 __le16 src_ssync_features;
267 __le16 clk_pin_capacitance_typ;
268 __le16 io_pin_capacitance_typ;
269 __le16 input_pin_capacitance_typ;
270 u8 input_pin_capacitance_max;
271 u8 driver_strenght_support;
272 __le16 t_int_r;
273 __le16 t_ald;
274 u8 reserved4[7];
275
276
277 u8 reserved5[90];
278
279 __le16 crc;
280} __attribute__((packed));
281
282#define ONFI_CRC_BASE 0x4F4E
283
284
285
286
287
288
289
290
291
292struct nand_hw_control {
293 spinlock_t lock;
294 struct nand_chip *active;
295 wait_queue_head_t wq;
296};
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329struct nand_ecc_ctrl {
330 nand_ecc_modes_t mode;
331 int steps;
332 int size;
333 int bytes;
334 int total;
335 int strength;
336 int prepad;
337 int postpad;
338 struct nand_ecclayout *layout;
339 void *priv;
340 void (*hwctl)(struct mtd_info *mtd, int mode);
341 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
342 uint8_t *ecc_code);
343 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
344 uint8_t *calc_ecc);
345 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
346 uint8_t *buf, int oob_required, int page);
347 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
348 const uint8_t *buf, int oob_required);
349 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
350 uint8_t *buf, int oob_required, int page);
351 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
352 uint32_t offs, uint32_t len, uint8_t *buf);
353 int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
354 uint32_t offset, uint32_t data_len,
355 const uint8_t *data_buf, int oob_required);
356 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
357 const uint8_t *buf, int oob_required);
358 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
359 int page);
360 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
361 int page);
362 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
363 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
364 int page);
365};
366
367
368
369
370
371
372
373
374
375
376struct nand_buffers {
377 uint8_t ecccalc[NAND_MAX_OOBSIZE];
378 uint8_t ecccode[NAND_MAX_OOBSIZE];
379 uint8_t databuf[NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE];
380};
381
382
383
384
385
386
387
388
389
390
391
392
393
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
468struct nand_chip {
469 void __iomem *IO_ADDR_R;
470 void __iomem *IO_ADDR_W;
471
472 uint8_t (*read_byte)(struct mtd_info *mtd);
473 u16 (*read_word)(struct mtd_info *mtd);
474 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
475 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
476 void (*select_chip)(struct mtd_info *mtd, int chip);
477 int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
478 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
479 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
480 int (*init_size)(struct mtd_info *mtd, struct nand_chip *this,
481 u8 *id_data);
482 int (*dev_ready)(struct mtd_info *mtd);
483 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
484 int page_addr);
485 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
486 void (*erase_cmd)(struct mtd_info *mtd, int page);
487 int (*scan_bbt)(struct mtd_info *mtd);
488 int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
489 int status, int page);
490 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
491 uint32_t offset, int data_len, const uint8_t *buf,
492 int oob_required, int page, int cached, int raw);
493 int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
494 int feature_addr, uint8_t *subfeature_para);
495 int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
496 int feature_addr, uint8_t *subfeature_para);
497
498 int chip_delay;
499 unsigned int options;
500 unsigned int bbt_options;
501
502 int page_shift;
503 int phys_erase_shift;
504 int bbt_erase_shift;
505 int chip_shift;
506 int numchips;
507 uint64_t chipsize;
508 int pagemask;
509 int pagebuf;
510 unsigned int pagebuf_bitflips;
511 int subpagesize;
512 uint8_t cellinfo;
513 int badblockpos;
514 int badblockbits;
515
516 int onfi_version;
517 struct nand_onfi_params onfi_params;
518
519 flstate_t state;
520
521 uint8_t *oob_poi;
522 struct nand_hw_control *controller;
523 struct nand_ecclayout *ecclayout;
524
525 struct nand_ecc_ctrl ecc;
526 struct nand_buffers *buffers;
527 struct nand_hw_control hwcontrol;
528
529 uint8_t *bbt;
530 struct nand_bbt_descr *bbt_td;
531 struct nand_bbt_descr *bbt_md;
532
533 struct nand_bbt_descr *badblock_pattern;
534
535 void *priv;
536};
537
538
539
540
541#define NAND_MFR_TOSHIBA 0x98
542#define NAND_MFR_SAMSUNG 0xec
543#define NAND_MFR_FUJITSU 0x04
544#define NAND_MFR_NATIONAL 0x8f
545#define NAND_MFR_RENESAS 0x07
546#define NAND_MFR_STMICRO 0x20
547#define NAND_MFR_HYNIX 0xad
548#define NAND_MFR_MICRON 0x2c
549#define NAND_MFR_AMD 0x01
550#define NAND_MFR_MACRONIX 0xc2
551#define NAND_MFR_EON 0x92
552
553
554#define NAND_MAX_ID_LEN 8
555
556
557
558
559
560
561#define LEGACY_ID_NAND(nm, devid, chipsz, erasesz, opts) \
562 { .name = (nm), {{ .dev_id = (devid) }}, .pagesize = 512, \
563 .chipsize = (chipsz), .erasesize = (erasesz), .options = (opts) }
564
565
566
567
568
569
570
571
572
573
574
575#define EXTENDED_ID_NAND(nm, devid, chipsz, opts) \
576 { .name = (nm), {{ .dev_id = (devid) }}, .chipsize = (chipsz), \
577 .options = (opts) }
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597struct nand_flash_dev {
598 char *name;
599 union {
600 struct {
601 uint8_t mfr_id;
602 uint8_t dev_id;
603 };
604 uint8_t id[NAND_MAX_ID_LEN];
605 };
606 unsigned int pagesize;
607 unsigned int chipsize;
608 unsigned int erasesize;
609 unsigned int options;
610 uint16_t id_len;
611 uint16_t oobsize;
612};
613
614
615
616
617
618
619struct nand_manufacturers {
620 int id;
621 char *name;
622};
623
624extern struct nand_flash_dev nand_flash_ids[];
625extern struct nand_manufacturers nand_manuf_ids[];
626
627extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd);
628extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs);
629extern int nand_default_bbt(struct mtd_info *mtd);
630extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
631extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
632 int allowbbt);
633extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
634 size_t *retlen, uint8_t *buf);
635
636
637
638
639
640
641
642
643
644
645
646
647
648struct platform_nand_chip {
649 int nr_chips;
650 int chip_offset;
651 int nr_partitions;
652 struct mtd_partition *partitions;
653 struct nand_ecclayout *ecclayout;
654 int chip_delay;
655 unsigned int options;
656 unsigned int bbt_options;
657 const char **part_probe_types;
658};
659
660
661struct platform_device;
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679struct platform_nand_ctrl {
680 int (*probe)(struct platform_device *pdev);
681 void (*remove)(struct platform_device *pdev);
682 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
683 int (*dev_ready)(struct mtd_info *mtd);
684 void (*select_chip)(struct mtd_info *mtd, int chip);
685 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
686 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
687 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
688 unsigned char (*read_byte)(struct mtd_info *mtd);
689 void *priv;
690};
691
692
693
694
695
696
697struct platform_nand_data {
698 struct platform_nand_chip chip;
699 struct platform_nand_ctrl ctrl;
700};
701
702
703static inline
704struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
705{
706 struct nand_chip *chip = mtd->priv;
707
708 return chip->priv;
709}
710
711
712static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
713{
714 if (!chip->onfi_version)
715 return ONFI_TIMING_MODE_UNKNOWN;
716 return le16_to_cpu(chip->onfi_params.async_timing_mode);
717}
718
719
720static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
721{
722 if (!chip->onfi_version)
723 return ONFI_TIMING_MODE_UNKNOWN;
724 return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
725}
726
727#endif
728