2 * Freescale Integrated Flash Controller NAND driver
4 * Copyright 2011-2012 Freescale Semiconductor, Inc
6 * Author: Dipen Dudhat <Dipen.Dudhat@freescale.com>
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.
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.
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
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>
34 #define ERR_BYTE 0xFF /* Value returned for read
35 bytes when read failed */
36 #define IFC_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait
37 for IFC NAND Machine */
41 /* mtd information per set */
43 struct nand_chip chip
;
44 struct fsl_ifc_ctrl
*ctrl
;
47 int bank
; /* Chip select bank number */
48 unsigned int bufnum_mask
; /* bufnum = page & bufnum_mask */
49 u8 __iomem
*vbase
; /* Chip select base virtual address */
52 /* overview of the fsl ifc controller */
53 struct fsl_ifc_nand_ctrl
{
54 struct nand_hw_control controller
;
55 struct fsl_ifc_mtd
*chips
[FSL_IFC_BANK_COUNT
];
57 void __iomem
*addr
; /* Address of assigned IFC buffer */
58 unsigned int page
; /* Last page written to / read from */
59 unsigned int read_bytes
;/* Number of bytes read during command */
60 unsigned int column
; /* Saved column from SEQIN */
61 unsigned int index
; /* Pointer to next byte to 'read' */
62 unsigned int oob
; /* Non zero if operating on OOB data */
63 unsigned int eccread
; /* Non zero for a full-page ECC read */
64 unsigned int counter
; /* counter for the initializations */
65 unsigned int max_bitflips
; /* Saved during READ0 cmd */
68 static struct fsl_ifc_nand_ctrl
*ifc_nand_ctrl
;
70 /* 512-byte page with 4-bit ECC, 8-bit */
71 static struct nand_ecclayout oob_512_8bit_ecc4
= {
73 .eccpos
= {8, 9, 10, 11, 12, 13, 14, 15},
74 .oobfree
= { {0, 5}, {6, 2} },
77 /* 512-byte page with 4-bit ECC, 16-bit */
78 static struct nand_ecclayout oob_512_16bit_ecc4
= {
80 .eccpos
= {8, 9, 10, 11, 12, 13, 14, 15},
81 .oobfree
= { {2, 6}, },
84 /* 2048-byte page size with 4-bit ECC */
85 static struct nand_ecclayout oob_2048_ecc4
= {
88 8, 9, 10, 11, 12, 13, 14, 15,
89 16, 17, 18, 19, 20, 21, 22, 23,
90 24, 25, 26, 27, 28, 29, 30, 31,
91 32, 33, 34, 35, 36, 37, 38, 39,
93 .oobfree
= { {2, 6}, {40, 24} },
96 /* 4096-byte page size with 4-bit ECC */
97 static struct nand_ecclayout oob_4096_ecc4
= {
100 8, 9, 10, 11, 12, 13, 14, 15,
101 16, 17, 18, 19, 20, 21, 22, 23,
102 24, 25, 26, 27, 28, 29, 30, 31,
103 32, 33, 34, 35, 36, 37, 38, 39,
104 40, 41, 42, 43, 44, 45, 46, 47,
105 48, 49, 50, 51, 52, 53, 54, 55,
106 56, 57, 58, 59, 60, 61, 62, 63,
107 64, 65, 66, 67, 68, 69, 70, 71,
109 .oobfree
= { {2, 6}, {72, 56} },
112 /* 4096-byte page size with 8-bit ECC -- requires 218-byte OOB */
113 static struct nand_ecclayout oob_4096_ecc8
= {
116 8, 9, 10, 11, 12, 13, 14, 15,
117 16, 17, 18, 19, 20, 21, 22, 23,
118 24, 25, 26, 27, 28, 29, 30, 31,
119 32, 33, 34, 35, 36, 37, 38, 39,
120 40, 41, 42, 43, 44, 45, 46, 47,
121 48, 49, 50, 51, 52, 53, 54, 55,
122 56, 57, 58, 59, 60, 61, 62, 63,
123 64, 65, 66, 67, 68, 69, 70, 71,
124 72, 73, 74, 75, 76, 77, 78, 79,
125 80, 81, 82, 83, 84, 85, 86, 87,
126 88, 89, 90, 91, 92, 93, 94, 95,
127 96, 97, 98, 99, 100, 101, 102, 103,
128 104, 105, 106, 107, 108, 109, 110, 111,
129 112, 113, 114, 115, 116, 117, 118, 119,
130 120, 121, 122, 123, 124, 125, 126, 127,
131 128, 129, 130, 131, 132, 133, 134, 135,
133 .oobfree
= { {2, 6}, {136, 82} },
136 /* 8192-byte page size with 4-bit ECC */
137 static struct nand_ecclayout oob_8192_ecc4
= {
140 8, 9, 10, 11, 12, 13, 14, 15,
141 16, 17, 18, 19, 20, 21, 22, 23,
142 24, 25, 26, 27, 28, 29, 30, 31,
143 32, 33, 34, 35, 36, 37, 38, 39,
144 40, 41, 42, 43, 44, 45, 46, 47,
145 48, 49, 50, 51, 52, 53, 54, 55,
146 56, 57, 58, 59, 60, 61, 62, 63,
147 64, 65, 66, 67, 68, 69, 70, 71,
148 72, 73, 74, 75, 76, 77, 78, 79,
149 80, 81, 82, 83, 84, 85, 86, 87,
150 88, 89, 90, 91, 92, 93, 94, 95,
151 96, 97, 98, 99, 100, 101, 102, 103,
152 104, 105, 106, 107, 108, 109, 110, 111,
153 112, 113, 114, 115, 116, 117, 118, 119,
154 120, 121, 122, 123, 124, 125, 126, 127,
155 128, 129, 130, 131, 132, 133, 134, 135,
157 .oobfree
= { {2, 6}, {136, 208} },
160 /* 8192-byte page size with 8-bit ECC -- requires 218-byte OOB */
161 static struct nand_ecclayout oob_8192_ecc8
= {
164 8, 9, 10, 11, 12, 13, 14, 15,
165 16, 17, 18, 19, 20, 21, 22, 23,
166 24, 25, 26, 27, 28, 29, 30, 31,
167 32, 33, 34, 35, 36, 37, 38, 39,
168 40, 41, 42, 43, 44, 45, 46, 47,
169 48, 49, 50, 51, 52, 53, 54, 55,
170 56, 57, 58, 59, 60, 61, 62, 63,
171 64, 65, 66, 67, 68, 69, 70, 71,
172 72, 73, 74, 75, 76, 77, 78, 79,
173 80, 81, 82, 83, 84, 85, 86, 87,
174 88, 89, 90, 91, 92, 93, 94, 95,
175 96, 97, 98, 99, 100, 101, 102, 103,
176 104, 105, 106, 107, 108, 109, 110, 111,
177 112, 113, 114, 115, 116, 117, 118, 119,
178 120, 121, 122, 123, 124, 125, 126, 127,
179 128, 129, 130, 131, 132, 133, 134, 135,
180 136, 137, 138, 139, 140, 141, 142, 143,
181 144, 145, 146, 147, 148, 149, 150, 151,
182 152, 153, 154, 155, 156, 157, 158, 159,
183 160, 161, 162, 163, 164, 165, 166, 167,
184 168, 169, 170, 171, 172, 173, 174, 175,
185 176, 177, 178, 179, 180, 181, 182, 183,
186 184, 185, 186, 187, 188, 189, 190, 191,
187 192, 193, 194, 195, 196, 197, 198, 199,
188 200, 201, 202, 203, 204, 205, 206, 207,
189 208, 209, 210, 211, 212, 213, 214, 215,
190 216, 217, 218, 219, 220, 221, 222, 223,
191 224, 225, 226, 227, 228, 229, 230, 231,
192 232, 233, 234, 235, 236, 237, 238, 239,
193 240, 241, 242, 243, 244, 245, 246, 247,
194 248, 249, 250, 251, 252, 253, 254, 255,
195 256, 257, 258, 259, 260, 261, 262, 263,
197 .oobfree
= { {2, 6}, {264, 80} },
201 * Generic flash bbt descriptors
203 static u8 bbt_pattern
[] = {'B', 'b', 't', '0' };
204 static u8 mirror_pattern
[] = {'1', 't', 'b', 'B' };
206 static struct nand_bbt_descr bbt_main_descr
= {
207 .options
= NAND_BBT_LASTBLOCK
| NAND_BBT_CREATE
| NAND_BBT_WRITE
|
208 NAND_BBT_2BIT
| NAND_BBT_VERSION
,
209 .offs
= 2, /* 0 on 8-bit small page */
213 .pattern
= bbt_pattern
,
216 static struct nand_bbt_descr bbt_mirror_descr
= {
217 .options
= NAND_BBT_LASTBLOCK
| NAND_BBT_CREATE
| NAND_BBT_WRITE
|
218 NAND_BBT_2BIT
| NAND_BBT_VERSION
,
219 .offs
= 2, /* 0 on 8-bit small page */
223 .pattern
= mirror_pattern
,
227 * Set up the IFC hardware block and page address fields, and the ifc nand
228 * structure addr field to point to the correct IFC buffer in memory
230 static void set_addr(struct mtd_info
*mtd
, int column
, int page_addr
, int oob
)
232 struct nand_chip
*chip
= mtd_to_nand(mtd
);
233 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
234 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
235 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
238 ifc_nand_ctrl
->page
= page_addr
;
239 /* Program ROW0/COL0 */
240 ifc_out32(page_addr
, &ifc
->ifc_nand
.row0
);
241 ifc_out32((oob
? IFC_NAND_COL_MS
: 0) | column
, &ifc
->ifc_nand
.col0
);
243 buf_num
= page_addr
& priv
->bufnum_mask
;
245 ifc_nand_ctrl
->addr
= priv
->vbase
+ buf_num
* (mtd
->writesize
* 2);
246 ifc_nand_ctrl
->index
= column
;
248 /* for OOB data point to the second half of the buffer */
250 ifc_nand_ctrl
->index
+= mtd
->writesize
;
253 static int is_blank(struct mtd_info
*mtd
, unsigned int bufnum
)
255 struct nand_chip
*chip
= mtd_to_nand(mtd
);
256 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
257 u8 __iomem
*addr
= priv
->vbase
+ bufnum
* (mtd
->writesize
* 2);
258 u32 __iomem
*mainarea
= (u32 __iomem
*)addr
;
259 u8 __iomem
*oob
= addr
+ mtd
->writesize
;
262 for (i
= 0; i
< mtd
->writesize
/ 4; i
++) {
263 if (__raw_readl(&mainarea
[i
]) != 0xffffffff)
267 for (i
= 0; i
< chip
->ecc
.layout
->eccbytes
; i
++) {
268 int pos
= chip
->ecc
.layout
->eccpos
[i
];
270 if (__raw_readb(&oob
[pos
]) != 0xff)
277 /* returns nonzero if entire page is blank */
278 static int check_read_ecc(struct mtd_info
*mtd
, struct fsl_ifc_ctrl
*ctrl
,
279 u32
*eccstat
, unsigned int bufnum
)
281 u32 reg
= eccstat
[bufnum
/ 4];
284 errors
= (reg
>> ((3 - bufnum
% 4) * 8)) & 15;
290 * execute IFC NAND command and wait for it to complete
292 static void fsl_ifc_run_command(struct mtd_info
*mtd
)
294 struct nand_chip
*chip
= mtd_to_nand(mtd
);
295 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
296 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
297 struct fsl_ifc_nand_ctrl
*nctrl
= ifc_nand_ctrl
;
298 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
302 /* set the chip select for NAND Transaction */
303 ifc_out32(priv
->bank
<< IFC_NAND_CSEL_SHIFT
,
304 &ifc
->ifc_nand
.nand_csel
);
307 "%s: fir0=%08x fcr0=%08x\n",
309 ifc_in32(&ifc
->ifc_nand
.nand_fir0
),
310 ifc_in32(&ifc
->ifc_nand
.nand_fcr0
));
314 /* start read/write seq */
315 ifc_out32(IFC_NAND_SEQ_STRT_FIR_STRT
, &ifc
->ifc_nand
.nandseq_strt
);
317 /* wait for command complete flag or timeout */
318 wait_event_timeout(ctrl
->nand_wait
, ctrl
->nand_stat
,
319 msecs_to_jiffies(IFC_TIMEOUT_MSECS
));
321 /* ctrl->nand_stat will be updated from IRQ context */
322 if (!ctrl
->nand_stat
)
323 dev_err(priv
->dev
, "Controller is not responding\n");
324 if (ctrl
->nand_stat
& IFC_NAND_EVTER_STAT_FTOER
)
325 dev_err(priv
->dev
, "NAND Flash Timeout Error\n");
326 if (ctrl
->nand_stat
& IFC_NAND_EVTER_STAT_WPER
)
327 dev_err(priv
->dev
, "NAND Flash Write Protect Error\n");
329 nctrl
->max_bitflips
= 0;
331 if (nctrl
->eccread
) {
333 int bufnum
= nctrl
->page
& priv
->bufnum_mask
;
334 int sector
= bufnum
* chip
->ecc
.steps
;
335 int sector_end
= sector
+ chip
->ecc
.steps
- 1;
337 for (i
= sector
/ 4; i
<= sector_end
/ 4; i
++)
338 eccstat
[i
] = ifc_in32(&ifc
->ifc_nand
.nand_eccstat
[i
]);
340 for (i
= sector
; i
<= sector_end
; i
++) {
341 errors
= check_read_ecc(mtd
, ctrl
, eccstat
, i
);
345 * Uncorrectable error.
346 * OK only if the whole page is blank.
348 * We disable ECCER reporting due to...
349 * erratum IFC-A002770 -- so report it now if we
350 * see an uncorrectable error in ECCSTAT.
352 if (!is_blank(mtd
, bufnum
))
354 IFC_NAND_EVTER_STAT_ECCER
;
358 mtd
->ecc_stats
.corrected
+= errors
;
359 nctrl
->max_bitflips
= max_t(unsigned int,
368 static void fsl_ifc_do_read(struct nand_chip
*chip
,
370 struct mtd_info
*mtd
)
372 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
373 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
374 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
376 /* Program FIR/IFC_NAND_FCR0 for Small/Large page */
377 if (mtd
->writesize
> 512) {
378 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
379 (IFC_FIR_OP_CA0
<< IFC_NAND_FIR0_OP1_SHIFT
) |
380 (IFC_FIR_OP_RA0
<< IFC_NAND_FIR0_OP2_SHIFT
) |
381 (IFC_FIR_OP_CMD1
<< IFC_NAND_FIR0_OP3_SHIFT
) |
382 (IFC_FIR_OP_RBCD
<< IFC_NAND_FIR0_OP4_SHIFT
),
383 &ifc
->ifc_nand
.nand_fir0
);
384 ifc_out32(0x0, &ifc
->ifc_nand
.nand_fir1
);
386 ifc_out32((NAND_CMD_READ0
<< IFC_NAND_FCR0_CMD0_SHIFT
) |
387 (NAND_CMD_READSTART
<< IFC_NAND_FCR0_CMD1_SHIFT
),
388 &ifc
->ifc_nand
.nand_fcr0
);
390 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
391 (IFC_FIR_OP_CA0
<< IFC_NAND_FIR0_OP1_SHIFT
) |
392 (IFC_FIR_OP_RA0
<< IFC_NAND_FIR0_OP2_SHIFT
) |
393 (IFC_FIR_OP_RBCD
<< IFC_NAND_FIR0_OP3_SHIFT
),
394 &ifc
->ifc_nand
.nand_fir0
);
395 ifc_out32(0x0, &ifc
->ifc_nand
.nand_fir1
);
398 ifc_out32(NAND_CMD_READOOB
<<
399 IFC_NAND_FCR0_CMD0_SHIFT
,
400 &ifc
->ifc_nand
.nand_fcr0
);
402 ifc_out32(NAND_CMD_READ0
<<
403 IFC_NAND_FCR0_CMD0_SHIFT
,
404 &ifc
->ifc_nand
.nand_fcr0
);
408 /* cmdfunc send commands to the IFC NAND Machine */
409 static void fsl_ifc_cmdfunc(struct mtd_info
*mtd
, unsigned int command
,
410 int column
, int page_addr
) {
411 struct nand_chip
*chip
= mtd_to_nand(mtd
);
412 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
413 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
414 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
416 /* clear the read buffer */
417 ifc_nand_ctrl
->read_bytes
= 0;
418 if (command
!= NAND_CMD_PAGEPROG
)
419 ifc_nand_ctrl
->index
= 0;
422 /* READ0 read the entire buffer to use hardware ECC. */
424 ifc_out32(0, &ifc
->ifc_nand
.nand_fbcr
);
425 set_addr(mtd
, 0, page_addr
, 0);
427 ifc_nand_ctrl
->read_bytes
= mtd
->writesize
+ mtd
->oobsize
;
428 ifc_nand_ctrl
->index
+= column
;
430 if (chip
->ecc
.mode
== NAND_ECC_HW
)
431 ifc_nand_ctrl
->eccread
= 1;
433 fsl_ifc_do_read(chip
, 0, mtd
);
434 fsl_ifc_run_command(mtd
);
437 /* READOOB reads only the OOB because no ECC is performed. */
438 case NAND_CMD_READOOB
:
439 ifc_out32(mtd
->oobsize
- column
, &ifc
->ifc_nand
.nand_fbcr
);
440 set_addr(mtd
, column
, page_addr
, 1);
442 ifc_nand_ctrl
->read_bytes
= mtd
->writesize
+ mtd
->oobsize
;
444 fsl_ifc_do_read(chip
, 1, mtd
);
445 fsl_ifc_run_command(mtd
);
449 case NAND_CMD_READID
:
450 case NAND_CMD_PARAM
: {
451 int timing
= IFC_FIR_OP_RB
;
452 if (command
== NAND_CMD_PARAM
)
453 timing
= IFC_FIR_OP_RBCD
;
455 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
456 (IFC_FIR_OP_UA
<< IFC_NAND_FIR0_OP1_SHIFT
) |
457 (timing
<< IFC_NAND_FIR0_OP2_SHIFT
),
458 &ifc
->ifc_nand
.nand_fir0
);
459 ifc_out32(command
<< IFC_NAND_FCR0_CMD0_SHIFT
,
460 &ifc
->ifc_nand
.nand_fcr0
);
461 ifc_out32(column
, &ifc
->ifc_nand
.row3
);
464 * although currently it's 8 bytes for READID, we always read
465 * the maximum 256 bytes(for PARAM)
467 ifc_out32(256, &ifc
->ifc_nand
.nand_fbcr
);
468 ifc_nand_ctrl
->read_bytes
= 256;
470 set_addr(mtd
, 0, 0, 0);
471 fsl_ifc_run_command(mtd
);
475 /* ERASE1 stores the block and page address */
476 case NAND_CMD_ERASE1
:
477 set_addr(mtd
, 0, page_addr
, 0);
480 /* ERASE2 uses the block and page address from ERASE1 */
481 case NAND_CMD_ERASE2
:
482 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
483 (IFC_FIR_OP_RA0
<< IFC_NAND_FIR0_OP1_SHIFT
) |
484 (IFC_FIR_OP_CMD1
<< IFC_NAND_FIR0_OP2_SHIFT
),
485 &ifc
->ifc_nand
.nand_fir0
);
487 ifc_out32((NAND_CMD_ERASE1
<< IFC_NAND_FCR0_CMD0_SHIFT
) |
488 (NAND_CMD_ERASE2
<< IFC_NAND_FCR0_CMD1_SHIFT
),
489 &ifc
->ifc_nand
.nand_fcr0
);
491 ifc_out32(0, &ifc
->ifc_nand
.nand_fbcr
);
492 ifc_nand_ctrl
->read_bytes
= 0;
493 fsl_ifc_run_command(mtd
);
496 /* SEQIN sets up the addr buffer and all registers except the length */
497 case NAND_CMD_SEQIN
: {
499 ifc_nand_ctrl
->column
= column
;
500 ifc_nand_ctrl
->oob
= 0;
502 if (mtd
->writesize
> 512) {
504 (NAND_CMD_SEQIN
<< IFC_NAND_FCR0_CMD0_SHIFT
) |
505 (NAND_CMD_STATUS
<< IFC_NAND_FCR0_CMD1_SHIFT
) |
506 (NAND_CMD_PAGEPROG
<< IFC_NAND_FCR0_CMD2_SHIFT
);
509 (IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
510 (IFC_FIR_OP_CA0
<< IFC_NAND_FIR0_OP1_SHIFT
) |
511 (IFC_FIR_OP_RA0
<< IFC_NAND_FIR0_OP2_SHIFT
) |
512 (IFC_FIR_OP_WBCD
<< IFC_NAND_FIR0_OP3_SHIFT
) |
513 (IFC_FIR_OP_CMD2
<< IFC_NAND_FIR0_OP4_SHIFT
),
514 &ifc
->ifc_nand
.nand_fir0
);
516 (IFC_FIR_OP_CW1
<< IFC_NAND_FIR1_OP5_SHIFT
) |
517 (IFC_FIR_OP_RDSTAT
<< IFC_NAND_FIR1_OP6_SHIFT
) |
518 (IFC_FIR_OP_NOP
<< IFC_NAND_FIR1_OP7_SHIFT
),
519 &ifc
->ifc_nand
.nand_fir1
);
521 nand_fcr0
= ((NAND_CMD_PAGEPROG
<<
522 IFC_NAND_FCR0_CMD1_SHIFT
) |
524 IFC_NAND_FCR0_CMD2_SHIFT
) |
526 IFC_NAND_FCR0_CMD3_SHIFT
));
529 (IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
530 (IFC_FIR_OP_CMD2
<< IFC_NAND_FIR0_OP1_SHIFT
) |
531 (IFC_FIR_OP_CA0
<< IFC_NAND_FIR0_OP2_SHIFT
) |
532 (IFC_FIR_OP_RA0
<< IFC_NAND_FIR0_OP3_SHIFT
) |
533 (IFC_FIR_OP_WBCD
<< IFC_NAND_FIR0_OP4_SHIFT
),
534 &ifc
->ifc_nand
.nand_fir0
);
536 (IFC_FIR_OP_CMD1
<< IFC_NAND_FIR1_OP5_SHIFT
) |
537 (IFC_FIR_OP_CW3
<< IFC_NAND_FIR1_OP6_SHIFT
) |
538 (IFC_FIR_OP_RDSTAT
<< IFC_NAND_FIR1_OP7_SHIFT
) |
539 (IFC_FIR_OP_NOP
<< IFC_NAND_FIR1_OP8_SHIFT
),
540 &ifc
->ifc_nand
.nand_fir1
);
542 if (column
>= mtd
->writesize
)
544 NAND_CMD_READOOB
<< IFC_NAND_FCR0_CMD0_SHIFT
;
547 NAND_CMD_READ0
<< IFC_NAND_FCR0_CMD0_SHIFT
;
550 if (column
>= mtd
->writesize
) {
551 /* OOB area --> READOOB */
552 column
-= mtd
->writesize
;
553 ifc_nand_ctrl
->oob
= 1;
555 ifc_out32(nand_fcr0
, &ifc
->ifc_nand
.nand_fcr0
);
556 set_addr(mtd
, column
, page_addr
, ifc_nand_ctrl
->oob
);
560 /* PAGEPROG reuses all of the setup from SEQIN and adds the length */
561 case NAND_CMD_PAGEPROG
: {
562 if (ifc_nand_ctrl
->oob
) {
563 ifc_out32(ifc_nand_ctrl
->index
-
564 ifc_nand_ctrl
->column
,
565 &ifc
->ifc_nand
.nand_fbcr
);
567 ifc_out32(0, &ifc
->ifc_nand
.nand_fbcr
);
570 fsl_ifc_run_command(mtd
);
574 case NAND_CMD_STATUS
: {
577 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
578 (IFC_FIR_OP_RB
<< IFC_NAND_FIR0_OP1_SHIFT
),
579 &ifc
->ifc_nand
.nand_fir0
);
580 ifc_out32(NAND_CMD_STATUS
<< IFC_NAND_FCR0_CMD0_SHIFT
,
581 &ifc
->ifc_nand
.nand_fcr0
);
582 ifc_out32(1, &ifc
->ifc_nand
.nand_fbcr
);
583 set_addr(mtd
, 0, 0, 0);
584 ifc_nand_ctrl
->read_bytes
= 1;
586 fsl_ifc_run_command(mtd
);
589 * The chip always seems to report that it is
590 * write-protected, even when it is not.
592 addr
= ifc_nand_ctrl
->addr
;
593 if (chip
->options
& NAND_BUSWIDTH_16
)
594 ifc_out16(ifc_in16(addr
) | (NAND_STATUS_WP
), addr
);
596 ifc_out8(ifc_in8(addr
) | (NAND_STATUS_WP
), addr
);
601 ifc_out32(IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
,
602 &ifc
->ifc_nand
.nand_fir0
);
603 ifc_out32(NAND_CMD_RESET
<< IFC_NAND_FCR0_CMD0_SHIFT
,
604 &ifc
->ifc_nand
.nand_fcr0
);
605 fsl_ifc_run_command(mtd
);
609 dev_err(priv
->dev
, "%s: error, unsupported command 0x%x.\n",
614 static void fsl_ifc_select_chip(struct mtd_info
*mtd
, int chip
)
616 /* The hardware does not seem to support multiple
622 * Write buf to the IFC NAND Controller Data Buffer
624 static void fsl_ifc_write_buf(struct mtd_info
*mtd
, const u8
*buf
, int len
)
626 struct nand_chip
*chip
= mtd_to_nand(mtd
);
627 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
628 unsigned int bufsize
= mtd
->writesize
+ mtd
->oobsize
;
631 dev_err(priv
->dev
, "%s: len %d bytes", __func__
, len
);
635 if ((unsigned int)len
> bufsize
- ifc_nand_ctrl
->index
) {
637 "%s: beyond end of buffer (%d requested, %u available)\n",
638 __func__
, len
, bufsize
- ifc_nand_ctrl
->index
);
639 len
= bufsize
- ifc_nand_ctrl
->index
;
642 memcpy_toio(ifc_nand_ctrl
->addr
+ ifc_nand_ctrl
->index
, buf
, len
);
643 ifc_nand_ctrl
->index
+= len
;
647 * Read a byte from either the IFC hardware buffer
648 * read function for 8-bit buswidth
650 static uint8_t fsl_ifc_read_byte(struct mtd_info
*mtd
)
652 struct nand_chip
*chip
= mtd_to_nand(mtd
);
653 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
657 * If there are still bytes in the IFC buffer, then use the
660 if (ifc_nand_ctrl
->index
< ifc_nand_ctrl
->read_bytes
) {
661 offset
= ifc_nand_ctrl
->index
++;
662 return ifc_in8(ifc_nand_ctrl
->addr
+ offset
);
665 dev_err(priv
->dev
, "%s: beyond end of buffer\n", __func__
);
670 * Read two bytes from the IFC hardware buffer
671 * read function for 16-bit buswith
673 static uint8_t fsl_ifc_read_byte16(struct mtd_info
*mtd
)
675 struct nand_chip
*chip
= mtd_to_nand(mtd
);
676 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
680 * If there are still bytes in the IFC buffer, then use the
683 if (ifc_nand_ctrl
->index
< ifc_nand_ctrl
->read_bytes
) {
684 data
= ifc_in16(ifc_nand_ctrl
->addr
+ ifc_nand_ctrl
->index
);
685 ifc_nand_ctrl
->index
+= 2;
686 return (uint8_t) data
;
689 dev_err(priv
->dev
, "%s: beyond end of buffer\n", __func__
);
694 * Read from the IFC Controller Data Buffer
696 static void fsl_ifc_read_buf(struct mtd_info
*mtd
, u8
*buf
, int len
)
698 struct nand_chip
*chip
= mtd_to_nand(mtd
);
699 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
703 dev_err(priv
->dev
, "%s: len %d bytes", __func__
, len
);
707 avail
= min((unsigned int)len
,
708 ifc_nand_ctrl
->read_bytes
- ifc_nand_ctrl
->index
);
709 memcpy_fromio(buf
, ifc_nand_ctrl
->addr
+ ifc_nand_ctrl
->index
, avail
);
710 ifc_nand_ctrl
->index
+= avail
;
714 "%s: beyond end of buffer (%d requested, %d available)\n",
715 __func__
, len
, avail
);
719 * This function is called after Program and Erase Operations to
720 * check for success or failure.
722 static int fsl_ifc_wait(struct mtd_info
*mtd
, struct nand_chip
*chip
)
724 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
725 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
726 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
729 /* Use READ_STATUS command, but wait for the device to be ready */
730 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
731 (IFC_FIR_OP_RDSTAT
<< IFC_NAND_FIR0_OP1_SHIFT
),
732 &ifc
->ifc_nand
.nand_fir0
);
733 ifc_out32(NAND_CMD_STATUS
<< IFC_NAND_FCR0_CMD0_SHIFT
,
734 &ifc
->ifc_nand
.nand_fcr0
);
735 ifc_out32(1, &ifc
->ifc_nand
.nand_fbcr
);
736 set_addr(mtd
, 0, 0, 0);
737 ifc_nand_ctrl
->read_bytes
= 1;
739 fsl_ifc_run_command(mtd
);
741 nand_fsr
= ifc_in32(&ifc
->ifc_nand
.nand_fsr
);
744 * The chip always seems to report that it is
745 * write-protected, even when it is not.
747 return nand_fsr
| NAND_STATUS_WP
;
750 static int fsl_ifc_read_page(struct mtd_info
*mtd
, struct nand_chip
*chip
,
751 uint8_t *buf
, int oob_required
, int page
)
753 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
754 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
755 struct fsl_ifc_nand_ctrl
*nctrl
= ifc_nand_ctrl
;
757 fsl_ifc_read_buf(mtd
, buf
, mtd
->writesize
);
759 fsl_ifc_read_buf(mtd
, chip
->oob_poi
, mtd
->oobsize
);
761 if (ctrl
->nand_stat
& IFC_NAND_EVTER_STAT_ECCER
)
762 dev_err(priv
->dev
, "NAND Flash ECC Uncorrectable Error\n");
764 if (ctrl
->nand_stat
!= IFC_NAND_EVTER_STAT_OPC
)
765 mtd
->ecc_stats
.failed
++;
767 return nctrl
->max_bitflips
;
770 /* ECC will be calculated automatically, and errors will be detected in
773 static int fsl_ifc_write_page(struct mtd_info
*mtd
, struct nand_chip
*chip
,
774 const uint8_t *buf
, int oob_required
, int page
)
776 fsl_ifc_write_buf(mtd
, buf
, mtd
->writesize
);
777 fsl_ifc_write_buf(mtd
, chip
->oob_poi
, mtd
->oobsize
);
782 static int fsl_ifc_chip_init_tail(struct mtd_info
*mtd
)
784 struct nand_chip
*chip
= mtd_to_nand(mtd
);
785 struct fsl_ifc_mtd
*priv
= nand_get_controller_data(chip
);
787 dev_dbg(priv
->dev
, "%s: nand->numchips = %d\n", __func__
,
789 dev_dbg(priv
->dev
, "%s: nand->chipsize = %lld\n", __func__
,
791 dev_dbg(priv
->dev
, "%s: nand->pagemask = %8x\n", __func__
,
793 dev_dbg(priv
->dev
, "%s: nand->chip_delay = %d\n", __func__
,
795 dev_dbg(priv
->dev
, "%s: nand->badblockpos = %d\n", __func__
,
797 dev_dbg(priv
->dev
, "%s: nand->chip_shift = %d\n", __func__
,
799 dev_dbg(priv
->dev
, "%s: nand->page_shift = %d\n", __func__
,
801 dev_dbg(priv
->dev
, "%s: nand->phys_erase_shift = %d\n", __func__
,
802 chip
->phys_erase_shift
);
803 dev_dbg(priv
->dev
, "%s: nand->ecc.mode = %d\n", __func__
,
805 dev_dbg(priv
->dev
, "%s: nand->ecc.steps = %d\n", __func__
,
807 dev_dbg(priv
->dev
, "%s: nand->ecc.bytes = %d\n", __func__
,
809 dev_dbg(priv
->dev
, "%s: nand->ecc.total = %d\n", __func__
,
811 dev_dbg(priv
->dev
, "%s: nand->ecc.layout = %p\n", __func__
,
813 dev_dbg(priv
->dev
, "%s: mtd->flags = %08x\n", __func__
, mtd
->flags
);
814 dev_dbg(priv
->dev
, "%s: mtd->size = %lld\n", __func__
, mtd
->size
);
815 dev_dbg(priv
->dev
, "%s: mtd->erasesize = %d\n", __func__
,
817 dev_dbg(priv
->dev
, "%s: mtd->writesize = %d\n", __func__
,
819 dev_dbg(priv
->dev
, "%s: mtd->oobsize = %d\n", __func__
,
825 static void fsl_ifc_sram_init(struct fsl_ifc_mtd
*priv
)
827 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
828 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
829 uint32_t csor
= 0, csor_8k
= 0, csor_ext
= 0;
830 uint32_t cs
= priv
->bank
;
832 /* Save CSOR and CSOR_ext */
833 csor
= ifc_in32(&ifc
->csor_cs
[cs
].csor
);
834 csor_ext
= ifc_in32(&ifc
->csor_cs
[cs
].csor_ext
);
836 /* chage PageSize 8K and SpareSize 1K*/
837 csor_8k
= (csor
& ~(CSOR_NAND_PGS_MASK
)) | 0x0018C000;
838 ifc_out32(csor_8k
, &ifc
->csor_cs
[cs
].csor
);
839 ifc_out32(0x0000400, &ifc
->csor_cs
[cs
].csor_ext
);
842 ifc_out32((IFC_FIR_OP_CW0
<< IFC_NAND_FIR0_OP0_SHIFT
) |
843 (IFC_FIR_OP_UA
<< IFC_NAND_FIR0_OP1_SHIFT
) |
844 (IFC_FIR_OP_RB
<< IFC_NAND_FIR0_OP2_SHIFT
),
845 &ifc
->ifc_nand
.nand_fir0
);
846 ifc_out32(NAND_CMD_READID
<< IFC_NAND_FCR0_CMD0_SHIFT
,
847 &ifc
->ifc_nand
.nand_fcr0
);
848 ifc_out32(0x0, &ifc
->ifc_nand
.row3
);
850 ifc_out32(0x0, &ifc
->ifc_nand
.nand_fbcr
);
852 /* Program ROW0/COL0 */
853 ifc_out32(0x0, &ifc
->ifc_nand
.row0
);
854 ifc_out32(0x0, &ifc
->ifc_nand
.col0
);
856 /* set the chip select for NAND Transaction */
857 ifc_out32(cs
<< IFC_NAND_CSEL_SHIFT
, &ifc
->ifc_nand
.nand_csel
);
860 ifc_out32(IFC_NAND_SEQ_STRT_FIR_STRT
, &ifc
->ifc_nand
.nandseq_strt
);
862 /* wait for command complete flag or timeout */
863 wait_event_timeout(ctrl
->nand_wait
, ctrl
->nand_stat
,
864 msecs_to_jiffies(IFC_TIMEOUT_MSECS
));
866 if (ctrl
->nand_stat
!= IFC_NAND_EVTER_STAT_OPC
)
867 printk(KERN_ERR
"fsl-ifc: Failed to Initialise SRAM\n");
869 /* Restore CSOR and CSOR_ext */
870 ifc_out32(csor
, &ifc
->csor_cs
[cs
].csor
);
871 ifc_out32(csor_ext
, &ifc
->csor_cs
[cs
].csor_ext
);
874 static int fsl_ifc_chip_init(struct fsl_ifc_mtd
*priv
)
876 struct fsl_ifc_ctrl
*ctrl
= priv
->ctrl
;
877 struct fsl_ifc_regs __iomem
*ifc
= ctrl
->regs
;
878 struct nand_chip
*chip
= &priv
->chip
;
879 struct mtd_info
*mtd
= nand_to_mtd(&priv
->chip
);
880 struct nand_ecclayout
*layout
;
883 /* Fill in fsl_ifc_mtd structure */
884 mtd
->dev
.parent
= priv
->dev
;
885 nand_set_flash_node(chip
, priv
->dev
->of_node
);
887 /* fill in nand_chip structure */
888 /* set up function call table */
889 if ((ifc_in32(&ifc
->cspr_cs
[priv
->bank
].cspr
)) & CSPR_PORT_SIZE_16
)
890 chip
->read_byte
= fsl_ifc_read_byte16
;
892 chip
->read_byte
= fsl_ifc_read_byte
;
894 chip
->write_buf
= fsl_ifc_write_buf
;
895 chip
->read_buf
= fsl_ifc_read_buf
;
896 chip
->select_chip
= fsl_ifc_select_chip
;
897 chip
->cmdfunc
= fsl_ifc_cmdfunc
;
898 chip
->waitfunc
= fsl_ifc_wait
;
900 chip
->bbt_td
= &bbt_main_descr
;
901 chip
->bbt_md
= &bbt_mirror_descr
;
903 ifc_out32(0x0, &ifc
->ifc_nand
.ncfgr
);
905 /* set up nand options */
906 chip
->bbt_options
= NAND_BBT_USE_FLASH
;
907 chip
->options
= NAND_NO_SUBPAGE_WRITE
;
909 if (ifc_in32(&ifc
->cspr_cs
[priv
->bank
].cspr
) & CSPR_PORT_SIZE_16
) {
910 chip
->read_byte
= fsl_ifc_read_byte16
;
911 chip
->options
|= NAND_BUSWIDTH_16
;
913 chip
->read_byte
= fsl_ifc_read_byte
;
916 chip
->controller
= &ifc_nand_ctrl
->controller
;
917 nand_set_controller_data(chip
, priv
);
919 chip
->ecc
.read_page
= fsl_ifc_read_page
;
920 chip
->ecc
.write_page
= fsl_ifc_write_page
;
922 csor
= ifc_in32(&ifc
->csor_cs
[priv
->bank
].csor
);
924 /* Hardware generates ECC per 512 Bytes */
925 chip
->ecc
.size
= 512;
927 chip
->ecc
.strength
= 4;
929 switch (csor
& CSOR_NAND_PGS_MASK
) {
930 case CSOR_NAND_PGS_512
:
931 if (chip
->options
& NAND_BUSWIDTH_16
) {
932 layout
= &oob_512_16bit_ecc4
;
934 layout
= &oob_512_8bit_ecc4
;
936 /* Avoid conflict with bad block marker */
937 bbt_main_descr
.offs
= 0;
938 bbt_mirror_descr
.offs
= 0;
941 priv
->bufnum_mask
= 15;
944 case CSOR_NAND_PGS_2K
:
945 layout
= &oob_2048_ecc4
;
946 priv
->bufnum_mask
= 3;
949 case CSOR_NAND_PGS_4K
:
950 if ((csor
& CSOR_NAND_ECC_MODE_MASK
) ==
951 CSOR_NAND_ECC_MODE_4
) {
952 layout
= &oob_4096_ecc4
;
954 layout
= &oob_4096_ecc8
;
955 chip
->ecc
.bytes
= 16;
956 chip
->ecc
.strength
= 8;
959 priv
->bufnum_mask
= 1;
962 case CSOR_NAND_PGS_8K
:
963 if ((csor
& CSOR_NAND_ECC_MODE_MASK
) ==
964 CSOR_NAND_ECC_MODE_4
) {
965 layout
= &oob_8192_ecc4
;
967 layout
= &oob_8192_ecc8
;
968 chip
->ecc
.bytes
= 16;
969 chip
->ecc
.strength
= 8;
972 priv
->bufnum_mask
= 0;
976 dev_err(priv
->dev
, "bad csor %#x: bad page size\n", csor
);
980 /* Must also set CSOR_NAND_ECC_ENC_EN if DEC_EN set */
981 if (csor
& CSOR_NAND_ECC_DEC_EN
) {
982 chip
->ecc
.mode
= NAND_ECC_HW
;
983 chip
->ecc
.layout
= layout
;
985 chip
->ecc
.mode
= NAND_ECC_SOFT
;
988 if (ctrl
->version
== FSL_IFC_VERSION_1_1_0
)
989 fsl_ifc_sram_init(priv
);
994 static int fsl_ifc_chip_remove(struct fsl_ifc_mtd
*priv
)
996 struct mtd_info
*mtd
= nand_to_mtd(&priv
->chip
);
1003 iounmap(priv
->vbase
);
1005 ifc_nand_ctrl
->chips
[priv
->bank
] = NULL
;
1010 static int match_bank(struct fsl_ifc_regs __iomem
*ifc
, int bank
,
1013 u32 cspr
= ifc_in32(&ifc
->cspr_cs
[bank
].cspr
);
1015 if (!(cspr
& CSPR_V
))
1017 if ((cspr
& CSPR_MSEL
) != CSPR_MSEL_NAND
)
1020 return (cspr
& CSPR_BA
) == convert_ifc_address(addr
);
1023 static DEFINE_MUTEX(fsl_ifc_nand_mutex
);
1025 static int fsl_ifc_nand_probe(struct platform_device
*dev
)
1027 struct fsl_ifc_regs __iomem
*ifc
;
1028 struct fsl_ifc_mtd
*priv
;
1029 struct resource res
;
1030 static const char *part_probe_types
[]
1031 = { "cmdlinepart", "RedBoot", "ofpart", NULL
};
1034 struct device_node
*node
= dev
->dev
.of_node
;
1035 struct mtd_info
*mtd
;
1037 if (!fsl_ifc_ctrl_dev
|| !fsl_ifc_ctrl_dev
->regs
)
1039 ifc
= fsl_ifc_ctrl_dev
->regs
;
1041 /* get, allocate and map the memory resource */
1042 ret
= of_address_to_resource(node
, 0, &res
);
1044 dev_err(&dev
->dev
, "%s: failed to get resource\n", __func__
);
1048 /* find which chip select it is connected to */
1049 for (bank
= 0; bank
< fsl_ifc_ctrl_dev
->banks
; bank
++) {
1050 if (match_bank(ifc
, bank
, res
.start
))
1054 if (bank
>= fsl_ifc_ctrl_dev
->banks
) {
1055 dev_err(&dev
->dev
, "%s: address did not match any chip selects\n",
1060 priv
= devm_kzalloc(&dev
->dev
, sizeof(*priv
), GFP_KERNEL
);
1064 mutex_lock(&fsl_ifc_nand_mutex
);
1065 if (!fsl_ifc_ctrl_dev
->nand
) {
1066 ifc_nand_ctrl
= kzalloc(sizeof(*ifc_nand_ctrl
), GFP_KERNEL
);
1067 if (!ifc_nand_ctrl
) {
1068 mutex_unlock(&fsl_ifc_nand_mutex
);
1072 ifc_nand_ctrl
->read_bytes
= 0;
1073 ifc_nand_ctrl
->index
= 0;
1074 ifc_nand_ctrl
->addr
= NULL
;
1075 fsl_ifc_ctrl_dev
->nand
= ifc_nand_ctrl
;
1077 spin_lock_init(&ifc_nand_ctrl
->controller
.lock
);
1078 init_waitqueue_head(&ifc_nand_ctrl
->controller
.wq
);
1080 ifc_nand_ctrl
= fsl_ifc_ctrl_dev
->nand
;
1082 mutex_unlock(&fsl_ifc_nand_mutex
);
1084 ifc_nand_ctrl
->chips
[bank
] = priv
;
1086 priv
->ctrl
= fsl_ifc_ctrl_dev
;
1087 priv
->dev
= &dev
->dev
;
1089 priv
->vbase
= ioremap(res
.start
, resource_size(&res
));
1091 dev_err(priv
->dev
, "%s: failed to map chip region\n", __func__
);
1096 dev_set_drvdata(priv
->dev
, priv
);
1098 ifc_out32(IFC_NAND_EVTER_EN_OPC_EN
|
1099 IFC_NAND_EVTER_EN_FTOER_EN
|
1100 IFC_NAND_EVTER_EN_WPER_EN
,
1101 &ifc
->ifc_nand
.nand_evter_en
);
1103 /* enable NAND Machine Interrupts */
1104 ifc_out32(IFC_NAND_EVTER_INTR_OPCIR_EN
|
1105 IFC_NAND_EVTER_INTR_FTOERIR_EN
|
1106 IFC_NAND_EVTER_INTR_WPERIR_EN
,
1107 &ifc
->ifc_nand
.nand_evter_intr_en
);
1109 mtd
= nand_to_mtd(&priv
->chip
);
1110 mtd
->name
= kasprintf(GFP_KERNEL
, "%llx.flash", (u64
)res
.start
);
1116 ret
= fsl_ifc_chip_init(priv
);
1120 ret
= nand_scan_ident(mtd
, 1, NULL
);
1124 ret
= fsl_ifc_chip_init_tail(mtd
);
1128 ret
= nand_scan_tail(mtd
);
1132 /* First look for RedBoot table or partitions on the command
1133 * line, these take precedence over device tree information */
1134 mtd_device_parse_register(mtd
, part_probe_types
, NULL
, NULL
, 0);
1136 dev_info(priv
->dev
, "IFC NAND device at 0x%llx, bank %d\n",
1137 (unsigned long long)res
.start
, priv
->bank
);
1141 fsl_ifc_chip_remove(priv
);
1145 static int fsl_ifc_nand_remove(struct platform_device
*dev
)
1147 struct fsl_ifc_mtd
*priv
= dev_get_drvdata(&dev
->dev
);
1149 fsl_ifc_chip_remove(priv
);
1151 mutex_lock(&fsl_ifc_nand_mutex
);
1152 ifc_nand_ctrl
->counter
--;
1153 if (!ifc_nand_ctrl
->counter
) {
1154 fsl_ifc_ctrl_dev
->nand
= NULL
;
1155 kfree(ifc_nand_ctrl
);
1157 mutex_unlock(&fsl_ifc_nand_mutex
);
1162 static const struct of_device_id fsl_ifc_nand_match
[] = {
1164 .compatible
= "fsl,ifc-nand",
1168 MODULE_DEVICE_TABLE(of
, fsl_ifc_nand_match
);
1170 static struct platform_driver fsl_ifc_nand_driver
= {
1172 .name
= "fsl,ifc-nand",
1173 .of_match_table
= fsl_ifc_nand_match
,
1175 .probe
= fsl_ifc_nand_probe
,
1176 .remove
= fsl_ifc_nand_remove
,
1179 module_platform_driver(fsl_ifc_nand_driver
);
1181 MODULE_LICENSE("GPL");
1182 MODULE_AUTHOR("Freescale");
1183 MODULE_DESCRIPTION("Freescale Integrated Flash Controller MTD NAND driver");