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