]> git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/mtd/nand/fsl_ifc_nand.c
driver/nand: Add support of 16K SRAM for IFC 2.0
[people/ms/u-boot.git] / drivers / mtd / nand / fsl_ifc_nand.c
1 /* Integrated Flash Controller NAND Machine Driver
2 *
3 * Copyright (c) 2012 Freescale Semiconductor, Inc
4 *
5 * Authors: Dipen Dudhat <Dipen.Dudhat@freescale.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0+
8 */
9
10 #include <common.h>
11 #include <malloc.h>
12 #include <nand.h>
13
14 #include <linux/mtd/mtd.h>
15 #include <linux/mtd/nand.h>
16 #include <linux/mtd/nand_ecc.h>
17
18 #include <asm/io.h>
19 #include <asm/errno.h>
20 #include <fsl_ifc.h>
21
22 #ifndef CONFIG_SYS_FSL_IFC_BANK_COUNT
23 #define CONFIG_SYS_FSL_IFC_BANK_COUNT 4
24 #endif
25
26 #define MAX_BANKS CONFIG_SYS_FSL_IFC_BANK_COUNT
27 #define ERR_BYTE 0xFF /* Value returned for read bytes
28 when read failed */
29 #define IFC_TIMEOUT_MSECS 10 /* Maximum number of mSecs to wait for IFC
30 NAND Machine */
31
32 struct fsl_ifc_ctrl;
33
34 /* mtd information per set */
35 struct fsl_ifc_mtd {
36 struct nand_chip chip;
37 struct fsl_ifc_ctrl *ctrl;
38
39 struct device *dev;
40 int bank; /* Chip select bank number */
41 unsigned int bufnum_mask; /* bufnum = page & bufnum_mask */
42 u8 __iomem *vbase; /* Chip select base virtual address */
43 };
44
45 /* overview of the fsl ifc controller */
46 struct fsl_ifc_ctrl {
47 struct nand_hw_control controller;
48 struct fsl_ifc_mtd *chips[MAX_BANKS];
49
50 /* device info */
51 struct fsl_ifc *regs;
52 uint8_t __iomem *addr; /* Address of assigned IFC buffer */
53 unsigned int cs_nand; /* On which chipsel NAND is connected */
54 unsigned int page; /* Last page written to / read from */
55 unsigned int read_bytes; /* Number of bytes read during command */
56 unsigned int column; /* Saved column from SEQIN */
57 unsigned int index; /* Pointer to next byte to 'read' */
58 unsigned int status; /* status read from NEESR after last op */
59 unsigned int oob; /* Non zero if operating on OOB data */
60 unsigned int eccread; /* Non zero for a full-page ECC read */
61 };
62
63 static struct fsl_ifc_ctrl *ifc_ctrl;
64
65 /* 512-byte page with 4-bit ECC, 8-bit */
66 static struct nand_ecclayout oob_512_8bit_ecc4 = {
67 .eccbytes = 8,
68 .eccpos = {8, 9, 10, 11, 12, 13, 14, 15},
69 .oobfree = { {0, 5}, {6, 2} },
70 };
71
72 /* 512-byte page with 4-bit ECC, 16-bit */
73 static struct nand_ecclayout oob_512_16bit_ecc4 = {
74 .eccbytes = 8,
75 .eccpos = {8, 9, 10, 11, 12, 13, 14, 15},
76 .oobfree = { {2, 6}, },
77 };
78
79 /* 2048-byte page size with 4-bit ECC */
80 static struct nand_ecclayout oob_2048_ecc4 = {
81 .eccbytes = 32,
82 .eccpos = {
83 8, 9, 10, 11, 12, 13, 14, 15,
84 16, 17, 18, 19, 20, 21, 22, 23,
85 24, 25, 26, 27, 28, 29, 30, 31,
86 32, 33, 34, 35, 36, 37, 38, 39,
87 },
88 .oobfree = { {2, 6}, {40, 24} },
89 };
90
91 /* 4096-byte page size with 4-bit ECC */
92 static struct nand_ecclayout oob_4096_ecc4 = {
93 .eccbytes = 64,
94 .eccpos = {
95 8, 9, 10, 11, 12, 13, 14, 15,
96 16, 17, 18, 19, 20, 21, 22, 23,
97 24, 25, 26, 27, 28, 29, 30, 31,
98 32, 33, 34, 35, 36, 37, 38, 39,
99 40, 41, 42, 43, 44, 45, 46, 47,
100 48, 49, 50, 51, 52, 53, 54, 55,
101 56, 57, 58, 59, 60, 61, 62, 63,
102 64, 65, 66, 67, 68, 69, 70, 71,
103 },
104 .oobfree = { {2, 6}, {72, 56} },
105 };
106
107 /* 4096-byte page size with 8-bit ECC -- requires 218-byte OOB */
108 static struct nand_ecclayout oob_4096_ecc8 = {
109 .eccbytes = 128,
110 .eccpos = {
111 8, 9, 10, 11, 12, 13, 14, 15,
112 16, 17, 18, 19, 20, 21, 22, 23,
113 24, 25, 26, 27, 28, 29, 30, 31,
114 32, 33, 34, 35, 36, 37, 38, 39,
115 40, 41, 42, 43, 44, 45, 46, 47,
116 48, 49, 50, 51, 52, 53, 54, 55,
117 56, 57, 58, 59, 60, 61, 62, 63,
118 64, 65, 66, 67, 68, 69, 70, 71,
119 72, 73, 74, 75, 76, 77, 78, 79,
120 80, 81, 82, 83, 84, 85, 86, 87,
121 88, 89, 90, 91, 92, 93, 94, 95,
122 96, 97, 98, 99, 100, 101, 102, 103,
123 104, 105, 106, 107, 108, 109, 110, 111,
124 112, 113, 114, 115, 116, 117, 118, 119,
125 120, 121, 122, 123, 124, 125, 126, 127,
126 128, 129, 130, 131, 132, 133, 134, 135,
127 },
128 .oobfree = { {2, 6}, {136, 82} },
129 };
130
131 /* 8192-byte page size with 4-bit ECC */
132 static struct nand_ecclayout oob_8192_ecc4 = {
133 .eccbytes = 128,
134 .eccpos = {
135 8, 9, 10, 11, 12, 13, 14, 15,
136 16, 17, 18, 19, 20, 21, 22, 23,
137 24, 25, 26, 27, 28, 29, 30, 31,
138 32, 33, 34, 35, 36, 37, 38, 39,
139 40, 41, 42, 43, 44, 45, 46, 47,
140 48, 49, 50, 51, 52, 53, 54, 55,
141 56, 57, 58, 59, 60, 61, 62, 63,
142 64, 65, 66, 67, 68, 69, 70, 71,
143 72, 73, 74, 75, 76, 77, 78, 79,
144 80, 81, 82, 83, 84, 85, 86, 87,
145 88, 89, 90, 91, 92, 93, 94, 95,
146 96, 97, 98, 99, 100, 101, 102, 103,
147 104, 105, 106, 107, 108, 109, 110, 111,
148 112, 113, 114, 115, 116, 117, 118, 119,
149 120, 121, 122, 123, 124, 125, 126, 127,
150 128, 129, 130, 131, 132, 133, 134, 135,
151 },
152 .oobfree = { {2, 6}, {136, 208} },
153 };
154
155 /* 8192-byte page size with 8-bit ECC -- requires 218-byte OOB */
156 static struct nand_ecclayout oob_8192_ecc8 = {
157 .eccbytes = 256,
158 .eccpos = {
159 8, 9, 10, 11, 12, 13, 14, 15,
160 16, 17, 18, 19, 20, 21, 22, 23,
161 24, 25, 26, 27, 28, 29, 30, 31,
162 32, 33, 34, 35, 36, 37, 38, 39,
163 40, 41, 42, 43, 44, 45, 46, 47,
164 48, 49, 50, 51, 52, 53, 54, 55,
165 56, 57, 58, 59, 60, 61, 62, 63,
166 64, 65, 66, 67, 68, 69, 70, 71,
167 72, 73, 74, 75, 76, 77, 78, 79,
168 80, 81, 82, 83, 84, 85, 86, 87,
169 88, 89, 90, 91, 92, 93, 94, 95,
170 96, 97, 98, 99, 100, 101, 102, 103,
171 104, 105, 106, 107, 108, 109, 110, 111,
172 112, 113, 114, 115, 116, 117, 118, 119,
173 120, 121, 122, 123, 124, 125, 126, 127,
174 128, 129, 130, 131, 132, 133, 134, 135,
175 136, 137, 138, 139, 140, 141, 142, 143,
176 144, 145, 146, 147, 148, 149, 150, 151,
177 152, 153, 154, 155, 156, 157, 158, 159,
178 160, 161, 162, 163, 164, 165, 166, 167,
179 168, 169, 170, 171, 172, 173, 174, 175,
180 176, 177, 178, 179, 180, 181, 182, 183,
181 184, 185, 186, 187, 188, 189, 190, 191,
182 192, 193, 194, 195, 196, 197, 198, 199,
183 200, 201, 202, 203, 204, 205, 206, 207,
184 208, 209, 210, 211, 212, 213, 214, 215,
185 216, 217, 218, 219, 220, 221, 222, 223,
186 224, 225, 226, 227, 228, 229, 230, 231,
187 232, 233, 234, 235, 236, 237, 238, 239,
188 240, 241, 242, 243, 244, 245, 246, 247,
189 248, 249, 250, 251, 252, 253, 254, 255,
190 256, 257, 258, 259, 260, 261, 262, 263,
191 },
192 .oobfree = { {2, 6}, {264, 80} },
193 };
194
195 /*
196 * Generic flash bbt descriptors
197 */
198 static u8 bbt_pattern[] = {'B', 'b', 't', '0' };
199 static u8 mirror_pattern[] = {'1', 't', 'b', 'B' };
200
201 static struct nand_bbt_descr bbt_main_descr = {
202 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
203 NAND_BBT_2BIT | NAND_BBT_VERSION,
204 .offs = 2, /* 0 on 8-bit small page */
205 .len = 4,
206 .veroffs = 6,
207 .maxblocks = 4,
208 .pattern = bbt_pattern,
209 };
210
211 static struct nand_bbt_descr bbt_mirror_descr = {
212 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
213 NAND_BBT_2BIT | NAND_BBT_VERSION,
214 .offs = 2, /* 0 on 8-bit small page */
215 .len = 4,
216 .veroffs = 6,
217 .maxblocks = 4,
218 .pattern = mirror_pattern,
219 };
220
221 /*
222 * Set up the IFC hardware block and page address fields, and the ifc nand
223 * structure addr field to point to the correct IFC buffer in memory
224 */
225 static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob)
226 {
227 struct nand_chip *chip = mtd->priv;
228 struct fsl_ifc_mtd *priv = chip->priv;
229 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
230 struct fsl_ifc *ifc = ctrl->regs;
231 int buf_num;
232
233 ctrl->page = page_addr;
234
235 /* Program ROW0/COL0 */
236 ifc_out32(&ifc->ifc_nand.row0, page_addr);
237 ifc_out32(&ifc->ifc_nand.col0, (oob ? IFC_NAND_COL_MS : 0) | column);
238
239 buf_num = page_addr & priv->bufnum_mask;
240
241 ctrl->addr = priv->vbase + buf_num * (mtd->writesize * 2);
242 ctrl->index = column;
243
244 /* for OOB data point to the second half of the buffer */
245 if (oob)
246 ctrl->index += mtd->writesize;
247 }
248
249 static int is_blank(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl,
250 unsigned int bufnum)
251 {
252 struct nand_chip *chip = mtd->priv;
253 struct fsl_ifc_mtd *priv = chip->priv;
254 u8 __iomem *addr = priv->vbase + bufnum * (mtd->writesize * 2);
255 u32 __iomem *main = (u32 *)addr;
256 u8 __iomem *oob = addr + mtd->writesize;
257 int i;
258
259 for (i = 0; i < mtd->writesize / 4; i++) {
260 if (__raw_readl(&main[i]) != 0xffffffff)
261 return 0;
262 }
263
264 for (i = 0; i < chip->ecc.layout->eccbytes; i++) {
265 int pos = chip->ecc.layout->eccpos[i];
266
267 if (__raw_readb(&oob[pos]) != 0xff)
268 return 0;
269 }
270
271 return 1;
272 }
273
274 /* returns nonzero if entire page is blank */
275 static int check_read_ecc(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl,
276 u32 *eccstat, unsigned int bufnum)
277 {
278 u32 reg = eccstat[bufnum / 4];
279 int errors;
280
281 errors = (reg >> ((3 - bufnum % 4) * 8)) & 15;
282
283 return errors;
284 }
285
286 /*
287 * execute IFC NAND command and wait for it to complete
288 */
289 static int fsl_ifc_run_command(struct mtd_info *mtd)
290 {
291 struct nand_chip *chip = mtd->priv;
292 struct fsl_ifc_mtd *priv = chip->priv;
293 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
294 struct fsl_ifc *ifc = ctrl->regs;
295 long long end_tick;
296 u32 eccstat[4];
297 int i;
298
299 /* set the chip select for NAND Transaction */
300 ifc_out32(&ifc->ifc_nand.nand_csel, ifc_ctrl->cs_nand);
301
302 /* start read/write seq */
303 ifc_out32(&ifc->ifc_nand.nandseq_strt,
304 IFC_NAND_SEQ_STRT_FIR_STRT);
305
306 /* wait for NAND Machine complete flag or timeout */
307 end_tick = usec2ticks(IFC_TIMEOUT_MSECS * 1000) + get_ticks();
308
309 while (end_tick > get_ticks()) {
310 ctrl->status = ifc_in32(&ifc->ifc_nand.nand_evter_stat);
311
312 if (ctrl->status & IFC_NAND_EVTER_STAT_OPC)
313 break;
314 }
315
316 ifc_out32(&ifc->ifc_nand.nand_evter_stat, ctrl->status);
317
318 if (ctrl->status & IFC_NAND_EVTER_STAT_FTOER)
319 printf("%s: Flash Time Out Error\n", __func__);
320 if (ctrl->status & IFC_NAND_EVTER_STAT_WPER)
321 printf("%s: Write Protect Error\n", __func__);
322
323 if (ctrl->eccread) {
324 int errors;
325 int bufnum = ctrl->page & priv->bufnum_mask;
326 int sector = bufnum * chip->ecc.steps;
327 int sector_end = sector + chip->ecc.steps - 1;
328
329 for (i = sector / 4; i <= sector_end / 4; i++)
330 eccstat[i] = ifc_in32(&ifc->ifc_nand.nand_eccstat[i]);
331
332 for (i = sector; i <= sector_end; i++) {
333 errors = check_read_ecc(mtd, ctrl, eccstat, i);
334
335 if (errors == 15) {
336 /*
337 * Uncorrectable error.
338 * OK only if the whole page is blank.
339 *
340 * We disable ECCER reporting due to erratum
341 * IFC-A002770 -- so report it now if we
342 * see an uncorrectable error in ECCSTAT.
343 */
344 if (!is_blank(mtd, ctrl, bufnum))
345 ctrl->status |=
346 IFC_NAND_EVTER_STAT_ECCER;
347 break;
348 }
349
350 mtd->ecc_stats.corrected += errors;
351 }
352
353 ctrl->eccread = 0;
354 }
355
356 /* returns 0 on success otherwise non-zero) */
357 return ctrl->status == IFC_NAND_EVTER_STAT_OPC ? 0 : -EIO;
358 }
359
360 static void fsl_ifc_do_read(struct nand_chip *chip,
361 int oob,
362 struct mtd_info *mtd)
363 {
364 struct fsl_ifc_mtd *priv = chip->priv;
365 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
366 struct fsl_ifc *ifc = ctrl->regs;
367
368 /* Program FIR/IFC_NAND_FCR0 for Small/Large page */
369 if (mtd->writesize > 512) {
370 ifc_out32(&ifc->ifc_nand.nand_fir0,
371 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
372 (IFC_FIR_OP_CA0 << IFC_NAND_FIR0_OP1_SHIFT) |
373 (IFC_FIR_OP_RA0 << IFC_NAND_FIR0_OP2_SHIFT) |
374 (IFC_FIR_OP_CMD1 << IFC_NAND_FIR0_OP3_SHIFT) |
375 (IFC_FIR_OP_RBCD << IFC_NAND_FIR0_OP4_SHIFT));
376 ifc_out32(&ifc->ifc_nand.nand_fir1, 0x0);
377
378 ifc_out32(&ifc->ifc_nand.nand_fcr0,
379 (NAND_CMD_READ0 << IFC_NAND_FCR0_CMD0_SHIFT) |
380 (NAND_CMD_READSTART << IFC_NAND_FCR0_CMD1_SHIFT));
381 } else {
382 ifc_out32(&ifc->ifc_nand.nand_fir0,
383 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
384 (IFC_FIR_OP_CA0 << IFC_NAND_FIR0_OP1_SHIFT) |
385 (IFC_FIR_OP_RA0 << IFC_NAND_FIR0_OP2_SHIFT) |
386 (IFC_FIR_OP_RBCD << IFC_NAND_FIR0_OP3_SHIFT));
387
388 if (oob)
389 ifc_out32(&ifc->ifc_nand.nand_fcr0,
390 NAND_CMD_READOOB << IFC_NAND_FCR0_CMD0_SHIFT);
391 else
392 ifc_out32(&ifc->ifc_nand.nand_fcr0,
393 NAND_CMD_READ0 << IFC_NAND_FCR0_CMD0_SHIFT);
394 }
395 }
396
397 /* cmdfunc send commands to the IFC NAND Machine */
398 static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command,
399 int column, int page_addr)
400 {
401 struct nand_chip *chip = mtd->priv;
402 struct fsl_ifc_mtd *priv = chip->priv;
403 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
404 struct fsl_ifc *ifc = ctrl->regs;
405
406 /* clear the read buffer */
407 ctrl->read_bytes = 0;
408 if (command != NAND_CMD_PAGEPROG)
409 ctrl->index = 0;
410
411 switch (command) {
412 /* READ0 read the entire buffer to use hardware ECC. */
413 case NAND_CMD_READ0: {
414 ifc_out32(&ifc->ifc_nand.nand_fbcr, 0);
415 set_addr(mtd, 0, page_addr, 0);
416
417 ctrl->read_bytes = mtd->writesize + mtd->oobsize;
418 ctrl->index += column;
419
420 if (chip->ecc.mode == NAND_ECC_HW)
421 ctrl->eccread = 1;
422
423 fsl_ifc_do_read(chip, 0, mtd);
424 fsl_ifc_run_command(mtd);
425 return;
426 }
427
428 /* READOOB reads only the OOB because no ECC is performed. */
429 case NAND_CMD_READOOB:
430 ifc_out32(&ifc->ifc_nand.nand_fbcr, mtd->oobsize - column);
431 set_addr(mtd, column, page_addr, 1);
432
433 ctrl->read_bytes = mtd->writesize + mtd->oobsize;
434
435 fsl_ifc_do_read(chip, 1, mtd);
436 fsl_ifc_run_command(mtd);
437
438 return;
439
440 /* READID must read all possible bytes while CEB is active */
441 case NAND_CMD_READID:
442 case NAND_CMD_PARAM: {
443 int timing = IFC_FIR_OP_RB;
444 if (command == NAND_CMD_PARAM)
445 timing = IFC_FIR_OP_RBCD;
446
447 ifc_out32(&ifc->ifc_nand.nand_fir0,
448 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
449 (IFC_FIR_OP_UA << IFC_NAND_FIR0_OP1_SHIFT) |
450 (timing << IFC_NAND_FIR0_OP2_SHIFT));
451 ifc_out32(&ifc->ifc_nand.nand_fcr0,
452 command << IFC_NAND_FCR0_CMD0_SHIFT);
453 ifc_out32(&ifc->ifc_nand.row3, column);
454
455 /*
456 * although currently it's 8 bytes for READID, we always read
457 * the maximum 256 bytes(for PARAM)
458 */
459 ifc_out32(&ifc->ifc_nand.nand_fbcr, 256);
460 ctrl->read_bytes = 256;
461
462 set_addr(mtd, 0, 0, 0);
463 fsl_ifc_run_command(mtd);
464 return;
465 }
466
467 /* ERASE1 stores the block and page address */
468 case NAND_CMD_ERASE1:
469 set_addr(mtd, 0, page_addr, 0);
470 return;
471
472 /* ERASE2 uses the block and page address from ERASE1 */
473 case NAND_CMD_ERASE2:
474 ifc_out32(&ifc->ifc_nand.nand_fir0,
475 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
476 (IFC_FIR_OP_RA0 << IFC_NAND_FIR0_OP1_SHIFT) |
477 (IFC_FIR_OP_CMD1 << IFC_NAND_FIR0_OP2_SHIFT));
478
479 ifc_out32(&ifc->ifc_nand.nand_fcr0,
480 (NAND_CMD_ERASE1 << IFC_NAND_FCR0_CMD0_SHIFT) |
481 (NAND_CMD_ERASE2 << IFC_NAND_FCR0_CMD1_SHIFT));
482
483 ifc_out32(&ifc->ifc_nand.nand_fbcr, 0);
484 ctrl->read_bytes = 0;
485 fsl_ifc_run_command(mtd);
486 return;
487
488 /* SEQIN sets up the addr buffer and all registers except the length */
489 case NAND_CMD_SEQIN: {
490 u32 nand_fcr0;
491 ctrl->column = column;
492 ctrl->oob = 0;
493
494 if (mtd->writesize > 512) {
495 nand_fcr0 =
496 (NAND_CMD_SEQIN << IFC_NAND_FCR0_CMD0_SHIFT) |
497 (NAND_CMD_STATUS << IFC_NAND_FCR0_CMD1_SHIFT) |
498 (NAND_CMD_PAGEPROG << IFC_NAND_FCR0_CMD2_SHIFT);
499
500 ifc_out32(&ifc->ifc_nand.nand_fir0,
501 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
502 (IFC_FIR_OP_CA0 << IFC_NAND_FIR0_OP1_SHIFT) |
503 (IFC_FIR_OP_RA0 << IFC_NAND_FIR0_OP2_SHIFT) |
504 (IFC_FIR_OP_WBCD <<
505 IFC_NAND_FIR0_OP3_SHIFT) |
506 (IFC_FIR_OP_CMD2 << IFC_NAND_FIR0_OP4_SHIFT));
507 ifc_out32(&ifc->ifc_nand.nand_fir1,
508 (IFC_FIR_OP_CW1 << IFC_NAND_FIR1_OP5_SHIFT) |
509 (IFC_FIR_OP_RDSTAT <<
510 IFC_NAND_FIR1_OP6_SHIFT) |
511 (IFC_FIR_OP_NOP << IFC_NAND_FIR1_OP7_SHIFT));
512 } else {
513 nand_fcr0 = ((NAND_CMD_PAGEPROG <<
514 IFC_NAND_FCR0_CMD1_SHIFT) |
515 (NAND_CMD_SEQIN <<
516 IFC_NAND_FCR0_CMD2_SHIFT) |
517 (NAND_CMD_STATUS <<
518 IFC_NAND_FCR0_CMD3_SHIFT));
519
520 ifc_out32(&ifc->ifc_nand.nand_fir0,
521 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
522 (IFC_FIR_OP_CMD2 << IFC_NAND_FIR0_OP1_SHIFT) |
523 (IFC_FIR_OP_CA0 << IFC_NAND_FIR0_OP2_SHIFT) |
524 (IFC_FIR_OP_RA0 << IFC_NAND_FIR0_OP3_SHIFT) |
525 (IFC_FIR_OP_WBCD << IFC_NAND_FIR0_OP4_SHIFT));
526 ifc_out32(&ifc->ifc_nand.nand_fir1,
527 (IFC_FIR_OP_CMD1 << IFC_NAND_FIR1_OP5_SHIFT) |
528 (IFC_FIR_OP_CW3 << IFC_NAND_FIR1_OP6_SHIFT) |
529 (IFC_FIR_OP_RDSTAT <<
530 IFC_NAND_FIR1_OP7_SHIFT) |
531 (IFC_FIR_OP_NOP << IFC_NAND_FIR1_OP8_SHIFT));
532
533 if (column >= mtd->writesize)
534 nand_fcr0 |=
535 NAND_CMD_READOOB << IFC_NAND_FCR0_CMD0_SHIFT;
536 else
537 nand_fcr0 |=
538 NAND_CMD_READ0 << IFC_NAND_FCR0_CMD0_SHIFT;
539 }
540
541 if (column >= mtd->writesize) {
542 /* OOB area --> READOOB */
543 column -= mtd->writesize;
544 ctrl->oob = 1;
545 }
546 ifc_out32(&ifc->ifc_nand.nand_fcr0, nand_fcr0);
547 set_addr(mtd, column, page_addr, ctrl->oob);
548 return;
549 }
550
551 /* PAGEPROG reuses all of the setup from SEQIN and adds the length */
552 case NAND_CMD_PAGEPROG:
553 if (ctrl->oob)
554 ifc_out32(&ifc->ifc_nand.nand_fbcr,
555 ctrl->index - ctrl->column);
556 else
557 ifc_out32(&ifc->ifc_nand.nand_fbcr, 0);
558
559 fsl_ifc_run_command(mtd);
560 return;
561
562 case NAND_CMD_STATUS:
563 ifc_out32(&ifc->ifc_nand.nand_fir0,
564 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
565 (IFC_FIR_OP_RB << IFC_NAND_FIR0_OP1_SHIFT));
566 ifc_out32(&ifc->ifc_nand.nand_fcr0,
567 NAND_CMD_STATUS << IFC_NAND_FCR0_CMD0_SHIFT);
568 ifc_out32(&ifc->ifc_nand.nand_fbcr, 1);
569 set_addr(mtd, 0, 0, 0);
570 ctrl->read_bytes = 1;
571
572 fsl_ifc_run_command(mtd);
573
574 /* Chip sometimes reporting write protect even when it's not */
575 out_8(ctrl->addr, in_8(ctrl->addr) | NAND_STATUS_WP);
576 return;
577
578 case NAND_CMD_RESET:
579 ifc_out32(&ifc->ifc_nand.nand_fir0,
580 IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT);
581 ifc_out32(&ifc->ifc_nand.nand_fcr0,
582 NAND_CMD_RESET << IFC_NAND_FCR0_CMD0_SHIFT);
583 fsl_ifc_run_command(mtd);
584 return;
585
586 default:
587 printf("%s: error, unsupported command 0x%x.\n",
588 __func__, command);
589 }
590 }
591
592 /*
593 * Write buf to the IFC NAND Controller Data Buffer
594 */
595 static void fsl_ifc_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
596 {
597 struct nand_chip *chip = mtd->priv;
598 struct fsl_ifc_mtd *priv = chip->priv;
599 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
600 unsigned int bufsize = mtd->writesize + mtd->oobsize;
601
602 if (len <= 0) {
603 printf("%s of %d bytes", __func__, len);
604 ctrl->status = 0;
605 return;
606 }
607
608 if ((unsigned int)len > bufsize - ctrl->index) {
609 printf("%s beyond end of buffer "
610 "(%d requested, %u available)\n",
611 __func__, len, bufsize - ctrl->index);
612 len = bufsize - ctrl->index;
613 }
614
615 memcpy_toio(&ctrl->addr[ctrl->index], buf, len);
616 ctrl->index += len;
617 }
618
619 /*
620 * read a byte from either the IFC hardware buffer if it has any data left
621 * otherwise issue a command to read a single byte.
622 */
623 static u8 fsl_ifc_read_byte(struct mtd_info *mtd)
624 {
625 struct nand_chip *chip = mtd->priv;
626 struct fsl_ifc_mtd *priv = chip->priv;
627 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
628
629 /* If there are still bytes in the IFC buffer, then use the
630 * next byte. */
631 if (ctrl->index < ctrl->read_bytes)
632 return in_8(&ctrl->addr[ctrl->index++]);
633
634 printf("%s beyond end of buffer\n", __func__);
635 return ERR_BYTE;
636 }
637
638 /*
639 * Read two bytes from the IFC hardware buffer
640 * read function for 16-bit buswith
641 */
642 static uint8_t fsl_ifc_read_byte16(struct mtd_info *mtd)
643 {
644 struct nand_chip *chip = mtd->priv;
645 struct fsl_ifc_mtd *priv = chip->priv;
646 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
647 uint16_t data;
648
649 /*
650 * If there are still bytes in the IFC buffer, then use the
651 * next byte.
652 */
653 if (ctrl->index < ctrl->read_bytes) {
654 data = ifc_in16((uint16_t *)&ctrl->
655 addr[ctrl->index]);
656 ctrl->index += 2;
657 return (uint8_t)data;
658 }
659
660 printf("%s beyond end of buffer\n", __func__);
661 return ERR_BYTE;
662 }
663
664 /*
665 * Read from the IFC Controller Data Buffer
666 */
667 static void fsl_ifc_read_buf(struct mtd_info *mtd, u8 *buf, int len)
668 {
669 struct nand_chip *chip = mtd->priv;
670 struct fsl_ifc_mtd *priv = chip->priv;
671 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
672 int avail;
673
674 if (len < 0)
675 return;
676
677 avail = min((unsigned int)len, ctrl->read_bytes - ctrl->index);
678 memcpy_fromio(buf, &ctrl->addr[ctrl->index], avail);
679 ctrl->index += avail;
680
681 if (len > avail)
682 printf("%s beyond end of buffer "
683 "(%d requested, %d available)\n",
684 __func__, len, avail);
685 }
686
687 /*
688 * Verify buffer against the IFC Controller Data Buffer
689 */
690 static int fsl_ifc_verify_buf(struct mtd_info *mtd,
691 const u_char *buf, int len)
692 {
693 struct nand_chip *chip = mtd->priv;
694 struct fsl_ifc_mtd *priv = chip->priv;
695 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
696 int i;
697
698 if (len < 0) {
699 printf("%s of %d bytes", __func__, len);
700 return -EINVAL;
701 }
702
703 if ((unsigned int)len > ctrl->read_bytes - ctrl->index) {
704 printf("%s beyond end of buffer "
705 "(%d requested, %u available)\n",
706 __func__, len, ctrl->read_bytes - ctrl->index);
707
708 ctrl->index = ctrl->read_bytes;
709 return -EINVAL;
710 }
711
712 for (i = 0; i < len; i++)
713 if (in_8(&ctrl->addr[ctrl->index + i]) != buf[i])
714 break;
715
716 ctrl->index += len;
717 return i == len && ctrl->status == IFC_NAND_EVTER_STAT_OPC ? 0 : -EIO;
718 }
719
720 /* This function is called after Program and Erase Operations to
721 * check for success or failure.
722 */
723 static int fsl_ifc_wait(struct mtd_info *mtd, struct nand_chip *chip)
724 {
725 struct fsl_ifc_mtd *priv = chip->priv;
726 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
727 struct fsl_ifc *ifc = ctrl->regs;
728 u32 nand_fsr;
729
730 if (ctrl->status != IFC_NAND_EVTER_STAT_OPC)
731 return NAND_STATUS_FAIL;
732
733 /* Use READ_STATUS command, but wait for the device to be ready */
734 ifc_out32(&ifc->ifc_nand.nand_fir0,
735 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
736 (IFC_FIR_OP_RDSTAT << IFC_NAND_FIR0_OP1_SHIFT));
737 ifc_out32(&ifc->ifc_nand.nand_fcr0, NAND_CMD_STATUS <<
738 IFC_NAND_FCR0_CMD0_SHIFT);
739 ifc_out32(&ifc->ifc_nand.nand_fbcr, 1);
740 set_addr(mtd, 0, 0, 0);
741 ctrl->read_bytes = 1;
742
743 fsl_ifc_run_command(mtd);
744
745 if (ctrl->status != IFC_NAND_EVTER_STAT_OPC)
746 return NAND_STATUS_FAIL;
747
748 nand_fsr = ifc_in32(&ifc->ifc_nand.nand_fsr);
749
750 /* Chip sometimes reporting write protect even when it's not */
751 nand_fsr = nand_fsr | NAND_STATUS_WP;
752 return nand_fsr;
753 }
754
755 static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
756 uint8_t *buf, int oob_required, int page)
757 {
758 struct fsl_ifc_mtd *priv = chip->priv;
759 struct fsl_ifc_ctrl *ctrl = priv->ctrl;
760
761 fsl_ifc_read_buf(mtd, buf, mtd->writesize);
762 fsl_ifc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
763
764 if (ctrl->status != IFC_NAND_EVTER_STAT_OPC)
765 mtd->ecc_stats.failed++;
766
767 return 0;
768 }
769
770 /* ECC will be calculated automatically, and errors will be detected in
771 * waitfunc.
772 */
773 static int fsl_ifc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
774 const uint8_t *buf, int oob_required)
775 {
776 fsl_ifc_write_buf(mtd, buf, mtd->writesize);
777 fsl_ifc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
778
779 return 0;
780 }
781
782 static void fsl_ifc_ctrl_init(void)
783 {
784 ifc_ctrl = kzalloc(sizeof(*ifc_ctrl), GFP_KERNEL);
785 if (!ifc_ctrl)
786 return;
787
788 ifc_ctrl->regs = IFC_BASE_ADDR;
789
790 /* clear event registers */
791 ifc_out32(&ifc_ctrl->regs->ifc_nand.nand_evter_stat, ~0U);
792 ifc_out32(&ifc_ctrl->regs->ifc_nand.pgrdcmpl_evt_stat, ~0U);
793
794 /* Enable error and event for any detected errors */
795 ifc_out32(&ifc_ctrl->regs->ifc_nand.nand_evter_en,
796 IFC_NAND_EVTER_EN_OPC_EN |
797 IFC_NAND_EVTER_EN_PGRDCMPL_EN |
798 IFC_NAND_EVTER_EN_FTOER_EN |
799 IFC_NAND_EVTER_EN_WPER_EN);
800
801 ifc_out32(&ifc_ctrl->regs->ifc_nand.ncfgr, 0x0);
802 }
803
804 static void fsl_ifc_select_chip(struct mtd_info *mtd, int chip)
805 {
806 }
807
808 static int fsl_ifc_sram_init(uint32_t ver)
809 {
810 struct fsl_ifc *ifc = ifc_ctrl->regs;
811 uint32_t cs = 0, csor = 0, csor_8k = 0, csor_ext = 0;
812 uint32_t ncfgr = 0;
813 long long end_tick;
814
815 if (ver > FSL_IFC_V1_1_0) {
816 ncfgr = ifc_in32(&ifc->ifc_nand.ncfgr);
817 ifc_out32(&ifc->ifc_nand.ncfgr, ncfgr | IFC_NAND_SRAM_INIT_EN);
818
819 /* wait for SRAM_INIT bit to be clear or timeout */
820 end_tick = usec2ticks(IFC_TIMEOUT_MSECS * 1000) + get_ticks();
821 while (end_tick > get_ticks()) {
822 ifc_ctrl->status =
823 ifc_in32(&ifc->ifc_nand.nand_evter_stat);
824
825 if (!(ifc_ctrl->status & IFC_NAND_SRAM_INIT_EN))
826 return 0;
827 }
828 printf("fsl-ifc: Failed to Initialise SRAM\n");
829 return 1;
830 }
831
832 cs = ifc_ctrl->cs_nand >> IFC_NAND_CSEL_SHIFT;
833
834 /* Save CSOR and CSOR_ext */
835 csor = ifc_in32(&ifc_ctrl->regs->csor_cs[cs].csor);
836 csor_ext = ifc_in32(&ifc_ctrl->regs->csor_cs[cs].csor_ext);
837
838 /* chage PageSize 8K and SpareSize 1K*/
839 csor_8k = (csor & ~(CSOR_NAND_PGS_MASK)) | 0x0018C000;
840 ifc_out32(&ifc_ctrl->regs->csor_cs[cs].csor, csor_8k);
841 ifc_out32(&ifc_ctrl->regs->csor_cs[cs].csor_ext, 0x0000400);
842
843 /* READID */
844 ifc_out32(&ifc->ifc_nand.nand_fir0,
845 (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
846 (IFC_FIR_OP_UA << IFC_NAND_FIR0_OP1_SHIFT) |
847 (IFC_FIR_OP_RB << IFC_NAND_FIR0_OP2_SHIFT));
848 ifc_out32(&ifc->ifc_nand.nand_fcr0,
849 NAND_CMD_READID << IFC_NAND_FCR0_CMD0_SHIFT);
850 ifc_out32(&ifc->ifc_nand.row3, 0x0);
851
852 ifc_out32(&ifc->ifc_nand.nand_fbcr, 0x0);
853
854 /* Program ROW0/COL0 */
855 ifc_out32(&ifc->ifc_nand.row0, 0x0);
856 ifc_out32(&ifc->ifc_nand.col0, 0x0);
857
858 /* set the chip select for NAND Transaction */
859 ifc_out32(&ifc->ifc_nand.nand_csel, ifc_ctrl->cs_nand);
860
861 /* start read seq */
862 ifc_out32(&ifc->ifc_nand.nandseq_strt, IFC_NAND_SEQ_STRT_FIR_STRT);
863
864 /* wait for NAND Machine complete flag or timeout */
865 end_tick = usec2ticks(IFC_TIMEOUT_MSECS * 1000) + get_ticks();
866
867 while (end_tick > get_ticks()) {
868 ifc_ctrl->status = ifc_in32(&ifc->ifc_nand.nand_evter_stat);
869
870 if (ifc_ctrl->status & IFC_NAND_EVTER_STAT_OPC)
871 break;
872 }
873
874 if (ifc_ctrl->status != IFC_NAND_EVTER_STAT_OPC) {
875 printf("fsl-ifc: Failed to Initialise SRAM\n");
876 return 1;
877 }
878
879 ifc_out32(&ifc->ifc_nand.nand_evter_stat, ifc_ctrl->status);
880
881 /* Restore CSOR and CSOR_ext */
882 ifc_out32(&ifc_ctrl->regs->csor_cs[cs].csor, csor);
883 ifc_out32(&ifc_ctrl->regs->csor_cs[cs].csor_ext, csor_ext);
884
885 return 0;
886 }
887
888 static int fsl_ifc_chip_init(int devnum, u8 *addr)
889 {
890 struct mtd_info *mtd = &nand_info[devnum];
891 struct nand_chip *nand;
892 struct fsl_ifc_mtd *priv;
893 struct nand_ecclayout *layout;
894 uint32_t cspr = 0, csor = 0, ver = 0;
895 int ret = 0;
896
897 if (!ifc_ctrl) {
898 fsl_ifc_ctrl_init();
899 if (!ifc_ctrl)
900 return -1;
901 }
902
903 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
904 if (!priv)
905 return -ENOMEM;
906
907 priv->ctrl = ifc_ctrl;
908 priv->vbase = addr;
909
910 /* Find which chip select it is connected to.
911 */
912 for (priv->bank = 0; priv->bank < MAX_BANKS; priv->bank++) {
913 phys_addr_t phys_addr = virt_to_phys(addr);
914
915 cspr = ifc_in32(&ifc_ctrl->regs->cspr_cs[priv->bank].cspr);
916 csor = ifc_in32(&ifc_ctrl->regs->csor_cs[priv->bank].csor);
917
918 if ((cspr & CSPR_V) && (cspr & CSPR_MSEL) == CSPR_MSEL_NAND &&
919 (cspr & CSPR_BA) == CSPR_PHYS_ADDR(phys_addr)) {
920 ifc_ctrl->cs_nand = priv->bank << IFC_NAND_CSEL_SHIFT;
921 break;
922 }
923 }
924
925 if (priv->bank >= MAX_BANKS) {
926 printf("%s: address did not match any "
927 "chip selects\n", __func__);
928 kfree(priv);
929 return -ENODEV;
930 }
931
932 nand = &priv->chip;
933 mtd->priv = nand;
934
935 ifc_ctrl->chips[priv->bank] = priv;
936
937 /* fill in nand_chip structure */
938 /* set up function call table */
939
940 nand->write_buf = fsl_ifc_write_buf;
941 nand->read_buf = fsl_ifc_read_buf;
942 nand->verify_buf = fsl_ifc_verify_buf;
943 nand->select_chip = fsl_ifc_select_chip;
944 nand->cmdfunc = fsl_ifc_cmdfunc;
945 nand->waitfunc = fsl_ifc_wait;
946
947 /* set up nand options */
948 nand->bbt_td = &bbt_main_descr;
949 nand->bbt_md = &bbt_mirror_descr;
950
951 /* set up nand options */
952 nand->options = NAND_NO_SUBPAGE_WRITE;
953 nand->bbt_options = NAND_BBT_USE_FLASH;
954
955 if (cspr & CSPR_PORT_SIZE_16) {
956 nand->read_byte = fsl_ifc_read_byte16;
957 nand->options |= NAND_BUSWIDTH_16;
958 } else {
959 nand->read_byte = fsl_ifc_read_byte;
960 }
961
962 nand->controller = &ifc_ctrl->controller;
963 nand->priv = priv;
964
965 nand->ecc.read_page = fsl_ifc_read_page;
966 nand->ecc.write_page = fsl_ifc_write_page;
967
968 /* Hardware generates ECC per 512 Bytes */
969 nand->ecc.size = 512;
970 nand->ecc.bytes = 8;
971
972 switch (csor & CSOR_NAND_PGS_MASK) {
973 case CSOR_NAND_PGS_512:
974 if (nand->options & NAND_BUSWIDTH_16) {
975 layout = &oob_512_16bit_ecc4;
976 } else {
977 layout = &oob_512_8bit_ecc4;
978
979 /* Avoid conflict with bad block marker */
980 bbt_main_descr.offs = 0;
981 bbt_mirror_descr.offs = 0;
982 }
983
984 nand->ecc.strength = 4;
985 priv->bufnum_mask = 15;
986 break;
987
988 case CSOR_NAND_PGS_2K:
989 layout = &oob_2048_ecc4;
990 nand->ecc.strength = 4;
991 priv->bufnum_mask = 3;
992 break;
993
994 case CSOR_NAND_PGS_4K:
995 if ((csor & CSOR_NAND_ECC_MODE_MASK) ==
996 CSOR_NAND_ECC_MODE_4) {
997 layout = &oob_4096_ecc4;
998 nand->ecc.strength = 4;
999 } else {
1000 layout = &oob_4096_ecc8;
1001 nand->ecc.strength = 8;
1002 nand->ecc.bytes = 16;
1003 }
1004
1005 priv->bufnum_mask = 1;
1006 break;
1007
1008 case CSOR_NAND_PGS_8K:
1009 if ((csor & CSOR_NAND_ECC_MODE_MASK) ==
1010 CSOR_NAND_ECC_MODE_4) {
1011 layout = &oob_8192_ecc4;
1012 nand->ecc.strength = 4;
1013 } else {
1014 layout = &oob_8192_ecc8;
1015 nand->ecc.strength = 8;
1016 nand->ecc.bytes = 16;
1017 }
1018
1019 priv->bufnum_mask = 0;
1020 break;
1021
1022
1023 default:
1024 printf("ifc nand: bad csor %#x: bad page size\n", csor);
1025 return -ENODEV;
1026 }
1027
1028 /* Must also set CSOR_NAND_ECC_ENC_EN if DEC_EN set */
1029 if (csor & CSOR_NAND_ECC_DEC_EN) {
1030 nand->ecc.mode = NAND_ECC_HW;
1031 nand->ecc.layout = layout;
1032 } else {
1033 nand->ecc.mode = NAND_ECC_SOFT;
1034 }
1035
1036 ver = ifc_in32(&ifc_ctrl->regs->ifc_rev);
1037 if (ver >= FSL_IFC_V1_1_0)
1038 ret = fsl_ifc_sram_init(ver);
1039 if (ret)
1040 return ret;
1041
1042 if (ver >= FSL_IFC_V2_0_0)
1043 priv->bufnum_mask = (priv->bufnum_mask * 2) + 1;
1044
1045 ret = nand_scan_ident(mtd, 1, NULL);
1046 if (ret)
1047 return ret;
1048
1049 ret = nand_scan_tail(mtd);
1050 if (ret)
1051 return ret;
1052
1053 ret = nand_register(devnum);
1054 if (ret)
1055 return ret;
1056 return 0;
1057 }
1058
1059 #ifndef CONFIG_SYS_NAND_BASE_LIST
1060 #define CONFIG_SYS_NAND_BASE_LIST { CONFIG_SYS_NAND_BASE }
1061 #endif
1062
1063 static unsigned long base_address[CONFIG_SYS_MAX_NAND_DEVICE] =
1064 CONFIG_SYS_NAND_BASE_LIST;
1065
1066 void board_nand_init(void)
1067 {
1068 int i;
1069
1070 for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
1071 fsl_ifc_chip_init(i, (u8 *)base_address[i]);
1072 }