1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef __LINUX_MTD_RAWNAND_H
17#define __LINUX_MTD_RAWNAND_H
18
19#include <linux/wait.h>
20#include <linux/spinlock.h>
21#include <linux/mtd/mtd.h>
22#include <linux/mtd/flashchip.h>
23#include <linux/mtd/bbm.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#define NAND_MAX_CHIPS 8
47
48
49
50
51
52
53
54
55#define NAND_NCE 0x01
56
57#define NAND_CLE 0x02
58
59#define NAND_ALE 0x04
60
61#define NAND_CTRL_CLE (NAND_NCE | NAND_CLE)
62#define NAND_CTRL_ALE (NAND_NCE | NAND_ALE)
63#define NAND_CTRL_CHANGE 0x80
64
65
66
67
68#define NAND_CMD_READ0 0
69#define NAND_CMD_READ1 1
70#define NAND_CMD_RNDOUT 5
71#define NAND_CMD_PAGEPROG 0x10
72#define NAND_CMD_READOOB 0x50
73#define NAND_CMD_ERASE1 0x60
74#define NAND_CMD_STATUS 0x70
75#define NAND_CMD_SEQIN 0x80
76#define NAND_CMD_RNDIN 0x85
77#define NAND_CMD_READID 0x90
78#define NAND_CMD_ERASE2 0xd0
79#define NAND_CMD_PARAM 0xec
80#define NAND_CMD_GET_FEATURES 0xee
81#define NAND_CMD_SET_FEATURES 0xef
82#define NAND_CMD_RESET 0xff
83
84
85#define NAND_CMD_READSTART 0x30
86#define NAND_CMD_RNDOUTSTART 0xE0
87#define NAND_CMD_CACHEDPROG 0x15
88
89#define NAND_CMD_NONE -1
90
91
92#define NAND_STATUS_FAIL 0x01
93#define NAND_STATUS_FAIL_N1 0x02
94#define NAND_STATUS_TRUE_READY 0x20
95#define NAND_STATUS_READY 0x40
96#define NAND_STATUS_WP 0x80
97
98#define NAND_DATA_IFACE_CHECK_ONLY -1
99
100
101
102
103typedef enum {
104 NAND_ECC_NONE,
105 NAND_ECC_SOFT,
106 NAND_ECC_HW,
107 NAND_ECC_HW_SYNDROME,
108 NAND_ECC_HW_OOB_FIRST,
109 NAND_ECC_ON_DIE,
110} nand_ecc_modes_t;
111
112enum nand_ecc_algo {
113 NAND_ECC_UNKNOWN,
114 NAND_ECC_HAMMING,
115 NAND_ECC_BCH,
116};
117
118
119
120
121
122#define NAND_ECC_READ 0
123
124#define NAND_ECC_WRITE 1
125
126#define NAND_ECC_READSYN 2
127
128
129
130
131
132
133
134#define NAND_ECC_GENERIC_ERASED_CHECK BIT(0)
135#define NAND_ECC_MAXIMIZE BIT(1)
136
137
138
139
140
141#define NAND_ECC_CUSTOM_PAGE_ACCESS BIT(2)
142
143
144#define NAND_GET_DEVICE 0x80
145
146
147
148
149
150
151
152#define NAND_BUSWIDTH_16 0x00000002
153
154#define NAND_CACHEPRG 0x00000008
155
156
157
158
159
160#define NAND_NEED_READRDY 0x00000100
161
162
163#define NAND_NO_SUBPAGE_WRITE 0x00000200
164
165
166#define NAND_BROKEN_XD 0x00000400
167
168
169#define NAND_ROM 0x00000800
170
171
172#define NAND_SUBPAGE_READ 0x00001000
173
174
175
176
177
178#define NAND_NEED_SCRAMBLING 0x00002000
179
180
181#define NAND_SAMSUNG_LP_OPTIONS NAND_CACHEPRG
182
183
184#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
185#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
186#define NAND_HAS_SUBPAGE_WRITE(chip) !((chip)->options & NAND_NO_SUBPAGE_WRITE)
187
188
189
190#define NAND_SKIP_BBTSCAN 0x00010000
191
192
193
194
195#define NAND_OWN_BUFFERS 0x00020000
196
197#define NAND_SCAN_SILENT_NODEV 0x00040000
198
199
200
201
202
203
204#define NAND_BUSWIDTH_AUTO 0x00080000
205
206
207
208
209#define NAND_USE_BOUNCE_BUFFER 0x00100000
210
211
212
213
214
215
216
217
218
219#define NAND_WAIT_TCCS 0x00200000
220
221
222
223#define NAND_CONTROLLER_ALLOC 0x80000000
224
225
226#define NAND_CI_CHIPNR_MSK 0x03
227#define NAND_CI_CELLTYPE_MSK 0x0C
228#define NAND_CI_CELLTYPE_SHIFT 2
229
230
231struct nand_chip;
232
233
234#define ONFI_FEATURE_16_BIT_BUS (1 << 0)
235#define ONFI_FEATURE_EXT_PARAM_PAGE (1 << 7)
236
237
238#define ONFI_TIMING_MODE_0 (1 << 0)
239#define ONFI_TIMING_MODE_1 (1 << 1)
240#define ONFI_TIMING_MODE_2 (1 << 2)
241#define ONFI_TIMING_MODE_3 (1 << 3)
242#define ONFI_TIMING_MODE_4 (1 << 4)
243#define ONFI_TIMING_MODE_5 (1 << 5)
244#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
245
246
247#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
248
249
250#define ONFI_FEATURE_ADDR_READ_RETRY 0x89
251#define ONFI_FEATURE_ON_DIE_ECC 0x90
252#define ONFI_FEATURE_ON_DIE_ECC_EN BIT(3)
253
254
255#define ONFI_SUBFEATURE_PARAM_LEN 4
256
257
258#define ONFI_OPT_CMD_SET_GET_FEATURES (1 << 2)
259
260struct nand_onfi_params {
261
262
263 u8 sig[4];
264 __le16 revision;
265 __le16 features;
266 __le16 opt_cmd;
267 u8 reserved0[2];
268 __le16 ext_param_page_length;
269 u8 num_of_param_pages;
270 u8 reserved1[17];
271
272
273 char manufacturer[12];
274 char model[20];
275 u8 jedec_id;
276 __le16 date_code;
277 u8 reserved2[13];
278
279
280 __le32 byte_per_page;
281 __le16 spare_bytes_per_page;
282 __le32 data_bytes_per_ppage;
283 __le16 spare_bytes_per_ppage;
284 __le32 pages_per_block;
285 __le32 blocks_per_lun;
286 u8 lun_count;
287 u8 addr_cycles;
288 u8 bits_per_cell;
289 __le16 bb_per_lun;
290 __le16 block_endurance;
291 u8 guaranteed_good_blocks;
292 __le16 guaranteed_block_endurance;
293 u8 programs_per_page;
294 u8 ppage_attr;
295 u8 ecc_bits;
296 u8 interleaved_bits;
297 u8 interleaved_ops;
298 u8 reserved3[13];
299
300
301 u8 io_pin_capacitance_max;
302 __le16 async_timing_mode;
303 __le16 program_cache_timing_mode;
304 __le16 t_prog;
305 __le16 t_bers;
306 __le16 t_r;
307 __le16 t_ccs;
308 __le16 src_sync_timing_mode;
309 u8 src_ssync_features;
310 __le16 clk_pin_capacitance_typ;
311 __le16 io_pin_capacitance_typ;
312 __le16 input_pin_capacitance_typ;
313 u8 input_pin_capacitance_max;
314 u8 driver_strength_support;
315 __le16 t_int_r;
316 __le16 t_adl;
317 u8 reserved4[8];
318
319
320 __le16 vendor_revision;
321 u8 vendor[88];
322
323 __le16 crc;
324} __packed;
325
326#define ONFI_CRC_BASE 0x4F4E
327
328
329struct onfi_ext_ecc_info {
330 u8 ecc_bits;
331 u8 codeword_size;
332 __le16 bb_per_lun;
333 __le16 block_endurance;
334 u8 reserved[2];
335} __packed;
336
337#define ONFI_SECTION_TYPE_0 0
338#define ONFI_SECTION_TYPE_1 1
339#define ONFI_SECTION_TYPE_2 2
340struct onfi_ext_section {
341 u8 type;
342 u8 length;
343} __packed;
344
345#define ONFI_EXT_SECTION_MAX 8
346
347
348struct onfi_ext_param_page {
349 __le16 crc;
350 u8 sig[4];
351 u8 reserved0[10];
352 struct onfi_ext_section sections[ONFI_EXT_SECTION_MAX];
353
354
355
356
357
358
359
360} __packed;
361
362struct jedec_ecc_info {
363 u8 ecc_bits;
364 u8 codeword_size;
365 __le16 bb_per_lun;
366 __le16 block_endurance;
367 u8 reserved[2];
368} __packed;
369
370
371#define JEDEC_FEATURE_16_BIT_BUS (1 << 0)
372
373struct nand_jedec_params {
374
375
376 u8 sig[4];
377 __le16 revision;
378 __le16 features;
379 u8 opt_cmd[3];
380 __le16 sec_cmd;
381 u8 num_of_param_pages;
382 u8 reserved0[18];
383
384
385 char manufacturer[12];
386 char model[20];
387 u8 jedec_id[6];
388 u8 reserved1[10];
389
390
391 __le32 byte_per_page;
392 __le16 spare_bytes_per_page;
393 u8 reserved2[6];
394 __le32 pages_per_block;
395 __le32 blocks_per_lun;
396 u8 lun_count;
397 u8 addr_cycles;
398 u8 bits_per_cell;
399 u8 programs_per_page;
400 u8 multi_plane_addr;
401 u8 multi_plane_op_attr;
402 u8 reserved3[38];
403
404
405 __le16 async_sdr_speed_grade;
406 __le16 toggle_ddr_speed_grade;
407 __le16 sync_ddr_speed_grade;
408 u8 async_sdr_features;
409 u8 toggle_ddr_features;
410 u8 sync_ddr_features;
411 __le16 t_prog;
412 __le16 t_bers;
413 __le16 t_r;
414 __le16 t_r_multi_plane;
415 __le16 t_ccs;
416 __le16 io_pin_capacitance_typ;
417 __le16 input_pin_capacitance_typ;
418 __le16 clk_pin_capacitance_typ;
419 u8 driver_strength_support;
420 __le16 t_adl;
421 u8 reserved4[36];
422
423
424 u8 guaranteed_good_blocks;
425 __le16 guaranteed_block_endurance;
426 struct jedec_ecc_info ecc_info[4];
427 u8 reserved5[29];
428
429
430 u8 reserved6[148];
431
432
433 __le16 vendor_rev_num;
434 u8 reserved7[88];
435
436
437 __le16 crc;
438} __packed;
439
440
441#define NAND_MAX_ID_LEN 8
442
443
444
445
446
447
448struct nand_id {
449 u8 data[NAND_MAX_ID_LEN];
450 int len;
451};
452
453
454
455
456
457
458
459
460
461struct nand_hw_control {
462 spinlock_t lock;
463 struct nand_chip *active;
464 wait_queue_head_t wq;
465};
466
467static inline void nand_hw_control_init(struct nand_hw_control *nfc)
468{
469 nfc->active = NULL;
470 spin_lock_init(&nfc->lock);
471 init_waitqueue_head(&nfc->wq);
472}
473
474
475
476
477
478
479
480struct nand_ecc_step_info {
481 int stepsize;
482 const int *strengths;
483 int nstrengths;
484};
485
486
487
488
489
490
491
492struct nand_ecc_caps {
493 const struct nand_ecc_step_info *stepinfos;
494 int nstepinfos;
495 int (*calc_ecc_bytes)(int step_size, int strength);
496};
497
498
499#define NAND_ECC_CAPS_SINGLE(__name, __calc, __step, ...) \
500static const int __name##_strengths[] = { __VA_ARGS__ }; \
501static const struct nand_ecc_step_info __name##_stepinfo = { \
502 .stepsize = __step, \
503 .strengths = __name##_strengths, \
504 .nstrengths = ARRAY_SIZE(__name##_strengths), \
505}; \
506static const struct nand_ecc_caps __name = { \
507 .stepinfos = &__name##_stepinfo, \
508 .nstepinfos = 1, \
509 .calc_ecc_bytes = __calc, \
510}
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
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
563struct nand_ecc_ctrl {
564 nand_ecc_modes_t mode;
565 enum nand_ecc_algo algo;
566 int steps;
567 int size;
568 int bytes;
569 int total;
570 int strength;
571 int prepad;
572 int postpad;
573 unsigned int options;
574 void *priv;
575 void (*hwctl)(struct mtd_info *mtd, int mode);
576 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
577 uint8_t *ecc_code);
578 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
579 uint8_t *calc_ecc);
580 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
581 uint8_t *buf, int oob_required, int page);
582 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
583 const uint8_t *buf, int oob_required, int page);
584 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
585 uint8_t *buf, int oob_required, int page);
586 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
587 uint32_t offs, uint32_t len, uint8_t *buf, int page);
588 int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
589 uint32_t offset, uint32_t data_len,
590 const uint8_t *data_buf, int oob_required, int page);
591 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
592 const uint8_t *buf, int oob_required, int page);
593 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
594 int page);
595 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
596 int page);
597 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
598 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
599 int page);
600};
601
602static inline int nand_standard_page_accessors(struct nand_ecc_ctrl *ecc)
603{
604 return !(ecc->options & NAND_ECC_CUSTOM_PAGE_ACCESS);
605}
606
607
608
609
610
611
612
613
614
615
616struct nand_buffers {
617 uint8_t *ecccalc;
618 uint8_t *ecccode;
619 uint8_t *databuf;
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
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673struct nand_sdr_timings {
674 u64 tBERS_max;
675 u32 tCCS_min;
676 u64 tPROG_max;
677 u64 tR_max;
678 u32 tALH_min;
679 u32 tADL_min;
680 u32 tALS_min;
681 u32 tAR_min;
682 u32 tCEA_max;
683 u32 tCEH_min;
684 u32 tCH_min;
685 u32 tCHZ_max;
686 u32 tCLH_min;
687 u32 tCLR_min;
688 u32 tCLS_min;
689 u32 tCOH_min;
690 u32 tCS_min;
691 u32 tDH_min;
692 u32 tDS_min;
693 u32 tFEAT_max;
694 u32 tIR_min;
695 u32 tITC_max;
696 u32 tRC_min;
697 u32 tREA_max;
698 u32 tREH_min;
699 u32 tRHOH_min;
700 u32 tRHW_min;
701 u32 tRHZ_max;
702 u32 tRLOH_min;
703 u32 tRP_min;
704 u32 tRR_min;
705 u64 tRST_max;
706 u32 tWB_max;
707 u32 tWC_min;
708 u32 tWH_min;
709 u32 tWHR_min;
710 u32 tWP_min;
711 u32 tWW_min;
712};
713
714
715
716
717
718enum nand_data_interface_type {
719 NAND_SDR_IFACE,
720};
721
722
723
724
725
726
727struct nand_data_interface {
728 enum nand_data_interface_type type;
729 union {
730 struct nand_sdr_timings sdr;
731 } timings;
732};
733
734
735
736
737
738static inline const struct nand_sdr_timings *
739nand_get_sdr_timings(const struct nand_data_interface *conf)
740{
741 if (conf->type != NAND_SDR_IFACE)
742 return ERR_PTR(-EINVAL);
743
744 return &conf->timings.sdr;
745}
746
747
748
749
750
751
752
753
754
755struct nand_manufacturer_ops {
756 void (*detect)(struct nand_chip *chip);
757 int (*init)(struct nand_chip *chip);
758 void (*cleanup)(struct nand_chip *chip);
759};
760
761
762
763
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
868struct nand_chip {
869 struct mtd_info mtd;
870 void __iomem *IO_ADDR_R;
871 void __iomem *IO_ADDR_W;
872
873 uint8_t (*read_byte)(struct mtd_info *mtd);
874 u16 (*read_word)(struct mtd_info *mtd);
875 void (*write_byte)(struct mtd_info *mtd, uint8_t byte);
876 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
877 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
878 void (*select_chip)(struct mtd_info *mtd, int chip);
879 int (*block_bad)(struct mtd_info *mtd, loff_t ofs);
880 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
881 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
882 int (*dev_ready)(struct mtd_info *mtd);
883 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
884 int page_addr);
885 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
886 int (*erase)(struct mtd_info *mtd, int page);
887 int (*scan_bbt)(struct mtd_info *mtd);
888 int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip,
889 int feature_addr, uint8_t *subfeature_para);
890 int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip,
891 int feature_addr, uint8_t *subfeature_para);
892 int (*setup_read_retry)(struct mtd_info *mtd, int retry_mode);
893 int (*setup_data_interface)(struct mtd_info *mtd, int chipnr,
894 const struct nand_data_interface *conf);
895
896
897 int chip_delay;
898 unsigned int options;
899 unsigned int bbt_options;
900
901 int page_shift;
902 int phys_erase_shift;
903 int bbt_erase_shift;
904 int chip_shift;
905 int numchips;
906 uint64_t chipsize;
907 int pagemask;
908 int pagebuf;
909 unsigned int pagebuf_bitflips;
910 int subpagesize;
911 uint8_t bits_per_cell;
912 uint16_t ecc_strength_ds;
913 uint16_t ecc_step_ds;
914 int onfi_timing_mode_default;
915 int badblockpos;
916 int badblockbits;
917
918 struct nand_id id;
919 int onfi_version;
920 int jedec_version;
921 union {
922 struct nand_onfi_params onfi_params;
923 struct nand_jedec_params jedec_params;
924 };
925 u16 max_bb_per_die;
926 u32 blocks_per_die;
927
928 struct nand_data_interface *data_interface;
929
930 int read_retries;
931
932 flstate_t state;
933
934 uint8_t *oob_poi;
935 struct nand_hw_control *controller;
936
937 struct nand_ecc_ctrl ecc;
938 struct nand_buffers *buffers;
939 unsigned long buf_align;
940 struct nand_hw_control hwcontrol;
941
942 uint8_t *bbt;
943 struct nand_bbt_descr *bbt_td;
944 struct nand_bbt_descr *bbt_md;
945
946 struct nand_bbt_descr *badblock_pattern;
947
948 void *priv;
949
950 struct {
951 const struct nand_manufacturer *desc;
952 void *priv;
953 } manufacturer;
954};
955
956extern const struct mtd_ooblayout_ops nand_ooblayout_sp_ops;
957extern const struct mtd_ooblayout_ops nand_ooblayout_lp_ops;
958
959static inline void nand_set_flash_node(struct nand_chip *chip,
960 struct device_node *np)
961{
962 mtd_set_of_node(&chip->mtd, np);
963}
964
965static inline struct device_node *nand_get_flash_node(struct nand_chip *chip)
966{
967 return mtd_get_of_node(&chip->mtd);
968}
969
970static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd)
971{
972 return container_of(mtd, struct nand_chip, mtd);
973}
974
975static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip)
976{
977 return &chip->mtd;
978}
979
980static inline void *nand_get_controller_data(struct nand_chip *chip)
981{
982 return chip->priv;
983}
984
985static inline void nand_set_controller_data(struct nand_chip *chip, void *priv)
986{
987 chip->priv = priv;
988}
989
990static inline void nand_set_manufacturer_data(struct nand_chip *chip,
991 void *priv)
992{
993 chip->manufacturer.priv = priv;
994}
995
996static inline void *nand_get_manufacturer_data(struct nand_chip *chip)
997{
998 return chip->manufacturer.priv;
999}
1000
1001
1002
1003
1004#define NAND_MFR_TOSHIBA 0x98
1005#define NAND_MFR_ESMT 0xc8
1006#define NAND_MFR_SAMSUNG 0xec
1007#define NAND_MFR_FUJITSU 0x04
1008#define NAND_MFR_NATIONAL 0x8f
1009#define NAND_MFR_RENESAS 0x07
1010#define NAND_MFR_STMICRO 0x20
1011#define NAND_MFR_HYNIX 0xad
1012#define NAND_MFR_MICRON 0x2c
1013#define NAND_MFR_AMD 0x01
1014#define NAND_MFR_MACRONIX 0xc2
1015#define NAND_MFR_EON 0x92
1016#define NAND_MFR_SANDISK 0x45
1017#define NAND_MFR_INTEL 0x89
1018#define NAND_MFR_ATO 0x9b
1019#define NAND_MFR_WINBOND 0xef
1020
1021
1022
1023
1024
1025
1026
1027#define LEGACY_ID_NAND(nm, devid, chipsz, erasesz, opts) \
1028 { .name = (nm), {{ .dev_id = (devid) }}, .pagesize = 512, \
1029 .chipsize = (chipsz), .erasesize = (erasesz), .options = (opts) }
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041#define EXTENDED_ID_NAND(nm, devid, chipsz, opts) \
1042 { .name = (nm), {{ .dev_id = (devid) }}, .chipsize = (chipsz), \
1043 .options = (opts) }
1044
1045#define NAND_ECC_INFO(_strength, _step) \
1046 { .strength_ds = (_strength), .step_ds = (_step) }
1047#define NAND_ECC_STRENGTH(type) ((type)->ecc.strength_ds)
1048#define NAND_ECC_STEP(type) ((type)->ecc.step_ds)
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079struct nand_flash_dev {
1080 char *name;
1081 union {
1082 struct {
1083 uint8_t mfr_id;
1084 uint8_t dev_id;
1085 };
1086 uint8_t id[NAND_MAX_ID_LEN];
1087 };
1088 unsigned int pagesize;
1089 unsigned int chipsize;
1090 unsigned int erasesize;
1091 unsigned int options;
1092 uint16_t id_len;
1093 uint16_t oobsize;
1094 struct {
1095 uint16_t strength_ds;
1096 uint16_t step_ds;
1097 } ecc;
1098 int onfi_timing_mode_default;
1099};
1100
1101
1102
1103
1104
1105
1106
1107struct nand_manufacturer {
1108 int id;
1109 char *name;
1110 const struct nand_manufacturer_ops *ops;
1111};
1112
1113const struct nand_manufacturer *nand_get_manufacturer(u8 id);
1114
1115static inline const char *
1116nand_manufacturer_name(const struct nand_manufacturer *manufacturer)
1117{
1118 return manufacturer ? manufacturer->name : "Unknown";
1119}
1120
1121extern struct nand_flash_dev nand_flash_ids[];
1122
1123extern const struct nand_manufacturer_ops toshiba_nand_manuf_ops;
1124extern const struct nand_manufacturer_ops samsung_nand_manuf_ops;
1125extern const struct nand_manufacturer_ops hynix_nand_manuf_ops;
1126extern const struct nand_manufacturer_ops micron_nand_manuf_ops;
1127extern const struct nand_manufacturer_ops amd_nand_manuf_ops;
1128extern const struct nand_manufacturer_ops macronix_nand_manuf_ops;
1129
1130int nand_default_bbt(struct mtd_info *mtd);
1131int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs);
1132int nand_isreserved_bbt(struct mtd_info *mtd, loff_t offs);
1133int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
1134int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
1135 int allowbbt);
1136int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
1137 size_t *retlen, uint8_t *buf);
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150struct platform_nand_chip {
1151 int nr_chips;
1152 int chip_offset;
1153 int nr_partitions;
1154 struct mtd_partition *partitions;
1155 int chip_delay;
1156 unsigned int options;
1157 unsigned int bbt_options;
1158 const char **part_probe_types;
1159};
1160
1161
1162struct platform_device;
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180struct platform_nand_ctrl {
1181 int (*probe)(struct platform_device *pdev);
1182 void (*remove)(struct platform_device *pdev);
1183 void (*hwcontrol)(struct mtd_info *mtd, int cmd);
1184 int (*dev_ready)(struct mtd_info *mtd);
1185 void (*select_chip)(struct mtd_info *mtd, int chip);
1186 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
1187 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
1188 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
1189 unsigned char (*read_byte)(struct mtd_info *mtd);
1190 void *priv;
1191};
1192
1193
1194
1195
1196
1197
1198struct platform_nand_data {
1199 struct platform_nand_chip chip;
1200 struct platform_nand_ctrl ctrl;
1201};
1202
1203
1204static inline int onfi_feature(struct nand_chip *chip)
1205{
1206 return chip->onfi_version ? le16_to_cpu(chip->onfi_params.features) : 0;
1207}
1208
1209
1210static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
1211{
1212 if (!chip->onfi_version)
1213 return ONFI_TIMING_MODE_UNKNOWN;
1214 return le16_to_cpu(chip->onfi_params.async_timing_mode);
1215}
1216
1217
1218static inline int onfi_get_sync_timing_mode(struct nand_chip *chip)
1219{
1220 if (!chip->onfi_version)
1221 return ONFI_TIMING_MODE_UNKNOWN;
1222 return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
1223}
1224
1225int onfi_init_data_interface(struct nand_chip *chip,
1226 struct nand_data_interface *iface,
1227 enum nand_data_interface_type type,
1228 int timing_mode);
1229
1230
1231
1232
1233
1234
1235static inline bool nand_is_slc(struct nand_chip *chip)
1236{
1237 WARN(chip->bits_per_cell == 0,
1238 "chip->bits_per_cell is used uninitialized\n");
1239 return chip->bits_per_cell == 1;
1240}
1241
1242
1243
1244
1245
1246static inline int nand_opcode_8bits(unsigned int command)
1247{
1248 switch (command) {
1249 case NAND_CMD_READID:
1250 case NAND_CMD_PARAM:
1251 case NAND_CMD_GET_FEATURES:
1252 case NAND_CMD_SET_FEATURES:
1253 return 1;
1254 default:
1255 break;
1256 }
1257 return 0;
1258}
1259
1260
1261static inline int jedec_feature(struct nand_chip *chip)
1262{
1263 return chip->jedec_version ? le16_to_cpu(chip->jedec_params.features)
1264 : 0;
1265}
1266
1267
1268const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode);
1269
1270const struct nand_data_interface *nand_get_default_data_interface(void);
1271
1272int nand_check_erased_ecc_chunk(void *data, int datalen,
1273 void *ecc, int ecclen,
1274 void *extraoob, int extraooblen,
1275 int threshold);
1276
1277int nand_check_ecc_caps(struct nand_chip *chip,
1278 const struct nand_ecc_caps *caps, int oobavail);
1279
1280int nand_match_ecc_req(struct nand_chip *chip,
1281 const struct nand_ecc_caps *caps, int oobavail);
1282
1283int nand_maximize_ecc(struct nand_chip *chip,
1284 const struct nand_ecc_caps *caps, int oobavail);
1285
1286
1287int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip, int page);
1288
1289
1290int nand_write_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1291 int page);
1292
1293
1294int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, int page);
1295
1296
1297int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1298 int page);
1299
1300
1301int nand_onfi_get_set_features_notsupp(struct mtd_info *mtd,
1302 struct nand_chip *chip, int addr,
1303 u8 *subfeature_param);
1304
1305
1306int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1307 uint8_t *buf, int oob_required, int page);
1308
1309
1310int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1311 const uint8_t *buf, int oob_required, int page);
1312
1313
1314int nand_reset(struct nand_chip *chip, int chipnr);
1315
1316
1317void nand_cleanup(struct nand_chip *chip);
1318
1319
1320void nand_decode_ext_id(struct nand_chip *chip);
1321#endif
1322