1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef __LINUX_MTD_RAWNAND_H
15#define __LINUX_MTD_RAWNAND_H
16
17#include <config.h>
18
19#include <linux/compat.h>
20#include <linux/mtd/mtd.h>
21#include <linux/mtd/flashchip.h>
22#include <linux/mtd/bbm.h>
23#include <asm/cache.h>
24
25struct mtd_info;
26struct nand_flash_dev;
27struct device_node;
28
29
30int nand_scan(struct mtd_info *mtd, int max_chips);
31
32
33
34
35int nand_scan_ident(struct mtd_info *mtd, int max_chips,
36 struct nand_flash_dev *table);
37int nand_scan_tail(struct mtd_info *mtd);
38
39
40void nand_release(struct mtd_info *mtd);
41
42
43void nand_wait_ready(struct mtd_info *mtd);
44
45
46
47
48
49
50#define NAND_MAX_OOBSIZE 1664
51#define NAND_MAX_PAGESIZE 16384
52
53
54
55
56
57
58
59
60#define NAND_NCE 0x01
61
62#define NAND_CLE 0x02
63
64#define NAND_ALE 0x04
65
66#define NAND_CTRL_CLE (NAND_NCE | NAND_CLE)
67#define NAND_CTRL_ALE (NAND_NCE | NAND_ALE)
68#define NAND_CTRL_CHANGE 0x80
69
70
71
72
73#define NAND_CMD_READ0 0
74#define NAND_CMD_READ1 1
75#define NAND_CMD_RNDOUT 5
76#define NAND_CMD_PAGEPROG 0x10
77#define NAND_CMD_READOOB 0x50
78#define NAND_CMD_ERASE1 0x60
79#define NAND_CMD_STATUS 0x70
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_UNLOCK1 0x23
91#define NAND_CMD_UNLOCK2 0x24
92
93
94#define NAND_CMD_READSTART 0x30
95#define NAND_CMD_RNDOUTSTART 0xE0
96#define NAND_CMD_CACHEDPROG 0x15
97
98
99
100
101
102
103
104
105#define NAND_CMD_DEPLETE1 0x100
106#define NAND_CMD_DEPLETE2 0x38
107#define NAND_CMD_STATUS_MULTI 0x71
108#define NAND_CMD_STATUS_ERROR 0x72
109
110#define NAND_CMD_STATUS_ERROR0 0x73
111#define NAND_CMD_STATUS_ERROR1 0x74
112#define NAND_CMD_STATUS_ERROR2 0x75
113#define NAND_CMD_STATUS_ERROR3 0x76
114#define NAND_CMD_STATUS_RESET 0x7f
115#define NAND_CMD_STATUS_CLEAR 0xff
116
117#define NAND_CMD_NONE -1
118
119
120#define NAND_STATUS_FAIL 0x01
121#define NAND_STATUS_FAIL_N1 0x02
122#define NAND_STATUS_TRUE_READY 0x20
123#define NAND_STATUS_READY 0x40
124#define NAND_STATUS_WP 0x80
125
126#define NAND_DATA_IFACE_CHECK_ONLY -1
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
152
153
154
155
156#define NAND_ECC_GENERIC_ERASED_CHECK BIT(0)
157#define NAND_ECC_MAXIMIZE BIT(1)
158
159
160
161
162
163#define NAND_ECC_CUSTOM_PAGE_ACCESS BIT(2)
164
165
166#define NAND_GET_DEVICE 0x80
167
168
169
170
171
172
173
174#define NAND_BUSWIDTH_16 0x00000002
175
176#define NAND_NO_PADDING 0x00000004
177
178#define NAND_CACHEPRG 0x00000008
179
180#define NAND_COPYBACK 0x00000010
181
182
183
184
185
186#define NAND_NEED_READRDY 0x00000100
187
188
189#define NAND_NO_SUBPAGE_WRITE 0x00000200
190
191
192#define NAND_BROKEN_XD 0x00000400
193
194
195#define NAND_ROM 0x00000800
196
197
198#define NAND_SUBPAGE_READ 0x00001000
199
200
201
202
203
204#define NAND_NEED_SCRAMBLING 0x00002000
205
206
207#define NAND_ROW_ADDR_3 0x00004000
208
209
210#define NAND_SAMSUNG_LP_OPTIONS NAND_CACHEPRG
211
212
213#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
214#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
215#define NAND_HAS_SUBPAGE_WRITE(chip) !((chip)->options & NAND_NO_SUBPAGE_WRITE)
216
217
218
219#define NAND_SKIP_BBTSCAN 0x00010000
220
221
222
223
224#define NAND_OWN_BUFFERS 0x00020000
225
226#define NAND_SCAN_SILENT_NODEV 0x00040000
227
228
229
230
231
232
233#define NAND_BUSWIDTH_AUTO 0x00080000
234
235
236
237
238#define NAND_USE_BOUNCE_BUFFER 0x00100000
239
240
241
242#define NAND_BBT_SCANNED 0x40000000
243
244#define NAND_CONTROLLER_ALLOC 0x80000000
245
246
247#define NAND_CI_CHIPNR_MSK 0x03
248#define NAND_CI_CELLTYPE_MSK 0x0C
249#define NAND_CI_CELLTYPE_SHIFT 2
250
251
252struct nand_chip;
253
254
255#define ONFI_FEATURE_16_BIT_BUS (1 << 0)
256#define ONFI_FEATURE_EXT_PARAM_PAGE (1 << 7)
257
258
259#define ONFI_TIMING_MODE_0 (1 << 0)
260#define ONFI_TIMING_MODE_1 (1 << 1)
261#define ONFI_TIMING_MODE_2 (1 << 2)
262#define ONFI_TIMING_MODE_3 (1 << 3)
263#define ONFI_TIMING_MODE_4 (1 << 4)
264#define ONFI_TIMING_MODE_5 (1 << 5)
265#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
266
267
268#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
269
270
271#define ONFI_FEATURE_ADDR_READ_RETRY 0x89
272
273
274#define ONFI_SUBFEATURE_PARAM_LEN 4
275
276
277#define ONFI_OPT_CMD_SET_GET_FEATURES (1 << 2)
278
279struct nand_onfi_params {
280
281
282 u8 sig[4];
283 __le16 revision;
284 __le16 features;
285 __le16 opt_cmd;
286 u8 reserved0[2];
287 __le16 ext_param_page_length;
288 u8 num_of_param_pages;
289 u8 reserved1[17];
290
291
292 char manufacturer[12];
293 char model[20];
294 u8 jedec_id;
295 __le16 date_code;
296 u8 reserved2[13];
297
298
299 __le32 byte_per_page;
300 __le16 spare_bytes_per_page;
301 __le32 data_bytes_per_ppage;
302 __le16 spare_bytes_per_ppage;
303 __le32 pages_per_block;
304 __le32 blocks_per_lun;
305 u8 lun_count;
306 u8 addr_cycles;
307 u8 bits_per_cell;
308 __le16 bb_per_lun;
309 __le16 block_endurance;
310 u8 guaranteed_good_blocks;
311 __le16 guaranteed_block_endurance;
312 u8 programs_per_page;
313 u8 ppage_attr;
314 u8 ecc_bits;
315 u8 interleaved_bits;
316 u8 interleaved_ops;
317 u8 reserved3[13];
318
319
320 u8 io_pin_capacitance_max;
321 __le16 async_timing_mode;
322 __le16 program_cache_timing_mode;
323 __le16 t_prog;
324 __le16 t_bers;
325 __le16 t_r;
326 __le16 t_ccs;
327 __le16 src_sync_timing_mode;
328 u8 src_ssync_features;
329 __le16 clk_pin_capacitance_typ;
330 __le16 io_pin_capacitance_typ;
331 __le16 input_pin_capacitance_typ;
332 u8 input_pin_capacitance_max;
333 u8 driver_strength_support;
334 __le16 t_int_r;
335 __le16 t_adl;
336 u8 reserved4[8];
337
338
339 __le16 vendor_revision;
340 u8 vendor[88];
341
342 __le16 crc;
343} __packed;
344
345#define ONFI_CRC_BASE 0x4F4E
346
347
348struct onfi_ext_ecc_info {
349 u8 ecc_bits;
350 u8 codeword_size;
351 __le16 bb_per_lun;
352 __le16 block_endurance;
353 u8 reserved[2];
354} __packed;
355
356#define ONFI_SECTION_TYPE_0 0
357#define ONFI_SECTION_TYPE_1 1
358#define ONFI_SECTION_TYPE_2 2
359struct onfi_ext_section {
360 u8 type;
361 u8 length;
362} __packed;
363
364#define ONFI_EXT_SECTION_MAX 8
365
366
367struct onfi_ext_param_page {
368 __le16 crc;
369 u8 sig[4];
370 u8 reserved0[10];
371 struct onfi_ext_section sections[ONFI_EXT_SECTION_MAX];
372
373
374
375
376
377
378
379} __packed;
380
381struct nand_onfi_vendor_micron {
382 u8 two_plane_read;
383 u8 read_cache;
384 u8 read_unique_id;
385 u8 dq_imped;
386 u8 dq_imped_num_settings;
387 u8 dq_imped_feat_addr;
388 u8 rb_pulldown_strength;
389 u8 rb_pulldown_strength_feat_addr;
390 u8 rb_pulldown_strength_num_settings;
391 u8 otp_mode;
392 u8 otp_page_start;
393 u8 otp_data_prot_addr;
394 u8 otp_num_pages;
395 u8 otp_feat_addr;
396 u8 read_retry_options;
397 u8 reserved[72];
398 u8 param_revision;
399} __packed;
400
401struct jedec_ecc_info {
402 u8 ecc_bits;
403 u8 codeword_size;
404 __le16 bb_per_lun;
405 __le16 block_endurance;
406 u8 reserved[2];
407} __packed;
408
409
410#define JEDEC_FEATURE_16_BIT_BUS (1 << 0)
411
412struct nand_jedec_params {
413
414
415 u8 sig[4];
416 __le16 revision;
417 __le16 features;
418 u8 opt_cmd[3];
419 __le16 sec_cmd;
420 u8 num_of_param_pages;
421 u8 reserved0[18];
422
423
424 char manufacturer[12];
425 char model[20];
426 u8 jedec_id[6];
427 u8 reserved1[10];
428
429
430 __le32 byte_per_page;
431 __le16 spare_bytes_per_page;
432 u8 reserved2[6];
433 __le32 pages_per_block;
434 __le32 blocks_per_lun;
435 u8 lun_count;
436 u8 addr_cycles;
437 u8 bits_per_cell;
438 u8 programs_per_page;
439 u8 multi_plane_addr;
440 u8 multi_plane_op_attr;
441 u8 reserved3[38];
442
443
444 __le16 async_sdr_speed_grade;
445 __le16 toggle_ddr_speed_grade;
446 __le16 sync_ddr_speed_grade;
447 u8 async_sdr_features;
448 u8 toggle_ddr_features;
449 u8 sync_ddr_features;
450 __le16 t_prog;
451 __le16 t_bers;
452 __le16 t_r;
453 __le16 t_r_multi_plane;
454 __le16 t_ccs;
455 __le16 io_pin_capacitance_typ;
456 __le16 input_pin_capacitance_typ;
457 __le16 clk_pin_capacitance_typ;
458 u8 driver_strength_support;
459 __le16 t_adl;
460 u8 reserved4[36];
461
462
463 u8 guaranteed_good_blocks;
464 __le16 guaranteed_block_endurance;
465 struct jedec_ecc_info ecc_info[4];
466 u8 reserved5[29];
467
468
469 u8 reserved6[148];
470
471
472 __le16 vendor_rev_num;
473 u8 reserved7[88];
474
475
476 __le16 crc;
477} __packed;
478
479
480
481
482
483
484
485
486
487struct nand_hw_control {
488 spinlock_t lock;
489 struct nand_chip *active;
490};
491
492
493
494
495
496
497
498struct nand_ecc_step_info {
499 int stepsize;
500 const int *strengths;
501 int nstrengths;
502};
503
504
505
506
507
508
509
510struct nand_ecc_caps {
511 const struct nand_ecc_step_info *stepinfos;
512 int nstepinfos;
513 int (*calc_ecc_bytes)(int step_size, int strength);
514};
515
516
517#define NAND_ECC_CAPS_SINGLE(__name, __calc, __step, ...) \
518static const int __name##_strengths[] = { __VA_ARGS__ }; \
519static const struct nand_ecc_step_info __name##_stepinfo = { \
520 .stepsize = __step, \
521 .strengths = __name##_strengths, \
522 .nstrengths = ARRAY_SIZE(__name##_strengths), \
523}; \
524static const struct nand_ecc_caps __name = { \
525 .stepinfos = &__name##_stepinfo, \
526 .nstepinfos = 1, \
527 .calc_ecc_bytes = __calc, \
528}
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
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
581struct nand_ecc_ctrl {
582 nand_ecc_modes_t mode;
583 int steps;
584 int size;
585 int bytes;
586 int total;
587 int strength;
588 int prepad;
589 int postpad;
590 unsigned int options;
591 struct nand_ecclayout *layout;
592 void *priv;
593 void (*hwctl)(struct mtd_info *mtd, int mode);
594 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
595 uint8_t *ecc_code);
596 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
597 uint8_t *calc_ecc);
598 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
599 uint8_t *buf, int oob_required, int page);
600 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
601 const uint8_t *buf, int oob_required, int page);
602 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
603 uint8_t *buf, int oob_required, int page);
604 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
605 uint32_t offs, uint32_t len, uint8_t *buf, int page);
606 int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
607 uint32_t offset, uint32_t data_len,
608 const uint8_t *data_buf, int oob_required, int page);
609 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
610 const uint8_t *buf, int oob_required, int page);
611 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
612 int page);
613 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
614 int page);
615 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
616 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
617 int page);
618};
619
620static inline int nand_standard_page_accessors(struct nand_ecc_ctrl *ecc)
621{
622 return !(ecc->options & NAND_ECC_CUSTOM_PAGE_ACCESS);
623}
624
625
626
627
628
629
630
631
632
633
634struct nand_buffers {
635 uint8_t ecccalc[ALIGN(NAND_MAX_OOBSIZE, ARCH_DMA_MINALIGN)];
636 uint8_t ecccode[ALIGN(NAND_MAX_OOBSIZE, ARCH_DMA_MINALIGN)];
637 uint8_t databuf[ALIGN(NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE,
638 ARCH_DMA_MINALIGN)];
639};
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692struct nand_sdr_timings {
693 u64 tBERS_max;
694 u32 tCCS_min;
695 u64 tPROG_max;
696 u64 tR_max;
697 u32 tALH_min;
698 u32 tADL_min;
699 u32 tALS_min;
700 u32 tAR_min;
701 u32 tCEA_max;
702 u32 tCEH_min;
703 u32 tCH_min;
704 u32 tCHZ_max;
705 u32 tCLH_min;
706 u32 tCLR_min;
707 u32 tCLS_min;
708 u32 tCOH_min;
709 u32 tCS_min;
710 u32 tDH_min;
711 u32 tDS_min;
712 u32 tFEAT_max;
713 u32 tIR_min;
714 u32 tITC_max;
715 u32 tRC_min;
716 u32 tREA_max;
717 u32 tREH_min;
718 u32 tRHOH_min;
719 u32 tRHW_min;
720 u32 tRHZ_max;
721 u32 tRLOH_min;
722 u32 tRP_min;
723 u32 tRR_min;
724 u64 tRST_max;
725 u32 tWB_max;
726 u32 tWC_min;
727 u32 tWH_min;
728 u32 tWHR_min;
729 u32 tWP_min;
730 u32 tWW_min;
731};
732
733
734
735
736
737enum nand_data_interface_type {
738 NAND_SDR_IFACE,
739};
740
741
742
743
744
745
746struct nand_data_interface {
747 enum nand_data_interface_type type;
748 union {
749 struct nand_sdr_timings sdr;
750 } timings;
751};
752
753
754
755
756
757static inline const struct nand_sdr_timings *
758nand_get_sdr_timings(const struct nand_data_interface *conf)
759{
760 if (conf->type != NAND_SDR_IFACE)
761 return ERR_PTR(-EINVAL);
762
763 return &conf->timings.sdr;
764}
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
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
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869struct nand_chip {
870 struct mtd_info mtd;
871 void __iomem *IO_ADDR_R;
872 void __iomem *IO_ADDR_W;
873
874 int flash_node;
875
876 uint8_t (*read_byte)(struct mtd_info *mtd);
877 u16 (*read_word)(struct mtd_info *mtd);
878 void (*write_byte)(struct mtd_info *mtd, uint8_t byte);
879 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
880 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
881 void (*select_chip)(struct mtd_info *mtd, int chip);
882 int (*block_bad)(struct mtd_info *mtd, loff_t ofs);
883 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
884 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
885 int (*dev_ready)(struct mtd_info *mtd);
886 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
887 int page_addr);
888 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
889 int (*erase)(struct mtd_info *mtd, int page);
890 int (*scan_bbt)(struct mtd_info *mtd);
891 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
892 uint32_t offset, int data_len, const uint8_t *buf,
893 int oob_required, int page, int raw);
894 int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
895 int feature_addr, uint8_t *subfeature_para);
896 int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
897 int feature_addr, uint8_t *subfeature_para);
898 int (*setup_read_retry)(struct mtd_info *mtd, int retry_mode);
899 int (*setup_data_interface)(struct mtd_info *mtd, int chipnr,
900 const struct nand_data_interface *conf);
901
902
903 int chip_delay;
904 unsigned int options;
905 unsigned int bbt_options;
906
907 int page_shift;
908 int phys_erase_shift;
909 int bbt_erase_shift;
910 int chip_shift;
911 int numchips;
912 uint64_t chipsize;
913 int pagemask;
914 int pagebuf;
915 unsigned int pagebuf_bitflips;
916 int subpagesize;
917 uint8_t bits_per_cell;
918 uint16_t ecc_strength_ds;
919 uint16_t ecc_step_ds;
920 int onfi_timing_mode_default;
921 int badblockpos;
922 int badblockbits;
923
924 int onfi_version;
925 int jedec_version;
926 struct nand_onfi_params onfi_params;
927 struct nand_jedec_params jedec_params;
928
929 struct nand_data_interface *data_interface;
930
931 int read_retries;
932
933 flstate_t state;
934
935 uint8_t *oob_poi;
936 struct nand_hw_control *controller;
937 struct nand_ecclayout *ecclayout;
938
939 struct nand_ecc_ctrl ecc;
940 struct nand_buffers *buffers;
941 unsigned long buf_align;
942 struct nand_hw_control hwcontrol;
943
944 uint8_t *bbt;
945 struct nand_bbt_descr *bbt_td;
946 struct nand_bbt_descr *bbt_md;
947
948 struct nand_bbt_descr *badblock_pattern;
949
950 void *priv;
951};
952
953static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd)
954{
955 return container_of(mtd, struct nand_chip, mtd);
956}
957
958static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip)
959{
960 return &chip->mtd;
961}
962
963static inline void *nand_get_controller_data(struct nand_chip *chip)
964{
965 return chip->priv;
966}
967
968static inline void nand_set_controller_data(struct nand_chip *chip, void *priv)
969{
970 chip->priv = priv;
971}
972
973
974
975
976#define NAND_MFR_TOSHIBA 0x98
977#define NAND_MFR_SAMSUNG 0xec
978#define NAND_MFR_FUJITSU 0x04
979#define NAND_MFR_NATIONAL 0x8f
980#define NAND_MFR_RENESAS 0x07
981#define NAND_MFR_STMICRO 0x20
982#define NAND_MFR_HYNIX 0xad
983#define NAND_MFR_MICRON 0x2c
984#define NAND_MFR_AMD 0x01
985#define NAND_MFR_MACRONIX 0xc2
986#define NAND_MFR_EON 0x92
987#define NAND_MFR_SANDISK 0x45
988#define NAND_MFR_INTEL 0x89
989#define NAND_MFR_ATO 0x9b
990
991
992#define NAND_MAX_ID_LEN 8
993
994
995
996
997
998
999#define LEGACY_ID_NAND(nm, devid, chipsz, erasesz, opts) \
1000 { .name = (nm), {{ .dev_id = (devid) }}, .pagesize = 512, \
1001 .chipsize = (chipsz), .erasesize = (erasesz), .options = (opts) }
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013#define EXTENDED_ID_NAND(nm, devid, chipsz, opts) \
1014 { .name = (nm), {{ .dev_id = (devid) }}, .chipsize = (chipsz), \
1015 .options = (opts) }
1016
1017#define NAND_ECC_INFO(_strength, _step) \
1018 { .strength_ds = (_strength), .step_ds = (_step) }
1019#define NAND_ECC_STRENGTH(type) ((type)->ecc.strength_ds)
1020#define NAND_ECC_STEP(type) ((type)->ecc.step_ds)
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051struct nand_flash_dev {
1052 char *name;
1053 union {
1054 struct {
1055 uint8_t mfr_id;
1056 uint8_t dev_id;
1057 };
1058 uint8_t id[NAND_MAX_ID_LEN];
1059 };
1060 unsigned int pagesize;
1061 unsigned int chipsize;
1062 unsigned int erasesize;
1063 unsigned int options;
1064 uint16_t id_len;
1065 uint16_t oobsize;
1066 struct {
1067 uint16_t strength_ds;
1068 uint16_t step_ds;
1069 } ecc;
1070 int onfi_timing_mode_default;
1071};
1072
1073
1074
1075
1076
1077
1078struct nand_manufacturers {
1079 int id;
1080 char *name;
1081};
1082
1083extern struct nand_flash_dev nand_flash_ids[];
1084extern struct nand_manufacturers nand_manuf_ids[];
1085
1086int nand_default_bbt(struct mtd_info *mtd);
1087int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs);
1088int nand_isreserved_bbt(struct mtd_info *mtd, loff_t offs);
1089int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
1090int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
1091 int allowbbt);
1092int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
1093 size_t *retlen, uint8_t *buf);
1094
1095
1096
1097
1098#define NAND_SMALL_BADBLOCK_POS 5
1099#define NAND_LARGE_BADBLOCK_POS 0
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112struct platform_nand_chip {
1113 int nr_chips;
1114 int chip_offset;
1115 int nr_partitions;
1116 struct mtd_partition *partitions;
1117 int chip_delay;
1118 unsigned int options;
1119 unsigned int bbt_options;
1120 const char **part_probe_types;
1121};
1122
1123
1124struct platform_device;
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142struct platform_nand_ctrl {
1143 int (*probe)(struct platform_device *pdev);
1144 void (*remove)(struct platform_device *pdev);
1145 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
1146 int (*dev_ready)(struct mtd_info *mtd);
1147 void (*select_chip)(struct mtd_info *mtd, int chip);
1148 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
1149 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
1150 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
1151 unsigned char (*read_byte)(struct mtd_info *mtd);
1152 void *priv;
1153};
1154
1155
1156
1157
1158
1159
1160struct platform_nand_data {
1161 struct platform_nand_chip chip;
1162 struct platform_nand_ctrl ctrl;
1163};
1164
1165#ifdef CONFIG_SYS_NAND_ONFI_DETECTION
1166
1167static inline int onfi_feature(struct nand_chip *chip)
1168{
1169 return chip->onfi_version ? le16_to_cpu(chip->onfi_params.features) : 0;
1170}
1171
1172
1173static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
1174{
1175 if (!chip->onfi_version)
1176 return ONFI_TIMING_MODE_UNKNOWN;
1177 return le16_to_cpu(chip->onfi_params.async_timing_mode);
1178}
1179
1180
1181static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
1182{
1183 if (!chip->onfi_version)
1184 return ONFI_TIMING_MODE_UNKNOWN;
1185 return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
1186}
1187#else
1188static inline int onfi_feature(struct nand_chip *chip)
1189{
1190 return 0;
1191}
1192
1193static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
1194{
1195 return ONFI_TIMING_MODE_UNKNOWN;
1196}
1197
1198static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
1199{
1200 return ONFI_TIMING_MODE_UNKNOWN;
1201}
1202#endif
1203
1204int onfi_init_data_interface(struct nand_chip *chip,
1205 struct nand_data_interface *iface,
1206 enum nand_data_interface_type type,
1207 int timing_mode);
1208
1209
1210
1211
1212
1213
1214static inline bool nand_is_slc(struct nand_chip *chip)
1215{
1216 return chip->bits_per_cell == 1;
1217}
1218
1219
1220
1221
1222
1223static inline int nand_opcode_8bits(unsigned int command)
1224{
1225 switch (command) {
1226 case NAND_CMD_READID:
1227 case NAND_CMD_PARAM:
1228 case NAND_CMD_GET_FEATURES:
1229 case NAND_CMD_SET_FEATURES:
1230 return 1;
1231 default:
1232 break;
1233 }
1234 return 0;
1235}
1236
1237
1238static inline int jedec_feature(struct nand_chip *chip)
1239{
1240 return chip->jedec_version ? le16_to_cpu(chip->jedec_params.features)
1241 : 0;
1242}
1243
1244
1245void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
1246void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len);
1247void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
1248void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len);
1249uint8_t nand_read_byte(struct mtd_info *mtd);
1250
1251
1252const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode);
1253
1254const struct nand_data_interface *nand_get_default_data_interface(void);
1255
1256int nand_check_erased_ecc_chunk(void *data, int datalen,
1257 void *ecc, int ecclen,
1258 void *extraoob, int extraooblen,
1259 int threshold);
1260
1261int nand_check_ecc_caps(struct nand_chip *chip,
1262 const struct nand_ecc_caps *caps, int oobavail);
1263
1264int nand_match_ecc_req(struct nand_chip *chip,
1265 const struct nand_ecc_caps *caps, int oobavail);
1266
1267int nand_maximize_ecc(struct nand_chip *chip,
1268 const struct nand_ecc_caps *caps, int oobavail);
1269
1270
1271int nand_reset(struct nand_chip *chip, int chipnr);
1272#endif
1273