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