1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * davinci_nand.c - NAND Flash Driver for DaVinci family chips 4 * 5 * Copyright © 2006 Texas Instruments. 6 * 7 * Port to 2.6.23 Copyright © 2008 by: 8 * Sander Huijsen <Shuijsen@optelecom-nkf.com> 9 * Troy Kisky <troy.kisky@boundarydevices.com> 10 * Dirk Behme <Dirk.Behme@gmail.com> 11 */ 12 13 #include <linux/kernel.h> 14 #include <linux/module.h> 15 #include <linux/platform_device.h> 16 #include <linux/err.h> 17 #include <linux/io.h> 18 #include <linux/mtd/rawnand.h> 19 #include <linux/mtd/partitions.h> 20 #include <linux/slab.h> 21 #include <linux/of_device.h> 22 #include <linux/of.h> 23 24 #include <linux/platform_data/mtd-davinci.h> 25 #include <linux/platform_data/mtd-davinci-aemif.h> 26 27 /* 28 * This is a device driver for the NAND flash controller found on the 29 * various DaVinci family chips. It handles up to four SoC chipselects, 30 * and some flavors of secondary chipselect (e.g. based on A12) as used 31 * with multichip packages. 32 * 33 * The 1-bit ECC hardware is supported, as well as the newer 4-bit ECC 34 * available on chips like the DM355 and OMAP-L137 and needed with the 35 * more error-prone MLC NAND chips. 36 * 37 * This driver assumes EM_WAIT connects all the NAND devices' RDY/nBUSY 38 * outputs in a "wire-AND" configuration, with no per-chip signals. 39 */ 40 struct davinci_nand_info { 41 struct nand_chip chip; 42 43 struct platform_device *pdev; 44 45 bool is_readmode; 46 47 void __iomem *base; 48 void __iomem *vaddr; 49 50 void __iomem *current_cs; 51 52 uint32_t mask_chipsel; 53 uint32_t mask_ale; 54 uint32_t mask_cle; 55 56 uint32_t core_chipsel; 57 58 struct davinci_aemif_timing *timing; 59 }; 60 61 static DEFINE_SPINLOCK(davinci_nand_lock); 62 static bool ecc4_busy; 63 64 static inline struct davinci_nand_info *to_davinci_nand(struct mtd_info *mtd) 65 { 66 return container_of(mtd_to_nand(mtd), struct davinci_nand_info, chip); 67 } 68 69 static inline unsigned int davinci_nand_readl(struct davinci_nand_info *info, 70 int offset) 71 { 72 return __raw_readl(info->base + offset); 73 } 74 75 static inline void davinci_nand_writel(struct davinci_nand_info *info, 76 int offset, unsigned long value) 77 { 78 __raw_writel(value, info->base + offset); 79 } 80 81 /*----------------------------------------------------------------------*/ 82 83 /* 84 * Access to hardware control lines: ALE, CLE, secondary chipselect. 85 */ 86 87 static void nand_davinci_hwcontrol(struct nand_chip *nand, int cmd, 88 unsigned int ctrl) 89 { 90 struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(nand)); 91 void __iomem *addr = info->current_cs; 92 93 /* Did the control lines change? */ 94 if (ctrl & NAND_CTRL_CHANGE) { 95 if ((ctrl & NAND_CTRL_CLE) == NAND_CTRL_CLE) 96 addr += info->mask_cle; 97 else if ((ctrl & NAND_CTRL_ALE) == NAND_CTRL_ALE) 98 addr += info->mask_ale; 99 100 nand->legacy.IO_ADDR_W = addr; 101 } 102 103 if (cmd != NAND_CMD_NONE) 104 iowrite8(cmd, nand->legacy.IO_ADDR_W); 105 } 106 107 static void nand_davinci_select_chip(struct nand_chip *nand, int chip) 108 { 109 struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(nand)); 110 111 info->current_cs = info->vaddr; 112 113 /* maybe kick in a second chipselect */ 114 if (chip > 0) 115 info->current_cs += info->mask_chipsel; 116 117 info->chip.legacy.IO_ADDR_W = info->current_cs; 118 info->chip.legacy.IO_ADDR_R = info->chip.legacy.IO_ADDR_W; 119 } 120 121 /*----------------------------------------------------------------------*/ 122 123 /* 124 * 1-bit hardware ECC ... context maintained for each core chipselect 125 */ 126 127 static inline uint32_t nand_davinci_readecc_1bit(struct mtd_info *mtd) 128 { 129 struct davinci_nand_info *info = to_davinci_nand(mtd); 130 131 return davinci_nand_readl(info, NANDF1ECC_OFFSET 132 + 4 * info->core_chipsel); 133 } 134 135 static void nand_davinci_hwctl_1bit(struct nand_chip *chip, int mode) 136 { 137 struct davinci_nand_info *info; 138 uint32_t nandcfr; 139 unsigned long flags; 140 141 info = to_davinci_nand(nand_to_mtd(chip)); 142 143 /* Reset ECC hardware */ 144 nand_davinci_readecc_1bit(nand_to_mtd(chip)); 145 146 spin_lock_irqsave(&davinci_nand_lock, flags); 147 148 /* Restart ECC hardware */ 149 nandcfr = davinci_nand_readl(info, NANDFCR_OFFSET); 150 nandcfr |= BIT(8 + info->core_chipsel); 151 davinci_nand_writel(info, NANDFCR_OFFSET, nandcfr); 152 153 spin_unlock_irqrestore(&davinci_nand_lock, flags); 154 } 155 156 /* 157 * Read hardware ECC value and pack into three bytes 158 */ 159 static int nand_davinci_calculate_1bit(struct nand_chip *chip, 160 const u_char *dat, u_char *ecc_code) 161 { 162 unsigned int ecc_val = nand_davinci_readecc_1bit(nand_to_mtd(chip)); 163 unsigned int ecc24 = (ecc_val & 0x0fff) | ((ecc_val & 0x0fff0000) >> 4); 164 165 /* invert so that erased block ecc is correct */ 166 ecc24 = ~ecc24; 167 ecc_code[0] = (u_char)(ecc24); 168 ecc_code[1] = (u_char)(ecc24 >> 8); 169 ecc_code[2] = (u_char)(ecc24 >> 16); 170 171 return 0; 172 } 173 174 static int nand_davinci_correct_1bit(struct nand_chip *chip, u_char *dat, 175 u_char *read_ecc, u_char *calc_ecc) 176 { 177 uint32_t eccNand = read_ecc[0] | (read_ecc[1] << 8) | 178 (read_ecc[2] << 16); 179 uint32_t eccCalc = calc_ecc[0] | (calc_ecc[1] << 8) | 180 (calc_ecc[2] << 16); 181 uint32_t diff = eccCalc ^ eccNand; 182 183 if (diff) { 184 if ((((diff >> 12) ^ diff) & 0xfff) == 0xfff) { 185 /* Correctable error */ 186 if ((diff >> (12 + 3)) < chip->ecc.size) { 187 dat[diff >> (12 + 3)] ^= BIT((diff >> 12) & 7); 188 return 1; 189 } else { 190 return -EBADMSG; 191 } 192 } else if (!(diff & (diff - 1))) { 193 /* Single bit ECC error in the ECC itself, 194 * nothing to fix */ 195 return 1; 196 } else { 197 /* Uncorrectable error */ 198 return -EBADMSG; 199 } 200 201 } 202 return 0; 203 } 204 205 /*----------------------------------------------------------------------*/ 206 207 /* 208 * 4-bit hardware ECC ... context maintained over entire AEMIF 209 * 210 * This is a syndrome engine, but we avoid NAND_ECC_HW_SYNDROME 211 * since that forces use of a problematic "infix OOB" layout. 212 * Among other things, it trashes manufacturer bad block markers. 213 * Also, and specific to this hardware, it ECC-protects the "prepad" 214 * in the OOB ... while having ECC protection for parts of OOB would 215 * seem useful, the current MTD stack sometimes wants to update the 216 * OOB without recomputing ECC. 217 */ 218 219 static void nand_davinci_hwctl_4bit(struct nand_chip *chip, int mode) 220 { 221 struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(chip)); 222 unsigned long flags; 223 u32 val; 224 225 /* Reset ECC hardware */ 226 davinci_nand_readl(info, NAND_4BIT_ECC1_OFFSET); 227 228 spin_lock_irqsave(&davinci_nand_lock, flags); 229 230 /* Start 4-bit ECC calculation for read/write */ 231 val = davinci_nand_readl(info, NANDFCR_OFFSET); 232 val &= ~(0x03 << 4); 233 val |= (info->core_chipsel << 4) | BIT(12); 234 davinci_nand_writel(info, NANDFCR_OFFSET, val); 235 236 info->is_readmode = (mode == NAND_ECC_READ); 237 238 spin_unlock_irqrestore(&davinci_nand_lock, flags); 239 } 240 241 /* Read raw ECC code after writing to NAND. */ 242 static void 243 nand_davinci_readecc_4bit(struct davinci_nand_info *info, u32 code[4]) 244 { 245 const u32 mask = 0x03ff03ff; 246 247 code[0] = davinci_nand_readl(info, NAND_4BIT_ECC1_OFFSET) & mask; 248 code[1] = davinci_nand_readl(info, NAND_4BIT_ECC2_OFFSET) & mask; 249 code[2] = davinci_nand_readl(info, NAND_4BIT_ECC3_OFFSET) & mask; 250 code[3] = davinci_nand_readl(info, NAND_4BIT_ECC4_OFFSET) & mask; 251 } 252 253 /* Terminate read ECC; or return ECC (as bytes) of data written to NAND. */ 254 static int nand_davinci_calculate_4bit(struct nand_chip *chip, 255 const u_char *dat, u_char *ecc_code) 256 { 257 struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(chip)); 258 u32 raw_ecc[4], *p; 259 unsigned i; 260 261 /* After a read, terminate ECC calculation by a dummy read 262 * of some 4-bit ECC register. ECC covers everything that 263 * was read; correct() just uses the hardware state, so 264 * ecc_code is not needed. 265 */ 266 if (info->is_readmode) { 267 davinci_nand_readl(info, NAND_4BIT_ECC1_OFFSET); 268 return 0; 269 } 270 271 /* Pack eight raw 10-bit ecc values into ten bytes, making 272 * two passes which each convert four values (in upper and 273 * lower halves of two 32-bit words) into five bytes. The 274 * ROM boot loader uses this same packing scheme. 275 */ 276 nand_davinci_readecc_4bit(info, raw_ecc); 277 for (i = 0, p = raw_ecc; i < 2; i++, p += 2) { 278 *ecc_code++ = p[0] & 0xff; 279 *ecc_code++ = ((p[0] >> 8) & 0x03) | ((p[0] >> 14) & 0xfc); 280 *ecc_code++ = ((p[0] >> 22) & 0x0f) | ((p[1] << 4) & 0xf0); 281 *ecc_code++ = ((p[1] >> 4) & 0x3f) | ((p[1] >> 10) & 0xc0); 282 *ecc_code++ = (p[1] >> 18) & 0xff; 283 } 284 285 return 0; 286 } 287 288 /* Correct up to 4 bits in data we just read, using state left in the 289 * hardware plus the ecc_code computed when it was first written. 290 */ 291 static int nand_davinci_correct_4bit(struct nand_chip *chip, u_char *data, 292 u_char *ecc_code, u_char *null) 293 { 294 int i; 295 struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(chip)); 296 unsigned short ecc10[8]; 297 unsigned short *ecc16; 298 u32 syndrome[4]; 299 u32 ecc_state; 300 unsigned num_errors, corrected; 301 unsigned long timeo; 302 303 /* Unpack ten bytes into eight 10 bit values. We know we're 304 * little-endian, and use type punning for less shifting/masking. 305 */ 306 if (WARN_ON(0x01 & (uintptr_t)ecc_code)) 307 return -EINVAL; 308 ecc16 = (unsigned short *)ecc_code; 309 310 ecc10[0] = (ecc16[0] >> 0) & 0x3ff; 311 ecc10[1] = ((ecc16[0] >> 10) & 0x3f) | ((ecc16[1] << 6) & 0x3c0); 312 ecc10[2] = (ecc16[1] >> 4) & 0x3ff; 313 ecc10[3] = ((ecc16[1] >> 14) & 0x3) | ((ecc16[2] << 2) & 0x3fc); 314 ecc10[4] = (ecc16[2] >> 8) | ((ecc16[3] << 8) & 0x300); 315 ecc10[5] = (ecc16[3] >> 2) & 0x3ff; 316 ecc10[6] = ((ecc16[3] >> 12) & 0xf) | ((ecc16[4] << 4) & 0x3f0); 317 ecc10[7] = (ecc16[4] >> 6) & 0x3ff; 318 319 /* Tell ECC controller about the expected ECC codes. */ 320 for (i = 7; i >= 0; i--) 321 davinci_nand_writel(info, NAND_4BIT_ECC_LOAD_OFFSET, ecc10[i]); 322 323 /* Allow time for syndrome calculation ... then read it. 324 * A syndrome of all zeroes 0 means no detected errors. 325 */ 326 davinci_nand_readl(info, NANDFSR_OFFSET); 327 nand_davinci_readecc_4bit(info, syndrome); 328 if (!(syndrome[0] | syndrome[1] | syndrome[2] | syndrome[3])) 329 return 0; 330 331 /* 332 * Clear any previous address calculation by doing a dummy read of an 333 * error address register. 334 */ 335 davinci_nand_readl(info, NAND_ERR_ADD1_OFFSET); 336 337 /* Start address calculation, and wait for it to complete. 338 * We _could_ start reading more data while this is working, 339 * to speed up the overall page read. 340 */ 341 davinci_nand_writel(info, NANDFCR_OFFSET, 342 davinci_nand_readl(info, NANDFCR_OFFSET) | BIT(13)); 343 344 /* 345 * ECC_STATE field reads 0x3 (Error correction complete) immediately 346 * after setting the 4BITECC_ADD_CALC_START bit. So if you immediately 347 * begin trying to poll for the state, you may fall right out of your 348 * loop without any of the correction calculations having taken place. 349 * The recommendation from the hardware team is to initially delay as 350 * long as ECC_STATE reads less than 4. After that, ECC HW has entered 351 * correction state. 352 */ 353 timeo = jiffies + usecs_to_jiffies(100); 354 do { 355 ecc_state = (davinci_nand_readl(info, 356 NANDFSR_OFFSET) >> 8) & 0x0f; 357 cpu_relax(); 358 } while ((ecc_state < 4) && time_before(jiffies, timeo)); 359 360 for (;;) { 361 u32 fsr = davinci_nand_readl(info, NANDFSR_OFFSET); 362 363 switch ((fsr >> 8) & 0x0f) { 364 case 0: /* no error, should not happen */ 365 davinci_nand_readl(info, NAND_ERR_ERRVAL1_OFFSET); 366 return 0; 367 case 1: /* five or more errors detected */ 368 davinci_nand_readl(info, NAND_ERR_ERRVAL1_OFFSET); 369 return -EBADMSG; 370 case 2: /* error addresses computed */ 371 case 3: 372 num_errors = 1 + ((fsr >> 16) & 0x03); 373 goto correct; 374 default: /* still working on it */ 375 cpu_relax(); 376 continue; 377 } 378 } 379 380 correct: 381 /* correct each error */ 382 for (i = 0, corrected = 0; i < num_errors; i++) { 383 int error_address, error_value; 384 385 if (i > 1) { 386 error_address = davinci_nand_readl(info, 387 NAND_ERR_ADD2_OFFSET); 388 error_value = davinci_nand_readl(info, 389 NAND_ERR_ERRVAL2_OFFSET); 390 } else { 391 error_address = davinci_nand_readl(info, 392 NAND_ERR_ADD1_OFFSET); 393 error_value = davinci_nand_readl(info, 394 NAND_ERR_ERRVAL1_OFFSET); 395 } 396 397 if (i & 1) { 398 error_address >>= 16; 399 error_value >>= 16; 400 } 401 error_address &= 0x3ff; 402 error_address = (512 + 7) - error_address; 403 404 if (error_address < 512) { 405 data[error_address] ^= error_value; 406 corrected++; 407 } 408 } 409 410 return corrected; 411 } 412 413 /*----------------------------------------------------------------------*/ 414 415 /* 416 * NOTE: NAND boot requires ALE == EM_A[1], CLE == EM_A[2], so that's 417 * how these chips are normally wired. This translates to both 8 and 16 418 * bit busses using ALE == BIT(3) in byte addresses, and CLE == BIT(4). 419 * 420 * For now we assume that configuration, or any other one which ignores 421 * the two LSBs for NAND access ... so we can issue 32-bit reads/writes 422 * and have that transparently morphed into multiple NAND operations. 423 */ 424 static void nand_davinci_read_buf(struct nand_chip *chip, uint8_t *buf, 425 int len) 426 { 427 if ((0x03 & ((uintptr_t)buf)) == 0 && (0x03 & len) == 0) 428 ioread32_rep(chip->legacy.IO_ADDR_R, buf, len >> 2); 429 else if ((0x01 & ((uintptr_t)buf)) == 0 && (0x01 & len) == 0) 430 ioread16_rep(chip->legacy.IO_ADDR_R, buf, len >> 1); 431 else 432 ioread8_rep(chip->legacy.IO_ADDR_R, buf, len); 433 } 434 435 static void nand_davinci_write_buf(struct nand_chip *chip, const uint8_t *buf, 436 int len) 437 { 438 if ((0x03 & ((uintptr_t)buf)) == 0 && (0x03 & len) == 0) 439 iowrite32_rep(chip->legacy.IO_ADDR_R, buf, len >> 2); 440 else if ((0x01 & ((uintptr_t)buf)) == 0 && (0x01 & len) == 0) 441 iowrite16_rep(chip->legacy.IO_ADDR_R, buf, len >> 1); 442 else 443 iowrite8_rep(chip->legacy.IO_ADDR_R, buf, len); 444 } 445 446 /* 447 * Check hardware register for wait status. Returns 1 if device is ready, 448 * 0 if it is still busy. 449 */ 450 static int nand_davinci_dev_ready(struct nand_chip *chip) 451 { 452 struct davinci_nand_info *info = to_davinci_nand(nand_to_mtd(chip)); 453 454 return davinci_nand_readl(info, NANDFSR_OFFSET) & BIT(0); 455 } 456 457 /*----------------------------------------------------------------------*/ 458 459 /* An ECC layout for using 4-bit ECC with small-page flash, storing 460 * ten ECC bytes plus the manufacturer's bad block marker byte, and 461 * and not overlapping the default BBT markers. 462 */ 463 static int hwecc4_ooblayout_small_ecc(struct mtd_info *mtd, int section, 464 struct mtd_oob_region *oobregion) 465 { 466 if (section > 2) 467 return -ERANGE; 468 469 if (!section) { 470 oobregion->offset = 0; 471 oobregion->length = 5; 472 } else if (section == 1) { 473 oobregion->offset = 6; 474 oobregion->length = 2; 475 } else { 476 oobregion->offset = 13; 477 oobregion->length = 3; 478 } 479 480 return 0; 481 } 482 483 static int hwecc4_ooblayout_small_free(struct mtd_info *mtd, int section, 484 struct mtd_oob_region *oobregion) 485 { 486 if (section > 1) 487 return -ERANGE; 488 489 if (!section) { 490 oobregion->offset = 8; 491 oobregion->length = 5; 492 } else { 493 oobregion->offset = 16; 494 oobregion->length = mtd->oobsize - 16; 495 } 496 497 return 0; 498 } 499 500 static const struct mtd_ooblayout_ops hwecc4_small_ooblayout_ops = { 501 .ecc = hwecc4_ooblayout_small_ecc, 502 .free = hwecc4_ooblayout_small_free, 503 }; 504 505 #if defined(CONFIG_OF) 506 static const struct of_device_id davinci_nand_of_match[] = { 507 {.compatible = "ti,davinci-nand", }, 508 {.compatible = "ti,keystone-nand", }, 509 {}, 510 }; 511 MODULE_DEVICE_TABLE(of, davinci_nand_of_match); 512 513 static struct davinci_nand_pdata 514 *nand_davinci_get_pdata(struct platform_device *pdev) 515 { 516 if (!dev_get_platdata(&pdev->dev) && pdev->dev.of_node) { 517 struct davinci_nand_pdata *pdata; 518 const char *mode; 519 u32 prop; 520 521 pdata = devm_kzalloc(&pdev->dev, 522 sizeof(struct davinci_nand_pdata), 523 GFP_KERNEL); 524 pdev->dev.platform_data = pdata; 525 if (!pdata) 526 return ERR_PTR(-ENOMEM); 527 if (!of_property_read_u32(pdev->dev.of_node, 528 "ti,davinci-chipselect", &prop)) 529 pdata->core_chipsel = prop; 530 else 531 return ERR_PTR(-EINVAL); 532 533 if (!of_property_read_u32(pdev->dev.of_node, 534 "ti,davinci-mask-ale", &prop)) 535 pdata->mask_ale = prop; 536 if (!of_property_read_u32(pdev->dev.of_node, 537 "ti,davinci-mask-cle", &prop)) 538 pdata->mask_cle = prop; 539 if (!of_property_read_u32(pdev->dev.of_node, 540 "ti,davinci-mask-chipsel", &prop)) 541 pdata->mask_chipsel = prop; 542 if (!of_property_read_string(pdev->dev.of_node, 543 "ti,davinci-ecc-mode", &mode)) { 544 if (!strncmp("none", mode, 4)) 545 pdata->ecc_mode = NAND_ECC_NONE; 546 if (!strncmp("soft", mode, 4)) 547 pdata->ecc_mode = NAND_ECC_SOFT; 548 if (!strncmp("hw", mode, 2)) 549 pdata->ecc_mode = NAND_ECC_HW; 550 } 551 if (!of_property_read_u32(pdev->dev.of_node, 552 "ti,davinci-ecc-bits", &prop)) 553 pdata->ecc_bits = prop; 554 555 if (!of_property_read_u32(pdev->dev.of_node, 556 "ti,davinci-nand-buswidth", &prop) && prop == 16) 557 pdata->options |= NAND_BUSWIDTH_16; 558 559 if (of_property_read_bool(pdev->dev.of_node, 560 "ti,davinci-nand-use-bbt")) 561 pdata->bbt_options = NAND_BBT_USE_FLASH; 562 563 /* 564 * Since kernel v4.8, this driver has been fixed to enable 565 * use of 4-bit hardware ECC with subpages and verified on 566 * TI's keystone EVMs (K2L, K2HK and K2E). 567 * However, in the interest of not breaking systems using 568 * existing UBI partitions, sub-page writes are not being 569 * (re)enabled. If you want to use subpage writes on Keystone 570 * platforms (i.e. do not have any existing UBI partitions), 571 * then use "ti,davinci-nand" as the compatible in your 572 * device-tree file. 573 */ 574 if (of_device_is_compatible(pdev->dev.of_node, 575 "ti,keystone-nand")) { 576 pdata->options |= NAND_NO_SUBPAGE_WRITE; 577 } 578 } 579 580 return dev_get_platdata(&pdev->dev); 581 } 582 #else 583 static struct davinci_nand_pdata 584 *nand_davinci_get_pdata(struct platform_device *pdev) 585 { 586 return dev_get_platdata(&pdev->dev); 587 } 588 #endif 589 590 static int davinci_nand_attach_chip(struct nand_chip *chip) 591 { 592 struct mtd_info *mtd = nand_to_mtd(chip); 593 struct davinci_nand_info *info = to_davinci_nand(mtd); 594 struct davinci_nand_pdata *pdata = nand_davinci_get_pdata(info->pdev); 595 int ret = 0; 596 597 if (IS_ERR(pdata)) 598 return PTR_ERR(pdata); 599 600 switch (info->chip.ecc.mode) { 601 case NAND_ECC_NONE: 602 pdata->ecc_bits = 0; 603 break; 604 case NAND_ECC_SOFT: 605 pdata->ecc_bits = 0; 606 /* 607 * This driver expects Hamming based ECC when ecc_mode is set 608 * to NAND_ECC_SOFT. Force ecc.algo to NAND_ECC_HAMMING to 609 * avoid adding an extra ->ecc_algo field to 610 * davinci_nand_pdata. 611 */ 612 info->chip.ecc.algo = NAND_ECC_HAMMING; 613 break; 614 case NAND_ECC_HW: 615 if (pdata->ecc_bits == 4) { 616 /* 617 * No sanity checks: CPUs must support this, 618 * and the chips may not use NAND_BUSWIDTH_16. 619 */ 620 621 /* No sharing 4-bit hardware between chipselects yet */ 622 spin_lock_irq(&davinci_nand_lock); 623 if (ecc4_busy) 624 ret = -EBUSY; 625 else 626 ecc4_busy = true; 627 spin_unlock_irq(&davinci_nand_lock); 628 629 if (ret == -EBUSY) 630 return ret; 631 632 info->chip.ecc.calculate = nand_davinci_calculate_4bit; 633 info->chip.ecc.correct = nand_davinci_correct_4bit; 634 info->chip.ecc.hwctl = nand_davinci_hwctl_4bit; 635 info->chip.ecc.bytes = 10; 636 info->chip.ecc.options = NAND_ECC_GENERIC_ERASED_CHECK; 637 info->chip.ecc.algo = NAND_ECC_BCH; 638 } else { 639 /* 1bit ecc hamming */ 640 info->chip.ecc.calculate = nand_davinci_calculate_1bit; 641 info->chip.ecc.correct = nand_davinci_correct_1bit; 642 info->chip.ecc.hwctl = nand_davinci_hwctl_1bit; 643 info->chip.ecc.bytes = 3; 644 info->chip.ecc.algo = NAND_ECC_HAMMING; 645 } 646 info->chip.ecc.size = 512; 647 info->chip.ecc.strength = pdata->ecc_bits; 648 break; 649 default: 650 return -EINVAL; 651 } 652 653 /* 654 * Update ECC layout if needed ... for 1-bit HW ECC, the default 655 * is OK, but it allocates 6 bytes when only 3 are needed (for 656 * each 512 bytes). For the 4-bit HW ECC, that default is not 657 * usable: 10 bytes are needed, not 6. 658 */ 659 if (pdata->ecc_bits == 4) { 660 int chunks = mtd->writesize / 512; 661 662 if (!chunks || mtd->oobsize < 16) { 663 dev_dbg(&info->pdev->dev, "too small\n"); 664 return -EINVAL; 665 } 666 667 /* For small page chips, preserve the manufacturer's 668 * badblock marking data ... and make sure a flash BBT 669 * table marker fits in the free bytes. 670 */ 671 if (chunks == 1) { 672 mtd_set_ooblayout(mtd, &hwecc4_small_ooblayout_ops); 673 } else if (chunks == 4 || chunks == 8) { 674 mtd_set_ooblayout(mtd, &nand_ooblayout_lp_ops); 675 info->chip.ecc.mode = NAND_ECC_HW_OOB_FIRST; 676 } else { 677 return -EIO; 678 } 679 } 680 681 return ret; 682 } 683 684 static const struct nand_controller_ops davinci_nand_controller_ops = { 685 .attach_chip = davinci_nand_attach_chip, 686 }; 687 688 static int nand_davinci_probe(struct platform_device *pdev) 689 { 690 struct davinci_nand_pdata *pdata; 691 struct davinci_nand_info *info; 692 struct resource *res1; 693 struct resource *res2; 694 void __iomem *vaddr; 695 void __iomem *base; 696 int ret; 697 uint32_t val; 698 struct mtd_info *mtd; 699 700 pdata = nand_davinci_get_pdata(pdev); 701 if (IS_ERR(pdata)) 702 return PTR_ERR(pdata); 703 704 /* insist on board-specific configuration */ 705 if (!pdata) 706 return -ENODEV; 707 708 /* which external chipselect will we be managing? */ 709 if (pdata->core_chipsel < 0 || pdata->core_chipsel > 3) 710 return -ENODEV; 711 712 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); 713 if (!info) 714 return -ENOMEM; 715 716 platform_set_drvdata(pdev, info); 717 718 res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); 719 res2 = platform_get_resource(pdev, IORESOURCE_MEM, 1); 720 if (!res1 || !res2) { 721 dev_err(&pdev->dev, "resource missing\n"); 722 return -EINVAL; 723 } 724 725 vaddr = devm_ioremap_resource(&pdev->dev, res1); 726 if (IS_ERR(vaddr)) 727 return PTR_ERR(vaddr); 728 729 /* 730 * This registers range is used to setup NAND settings. In case with 731 * TI AEMIF driver, the same memory address range is requested already 732 * by AEMIF, so we cannot request it twice, just ioremap. 733 * The AEMIF and NAND drivers not use the same registers in this range. 734 */ 735 base = devm_ioremap(&pdev->dev, res2->start, resource_size(res2)); 736 if (!base) { 737 dev_err(&pdev->dev, "ioremap failed for resource %pR\n", res2); 738 return -EADDRNOTAVAIL; 739 } 740 741 info->pdev = pdev; 742 info->base = base; 743 info->vaddr = vaddr; 744 745 mtd = nand_to_mtd(&info->chip); 746 mtd->dev.parent = &pdev->dev; 747 nand_set_flash_node(&info->chip, pdev->dev.of_node); 748 749 info->chip.legacy.IO_ADDR_R = vaddr; 750 info->chip.legacy.IO_ADDR_W = vaddr; 751 info->chip.legacy.chip_delay = 0; 752 info->chip.legacy.select_chip = nand_davinci_select_chip; 753 754 /* options such as NAND_BBT_USE_FLASH */ 755 info->chip.bbt_options = pdata->bbt_options; 756 /* options such as 16-bit widths */ 757 info->chip.options = pdata->options; 758 info->chip.bbt_td = pdata->bbt_td; 759 info->chip.bbt_md = pdata->bbt_md; 760 info->timing = pdata->timing; 761 762 info->current_cs = info->vaddr; 763 info->core_chipsel = pdata->core_chipsel; 764 info->mask_chipsel = pdata->mask_chipsel; 765 766 /* use nandboot-capable ALE/CLE masks by default */ 767 info->mask_ale = pdata->mask_ale ? : MASK_ALE; 768 info->mask_cle = pdata->mask_cle ? : MASK_CLE; 769 770 /* Set address of hardware control function */ 771 info->chip.legacy.cmd_ctrl = nand_davinci_hwcontrol; 772 info->chip.legacy.dev_ready = nand_davinci_dev_ready; 773 774 /* Speed up buffer I/O */ 775 info->chip.legacy.read_buf = nand_davinci_read_buf; 776 info->chip.legacy.write_buf = nand_davinci_write_buf; 777 778 /* Use board-specific ECC config */ 779 info->chip.ecc.mode = pdata->ecc_mode; 780 781 spin_lock_irq(&davinci_nand_lock); 782 783 /* put CSxNAND into NAND mode */ 784 val = davinci_nand_readl(info, NANDFCR_OFFSET); 785 val |= BIT(info->core_chipsel); 786 davinci_nand_writel(info, NANDFCR_OFFSET, val); 787 788 spin_unlock_irq(&davinci_nand_lock); 789 790 /* Scan to find existence of the device(s) */ 791 info->chip.legacy.dummy_controller.ops = &davinci_nand_controller_ops; 792 ret = nand_scan(&info->chip, pdata->mask_chipsel ? 2 : 1); 793 if (ret < 0) { 794 dev_dbg(&pdev->dev, "no NAND chip(s) found\n"); 795 return ret; 796 } 797 798 if (pdata->parts) 799 ret = mtd_device_register(mtd, pdata->parts, pdata->nr_parts); 800 else 801 ret = mtd_device_register(mtd, NULL, 0); 802 if (ret < 0) 803 goto err_cleanup_nand; 804 805 val = davinci_nand_readl(info, NRCSR_OFFSET); 806 dev_info(&pdev->dev, "controller rev. %d.%d\n", 807 (val >> 8) & 0xff, val & 0xff); 808 809 return 0; 810 811 err_cleanup_nand: 812 nand_cleanup(&info->chip); 813 814 return ret; 815 } 816 817 static int nand_davinci_remove(struct platform_device *pdev) 818 { 819 struct davinci_nand_info *info = platform_get_drvdata(pdev); 820 821 spin_lock_irq(&davinci_nand_lock); 822 if (info->chip.ecc.mode == NAND_ECC_HW_SYNDROME) 823 ecc4_busy = false; 824 spin_unlock_irq(&davinci_nand_lock); 825 826 nand_release(&info->chip); 827 828 return 0; 829 } 830 831 static struct platform_driver nand_davinci_driver = { 832 .probe = nand_davinci_probe, 833 .remove = nand_davinci_remove, 834 .driver = { 835 .name = "davinci_nand", 836 .of_match_table = of_match_ptr(davinci_nand_of_match), 837 }, 838 }; 839 MODULE_ALIAS("platform:davinci_nand"); 840 841 module_platform_driver(nand_davinci_driver); 842 843 MODULE_LICENSE("GPL"); 844 MODULE_AUTHOR("Texas Instruments"); 845 MODULE_DESCRIPTION("Davinci NAND flash driver"); 846 847