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;
29struct device_node;
30
31
32extern int nand_scan(struct mtd_info *mtd, int max_chips);
33
34
35
36
37extern int nand_scan_ident(struct mtd_info *mtd, int max_chips,
38 struct nand_flash_dev *table);
39extern int nand_scan_tail(struct mtd_info *mtd);
40
41
42extern void nand_release(struct mtd_info *mtd);
43
44
45extern void nand_wait_ready(struct mtd_info *mtd);
46
47
48extern int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
49
50
51extern int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
52
53
54#define NAND_MAX_CHIPS 8
55
56
57
58
59
60
61
62
63#define NAND_NCE 0x01
64
65#define NAND_CLE 0x02
66
67#define NAND_ALE 0x04
68
69#define NAND_CTRL_CLE (NAND_NCE | NAND_CLE)
70#define NAND_CTRL_ALE (NAND_NCE | NAND_ALE)
71#define NAND_CTRL_CHANGE 0x80
72
73
74
75
76#define NAND_CMD_READ0 0
77#define NAND_CMD_READ1 1
78#define NAND_CMD_RNDOUT 5
79#define NAND_CMD_PAGEPROG 0x10
80#define NAND_CMD_READOOB 0x50
81#define NAND_CMD_ERASE1 0x60
82#define NAND_CMD_STATUS 0x70
83#define NAND_CMD_SEQIN 0x80
84#define NAND_CMD_RNDIN 0x85
85#define NAND_CMD_READID 0x90
86#define NAND_CMD_ERASE2 0xd0
87#define NAND_CMD_PARAM 0xec
88#define NAND_CMD_GET_FEATURES 0xee
89#define NAND_CMD_SET_FEATURES 0xef
90#define NAND_CMD_RESET 0xff
91
92#define NAND_CMD_LOCK 0x2a
93#define NAND_CMD_UNLOCK1 0x23
94#define NAND_CMD_UNLOCK2 0x24
95
96
97#define NAND_CMD_READSTART 0x30
98#define NAND_CMD_RNDOUTSTART 0xE0
99#define NAND_CMD_CACHEDPROG 0x15
100
101#define NAND_CMD_NONE -1
102
103
104#define NAND_STATUS_FAIL 0x01
105#define NAND_STATUS_FAIL_N1 0x02
106#define NAND_STATUS_TRUE_READY 0x20
107#define NAND_STATUS_READY 0x40
108#define NAND_STATUS_WP 0x80
109
110
111
112
113typedef enum {
114 NAND_ECC_NONE,
115 NAND_ECC_SOFT,
116 NAND_ECC_HW,
117 NAND_ECC_HW_SYNDROME,
118 NAND_ECC_HW_OOB_FIRST,
119 NAND_ECC_SOFT_BCH,
120} nand_ecc_modes_t;
121
122
123
124
125
126#define NAND_ECC_READ 0
127
128#define NAND_ECC_WRITE 1
129
130#define NAND_ECC_READSYN 2
131
132
133
134
135
136
137
138#define NAND_ECC_GENERIC_ERASED_CHECK BIT(0)
139
140
141#define NAND_GET_DEVICE 0x80
142
143
144
145
146
147
148
149#define NAND_BUSWIDTH_16 0x00000002
150
151#define NAND_CACHEPRG 0x00000008
152
153
154
155
156
157#define NAND_NEED_READRDY 0x00000100
158
159
160#define NAND_NO_SUBPAGE_WRITE 0x00000200
161
162
163#define NAND_BROKEN_XD 0x00000400
164
165
166#define NAND_ROM 0x00000800
167
168
169#define NAND_SUBPAGE_READ 0x00001000
170
171
172#define NAND_SAMSUNG_LP_OPTIONS NAND_CACHEPRG
173
174
175#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
176#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
177
178
179
180#define NAND_SKIP_BBTSCAN 0x00010000
181
182
183
184
185#define NAND_OWN_BUFFERS 0x00020000
186
187#define NAND_SCAN_SILENT_NODEV 0x00040000
188
189
190
191
192
193
194#define NAND_BUSWIDTH_AUTO 0x00080000
195
196
197
198
199#define NAND_USE_BOUNCE_BUFFER 0x00100000
200
201
202
203#define NAND_CONTROLLER_ALLOC 0x80000000
204
205
206#define NAND_CI_CHIPNR_MSK 0x03
207#define NAND_CI_CELLTYPE_MSK 0x0C
208#define NAND_CI_CELLTYPE_SHIFT 2
209
210
211struct nand_chip;
212
213
214#define ONFI_FEATURE_16_BIT_BUS (1 << 0)
215#define ONFI_FEATURE_EXT_PARAM_PAGE (1 << 7)
216
217
218#define ONFI_TIMING_MODE_0 (1 << 0)
219#define ONFI_TIMING_MODE_1 (1 << 1)
220#define ONFI_TIMING_MODE_2 (1 << 2)
221#define ONFI_TIMING_MODE_3 (1 << 3)
222#define ONFI_TIMING_MODE_4 (1 << 4)
223#define ONFI_TIMING_MODE_5 (1 << 5)
224#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
225
226
227#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
228
229
230#define ONFI_FEATURE_ADDR_READ_RETRY 0x89
231
232
233#define ONFI_SUBFEATURE_PARAM_LEN 4
234
235
236#define ONFI_OPT_CMD_SET_GET_FEATURES (1 << 2)
237
238struct nand_onfi_params {
239
240
241 u8 sig[4];
242 __le16 revision;
243 __le16 features;
244 __le16 opt_cmd;
245 u8 reserved0[2];
246 __le16 ext_param_page_length;
247 u8 num_of_param_pages;
248 u8 reserved1[17];
249
250
251 char manufacturer[12];
252 char model[20];
253 u8 jedec_id;
254 __le16 date_code;
255 u8 reserved2[13];
256
257
258 __le32 byte_per_page;
259 __le16 spare_bytes_per_page;
260 __le32 data_bytes_per_ppage;
261 __le16 spare_bytes_per_ppage;
262 __le32 pages_per_block;
263 __le32 blocks_per_lun;
264 u8 lun_count;
265 u8 addr_cycles;
266 u8 bits_per_cell;
267 __le16 bb_per_lun;
268 __le16 block_endurance;
269 u8 guaranteed_good_blocks;
270 __le16 guaranteed_block_endurance;
271 u8 programs_per_page;
272 u8 ppage_attr;
273 u8 ecc_bits;
274 u8 interleaved_bits;
275 u8 interleaved_ops;
276 u8 reserved3[13];
277
278
279 u8 io_pin_capacitance_max;
280 __le16 async_timing_mode;
281 __le16 program_cache_timing_mode;
282 __le16 t_prog;
283 __le16 t_bers;
284 __le16 t_r;
285 __le16 t_ccs;
286 __le16 src_sync_timing_mode;
287 u8 src_ssync_features;
288 __le16 clk_pin_capacitance_typ;
289 __le16 io_pin_capacitance_typ;
290 __le16 input_pin_capacitance_typ;
291 u8 input_pin_capacitance_max;
292 u8 driver_strength_support;
293 __le16 t_int_r;
294 __le16 t_adl;
295 u8 reserved4[8];
296
297
298 __le16 vendor_revision;
299 u8 vendor[88];
300
301 __le16 crc;
302} __packed;
303
304#define ONFI_CRC_BASE 0x4F4E
305
306
307struct onfi_ext_ecc_info {
308 u8 ecc_bits;
309 u8 codeword_size;
310 __le16 bb_per_lun;
311 __le16 block_endurance;
312 u8 reserved[2];
313} __packed;
314
315#define ONFI_SECTION_TYPE_0 0
316#define ONFI_SECTION_TYPE_1 1
317#define ONFI_SECTION_TYPE_2 2
318struct onfi_ext_section {
319 u8 type;
320 u8 length;
321} __packed;
322
323#define ONFI_EXT_SECTION_MAX 8
324
325
326struct onfi_ext_param_page {
327 __le16 crc;
328 u8 sig[4];
329 u8 reserved0[10];
330 struct onfi_ext_section sections[ONFI_EXT_SECTION_MAX];
331
332
333
334
335
336
337
338} __packed;
339
340struct nand_onfi_vendor_micron {
341 u8 two_plane_read;
342 u8 read_cache;
343 u8 read_unique_id;
344 u8 dq_imped;
345 u8 dq_imped_num_settings;
346 u8 dq_imped_feat_addr;
347 u8 rb_pulldown_strength;
348 u8 rb_pulldown_strength_feat_addr;
349 u8 rb_pulldown_strength_num_settings;
350 u8 otp_mode;
351 u8 otp_page_start;
352 u8 otp_data_prot_addr;
353 u8 otp_num_pages;
354 u8 otp_feat_addr;
355 u8 read_retry_options;
356 u8 reserved[72];
357 u8 param_revision;
358} __packed;
359
360struct jedec_ecc_info {
361 u8 ecc_bits;
362 u8 codeword_size;
363 __le16 bb_per_lun;
364 __le16 block_endurance;
365 u8 reserved[2];
366} __packed;
367
368
369#define JEDEC_FEATURE_16_BIT_BUS (1 << 0)
370
371struct nand_jedec_params {
372
373
374 u8 sig[4];
375 __le16 revision;
376 __le16 features;
377 u8 opt_cmd[3];
378 __le16 sec_cmd;
379 u8 num_of_param_pages;
380 u8 reserved0[18];
381
382
383 char manufacturer[12];
384 char model[20];
385 u8 jedec_id[6];
386 u8 reserved1[10];
387
388
389 __le32 byte_per_page;
390 __le16 spare_bytes_per_page;
391 u8 reserved2[6];
392 __le32 pages_per_block;
393 __le32 blocks_per_lun;
394 u8 lun_count;
395 u8 addr_cycles;
396 u8 bits_per_cell;
397 u8 programs_per_page;
398 u8 multi_plane_addr;
399 u8 multi_plane_op_attr;
400 u8 reserved3[38];
401
402
403 __le16 async_sdr_speed_grade;
404 __le16 toggle_ddr_speed_grade;
405 __le16 sync_ddr_speed_grade;
406 u8 async_sdr_features;
407 u8 toggle_ddr_features;
408 u8 sync_ddr_features;
409 __le16 t_prog;
410 __le16 t_bers;
411 __le16 t_r;
412 __le16 t_r_multi_plane;
413 __le16 t_ccs;
414 __le16 io_pin_capacitance_typ;
415 __le16 input_pin_capacitance_typ;
416 __le16 clk_pin_capacitance_typ;
417 u8 driver_strength_support;
418 __le16 t_adl;
419 u8 reserved4[36];
420
421
422 u8 guaranteed_good_blocks;
423 __le16 guaranteed_block_endurance;
424 struct jedec_ecc_info ecc_info[4];
425 u8 reserved5[29];
426
427
428 u8 reserved6[148];
429
430
431 __le16 vendor_rev_num;
432 u8 reserved7[88];
433
434
435 __le16 crc;
436} __packed;
437
438
439
440
441
442
443
444
445
446struct nand_hw_control {
447 spinlock_t lock;
448 struct nand_chip *active;
449 wait_queue_head_t wq;
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
500
501
502
503struct nand_ecc_ctrl {
504 nand_ecc_modes_t mode;
505 int steps;
506 int size;
507 int bytes;
508 int total;
509 int strength;
510 int prepad;
511 int postpad;
512 unsigned int options;
513 struct nand_ecclayout *layout;
514 void *priv;
515 void (*hwctl)(struct mtd_info *mtd, int mode);
516 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
517 uint8_t *ecc_code);
518 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
519 uint8_t *calc_ecc);
520 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
521 uint8_t *buf, int oob_required, int page);
522 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
523 const uint8_t *buf, int oob_required, int page);
524 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
525 uint8_t *buf, int oob_required, int page);
526 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
527 uint32_t offs, uint32_t len, uint8_t *buf, int page);
528 int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
529 uint32_t offset, uint32_t data_len,
530 const uint8_t *data_buf, int oob_required, int page);
531 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
532 const uint8_t *buf, int oob_required, int page);
533 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
534 int page);
535 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
536 int page);
537 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
538 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
539 int page);
540};
541
542
543
544
545
546
547
548
549
550
551struct nand_buffers {
552 uint8_t *ecccalc;
553 uint8_t *ecccode;
554 uint8_t *databuf;
555};
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658struct nand_chip {
659 struct mtd_info mtd;
660 void __iomem *IO_ADDR_R;
661 void __iomem *IO_ADDR_W;
662
663 uint8_t (*read_byte)(struct mtd_info *mtd);
664 u16 (*read_word)(struct mtd_info *mtd);
665 void (*write_byte)(struct mtd_info *mtd, uint8_t byte);
666 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
667 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
668 void (*select_chip)(struct mtd_info *mtd, int chip);
669 int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
670 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
671 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
672 int (*dev_ready)(struct mtd_info *mtd);
673 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
674 int page_addr);
675 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
676 int (*erase)(struct mtd_info *mtd, int page);
677 int (*scan_bbt)(struct mtd_info *mtd);
678 int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
679 int status, int page);
680 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
681 uint32_t offset, int data_len, const uint8_t *buf,
682 int oob_required, int page, int cached, int raw);
683 int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
684 int feature_addr, uint8_t *subfeature_para);
685 int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
686 int feature_addr, uint8_t *subfeature_para);
687 int (*setup_read_retry)(struct mtd_info *mtd, int retry_mode);
688
689 int chip_delay;
690 unsigned int options;
691 unsigned int bbt_options;
692
693 int page_shift;
694 int phys_erase_shift;
695 int bbt_erase_shift;
696 int chip_shift;
697 int numchips;
698 uint64_t chipsize;
699 int pagemask;
700 int pagebuf;
701 unsigned int pagebuf_bitflips;
702 int subpagesize;
703 uint8_t bits_per_cell;
704 uint16_t ecc_strength_ds;
705 uint16_t ecc_step_ds;
706 int onfi_timing_mode_default;
707 int badblockpos;
708 int badblockbits;
709
710 int onfi_version;
711 int jedec_version;
712 union {
713 struct nand_onfi_params onfi_params;
714 struct nand_jedec_params jedec_params;
715 };
716
717 int read_retries;
718
719 flstate_t state;
720
721 uint8_t *oob_poi;
722 struct nand_hw_control *controller;
723
724 struct nand_ecc_ctrl ecc;
725 struct nand_buffers *buffers;
726 struct nand_hw_control hwcontrol;
727
728 uint8_t *bbt;
729 struct nand_bbt_descr *bbt_td;
730 struct nand_bbt_descr *bbt_md;
731
732 struct nand_bbt_descr *badblock_pattern;
733
734 void *priv;
735};
736
737static inline void nand_set_flash_node(struct nand_chip *chip,
738 struct device_node *np)
739{
740 mtd_set_of_node(&chip->mtd, np);
741}
742
743static inline struct device_node *nand_get_flash_node(struct nand_chip *chip)
744{
745 return mtd_get_of_node(&chip->mtd);
746}
747
748static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd)
749{
750 return container_of(mtd, struct nand_chip, mtd);
751}
752
753static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip)
754{
755 return &chip->mtd;
756}
757
758static inline void *nand_get_controller_data(struct nand_chip *chip)
759{
760 return chip->priv;
761}
762
763static inline void nand_set_controller_data(struct nand_chip *chip, void *priv)
764{
765 chip->priv = priv;
766}
767
768
769
770
771#define NAND_MFR_TOSHIBA 0x98
772#define NAND_MFR_SAMSUNG 0xec
773#define NAND_MFR_FUJITSU 0x04
774#define NAND_MFR_NATIONAL 0x8f
775#define NAND_MFR_RENESAS 0x07
776#define NAND_MFR_STMICRO 0x20
777#define NAND_MFR_HYNIX 0xad
778#define NAND_MFR_MICRON 0x2c
779#define NAND_MFR_AMD 0x01
780#define NAND_MFR_MACRONIX 0xc2
781#define NAND_MFR_EON 0x92
782#define NAND_MFR_SANDISK 0x45
783#define NAND_MFR_INTEL 0x89
784#define NAND_MFR_ATO 0x9b
785
786
787#define NAND_MAX_ID_LEN 8
788
789
790
791
792
793
794#define LEGACY_ID_NAND(nm, devid, chipsz, erasesz, opts) \
795 { .name = (nm), {{ .dev_id = (devid) }}, .pagesize = 512, \
796 .chipsize = (chipsz), .erasesize = (erasesz), .options = (opts) }
797
798
799
800
801
802
803
804
805
806
807
808#define EXTENDED_ID_NAND(nm, devid, chipsz, opts) \
809 { .name = (nm), {{ .dev_id = (devid) }}, .chipsize = (chipsz), \
810 .options = (opts) }
811
812#define NAND_ECC_INFO(_strength, _step) \
813 { .strength_ds = (_strength), .step_ds = (_step) }
814#define NAND_ECC_STRENGTH(type) ((type)->ecc.strength_ds)
815#define NAND_ECC_STEP(type) ((type)->ecc.step_ds)
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846struct nand_flash_dev {
847 char *name;
848 union {
849 struct {
850 uint8_t mfr_id;
851 uint8_t dev_id;
852 };
853 uint8_t id[NAND_MAX_ID_LEN];
854 };
855 unsigned int pagesize;
856 unsigned int chipsize;
857 unsigned int erasesize;
858 unsigned int options;
859 uint16_t id_len;
860 uint16_t oobsize;
861 struct {
862 uint16_t strength_ds;
863 uint16_t step_ds;
864 } ecc;
865 int onfi_timing_mode_default;
866};
867
868
869
870
871
872
873struct nand_manufacturers {
874 int id;
875 char *name;
876};
877
878extern struct nand_flash_dev nand_flash_ids[];
879extern struct nand_manufacturers nand_manuf_ids[];
880
881extern int nand_default_bbt(struct mtd_info *mtd);
882extern int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs);
883extern int nand_isreserved_bbt(struct mtd_info *mtd, loff_t offs);
884extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
885extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
886 int allowbbt);
887extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
888 size_t *retlen, uint8_t *buf);
889
890
891
892
893
894
895
896
897
898
899
900
901
902struct platform_nand_chip {
903 int nr_chips;
904 int chip_offset;
905 int nr_partitions;
906 struct mtd_partition *partitions;
907 struct nand_ecclayout *ecclayout;
908 int chip_delay;
909 unsigned int options;
910 unsigned int bbt_options;
911 const char **part_probe_types;
912};
913
914
915struct platform_device;
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933struct platform_nand_ctrl {
934 int (*probe)(struct platform_device *pdev);
935 void (*remove)(struct platform_device *pdev);
936 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
937 int (*dev_ready)(struct mtd_info *mtd);
938 void (*select_chip)(struct mtd_info *mtd, int chip);
939 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
940 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
941 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
942 unsigned char (*read_byte)(struct mtd_info *mtd);
943 void *priv;
944};
945
946
947
948
949
950
951struct platform_nand_data {
952 struct platform_nand_chip chip;
953 struct platform_nand_ctrl ctrl;
954};
955
956
957static inline int onfi_feature(struct nand_chip *chip)
958{
959 return chip->onfi_version ? le16_to_cpu(chip->onfi_params.features) : 0;
960}
961
962
963static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
964{
965 if (!chip->onfi_version)
966 return ONFI_TIMING_MODE_UNKNOWN;
967 return le16_to_cpu(chip->onfi_params.async_timing_mode);
968}
969
970
971static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
972{
973 if (!chip->onfi_version)
974 return ONFI_TIMING_MODE_UNKNOWN;
975 return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
976}
977
978
979
980
981
982
983static inline bool nand_is_slc(struct nand_chip *chip)
984{
985 return chip->bits_per_cell == 1;
986}
987
988
989
990
991
992static inline int nand_opcode_8bits(unsigned int command)
993{
994 switch (command) {
995 case NAND_CMD_READID:
996 case NAND_CMD_PARAM:
997 case NAND_CMD_GET_FEATURES:
998 case NAND_CMD_SET_FEATURES:
999 return 1;
1000 default:
1001 break;
1002 }
1003 return 0;
1004}
1005
1006
1007static inline int jedec_feature(struct nand_chip *chip)
1008{
1009 return chip->jedec_version ? le16_to_cpu(chip->jedec_params.features)
1010 : 0;
1011}
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025struct nand_sdr_timings {
1026 u32 tALH_min;
1027 u32 tADL_min;
1028 u32 tALS_min;
1029 u32 tAR_min;
1030 u32 tCEA_max;
1031 u32 tCEH_min;
1032 u32 tCH_min;
1033 u32 tCHZ_max;
1034 u32 tCLH_min;
1035 u32 tCLR_min;
1036 u32 tCLS_min;
1037 u32 tCOH_min;
1038 u32 tCS_min;
1039 u32 tDH_min;
1040 u32 tDS_min;
1041 u32 tFEAT_max;
1042 u32 tIR_min;
1043 u32 tITC_max;
1044 u32 tRC_min;
1045 u32 tREA_max;
1046 u32 tREH_min;
1047 u32 tRHOH_min;
1048 u32 tRHW_min;
1049 u32 tRHZ_max;
1050 u32 tRLOH_min;
1051 u32 tRP_min;
1052 u32 tRR_min;
1053 u64 tRST_max;
1054 u32 tWB_max;
1055 u32 tWC_min;
1056 u32 tWH_min;
1057 u32 tWHR_min;
1058 u32 tWP_min;
1059 u32 tWW_min;
1060};
1061
1062
1063const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode);
1064
1065int nand_check_erased_ecc_chunk(void *data, int datalen,
1066 void *ecc, int ecclen,
1067 void *extraoob, int extraooblen,
1068 int threshold);
1069#endif
1070