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_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
104#define NAND_CMD_READSTART 0x30
105#define NAND_CMD_RNDOUTSTART 0xE0
106#define NAND_CMD_CACHEDPROG 0x15
107
108
109
110
111
112
113
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
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
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
138
139typedef enum {
140 NAND_ECC_NONE,
141 NAND_ECC_SOFT,
142 NAND_ECC_HW,
143 NAND_ECC_HW_SYNDROME,
144 NAND_ECC_HW_OOB_FIRST,
145 NAND_ECC_SOFT_BCH,
146} nand_ecc_modes_t;
147
148
149
150
151
152#define NAND_ECC_READ 0
153
154#define NAND_ECC_WRITE 1
155
156#define NAND_ECC_READSYN 2
157
158
159#define NAND_GET_DEVICE 0x80
160
161
162
163
164
165
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#define NAND_NO_SUBPAGE_WRITE 0x00000200
192
193
194#define NAND_BROKEN_XD 0x00000400
195
196
197#define NAND_ROM 0x00000800
198
199
200#define NAND_SUBPAGE_READ 0x00001000
201
202
203#define NAND_SAMSUNG_LP_OPTIONS \
204 (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
205
206
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
213
214#define NAND_SKIP_BBTSCAN 0x00010000
215
216
217
218
219#define NAND_OWN_BUFFERS 0x00020000
220
221#define NAND_SCAN_SILENT_NODEV 0x00040000
222
223
224
225
226
227
228#define NAND_BUSWIDTH_AUTO 0x00080000
229
230
231
232#define NAND_CONTROLLER_ALLOC 0x80000000
233
234
235#define NAND_CI_CHIPNR_MSK 0x03
236#define NAND_CI_CELLTYPE_MSK 0x0C
237
238
239struct nand_chip;
240
241
242#define ONFI_TIMING_MODE_0 (1 << 0)
243#define ONFI_TIMING_MODE_1 (1 << 1)
244#define ONFI_TIMING_MODE_2 (1 << 2)
245#define ONFI_TIMING_MODE_3 (1 << 3)
246#define ONFI_TIMING_MODE_4 (1 << 4)
247#define ONFI_TIMING_MODE_5 (1 << 5)
248#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
249
250
251#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
252
253
254#define ONFI_SUBFEATURE_PARAM_LEN 4
255
256struct nand_onfi_params {
257
258
259 u8 sig[4];
260 __le16 revision;
261 __le16 features;
262 __le16 opt_cmd;
263 u8 reserved[22];
264
265
266 char manufacturer[12];
267 char model[20];
268 u8 jedec_id;
269 __le16 date_code;
270 u8 reserved2[13];
271
272
273 __le32 byte_per_page;
274 __le16 spare_bytes_per_page;
275 __le32 data_bytes_per_ppage;
276 __le16 spare_bytes_per_ppage;
277 __le32 pages_per_block;
278 __le32 blocks_per_lun;
279 u8 lun_count;
280 u8 addr_cycles;
281 u8 bits_per_cell;
282 __le16 bb_per_lun;
283 __le16 block_endurance;
284 u8 guaranteed_good_blocks;
285 __le16 guaranteed_block_endurance;
286 u8 programs_per_page;
287 u8 ppage_attr;
288 u8 ecc_bits;
289 u8 interleaved_bits;
290 u8 interleaved_ops;
291 u8 reserved3[13];
292
293
294 u8 io_pin_capacitance_max;
295 __le16 async_timing_mode;
296 __le16 program_cache_timing_mode;
297 __le16 t_prog;
298 __le16 t_bers;
299 __le16 t_r;
300 __le16 t_ccs;
301 __le16 src_sync_timing_mode;
302 __le16 src_ssync_features;
303 __le16 clk_pin_capacitance_typ;
304 __le16 io_pin_capacitance_typ;
305 __le16 input_pin_capacitance_typ;
306 u8 input_pin_capacitance_max;
307 u8 driver_strenght_support;
308 __le16 t_int_r;
309 __le16 t_ald;
310 u8 reserved4[7];
311
312
313 u8 reserved5[90];
314
315 __le16 crc;
316} __attribute__((packed));
317
318#define ONFI_CRC_BASE 0x4F4E
319
320
321
322
323
324
325
326
327
328struct nand_hw_control {
329 spinlock_t lock;
330 struct nand_chip *active;
331 wait_queue_head_t wq;
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
358
359
360
361
362
363
364struct nand_ecc_ctrl {
365 nand_ecc_modes_t mode;
366 int steps;
367 int size;
368 int bytes;
369 int total;
370 int strength;
371 int prepad;
372 int postpad;
373 struct nand_ecclayout *layout;
374 void *priv;
375 void (*hwctl)(struct mtd_info *mtd, int mode);
376 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
377 uint8_t *ecc_code);
378 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
379 uint8_t *calc_ecc);
380 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
381 uint8_t *buf, int oob_required, int page);
382 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
383 const uint8_t *buf, int oob_required);
384 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
385 uint8_t *buf, int oob_required, int page);
386 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
387 uint32_t offs, uint32_t len, uint8_t *buf);
388 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
389 const uint8_t *buf, int oob_required);
390 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
391 int page);
392 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
393 int page);
394 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
395 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
396 int page);
397};
398
399
400
401
402
403
404
405
406
407
408struct nand_buffers {
409 uint8_t ecccalc[NAND_MAX_OOBSIZE];
410 uint8_t ecccode[NAND_MAX_OOBSIZE];
411 uint8_t databuf[NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE];
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
491
492
493
494
495
496
497
498
499
500struct nand_chip {
501 void __iomem *IO_ADDR_R;
502 void __iomem *IO_ADDR_W;
503
504 uint8_t (*read_byte)(struct mtd_info *mtd);
505 u16 (*read_word)(struct mtd_info *mtd);
506 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
507 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
508 void (*select_chip)(struct mtd_info *mtd, int chip);
509 int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
510 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
511 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
512 int (*init_size)(struct mtd_info *mtd, struct nand_chip *this,
513 u8 *id_data);
514 int (*dev_ready)(struct mtd_info *mtd);
515 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
516 int page_addr);
517 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
518 void (*erase_cmd)(struct mtd_info *mtd, int page);
519 int (*scan_bbt)(struct mtd_info *mtd);
520 int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
521 int status, int page);
522 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
523 const uint8_t *buf, int oob_required, int page,
524 int cached, int raw);
525 int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
526 int feature_addr, uint8_t *subfeature_para);
527 int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
528 int feature_addr, uint8_t *subfeature_para);
529
530 int chip_delay;
531 unsigned int options;
532 unsigned int bbt_options;
533
534 int page_shift;
535 int phys_erase_shift;
536 int bbt_erase_shift;
537 int chip_shift;
538 int numchips;
539 uint64_t chipsize;
540 int pagemask;
541 int pagebuf;
542 unsigned int pagebuf_bitflips;
543 int subpagesize;
544 uint8_t cellinfo;
545 int badblockpos;
546 int badblockbits;
547
548 int onfi_version;
549 struct nand_onfi_params onfi_params;
550
551 flstate_t state;
552
553 uint8_t *oob_poi;
554 struct nand_hw_control *controller;
555 struct nand_ecclayout *ecclayout;
556
557 struct nand_ecc_ctrl ecc;
558 struct nand_buffers *buffers;
559 struct nand_hw_control hwcontrol;
560
561 uint8_t *bbt;
562 struct nand_bbt_descr *bbt_td;
563 struct nand_bbt_descr *bbt_md;
564
565 struct nand_bbt_descr *badblock_pattern;
566
567 void *priv;
568};
569
570
571
572
573#define NAND_MFR_TOSHIBA 0x98
574#define NAND_MFR_SAMSUNG 0xec
575#define NAND_MFR_FUJITSU 0x04
576#define NAND_MFR_NATIONAL 0x8f
577#define NAND_MFR_RENESAS 0x07
578#define NAND_MFR_STMICRO 0x20
579#define NAND_MFR_HYNIX 0xad
580#define NAND_MFR_MICRON 0x2c
581#define NAND_MFR_AMD 0x01
582#define NAND_MFR_MACRONIX 0xc2
583#define NAND_MFR_EON 0x92
584
585
586
587
588
589
590
591
592
593
594
595
596
597struct nand_flash_dev {
598 char *name;
599 int id;
600 unsigned long pagesize;
601 unsigned long chipsize;
602 unsigned long erasesize;
603 unsigned long options;
604};
605
606
607
608
609
610
611struct nand_manufacturers {
612 int id;
613 char *name;
614};
615
616extern struct nand_flash_dev nand_flash_ids[];
617extern struct nand_manufacturers nand_manuf_ids[];
618
619extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd);
620extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs);
621extern int nand_default_bbt(struct mtd_info *mtd);
622extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
623extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
624 int allowbbt);
625extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
626 size_t *retlen, uint8_t *buf);
627
628
629
630
631
632
633
634
635
636
637
638
639
640struct platform_nand_chip {
641 int nr_chips;
642 int chip_offset;
643 int nr_partitions;
644 struct mtd_partition *partitions;
645 struct nand_ecclayout *ecclayout;
646 int chip_delay;
647 unsigned int options;
648 unsigned int bbt_options;
649 const char **part_probe_types;
650};
651
652
653struct platform_device;
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671struct platform_nand_ctrl {
672 int (*probe)(struct platform_device *pdev);
673 void (*remove)(struct platform_device *pdev);
674 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
675 int (*dev_ready)(struct mtd_info *mtd);
676 void (*select_chip)(struct mtd_info *mtd, int chip);
677 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
678 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
679 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
680 unsigned char (*read_byte)(struct mtd_info *mtd);
681 void *priv;
682};
683
684
685
686
687
688
689struct platform_nand_data {
690 struct platform_nand_chip chip;
691 struct platform_nand_ctrl ctrl;
692};
693
694
695static inline
696struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
697{
698 struct nand_chip *chip = mtd->priv;
699
700 return chip->priv;
701}
702
703
704static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
705{
706 if (!chip->onfi_version)
707 return ONFI_TIMING_MODE_UNKNOWN;
708 return le16_to_cpu(chip->onfi_params.async_timing_mode);
709}
710
711
712static inline int onfi_get_sync_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.src_sync_timing_mode);
717}
718
719#endif
720