uboot/drivers/mtd/nand/raw/lpc32xx_nand_mlc.c
<<
>>
Prefs
   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 */
  33struct 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
  82static 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
 103struct 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
 116static 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
 158static 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
 175static 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
 186static 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
 200static 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
 233static 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
 281static 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
 330static 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
 383static 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
 441static 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
 477static 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
 513static 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
 539static struct nand_chip lpc32xx_chip;
 540
 541/*
 542 * Initialize the controller
 543 */
 544
 545void 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
 608void nand_init(void)
 609{
 610        /* enable NAND controller */
 611        lpc32xx_mlc_nand_init();
 612        /* initialize NAND controller */
 613        lpc32xx_nand_init();
 614}
 615
 616void nand_deselect(void)
 617{
 618        /* nothing to do, but SPL requires this function */
 619}
 620
 621static 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
 694int 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