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