1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * LPC32xx MLC NAND flash controller driver 4 * 5 * (C) Copyright 2014 3ADEV <http://3adev.com> 6 * Written by Albert ARIBAUD <albert.aribaud@3adev.fr> 7 * 8 * NOTE: 9 * 10 * The MLC NAND flash controller provides hardware Reed-Solomon ECC 11 * covering in- and out-of-band data together. Therefore, in- and out- 12 * of-band data must be written together in order to have a valid ECC. 13 * 14 * Consequently, pages with meaningful in-band data are written with 15 * blank (all-ones) out-of-band data and a valid ECC, and any later 16 * out-of-band data write will void the ECC. 17 * 18 * Therefore, code which reads such late-written out-of-band data 19 * should not rely on the ECC validity. 20 */ 21 22 #include <common.h> 23 #include <nand.h> 24 #include <linux/errno.h> 25 #include <asm/io.h> 26 #include <nand.h> 27 #include <asm/arch/clk.h> 28 #include <asm/arch/sys_proto.h> 29 30 /* 31 * MLC NAND controller registers. 32 */ 33 struct lpc32xx_nand_mlc_registers { 34 u8 buff[32768]; /* controller's serial data buffer */ 35 u8 data[32768]; /* NAND's raw data buffer */ 36 u32 cmd; 37 u32 addr; 38 u32 ecc_enc_reg; 39 u32 ecc_dec_reg; 40 u32 ecc_auto_enc_reg; 41 u32 ecc_auto_dec_reg; 42 u32 rpr; 43 u32 wpr; 44 u32 rubp; 45 u32 robp; 46 u32 sw_wp_add_low; 47 u32 sw_wp_add_hig; 48 u32 icr; 49 u32 time_reg; 50 u32 irq_mr; 51 u32 irq_sr; 52 u32 lock_pr; 53 u32 isr; 54 u32 ceh; 55 }; 56 57 /* LOCK_PR register defines */ 58 #define LOCK_PR_UNLOCK_KEY 0x0000A25E /* Magic unlock value */ 59 60 /* ICR defines */ 61 #define ICR_LARGE_BLOCKS 0x00000004 /* configure for 2KB blocks */ 62 #define ICR_ADDR4 0x00000002 /* configure for 4-word addrs */ 63 64 /* CEH defines */ 65 #define CEH_NORMAL_CE 0x00000001 /* do not force CE ON */ 66 67 /* ISR register defines */ 68 #define ISR_NAND_READY 0x00000001 69 #define ISR_CONTROLLER_READY 0x00000002 70 #define ISR_ECC_READY 0x00000004 71 #define ISR_DECODER_ERRORS(s) ((((s) >> 4) & 3)+1) 72 #define ISR_DECODER_FAILURE 0x00000040 73 #define ISR_DECODER_ERROR 0x00000008 74 75 /* time-out for NAND chip / controller loops, in us */ 76 #define LPC32X_NAND_TIMEOUT 5000 77 78 /* 79 * There is a single instance of the NAND MLC controller 80 */ 81 82 static struct lpc32xx_nand_mlc_registers __iomem *lpc32xx_nand_mlc_registers 83 = (struct lpc32xx_nand_mlc_registers __iomem *)MLC_NAND_BASE; 84 85 #if !defined(CONFIG_SYS_MAX_NAND_CHIPS) 86 #define CONFIG_SYS_MAX_NAND_CHIPS 1 87 #endif 88 89 #define clkdiv(v, w, o) (((1+(clk/v)) & w) << o) 90 91 /** 92 * OOB data in each small page are 6 'free' then 10 ECC bytes. 93 * To make things easier, when reading large pages, the four pages' 94 * 'free' OOB bytes are grouped in the first 24 bytes of the OOB buffer, 95 * while the the four ECC bytes are groupe in its last 40 bytes. 96 * 97 * The struct below represents how free vs ecc oob bytes are stored 98 * in the buffer. 99 * 100 * Note: the OOB bytes contain the bad block marker at offsets 0 and 1. 101 */ 102 103 struct lpc32xx_oob { 104 struct { 105 uint8_t free_oob_bytes[6]; 106 } free[4]; 107 struct { 108 uint8_t ecc_oob_bytes[10]; 109 } ecc[4]; 110 }; 111 112 /* 113 * Initialize the controller 114 */ 115 116 static void lpc32xx_nand_init(void) 117 { 118 unsigned int clk; 119 120 /* Configure controller for no software write protection, x8 bus 121 width, large block device, and 4 address words */ 122 123 /* unlock controller registers with magic key */ 124 writel(LOCK_PR_UNLOCK_KEY, 125 &lpc32xx_nand_mlc_registers->lock_pr); 126 127 /* enable large blocks and large NANDs */ 128 writel(ICR_LARGE_BLOCKS | ICR_ADDR4, 129 &lpc32xx_nand_mlc_registers->icr); 130 131 /* Make sure MLC interrupts are disabled */ 132 writel(0, &lpc32xx_nand_mlc_registers->irq_mr); 133 134 /* Normal chip enable operation */ 135 writel(CEH_NORMAL_CE, 136 &lpc32xx_nand_mlc_registers->ceh); 137 138 /* Setup NAND timing */ 139 clk = get_hclk_clk_rate(); 140 141 writel( 142 clkdiv(CONFIG_LPC32XX_NAND_MLC_TCEA_DELAY, 0x03, 24) | 143 clkdiv(CONFIG_LPC32XX_NAND_MLC_BUSY_DELAY, 0x1F, 19) | 144 clkdiv(CONFIG_LPC32XX_NAND_MLC_NAND_TA, 0x07, 16) | 145 clkdiv(CONFIG_LPC32XX_NAND_MLC_RD_HIGH, 0x0F, 12) | 146 clkdiv(CONFIG_LPC32XX_NAND_MLC_RD_LOW, 0x0F, 8) | 147 clkdiv(CONFIG_LPC32XX_NAND_MLC_WR_HIGH, 0x0F, 4) | 148 clkdiv(CONFIG_LPC32XX_NAND_MLC_WR_LOW, 0x0F, 0), 149 &lpc32xx_nand_mlc_registers->time_reg); 150 } 151 152 #if !defined(CONFIG_SPL_BUILD) 153 154 /** 155 * lpc32xx_cmd_ctrl - write command to either cmd or data register 156 */ 157 158 static void lpc32xx_cmd_ctrl(struct mtd_info *mtd, int cmd, 159 unsigned int ctrl) 160 { 161 if (cmd == NAND_CMD_NONE) 162 return; 163 164 if (ctrl & NAND_CLE) 165 writeb(cmd & 0Xff, &lpc32xx_nand_mlc_registers->cmd); 166 else if (ctrl & NAND_ALE) 167 writeb(cmd & 0Xff, &lpc32xx_nand_mlc_registers->addr); 168 } 169 170 /** 171 * lpc32xx_read_byte - read a byte from the NAND 172 * @mtd: MTD device structure 173 */ 174 175 static uint8_t lpc32xx_read_byte(struct mtd_info *mtd) 176 { 177 return readb(&lpc32xx_nand_mlc_registers->data); 178 } 179 180 /** 181 * lpc32xx_dev_ready - test if NAND device (actually controller) is ready 182 * @mtd: MTD device structure 183 * @mode: mode to set the ECC HW to. 184 */ 185 186 static int lpc32xx_dev_ready(struct mtd_info *mtd) 187 { 188 /* means *controller* ready for us */ 189 int status = readl(&lpc32xx_nand_mlc_registers->isr); 190 return status & ISR_CONTROLLER_READY; 191 } 192 193 /** 194 * ECC layout -- this is needed whatever ECC mode we are using. 195 * In a 2KB (4*512B) page, R/S codes occupy 40 (4*10) bytes. 196 * To make U-Boot's life easier, we pack 'useable' OOB at the 197 * front and R/S ECC at the back. 198 */ 199 200 static struct nand_ecclayout lpc32xx_largepage_ecclayout = { 201 .eccbytes = 40, 202 .eccpos = {24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 203 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 204 44, 45, 46, 47, 48, 48, 50, 51, 52, 53, 205 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 206 }, 207 .oobfree = { 208 /* bytes 0 and 1 are used for the bad block marker */ 209 { 210 .offset = 2, 211 .length = 22 212 }, 213 } 214 }; 215 216 /** 217 * lpc32xx_read_page_hwecc - read in- and out-of-band data with ECC 218 * @mtd: mtd info structure 219 * @chip: nand chip info structure 220 * @buf: buffer to store read data 221 * @oob_required: caller requires OOB data read to chip->oob_poi 222 * @page: page number to read 223 * 224 * Use large block Auto Decode Read Mode(1) as described in User Manual 225 * section 8.6.2.1. 226 * 227 * The initial Read Mode and Read Start commands are sent by the caller. 228 * 229 * ECC will be false if out-of-band data has been updated since in-band 230 * data was initially written. 231 */ 232 233 static int lpc32xx_read_page_hwecc(struct mtd_info *mtd, 234 struct nand_chip *chip, uint8_t *buf, int oob_required, 235 int page) 236 { 237 unsigned int i, status, timeout, err, max_bitflips = 0; 238 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi; 239 240 /* go through all four small pages */ 241 for (i = 0; i < 4; i++) { 242 /* start auto decode (reads 528 NAND bytes) */ 243 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_dec_reg); 244 /* wait for controller to return to ready state */ 245 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 246 status = readl(&lpc32xx_nand_mlc_registers->isr); 247 if (status & ISR_CONTROLLER_READY) 248 break; 249 udelay(1); 250 } 251 /* if decoder failed, return failure */ 252 if (status & ISR_DECODER_FAILURE) 253 return -1; 254 /* keep count of maximum bitflips performed */ 255 if (status & ISR_DECODER_ERROR) { 256 err = ISR_DECODER_ERRORS(status); 257 if (err > max_bitflips) 258 max_bitflips = err; 259 } 260 /* copy first 512 bytes into buffer */ 261 memcpy(buf+512*i, lpc32xx_nand_mlc_registers->buff, 512); 262 /* copy next 6 bytes at front of OOB buffer */ 263 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->buff, 6); 264 /* copy last 10 bytes (R/S ECC) at back of OOB buffer */ 265 memcpy(&oob->ecc[i], lpc32xx_nand_mlc_registers->buff, 10); 266 } 267 return max_bitflips; 268 } 269 270 /** 271 * lpc32xx_read_page_raw - read raw (in-band, out-of-band and ECC) data 272 * @mtd: mtd info structure 273 * @chip: nand chip info structure 274 * @buf: buffer to store read data 275 * @oob_required: caller requires OOB data read to chip->oob_poi 276 * @page: page number to read 277 * 278 * Read NAND directly; can read pages with invalid ECC. 279 */ 280 281 static int lpc32xx_read_page_raw(struct mtd_info *mtd, 282 struct nand_chip *chip, uint8_t *buf, int oob_required, 283 int page) 284 { 285 unsigned int i, status, timeout; 286 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi; 287 288 /* when we get here we've already had the Read Mode(1) */ 289 290 /* go through all four small pages */ 291 for (i = 0; i < 4; i++) { 292 /* wait for NAND to return to ready state */ 293 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 294 status = readl(&lpc32xx_nand_mlc_registers->isr); 295 if (status & ISR_NAND_READY) 296 break; 297 udelay(1); 298 } 299 /* if NAND stalled, return failure */ 300 if (!(status & ISR_NAND_READY)) 301 return -1; 302 /* copy first 512 bytes into buffer */ 303 memcpy(buf+512*i, lpc32xx_nand_mlc_registers->data, 512); 304 /* copy next 6 bytes at front of OOB buffer */ 305 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->data, 6); 306 /* copy last 10 bytes (R/S ECC) at back of OOB buffer */ 307 memcpy(&oob->ecc[i], lpc32xx_nand_mlc_registers->data, 10); 308 } 309 return 0; 310 } 311 312 /** 313 * lpc32xx_read_oob - read out-of-band data 314 * @mtd: mtd info structure 315 * @chip: nand chip info structure 316 * @page: page number to read 317 * 318 * Read out-of-band data. User Manual section 8.6.4 suggests using Read 319 * Mode(3) which the controller will turn into a Read Mode(1) internally 320 * but nand_base.c will turn Mode(3) into Mode(0), so let's use Mode(0) 321 * directly. 322 * 323 * ECC covers in- and out-of-band data and was written when out-of-band 324 * data was blank. Therefore, if the out-of-band being read here is not 325 * blank, then the ECC will be false and the read will return bitflips, 326 * even in case of ECC failure where we will return 5 bitflips. The 327 * caller should be prepared to handle this. 328 */ 329 330 static int lpc32xx_read_oob(struct mtd_info *mtd, struct nand_chip *chip, 331 int page) 332 { 333 unsigned int i, status, timeout, err, max_bitflips = 0; 334 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi; 335 336 /* No command was sent before calling read_oob() so send one */ 337 338 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page); 339 340 /* go through all four small pages */ 341 for (i = 0; i < 4; i++) { 342 /* start auto decode (reads 528 NAND bytes) */ 343 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_dec_reg); 344 /* wait for controller to return to ready state */ 345 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 346 status = readl(&lpc32xx_nand_mlc_registers->isr); 347 if (status & ISR_CONTROLLER_READY) 348 break; 349 udelay(1); 350 } 351 /* if decoder failure, count 'one too many' bitflips */ 352 if (status & ISR_DECODER_FAILURE) 353 max_bitflips = 5; 354 /* keep count of maximum bitflips performed */ 355 if (status & ISR_DECODER_ERROR) { 356 err = ISR_DECODER_ERRORS(status); 357 if (err > max_bitflips) 358 max_bitflips = err; 359 } 360 /* set read pointer to OOB area */ 361 writel(0, &lpc32xx_nand_mlc_registers->robp); 362 /* copy next 6 bytes at front of OOB buffer */ 363 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->buff, 6); 364 /* copy next 10 bytes (R/S ECC) at back of OOB buffer */ 365 memcpy(&oob->ecc[i], lpc32xx_nand_mlc_registers->buff, 10); 366 } 367 return max_bitflips; 368 } 369 370 /** 371 * lpc32xx_write_page_hwecc - write in- and out-of-band data with ECC 372 * @mtd: mtd info structure 373 * @chip: nand chip info structure 374 * @buf: data buffer 375 * @oob_required: must write chip->oob_poi to OOB 376 * 377 * Use large block Auto Encode as per User Manual section 8.6.4. 378 * 379 * The initial Write Serial Input and final Auto Program commands are 380 * sent by the caller. 381 */ 382 383 static int lpc32xx_write_page_hwecc(struct mtd_info *mtd, 384 struct nand_chip *chip, const uint8_t *buf, int oob_required, 385 int page) 386 { 387 unsigned int i, status, timeout; 388 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi; 389 390 /* when we get here we've already had the SEQIN */ 391 for (i = 0; i < 4; i++) { 392 /* start encode (expects 518 writes to buff) */ 393 writel(0, &lpc32xx_nand_mlc_registers->ecc_enc_reg); 394 /* copy first 512 bytes from buffer */ 395 memcpy(&lpc32xx_nand_mlc_registers->buff, buf+512*i, 512); 396 /* copy next 6 bytes from OOB buffer -- excluding ECC */ 397 memcpy(&lpc32xx_nand_mlc_registers->buff, &oob->free[i], 6); 398 /* wait for ECC to return to ready state */ 399 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 400 status = readl(&lpc32xx_nand_mlc_registers->isr); 401 if (status & ISR_ECC_READY) 402 break; 403 udelay(1); 404 } 405 /* if ECC stalled, return failure */ 406 if (!(status & ISR_ECC_READY)) 407 return -1; 408 /* Trigger auto encode (writes 528 bytes to NAND) */ 409 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_enc_reg); 410 /* wait for controller to return to ready state */ 411 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 412 status = readl(&lpc32xx_nand_mlc_registers->isr); 413 if (status & ISR_CONTROLLER_READY) 414 break; 415 udelay(1); 416 } 417 /* if controller stalled, return error */ 418 if (!(status & ISR_CONTROLLER_READY)) 419 return -1; 420 } 421 return 0; 422 } 423 424 /** 425 * lpc32xx_write_page_raw - write raw (in-band, out-of-band and ECC) data 426 * @mtd: mtd info structure 427 * @chip: nand chip info structure 428 * @buf: buffer to store read data 429 * @oob_required: caller requires OOB data read to chip->oob_poi 430 * @page: page number to read 431 * 432 * Use large block write but without encode. 433 * 434 * The initial Write Serial Input and final Auto Program commands are 435 * sent by the caller. 436 * 437 * This function will write the full out-of-band data, including the 438 * ECC area. Therefore, it can write pages with valid *or* invalid ECC. 439 */ 440 441 static int lpc32xx_write_page_raw(struct mtd_info *mtd, 442 struct nand_chip *chip, const uint8_t *buf, int oob_required, 443 int page) 444 { 445 unsigned int i; 446 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi; 447 448 /* when we get here we've already had the Read Mode(1) */ 449 for (i = 0; i < 4; i++) { 450 /* copy first 512 bytes from buffer */ 451 memcpy(lpc32xx_nand_mlc_registers->buff, buf+512*i, 512); 452 /* copy next 6 bytes into OOB buffer -- excluding ECC */ 453 memcpy(lpc32xx_nand_mlc_registers->buff, &oob->free[i], 6); 454 /* copy next 10 bytes into OOB buffer -- that is 'ECC' */ 455 memcpy(lpc32xx_nand_mlc_registers->buff, &oob->ecc[i], 10); 456 } 457 return 0; 458 } 459 460 /** 461 * lpc32xx_write_oob - write out-of-band data 462 * @mtd: mtd info structure 463 * @chip: nand chip info structure 464 * @page: page number to read 465 * 466 * Since ECC covers in- and out-of-band data, writing out-of-band data 467 * with ECC will render the page ECC wrong -- or, if the page was blank, 468 * then it will produce a good ECC but a later in-band data write will 469 * render it wrong. 470 * 471 * Therefore, do not compute or write any ECC, and always return success. 472 * 473 * This implies that we do four writes, since non-ECC out-of-band data 474 * are not contiguous in a large page. 475 */ 476 477 static int lpc32xx_write_oob(struct mtd_info *mtd, struct nand_chip *chip, 478 int page) 479 { 480 /* update oob on all 4 subpages in sequence */ 481 unsigned int i, status, timeout; 482 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi; 483 484 for (i = 0; i < 4; i++) { 485 /* start data input */ 486 chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x200+0x210*i, page); 487 /* copy 6 non-ECC out-of-band bytes directly into NAND */ 488 memcpy(lpc32xx_nand_mlc_registers->data, &oob->free[i], 6); 489 /* program page */ 490 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); 491 /* wait for NAND to return to ready state */ 492 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 493 status = readl(&lpc32xx_nand_mlc_registers->isr); 494 if (status & ISR_NAND_READY) 495 break; 496 udelay(1); 497 } 498 /* if NAND stalled, return error */ 499 if (!(status & ISR_NAND_READY)) 500 return -1; 501 } 502 return 0; 503 } 504 505 /** 506 * lpc32xx_waitfunc - wait until a command is done 507 * @mtd: MTD device structure 508 * @chip: NAND chip structure 509 * 510 * Wait for controller and FLASH to both be ready. 511 */ 512 513 static int lpc32xx_waitfunc(struct mtd_info *mtd, struct nand_chip *chip) 514 { 515 int status; 516 unsigned int timeout; 517 /* wait until both controller and NAND are ready */ 518 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 519 status = readl(&lpc32xx_nand_mlc_registers->isr); 520 if ((status & (ISR_CONTROLLER_READY || ISR_NAND_READY)) 521 == (ISR_CONTROLLER_READY || ISR_NAND_READY)) 522 break; 523 udelay(1); 524 } 525 /* if controller or NAND stalled, return error */ 526 if ((status & (ISR_CONTROLLER_READY || ISR_NAND_READY)) 527 != (ISR_CONTROLLER_READY || ISR_NAND_READY)) 528 return -1; 529 /* write NAND status command */ 530 writel(NAND_CMD_STATUS, &lpc32xx_nand_mlc_registers->cmd); 531 /* read back status and return it */ 532 return readb(&lpc32xx_nand_mlc_registers->data); 533 } 534 535 /* 536 * We are self-initializing, so we need our own chip struct 537 */ 538 539 static struct nand_chip lpc32xx_chip; 540 541 /* 542 * Initialize the controller 543 */ 544 545 void board_nand_init(void) 546 { 547 struct mtd_info *mtd = nand_to_mtd(&lpc32xx_chip); 548 int ret; 549 550 /* Set all BOARDSPECIFIC (actually core-specific) fields */ 551 552 lpc32xx_chip.IO_ADDR_R = &lpc32xx_nand_mlc_registers->buff; 553 lpc32xx_chip.IO_ADDR_W = &lpc32xx_nand_mlc_registers->buff; 554 lpc32xx_chip.cmd_ctrl = lpc32xx_cmd_ctrl; 555 /* do not set init_size: nand_base.c will read sizes from chip */ 556 lpc32xx_chip.dev_ready = lpc32xx_dev_ready; 557 /* do not set setup_read_retry: this is NAND-chip-specific */ 558 /* do not set chip_delay: we have dev_ready defined. */ 559 lpc32xx_chip.options |= NAND_NO_SUBPAGE_WRITE; 560 561 /* Set needed ECC fields */ 562 563 lpc32xx_chip.ecc.mode = NAND_ECC_HW; 564 lpc32xx_chip.ecc.layout = &lpc32xx_largepage_ecclayout; 565 lpc32xx_chip.ecc.size = 512; 566 lpc32xx_chip.ecc.bytes = 10; 567 lpc32xx_chip.ecc.strength = 4; 568 lpc32xx_chip.ecc.read_page = lpc32xx_read_page_hwecc; 569 lpc32xx_chip.ecc.read_page_raw = lpc32xx_read_page_raw; 570 lpc32xx_chip.ecc.write_page = lpc32xx_write_page_hwecc; 571 lpc32xx_chip.ecc.write_page_raw = lpc32xx_write_page_raw; 572 lpc32xx_chip.ecc.read_oob = lpc32xx_read_oob; 573 lpc32xx_chip.ecc.write_oob = lpc32xx_write_oob; 574 lpc32xx_chip.waitfunc = lpc32xx_waitfunc; 575 576 lpc32xx_chip.read_byte = lpc32xx_read_byte; /* FIXME: NEEDED? */ 577 578 /* BBT options: read from last two pages */ 579 lpc32xx_chip.bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_LASTBLOCK 580 | NAND_BBT_SCANLASTPAGE | NAND_BBT_SCAN2NDPAGE 581 | NAND_BBT_WRITE; 582 583 /* Initialize NAND interface */ 584 lpc32xx_nand_init(); 585 586 /* identify chip */ 587 ret = nand_scan_ident(mtd, CONFIG_SYS_MAX_NAND_CHIPS, NULL); 588 if (ret) { 589 pr_err("nand_scan_ident returned %i", ret); 590 return; 591 } 592 593 /* finish scanning the chip */ 594 ret = nand_scan_tail(mtd); 595 if (ret) { 596 pr_err("nand_scan_tail returned %i", ret); 597 return; 598 } 599 600 /* chip is good, register it */ 601 ret = nand_register(0, mtd); 602 if (ret) 603 pr_err("nand_register returned %i", ret); 604 } 605 606 #else /* defined(CONFIG_SPL_BUILD) */ 607 608 void nand_init(void) 609 { 610 /* enable NAND controller */ 611 lpc32xx_mlc_nand_init(); 612 /* initialize NAND controller */ 613 lpc32xx_nand_init(); 614 } 615 616 void nand_deselect(void) 617 { 618 /* nothing to do, but SPL requires this function */ 619 } 620 621 static int read_single_page(uint8_t *dest, int page, 622 struct lpc32xx_oob *oob) 623 { 624 int status, i, timeout, err, max_bitflips = 0; 625 626 /* enter read mode */ 627 writel(NAND_CMD_READ0, &lpc32xx_nand_mlc_registers->cmd); 628 /* send column (lsb then MSB) and page (lsb to MSB) */ 629 writel(0, &lpc32xx_nand_mlc_registers->addr); 630 writel(0, &lpc32xx_nand_mlc_registers->addr); 631 writel(page & 0xff, &lpc32xx_nand_mlc_registers->addr); 632 writel((page>>8) & 0xff, &lpc32xx_nand_mlc_registers->addr); 633 writel((page>>16) & 0xff, &lpc32xx_nand_mlc_registers->addr); 634 /* start reading */ 635 writel(NAND_CMD_READSTART, &lpc32xx_nand_mlc_registers->cmd); 636 637 /* large page auto decode read */ 638 for (i = 0; i < 4; i++) { 639 /* start auto decode (reads 528 NAND bytes) */ 640 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_dec_reg); 641 /* wait for controller to return to ready state */ 642 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) { 643 status = readl(&lpc32xx_nand_mlc_registers->isr); 644 if (status & ISR_CONTROLLER_READY) 645 break; 646 udelay(1); 647 } 648 /* if controller stalled, return error */ 649 if (!(status & ISR_CONTROLLER_READY)) 650 return -1; 651 /* if decoder failure, return error */ 652 if (status & ISR_DECODER_FAILURE) 653 return -1; 654 /* keep count of maximum bitflips performed */ 655 if (status & ISR_DECODER_ERROR) { 656 err = ISR_DECODER_ERRORS(status); 657 if (err > max_bitflips) 658 max_bitflips = err; 659 } 660 /* copy first 512 bytes into buffer */ 661 memcpy(dest+i*512, lpc32xx_nand_mlc_registers->buff, 512); 662 /* copy next 6 bytes bytes into OOB buffer */ 663 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->buff, 6); 664 } 665 return max_bitflips; 666 } 667 668 /* 669 * Load U-Boot signed image. 670 * This loads an image from NAND, skipping bad blocks. 671 * A block is declared bad if at least one of its readable pages has 672 * a bad block marker in its OOB at position 0. 673 * If all pages ion a block are unreadable, the block is considered 674 * bad (i.e., assumed not to be part of the image) and skipped. 675 * 676 * IMPORTANT NOTE: 677 * 678 * If the first block of the image is fully unreadable, it will be 679 * ignored and skipped as if it had been marked bad. If it was not 680 * actually marked bad at the time of writing the image, the resulting 681 * image loaded will lack a header and magic number. It could thus be 682 * considered as a raw, headerless, image and SPL might erroneously 683 * jump into it. 684 * 685 * In order to avoid this risk, LPC32XX-based boards which use this 686 * driver MUST define CONFIG_SPL_PANIC_ON_RAW_IMAGE. 687 */ 688 689 #define BYTES_PER_PAGE 2048 690 #define PAGES_PER_BLOCK 64 691 #define BYTES_PER_BLOCK (BYTES_PER_PAGE * PAGES_PER_BLOCK) 692 #define PAGES_PER_CHIP_MAX 524288 693 694 int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst) 695 { 696 int bytes_left = size; 697 int pages_left = DIV_ROUND_UP(size, BYTES_PER_PAGE); 698 int blocks_left = DIV_ROUND_UP(size, BYTES_PER_BLOCK); 699 int block = 0; 700 int page = offs / BYTES_PER_PAGE; 701 /* perform reads block by block */ 702 while (blocks_left) { 703 /* compute first page number to read */ 704 void *block_page_dst = dst; 705 /* read at most one block, possibly less */ 706 int block_bytes_left = bytes_left; 707 if (block_bytes_left > BYTES_PER_BLOCK) 708 block_bytes_left = BYTES_PER_BLOCK; 709 /* keep track of good, failed, and "bad" pages */ 710 int block_pages_good = 0; 711 int block_pages_bad = 0; 712 int block_pages_err = 0; 713 /* we shall read a full block of pages, maybe less */ 714 int block_pages_left = pages_left; 715 if (block_pages_left > PAGES_PER_BLOCK) 716 block_pages_left = PAGES_PER_BLOCK; 717 int block_pages = block_pages_left; 718 int block_page = page; 719 /* while pages are left and the block is not known as bad */ 720 while ((block_pages > 0) && (block_pages_bad == 0)) { 721 /* we will read OOB, too, for bad block markers */ 722 struct lpc32xx_oob oob; 723 /* read page */ 724 int res = read_single_page(block_page_dst, block_page, 725 &oob); 726 /* count readable pages */ 727 if (res >= 0) { 728 /* this page is good */ 729 block_pages_good++; 730 /* this page is bad */ 731 if ((oob.free[0].free_oob_bytes[0] != 0xff) 732 | (oob.free[0].free_oob_bytes[1] != 0xff)) 733 block_pages_bad++; 734 } else 735 /* count errors */ 736 block_pages_err++; 737 /* we're done with this page */ 738 block_page++; 739 block_page_dst += BYTES_PER_PAGE; 740 if (block_pages) 741 block_pages--; 742 } 743 /* a fully unreadable block is considered bad */ 744 if (block_pages_good == 0) 745 block_pages_bad = block_pages_err; 746 /* errors are fatal only in good blocks */ 747 if ((block_pages_err > 0) && (block_pages_bad == 0)) 748 return -1; 749 /* we keep reads only of good blocks */ 750 if (block_pages_bad == 0) { 751 dst += block_bytes_left; 752 bytes_left -= block_bytes_left; 753 pages_left -= block_pages_left; 754 blocks_left--; 755 } 756 /* good or bad, we're done with this block */ 757 block++; 758 page += PAGES_PER_BLOCK; 759 } 760 761 /* report success */ 762 return 0; 763 } 764 765 #endif /* CONFIG_SPL_BUILD */ 766