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#include <linux/of.h>
25#include <linux/types.h>
26
27struct nand_flash_dev;
28
29
30int nand_scan_with_ids(struct mtd_info *mtd, int max_chips,
31 struct nand_flash_dev *ids);
32
33static inline int nand_scan(struct mtd_info *mtd, int max_chips)
34{
35 return nand_scan_with_ids(mtd, max_chips, NULL);
36}
37
38
39void nand_wait_ready(struct mtd_info *mtd);
40
41
42#define NAND_MAX_CHIPS 8
43
44
45
46
47
48
49
50
51#define NAND_NCE 0x01
52
53#define NAND_CLE 0x02
54
55#define NAND_ALE 0x04
56
57#define NAND_CTRL_CLE (NAND_NCE | NAND_CLE)
58#define NAND_CTRL_ALE (NAND_NCE | NAND_ALE)
59#define NAND_CTRL_CHANGE 0x80
60
61
62
63
64#define NAND_CMD_READ0 0
65#define NAND_CMD_READ1 1
66#define NAND_CMD_RNDOUT 5
67#define NAND_CMD_PAGEPROG 0x10
68#define NAND_CMD_READOOB 0x50
69#define NAND_CMD_ERASE1 0x60
70#define NAND_CMD_STATUS 0x70
71#define NAND_CMD_SEQIN 0x80
72#define NAND_CMD_RNDIN 0x85
73#define NAND_CMD_READID 0x90
74#define NAND_CMD_ERASE2 0xd0
75#define NAND_CMD_PARAM 0xec
76#define NAND_CMD_GET_FEATURES 0xee
77#define NAND_CMD_SET_FEATURES 0xef
78#define NAND_CMD_RESET 0xff
79
80
81#define NAND_CMD_READSTART 0x30
82#define NAND_CMD_RNDOUTSTART 0xE0
83#define NAND_CMD_CACHEDPROG 0x15
84
85#define NAND_CMD_NONE -1
86
87
88#define NAND_STATUS_FAIL 0x01
89#define NAND_STATUS_FAIL_N1 0x02
90#define NAND_STATUS_TRUE_READY 0x20
91#define NAND_STATUS_READY 0x40
92#define NAND_STATUS_WP 0x80
93
94#define NAND_DATA_IFACE_CHECK_ONLY -1
95
96
97
98
99typedef enum {
100 NAND_ECC_NONE,
101 NAND_ECC_SOFT,
102 NAND_ECC_HW,
103 NAND_ECC_HW_SYNDROME,
104 NAND_ECC_HW_OOB_FIRST,
105 NAND_ECC_ON_DIE,
106} nand_ecc_modes_t;
107
108enum nand_ecc_algo {
109 NAND_ECC_UNKNOWN,
110 NAND_ECC_HAMMING,
111 NAND_ECC_BCH,
112 NAND_ECC_RS,
113};
114
115
116
117
118
119#define NAND_ECC_READ 0
120
121#define NAND_ECC_WRITE 1
122
123#define NAND_ECC_READSYN 2
124
125
126
127
128
129
130
131#define NAND_ECC_GENERIC_ERASED_CHECK BIT(0)
132#define NAND_ECC_MAXIMIZE BIT(1)
133
134
135#define NAND_GET_DEVICE 0x80
136
137
138
139
140
141
142
143#define NAND_BUSWIDTH_16 0x00000002
144
145#define NAND_CACHEPRG 0x00000008
146
147
148
149
150
151#define NAND_NEED_READRDY 0x00000100
152
153
154#define NAND_NO_SUBPAGE_WRITE 0x00000200
155
156
157#define NAND_BROKEN_XD 0x00000400
158
159
160#define NAND_ROM 0x00000800
161
162
163#define NAND_SUBPAGE_READ 0x00001000
164
165
166
167
168
169#define NAND_NEED_SCRAMBLING 0x00002000
170
171
172#define NAND_ROW_ADDR_3 0x00004000
173
174
175#define NAND_SAMSUNG_LP_OPTIONS NAND_CACHEPRG
176
177
178#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
179#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
180#define NAND_HAS_SUBPAGE_WRITE(chip) !((chip)->options & NAND_NO_SUBPAGE_WRITE)
181
182
183
184#define NAND_SKIP_BBTSCAN 0x00010000
185
186#define NAND_SCAN_SILENT_NODEV 0x00040000
187
188
189
190
191
192
193#define NAND_BUSWIDTH_AUTO 0x00080000
194
195
196
197
198#define NAND_USE_BOUNCE_BUFFER 0x00100000
199
200
201
202
203
204
205
206
207
208#define NAND_WAIT_TCCS 0x00200000
209
210
211
212
213
214#define NAND_IS_BOOT_MEDIUM 0x00400000
215
216
217
218#define NAND_CONTROLLER_ALLOC 0x80000000
219
220
221#define NAND_CI_CHIPNR_MSK 0x03
222#define NAND_CI_CELLTYPE_MSK 0x0C
223#define NAND_CI_CELLTYPE_SHIFT 2
224
225
226struct nand_chip;
227
228
229#define ONFI_VERSION_1_0 BIT(1)
230#define ONFI_VERSION_2_0 BIT(2)
231#define ONFI_VERSION_2_1 BIT(3)
232#define ONFI_VERSION_2_2 BIT(4)
233#define ONFI_VERSION_2_3 BIT(5)
234#define ONFI_VERSION_3_0 BIT(6)
235#define ONFI_VERSION_3_1 BIT(7)
236#define ONFI_VERSION_3_2 BIT(8)
237#define ONFI_VERSION_4_0 BIT(9)
238
239
240#define ONFI_FEATURE_16_BIT_BUS (1 << 0)
241#define ONFI_FEATURE_EXT_PARAM_PAGE (1 << 7)
242
243
244#define ONFI_TIMING_MODE_0 (1 << 0)
245#define ONFI_TIMING_MODE_1 (1 << 1)
246#define ONFI_TIMING_MODE_2 (1 << 2)
247#define ONFI_TIMING_MODE_3 (1 << 3)
248#define ONFI_TIMING_MODE_4 (1 << 4)
249#define ONFI_TIMING_MODE_5 (1 << 5)
250#define ONFI_TIMING_MODE_UNKNOWN (1 << 6)
251
252
253#define ONFI_FEATURE_NUMBER 256
254#define ONFI_FEATURE_ADDR_TIMING_MODE 0x1
255
256
257#define ONFI_FEATURE_ADDR_READ_RETRY 0x89
258#define ONFI_FEATURE_ON_DIE_ECC 0x90
259#define ONFI_FEATURE_ON_DIE_ECC_EN BIT(3)
260
261
262#define ONFI_SUBFEATURE_PARAM_LEN 4
263
264
265#define ONFI_OPT_CMD_SET_GET_FEATURES (1 << 2)
266
267struct nand_onfi_params {
268
269
270 u8 sig[4];
271 __le16 revision;
272 __le16 features;
273 __le16 opt_cmd;
274 u8 reserved0[2];
275 __le16 ext_param_page_length;
276 u8 num_of_param_pages;
277 u8 reserved1[17];
278
279
280 char manufacturer[12];
281 char model[20];
282 u8 jedec_id;
283 __le16 date_code;
284 u8 reserved2[13];
285
286
287 __le32 byte_per_page;
288 __le16 spare_bytes_per_page;
289 __le32 data_bytes_per_ppage;
290 __le16 spare_bytes_per_ppage;
291 __le32 pages_per_block;
292 __le32 blocks_per_lun;
293 u8 lun_count;
294 u8 addr_cycles;
295 u8 bits_per_cell;
296 __le16 bb_per_lun;
297 __le16 block_endurance;
298 u8 guaranteed_good_blocks;
299 __le16 guaranteed_block_endurance;
300 u8 programs_per_page;
301 u8 ppage_attr;
302 u8 ecc_bits;
303 u8 interleaved_bits;
304 u8 interleaved_ops;
305 u8 reserved3[13];
306
307
308 u8 io_pin_capacitance_max;
309 __le16 async_timing_mode;
310 __le16 program_cache_timing_mode;
311 __le16 t_prog;
312 __le16 t_bers;
313 __le16 t_r;
314 __le16 t_ccs;
315 __le16 src_sync_timing_mode;
316 u8 src_ssync_features;
317 __le16 clk_pin_capacitance_typ;
318 __le16 io_pin_capacitance_typ;
319 __le16 input_pin_capacitance_typ;
320 u8 input_pin_capacitance_max;
321 u8 driver_strength_support;
322 __le16 t_int_r;
323 __le16 t_adl;
324 u8 reserved4[8];
325
326
327 __le16 vendor_revision;
328 u8 vendor[88];
329
330 __le16 crc;
331} __packed;
332
333#define ONFI_CRC_BASE 0x4F4E
334
335
336struct onfi_ext_ecc_info {
337 u8 ecc_bits;
338 u8 codeword_size;
339 __le16 bb_per_lun;
340 __le16 block_endurance;
341 u8 reserved[2];
342} __packed;
343
344#define ONFI_SECTION_TYPE_0 0
345#define ONFI_SECTION_TYPE_1 1
346#define ONFI_SECTION_TYPE_2 2
347struct onfi_ext_section {
348 u8 type;
349 u8 length;
350} __packed;
351
352#define ONFI_EXT_SECTION_MAX 8
353
354
355struct onfi_ext_param_page {
356 __le16 crc;
357 u8 sig[4];
358 u8 reserved0[10];
359 struct onfi_ext_section sections[ONFI_EXT_SECTION_MAX];
360
361
362
363
364
365
366
367} __packed;
368
369struct jedec_ecc_info {
370 u8 ecc_bits;
371 u8 codeword_size;
372 __le16 bb_per_lun;
373 __le16 block_endurance;
374 u8 reserved[2];
375} __packed;
376
377
378#define JEDEC_FEATURE_16_BIT_BUS (1 << 0)
379
380struct nand_jedec_params {
381
382
383 u8 sig[4];
384 __le16 revision;
385 __le16 features;
386 u8 opt_cmd[3];
387 __le16 sec_cmd;
388 u8 num_of_param_pages;
389 u8 reserved0[18];
390
391
392 char manufacturer[12];
393 char model[20];
394 u8 jedec_id[6];
395 u8 reserved1[10];
396
397
398 __le32 byte_per_page;
399 __le16 spare_bytes_per_page;
400 u8 reserved2[6];
401 __le32 pages_per_block;
402 __le32 blocks_per_lun;
403 u8 lun_count;
404 u8 addr_cycles;
405 u8 bits_per_cell;
406 u8 programs_per_page;
407 u8 multi_plane_addr;
408 u8 multi_plane_op_attr;
409 u8 reserved3[38];
410
411
412 __le16 async_sdr_speed_grade;
413 __le16 toggle_ddr_speed_grade;
414 __le16 sync_ddr_speed_grade;
415 u8 async_sdr_features;
416 u8 toggle_ddr_features;
417 u8 sync_ddr_features;
418 __le16 t_prog;
419 __le16 t_bers;
420 __le16 t_r;
421 __le16 t_r_multi_plane;
422 __le16 t_ccs;
423 __le16 io_pin_capacitance_typ;
424 __le16 input_pin_capacitance_typ;
425 __le16 clk_pin_capacitance_typ;
426 u8 driver_strength_support;
427 __le16 t_adl;
428 u8 reserved4[36];
429
430
431 u8 guaranteed_good_blocks;
432 __le16 guaranteed_block_endurance;
433 struct jedec_ecc_info ecc_info[4];
434 u8 reserved5[29];
435
436
437 u8 reserved6[148];
438
439
440 __le16 vendor_rev_num;
441 u8 reserved7[88];
442
443
444 __le16 crc;
445} __packed;
446
447
448
449
450
451
452
453
454
455
456
457
458struct onfi_params {
459 int version;
460 u16 tPROG;
461 u16 tBERS;
462 u16 tR;
463 u16 tCCS;
464 u16 async_timing_mode;
465 u16 vendor_revision;
466 u8 vendor[88];
467};
468
469
470
471
472
473
474
475
476
477struct nand_parameters {
478
479 const char *model;
480 bool supports_set_get_features;
481 DECLARE_BITMAP(set_feature_list, ONFI_FEATURE_NUMBER);
482 DECLARE_BITMAP(get_feature_list, ONFI_FEATURE_NUMBER);
483
484
485 struct onfi_params *onfi;
486};
487
488
489#define NAND_MAX_ID_LEN 8
490
491
492
493
494
495
496struct nand_id {
497 u8 data[NAND_MAX_ID_LEN];
498 int len;
499};
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515struct nand_controller_ops {
516 int (*attach_chip)(struct nand_chip *chip);
517 void (*detach_chip)(struct nand_chip *chip);
518};
519
520
521
522
523
524
525
526
527
528
529
530struct nand_controller {
531 spinlock_t lock;
532 struct nand_chip *active;
533 wait_queue_head_t wq;
534 const struct nand_controller_ops *ops;
535};
536
537static inline void nand_controller_init(struct nand_controller *nfc)
538{
539 nfc->active = NULL;
540 spin_lock_init(&nfc->lock);
541 init_waitqueue_head(&nfc->wq);
542}
543
544
545
546
547
548
549
550struct nand_ecc_step_info {
551 int stepsize;
552 const int *strengths;
553 int nstrengths;
554};
555
556
557
558
559
560
561
562struct nand_ecc_caps {
563 const struct nand_ecc_step_info *stepinfos;
564 int nstepinfos;
565 int (*calc_ecc_bytes)(int step_size, int strength);
566};
567
568
569#define NAND_ECC_CAPS_SINGLE(__name, __calc, __step, ...) \
570static const int __name##_strengths[] = { __VA_ARGS__ }; \
571static const struct nand_ecc_step_info __name##_stepinfo = { \
572 .stepsize = __step, \
573 .strengths = __name##_strengths, \
574 .nstrengths = ARRAY_SIZE(__name##_strengths), \
575}; \
576static const struct nand_ecc_caps __name = { \
577 .stepinfos = &__name##_stepinfo, \
578 .nstepinfos = 1, \
579 .calc_ecc_bytes = __calc, \
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
635struct nand_ecc_ctrl {
636 nand_ecc_modes_t mode;
637 enum nand_ecc_algo algo;
638 int steps;
639 int size;
640 int bytes;
641 int total;
642 int strength;
643 int prepad;
644 int postpad;
645 unsigned int options;
646 void *priv;
647 u8 *calc_buf;
648 u8 *code_buf;
649 void (*hwctl)(struct mtd_info *mtd, int mode);
650 int (*calculate)(struct mtd_info *mtd, const uint8_t *dat,
651 uint8_t *ecc_code);
652 int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
653 uint8_t *calc_ecc);
654 int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
655 uint8_t *buf, int oob_required, int page);
656 int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
657 const uint8_t *buf, int oob_required, int page);
658 int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
659 uint8_t *buf, int oob_required, int page);
660 int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
661 uint32_t offs, uint32_t len, uint8_t *buf, int page);
662 int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
663 uint32_t offset, uint32_t data_len,
664 const uint8_t *data_buf, int oob_required, int page);
665 int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
666 const uint8_t *buf, int oob_required, int page);
667 int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
668 int page);
669 int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
670 int page);
671 int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
672 int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
673 int page);
674};
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727struct nand_sdr_timings {
728 u64 tBERS_max;
729 u32 tCCS_min;
730 u64 tPROG_max;
731 u64 tR_max;
732 u32 tALH_min;
733 u32 tADL_min;
734 u32 tALS_min;
735 u32 tAR_min;
736 u32 tCEA_max;
737 u32 tCEH_min;
738 u32 tCH_min;
739 u32 tCHZ_max;
740 u32 tCLH_min;
741 u32 tCLR_min;
742 u32 tCLS_min;
743 u32 tCOH_min;
744 u32 tCS_min;
745 u32 tDH_min;
746 u32 tDS_min;
747 u32 tFEAT_max;
748 u32 tIR_min;
749 u32 tITC_max;
750 u32 tRC_min;
751 u32 tREA_max;
752 u32 tREH_min;
753 u32 tRHOH_min;
754 u32 tRHW_min;
755 u32 tRHZ_max;
756 u32 tRLOH_min;
757 u32 tRP_min;
758 u32 tRR_min;
759 u64 tRST_max;
760 u32 tWB_max;
761 u32 tWC_min;
762 u32 tWH_min;
763 u32 tWHR_min;
764 u32 tWP_min;
765 u32 tWW_min;
766};
767
768
769
770
771
772enum nand_data_interface_type {
773 NAND_SDR_IFACE,
774};
775
776
777
778
779
780
781
782struct nand_data_interface {
783 enum nand_data_interface_type type;
784 union {
785 struct nand_sdr_timings sdr;
786 } timings;
787};
788
789
790
791
792
793static inline const struct nand_sdr_timings *
794nand_get_sdr_timings(const struct nand_data_interface *conf)
795{
796 if (conf->type != NAND_SDR_IFACE)
797 return ERR_PTR(-EINVAL);
798
799 return &conf->timings.sdr;
800}
801
802
803
804
805
806
807
808
809
810
811
812struct nand_manufacturer_ops {
813 void (*detect)(struct nand_chip *chip);
814 int (*init)(struct nand_chip *chip);
815 void (*cleanup)(struct nand_chip *chip);
816 void (*fixup_onfi_param_page)(struct nand_chip *chip,
817 struct nand_onfi_params *p);
818};
819
820
821
822
823
824struct nand_op_cmd_instr {
825 u8 opcode;
826};
827
828
829
830
831
832
833struct nand_op_addr_instr {
834 unsigned int naddrs;
835 const u8 *addrs;
836};
837
838
839
840
841
842
843
844
845
846
847
848
849
850struct nand_op_data_instr {
851 unsigned int len;
852 union {
853 void *in;
854 const void *out;
855 } buf;
856 bool force_8bit;
857};
858
859
860
861
862
863struct nand_op_waitrdy_instr {
864 unsigned int timeout_ms;
865};
866
867
868
869
870
871
872
873
874
875enum nand_op_instr_type {
876 NAND_OP_CMD_INSTR,
877 NAND_OP_ADDR_INSTR,
878 NAND_OP_DATA_IN_INSTR,
879 NAND_OP_DATA_OUT_INSTR,
880 NAND_OP_WAITRDY_INSTR,
881};
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898struct nand_op_instr {
899 enum nand_op_instr_type type;
900 union {
901 struct nand_op_cmd_instr cmd;
902 struct nand_op_addr_instr addr;
903 struct nand_op_data_instr data;
904 struct nand_op_waitrdy_instr waitrdy;
905 } ctx;
906 unsigned int delay_ns;
907};
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922#define __DIVIDE(dividend, divisor) ({ \
923 (__typeof__(dividend))(sizeof(dividend) <= sizeof(unsigned long) ? \
924 DIV_ROUND_UP(dividend, divisor) : \
925 DIV_ROUND_UP_ULL(dividend, divisor)); \
926 })
927#define PSEC_TO_NSEC(x) __DIVIDE(x, 1000)
928#define PSEC_TO_MSEC(x) __DIVIDE(x, 1000000000)
929
930#define NAND_OP_CMD(id, ns) \
931 { \
932 .type = NAND_OP_CMD_INSTR, \
933 .ctx.cmd.opcode = id, \
934 .delay_ns = ns, \
935 }
936
937#define NAND_OP_ADDR(ncycles, cycles, ns) \
938 { \
939 .type = NAND_OP_ADDR_INSTR, \
940 .ctx.addr = { \
941 .naddrs = ncycles, \
942 .addrs = cycles, \
943 }, \
944 .delay_ns = ns, \
945 }
946
947#define NAND_OP_DATA_IN(l, b, ns) \
948 { \
949 .type = NAND_OP_DATA_IN_INSTR, \
950 .ctx.data = { \
951 .len = l, \
952 .buf.in = b, \
953 .force_8bit = false, \
954 }, \
955 .delay_ns = ns, \
956 }
957
958#define NAND_OP_DATA_OUT(l, b, ns) \
959 { \
960 .type = NAND_OP_DATA_OUT_INSTR, \
961 .ctx.data = { \
962 .len = l, \
963 .buf.out = b, \
964 .force_8bit = false, \
965 }, \
966 .delay_ns = ns, \
967 }
968
969#define NAND_OP_8BIT_DATA_IN(l, b, ns) \
970 { \
971 .type = NAND_OP_DATA_IN_INSTR, \
972 .ctx.data = { \
973 .len = l, \
974 .buf.in = b, \
975 .force_8bit = true, \
976 }, \
977 .delay_ns = ns, \
978 }
979
980#define NAND_OP_8BIT_DATA_OUT(l, b, ns) \
981 { \
982 .type = NAND_OP_DATA_OUT_INSTR, \
983 .ctx.data = { \
984 .len = l, \
985 .buf.out = b, \
986 .force_8bit = true, \
987 }, \
988 .delay_ns = ns, \
989 }
990
991#define NAND_OP_WAIT_RDY(tout_ms, ns) \
992 { \
993 .type = NAND_OP_WAITRDY_INSTR, \
994 .ctx.waitrdy.timeout_ms = tout_ms, \
995 .delay_ns = ns, \
996 }
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014struct nand_subop {
1015 const struct nand_op_instr *instrs;
1016 unsigned int ninstrs;
1017 unsigned int first_instr_start_off;
1018 unsigned int last_instr_end_off;
1019};
1020
1021unsigned int nand_subop_get_addr_start_off(const struct nand_subop *subop,
1022 unsigned int op_id);
1023unsigned int nand_subop_get_num_addr_cyc(const struct nand_subop *subop,
1024 unsigned int op_id);
1025unsigned int nand_subop_get_data_start_off(const struct nand_subop *subop,
1026 unsigned int op_id);
1027unsigned int nand_subop_get_data_len(const struct nand_subop *subop,
1028 unsigned int op_id);
1029
1030
1031
1032
1033
1034
1035struct nand_op_parser_addr_constraints {
1036 unsigned int maxcycles;
1037};
1038
1039
1040
1041
1042
1043struct nand_op_parser_data_constraints {
1044 unsigned int maxlen;
1045};
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055struct nand_op_parser_pattern_elem {
1056 enum nand_op_instr_type type;
1057 bool optional;
1058 union {
1059 struct nand_op_parser_addr_constraints addr;
1060 struct nand_op_parser_data_constraints data;
1061 } ctx;
1062};
1063
1064#define NAND_OP_PARSER_PAT_CMD_ELEM(_opt) \
1065 { \
1066 .type = NAND_OP_CMD_INSTR, \
1067 .optional = _opt, \
1068 }
1069
1070#define NAND_OP_PARSER_PAT_ADDR_ELEM(_opt, _maxcycles) \
1071 { \
1072 .type = NAND_OP_ADDR_INSTR, \
1073 .optional = _opt, \
1074 .ctx.addr.maxcycles = _maxcycles, \
1075 }
1076
1077#define NAND_OP_PARSER_PAT_DATA_IN_ELEM(_opt, _maxlen) \
1078 { \
1079 .type = NAND_OP_DATA_IN_INSTR, \
1080 .optional = _opt, \
1081 .ctx.data.maxlen = _maxlen, \
1082 }
1083
1084#define NAND_OP_PARSER_PAT_DATA_OUT_ELEM(_opt, _maxlen) \
1085 { \
1086 .type = NAND_OP_DATA_OUT_INSTR, \
1087 .optional = _opt, \
1088 .ctx.data.maxlen = _maxlen, \
1089 }
1090
1091#define NAND_OP_PARSER_PAT_WAITRDY_ELEM(_opt) \
1092 { \
1093 .type = NAND_OP_WAITRDY_INSTR, \
1094 .optional = _opt, \
1095 }
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115struct nand_op_parser_pattern {
1116 const struct nand_op_parser_pattern_elem *elems;
1117 unsigned int nelems;
1118 int (*exec)(struct nand_chip *chip, const struct nand_subop *subop);
1119};
1120
1121#define NAND_OP_PARSER_PATTERN(_exec, ...) \
1122 { \
1123 .exec = _exec, \
1124 .elems = (struct nand_op_parser_pattern_elem[]) { __VA_ARGS__ }, \
1125 .nelems = sizeof((struct nand_op_parser_pattern_elem[]) { __VA_ARGS__ }) / \
1126 sizeof(struct nand_op_parser_pattern_elem), \
1127 }
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143struct nand_op_parser {
1144 const struct nand_op_parser_pattern *patterns;
1145 unsigned int npatterns;
1146};
1147
1148#define NAND_OP_PARSER(...) \
1149 { \
1150 .patterns = (struct nand_op_parser_pattern[]) { __VA_ARGS__ }, \
1151 .npatterns = sizeof((struct nand_op_parser_pattern[]) { __VA_ARGS__ }) / \
1152 sizeof(struct nand_op_parser_pattern), \
1153 }
1154
1155
1156
1157
1158
1159
1160
1161
1162struct nand_operation {
1163 const struct nand_op_instr *instrs;
1164 unsigned int ninstrs;
1165};
1166
1167#define NAND_OPERATION(_instrs) \
1168 { \
1169 .instrs = _instrs, \
1170 .ninstrs = ARRAY_SIZE(_instrs), \
1171 }
1172
1173int nand_op_parser_exec_op(struct nand_chip *chip,
1174 const struct nand_op_parser *parser,
1175 const struct nand_operation *op, bool check_only);
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284struct nand_chip {
1285 struct mtd_info mtd;
1286 void __iomem *IO_ADDR_R;
1287 void __iomem *IO_ADDR_W;
1288
1289 uint8_t (*read_byte)(struct mtd_info *mtd);
1290 u16 (*read_word)(struct mtd_info *mtd);
1291 void (*write_byte)(struct mtd_info *mtd, uint8_t byte);
1292 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
1293 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
1294 void (*select_chip)(struct mtd_info *mtd, int chip);
1295 int (*block_bad)(struct mtd_info *mtd, loff_t ofs);
1296 int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
1297 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
1298 int (*dev_ready)(struct mtd_info *mtd);
1299 void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column,
1300 int page_addr);
1301 int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this);
1302 int (*exec_op)(struct nand_chip *chip,
1303 const struct nand_operation *op,
1304 bool check_only);
1305 int (*erase)(struct mtd_info *mtd, int page);
1306 int (*set_features)(struct mtd_info *mtd, struct nand_chip *chip,
1307 int feature_addr, uint8_t *subfeature_para);
1308 int (*get_features)(struct mtd_info *mtd, struct nand_chip *chip,
1309 int feature_addr, uint8_t *subfeature_para);
1310 int (*setup_read_retry)(struct mtd_info *mtd, int retry_mode);
1311 int (*setup_data_interface)(struct mtd_info *mtd, int chipnr,
1312 const struct nand_data_interface *conf);
1313
1314 int chip_delay;
1315 unsigned int options;
1316 unsigned int bbt_options;
1317
1318 int page_shift;
1319 int phys_erase_shift;
1320 int bbt_erase_shift;
1321 int chip_shift;
1322 int numchips;
1323 uint64_t chipsize;
1324 int pagemask;
1325 u8 *data_buf;
1326 int pagebuf;
1327 unsigned int pagebuf_bitflips;
1328 int subpagesize;
1329 uint8_t bits_per_cell;
1330 uint16_t ecc_strength_ds;
1331 uint16_t ecc_step_ds;
1332 int onfi_timing_mode_default;
1333 int badblockpos;
1334 int badblockbits;
1335
1336 struct nand_id id;
1337 struct nand_parameters parameters;
1338 u16 max_bb_per_die;
1339 u32 blocks_per_die;
1340
1341 struct nand_data_interface data_interface;
1342
1343 int read_retries;
1344
1345 flstate_t state;
1346
1347 uint8_t *oob_poi;
1348 struct nand_controller *controller;
1349
1350 struct nand_ecc_ctrl ecc;
1351 unsigned long buf_align;
1352 struct nand_controller dummy_controller;
1353
1354 uint8_t *bbt;
1355 struct nand_bbt_descr *bbt_td;
1356 struct nand_bbt_descr *bbt_md;
1357
1358 struct nand_bbt_descr *badblock_pattern;
1359
1360 void *priv;
1361
1362 struct {
1363 const struct nand_manufacturer *desc;
1364 void *priv;
1365 } manufacturer;
1366};
1367
1368static inline int nand_exec_op(struct nand_chip *chip,
1369 const struct nand_operation *op)
1370{
1371 if (!chip->exec_op)
1372 return -ENOTSUPP;
1373
1374 return chip->exec_op(chip, op, false);
1375}
1376
1377extern const struct mtd_ooblayout_ops nand_ooblayout_sp_ops;
1378extern const struct mtd_ooblayout_ops nand_ooblayout_lp_ops;
1379
1380static inline void nand_set_flash_node(struct nand_chip *chip,
1381 struct device_node *np)
1382{
1383 mtd_set_of_node(&chip->mtd, np);
1384}
1385
1386static inline struct device_node *nand_get_flash_node(struct nand_chip *chip)
1387{
1388 return mtd_get_of_node(&chip->mtd);
1389}
1390
1391static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd)
1392{
1393 return container_of(mtd, struct nand_chip, mtd);
1394}
1395
1396static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip)
1397{
1398 return &chip->mtd;
1399}
1400
1401static inline void *nand_get_controller_data(struct nand_chip *chip)
1402{
1403 return chip->priv;
1404}
1405
1406static inline void nand_set_controller_data(struct nand_chip *chip, void *priv)
1407{
1408 chip->priv = priv;
1409}
1410
1411static inline void nand_set_manufacturer_data(struct nand_chip *chip,
1412 void *priv)
1413{
1414 chip->manufacturer.priv = priv;
1415}
1416
1417static inline void *nand_get_manufacturer_data(struct nand_chip *chip)
1418{
1419 return chip->manufacturer.priv;
1420}
1421
1422
1423
1424
1425#define NAND_MFR_TOSHIBA 0x98
1426#define NAND_MFR_ESMT 0xc8
1427#define NAND_MFR_SAMSUNG 0xec
1428#define NAND_MFR_FUJITSU 0x04
1429#define NAND_MFR_NATIONAL 0x8f
1430#define NAND_MFR_RENESAS 0x07
1431#define NAND_MFR_STMICRO 0x20
1432#define NAND_MFR_HYNIX 0xad
1433#define NAND_MFR_MICRON 0x2c
1434#define NAND_MFR_AMD 0x01
1435#define NAND_MFR_MACRONIX 0xc2
1436#define NAND_MFR_EON 0x92
1437#define NAND_MFR_SANDISK 0x45
1438#define NAND_MFR_INTEL 0x89
1439#define NAND_MFR_ATO 0x9b
1440#define NAND_MFR_WINBOND 0xef
1441
1442
1443
1444
1445
1446
1447
1448#define LEGACY_ID_NAND(nm, devid, chipsz, erasesz, opts) \
1449 { .name = (nm), {{ .dev_id = (devid) }}, .pagesize = 512, \
1450 .chipsize = (chipsz), .erasesize = (erasesz), .options = (opts) }
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462#define EXTENDED_ID_NAND(nm, devid, chipsz, opts) \
1463 { .name = (nm), {{ .dev_id = (devid) }}, .chipsize = (chipsz), \
1464 .options = (opts) }
1465
1466#define NAND_ECC_INFO(_strength, _step) \
1467 { .strength_ds = (_strength), .step_ds = (_step) }
1468#define NAND_ECC_STRENGTH(type) ((type)->ecc.strength_ds)
1469#define NAND_ECC_STEP(type) ((type)->ecc.step_ds)
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500struct nand_flash_dev {
1501 char *name;
1502 union {
1503 struct {
1504 uint8_t mfr_id;
1505 uint8_t dev_id;
1506 };
1507 uint8_t id[NAND_MAX_ID_LEN];
1508 };
1509 unsigned int pagesize;
1510 unsigned int chipsize;
1511 unsigned int erasesize;
1512 unsigned int options;
1513 uint16_t id_len;
1514 uint16_t oobsize;
1515 struct {
1516 uint16_t strength_ds;
1517 uint16_t step_ds;
1518 } ecc;
1519 int onfi_timing_mode_default;
1520};
1521
1522
1523
1524
1525
1526
1527
1528struct nand_manufacturer {
1529 int id;
1530 char *name;
1531 const struct nand_manufacturer_ops *ops;
1532};
1533
1534const struct nand_manufacturer *nand_get_manufacturer(u8 id);
1535
1536static inline const char *
1537nand_manufacturer_name(const struct nand_manufacturer *manufacturer)
1538{
1539 return manufacturer ? manufacturer->name : "Unknown";
1540}
1541
1542extern struct nand_flash_dev nand_flash_ids[];
1543
1544extern const struct nand_manufacturer_ops toshiba_nand_manuf_ops;
1545extern const struct nand_manufacturer_ops samsung_nand_manuf_ops;
1546extern const struct nand_manufacturer_ops hynix_nand_manuf_ops;
1547extern const struct nand_manufacturer_ops micron_nand_manuf_ops;
1548extern const struct nand_manufacturer_ops amd_nand_manuf_ops;
1549extern const struct nand_manufacturer_ops macronix_nand_manuf_ops;
1550
1551int nand_create_bbt(struct nand_chip *chip);
1552int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs);
1553int nand_isreserved_bbt(struct mtd_info *mtd, loff_t offs);
1554int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt);
1555int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
1556 int allowbbt);
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569struct platform_nand_chip {
1570 int nr_chips;
1571 int chip_offset;
1572 int nr_partitions;
1573 struct mtd_partition *partitions;
1574 int chip_delay;
1575 unsigned int options;
1576 unsigned int bbt_options;
1577 const char **part_probe_types;
1578};
1579
1580
1581struct platform_device;
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597struct platform_nand_ctrl {
1598 int (*probe)(struct platform_device *pdev);
1599 void (*remove)(struct platform_device *pdev);
1600 int (*dev_ready)(struct mtd_info *mtd);
1601 void (*select_chip)(struct mtd_info *mtd, int chip);
1602 void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl);
1603 void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
1604 void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len);
1605 void *priv;
1606};
1607
1608
1609
1610
1611
1612
1613struct platform_nand_data {
1614 struct platform_nand_chip chip;
1615 struct platform_nand_ctrl ctrl;
1616};
1617
1618
1619static inline int onfi_get_async_timing_mode(struct nand_chip *chip)
1620{
1621 if (!chip->parameters.onfi)
1622 return ONFI_TIMING_MODE_UNKNOWN;
1623
1624 return chip->parameters.onfi->async_timing_mode;
1625}
1626
1627int onfi_fill_data_interface(struct nand_chip *chip,
1628 enum nand_data_interface_type type,
1629 int timing_mode);
1630
1631
1632
1633
1634
1635
1636static inline bool nand_is_slc(struct nand_chip *chip)
1637{
1638 WARN(chip->bits_per_cell == 0,
1639 "chip->bits_per_cell is used uninitialized\n");
1640 return chip->bits_per_cell == 1;
1641}
1642
1643
1644
1645
1646
1647static inline int nand_opcode_8bits(unsigned int command)
1648{
1649 switch (command) {
1650 case NAND_CMD_READID:
1651 case NAND_CMD_PARAM:
1652 case NAND_CMD_GET_FEATURES:
1653 case NAND_CMD_SET_FEATURES:
1654 return 1;
1655 default:
1656 break;
1657 }
1658 return 0;
1659}
1660
1661
1662const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode);
1663
1664int nand_check_erased_ecc_chunk(void *data, int datalen,
1665 void *ecc, int ecclen,
1666 void *extraoob, int extraooblen,
1667 int threshold);
1668
1669int nand_ecc_choose_conf(struct nand_chip *chip,
1670 const struct nand_ecc_caps *caps, int oobavail);
1671
1672
1673int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip, int page);
1674
1675
1676int nand_write_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1677 int page);
1678
1679
1680int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, int page);
1681
1682
1683int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1684 int page);
1685
1686
1687int nand_get_features(struct nand_chip *chip, int addr, u8 *subfeature_param);
1688int nand_set_features(struct nand_chip *chip, int addr, u8 *subfeature_param);
1689
1690int nand_get_set_features_notsupp(struct mtd_info *mtd, struct nand_chip *chip,
1691 int addr, u8 *subfeature_param);
1692
1693
1694int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1695 uint8_t *buf, int oob_required, int page);
1696int nand_read_page_raw_notsupp(struct mtd_info *mtd, struct nand_chip *chip,
1697 u8 *buf, int oob_required, int page);
1698
1699
1700int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1701 const uint8_t *buf, int oob_required, int page);
1702int nand_write_page_raw_notsupp(struct mtd_info *mtd, struct nand_chip *chip,
1703 const u8 *buf, int oob_required, int page);
1704
1705
1706int nand_reset(struct nand_chip *chip, int chipnr);
1707
1708
1709int nand_reset_op(struct nand_chip *chip);
1710int nand_readid_op(struct nand_chip *chip, u8 addr, void *buf,
1711 unsigned int len);
1712int nand_status_op(struct nand_chip *chip, u8 *status);
1713int nand_exit_status_op(struct nand_chip *chip);
1714int nand_erase_op(struct nand_chip *chip, unsigned int eraseblock);
1715int nand_read_page_op(struct nand_chip *chip, unsigned int page,
1716 unsigned int offset_in_page, void *buf, unsigned int len);
1717int nand_change_read_column_op(struct nand_chip *chip,
1718 unsigned int offset_in_page, void *buf,
1719 unsigned int len, bool force_8bit);
1720int nand_read_oob_op(struct nand_chip *chip, unsigned int page,
1721 unsigned int offset_in_page, void *buf, unsigned int len);
1722int nand_prog_page_begin_op(struct nand_chip *chip, unsigned int page,
1723 unsigned int offset_in_page, const void *buf,
1724 unsigned int len);
1725int nand_prog_page_end_op(struct nand_chip *chip);
1726int nand_prog_page_op(struct nand_chip *chip, unsigned int page,
1727 unsigned int offset_in_page, const void *buf,
1728 unsigned int len);
1729int nand_change_write_column_op(struct nand_chip *chip,
1730 unsigned int offset_in_page, const void *buf,
1731 unsigned int len, bool force_8bit);
1732int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len,
1733 bool force_8bit);
1734int nand_write_data_op(struct nand_chip *chip, const void *buf,
1735 unsigned int len, bool force_8bit);
1736
1737
1738
1739
1740
1741void nand_cleanup(struct nand_chip *chip);
1742
1743void nand_release(struct mtd_info *mtd);
1744
1745
1746void nand_decode_ext_id(struct nand_chip *chip);
1747
1748
1749
1750
1751
1752int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms);
1753
1754#endif
1755