1 // SPDX-License-Identifier: GPL-2.0+
3 * LPC32xx MLC NAND flash controller driver
5 * (C) Copyright 2014 3ADEV <http://3adev.com>
6 * Written by Albert ARIBAUD <albert.aribaud@3adev.fr>
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.
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.
18 * Therefore, code which reads such late-written out-of-band data
19 * should not rely on the ECC validity.
24 #include <linux/delay.h>
25 #include <linux/errno.h>
26 #include <linux/mtd/rawnand.h>
29 #include <asm/arch/clk.h>
30 #include <asm/arch/sys_proto.h>
33 * MLC NAND controller registers.
35 struct lpc32xx_nand_mlc_registers {
36 u8 buff[32768]; /* controller's serial data buffer */
37 u8 data[32768]; /* NAND's raw data buffer */
59 /* LOCK_PR register defines */
60 #define LOCK_PR_UNLOCK_KEY 0x0000A25E /* Magic unlock value */
63 #define ICR_LARGE_BLOCKS 0x00000004 /* configure for 2KB blocks */
64 #define ICR_ADDR4 0x00000002 /* configure for 4-word addrs */
67 #define CEH_NORMAL_CE 0x00000001 /* do not force CE ON */
69 /* ISR register defines */
70 #define ISR_NAND_READY 0x00000001
71 #define ISR_CONTROLLER_READY 0x00000002
72 #define ISR_ECC_READY 0x00000004
73 #define ISR_DECODER_ERRORS(s) ((((s) >> 4) & 3)+1)
74 #define ISR_DECODER_FAILURE 0x00000040
75 #define ISR_DECODER_ERROR 0x00000008
77 /* time-out for NAND chip / controller loops, in us */
78 #define LPC32X_NAND_TIMEOUT 5000
81 * There is a single instance of the NAND MLC controller
84 static struct lpc32xx_nand_mlc_registers __iomem *lpc32xx_nand_mlc_registers
85 = (struct lpc32xx_nand_mlc_registers __iomem *)MLC_NAND_BASE;
87 #if !defined(CFG_SYS_MAX_NAND_CHIPS)
88 #define CFG_SYS_MAX_NAND_CHIPS 1
91 #define clkdiv(v, w, o) (((1+(clk/v)) & w) << o)
94 * OOB data in each small page are 6 'free' then 10 ECC bytes.
95 * To make things easier, when reading large pages, the four pages'
96 * 'free' OOB bytes are grouped in the first 24 bytes of the OOB buffer,
97 * while the the four ECC bytes are groupe in its last 40 bytes.
99 * The struct below represents how free vs ecc oob bytes are stored
102 * Note: the OOB bytes contain the bad block marker at offsets 0 and 1.
107 uint8_t free_oob_bytes[6];
110 uint8_t ecc_oob_bytes[10];
115 * Initialize the controller
118 static void lpc32xx_nand_init(void)
122 /* Configure controller for no software write protection, x8 bus
123 width, large block device, and 4 address words */
125 /* unlock controller registers with magic key */
126 writel(LOCK_PR_UNLOCK_KEY,
127 &lpc32xx_nand_mlc_registers->lock_pr);
129 /* enable large blocks and large NANDs */
130 writel(ICR_LARGE_BLOCKS | ICR_ADDR4,
131 &lpc32xx_nand_mlc_registers->icr);
133 /* Make sure MLC interrupts are disabled */
134 writel(0, &lpc32xx_nand_mlc_registers->irq_mr);
136 /* Normal chip enable operation */
137 writel(CEH_NORMAL_CE,
138 &lpc32xx_nand_mlc_registers->ceh);
140 /* Setup NAND timing */
141 clk = get_hclk_clk_rate();
144 clkdiv(CONFIG_LPC32XX_NAND_MLC_TCEA_DELAY, 0x03, 24) |
145 clkdiv(CFG_LPC32XX_NAND_MLC_BUSY_DELAY, 0x1F, 19) |
146 clkdiv(CONFIG_LPC32XX_NAND_MLC_NAND_TA, 0x07, 16) |
147 clkdiv(CONFIG_LPC32XX_NAND_MLC_RD_HIGH, 0x0F, 12) |
148 clkdiv(CONFIG_LPC32XX_NAND_MLC_RD_LOW, 0x0F, 8) |
149 clkdiv(CONFIG_LPC32XX_NAND_MLC_WR_HIGH, 0x0F, 4) |
150 clkdiv(CONFIG_LPC32XX_NAND_MLC_WR_LOW, 0x0F, 0),
151 &lpc32xx_nand_mlc_registers->time_reg);
154 #if !defined(CONFIG_SPL_BUILD)
157 * lpc32xx_cmd_ctrl - write command to either cmd or data register
160 static void lpc32xx_cmd_ctrl(struct mtd_info *mtd, int cmd,
163 if (cmd == NAND_CMD_NONE)
167 writeb(cmd & 0Xff, &lpc32xx_nand_mlc_registers->cmd);
168 else if (ctrl & NAND_ALE)
169 writeb(cmd & 0Xff, &lpc32xx_nand_mlc_registers->addr);
173 * lpc32xx_read_byte - read a byte from the NAND
174 * @mtd: MTD device structure
177 static uint8_t lpc32xx_read_byte(struct mtd_info *mtd)
179 return readb(&lpc32xx_nand_mlc_registers->data);
183 * lpc32xx_dev_ready - test if NAND device (actually controller) is ready
184 * @mtd: MTD device structure
185 * @mode: mode to set the ECC HW to.
188 static int lpc32xx_dev_ready(struct mtd_info *mtd)
190 /* means *controller* ready for us */
191 int status = readl(&lpc32xx_nand_mlc_registers->isr);
192 return status & ISR_CONTROLLER_READY;
196 * ECC layout -- this is needed whatever ECC mode we are using.
197 * In a 2KB (4*512B) page, R/S codes occupy 40 (4*10) bytes.
198 * To make U-Boot's life easier, we pack 'useable' OOB at the
199 * front and R/S ECC at the back.
202 static struct nand_ecclayout lpc32xx_largepage_ecclayout = {
204 .eccpos = {24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
205 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
206 44, 45, 46, 47, 48, 48, 50, 51, 52, 53,
207 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
210 /* bytes 0 and 1 are used for the bad block marker */
219 * lpc32xx_read_page_hwecc - read in- and out-of-band data with ECC
220 * @mtd: mtd info structure
221 * @chip: nand chip info structure
222 * @buf: buffer to store read data
223 * @oob_required: caller requires OOB data read to chip->oob_poi
224 * @page: page number to read
226 * Use large block Auto Decode Read Mode(1) as described in User Manual
229 * The initial Read Mode and Read Start commands are sent by the caller.
231 * ECC will be false if out-of-band data has been updated since in-band
232 * data was initially written.
235 static int lpc32xx_read_page_hwecc(struct mtd_info *mtd,
236 struct nand_chip *chip, uint8_t *buf, int oob_required,
239 unsigned int i, status, timeout, err, max_bitflips = 0;
240 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi;
242 /* go through all four small pages */
243 for (i = 0; i < 4; i++) {
244 /* start auto decode (reads 528 NAND bytes) */
245 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_dec_reg);
246 /* wait for controller to return to ready state */
247 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
248 status = readl(&lpc32xx_nand_mlc_registers->isr);
249 if (status & ISR_CONTROLLER_READY)
253 /* if decoder failed, return failure */
254 if (status & ISR_DECODER_FAILURE)
256 /* keep count of maximum bitflips performed */
257 if (status & ISR_DECODER_ERROR) {
258 err = ISR_DECODER_ERRORS(status);
259 if (err > max_bitflips)
262 /* copy first 512 bytes into buffer */
263 memcpy(buf+512*i, lpc32xx_nand_mlc_registers->buff, 512);
264 /* copy next 6 bytes at front of OOB buffer */
265 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->buff, 6);
266 /* copy last 10 bytes (R/S ECC) at back of OOB buffer */
267 memcpy(&oob->ecc[i], lpc32xx_nand_mlc_registers->buff, 10);
273 * lpc32xx_read_page_raw - read raw (in-band, out-of-band and ECC) data
274 * @mtd: mtd info structure
275 * @chip: nand chip info structure
276 * @buf: buffer to store read data
277 * @oob_required: caller requires OOB data read to chip->oob_poi
278 * @page: page number to read
280 * Read NAND directly; can read pages with invalid ECC.
283 static int lpc32xx_read_page_raw(struct mtd_info *mtd,
284 struct nand_chip *chip, uint8_t *buf, int oob_required,
287 unsigned int i, status, timeout;
288 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi;
290 /* when we get here we've already had the Read Mode(1) */
292 /* go through all four small pages */
293 for (i = 0; i < 4; i++) {
294 /* wait for NAND to return to ready state */
295 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
296 status = readl(&lpc32xx_nand_mlc_registers->isr);
297 if (status & ISR_NAND_READY)
301 /* if NAND stalled, return failure */
302 if (!(status & ISR_NAND_READY))
304 /* copy first 512 bytes into buffer */
305 memcpy(buf+512*i, lpc32xx_nand_mlc_registers->data, 512);
306 /* copy next 6 bytes at front of OOB buffer */
307 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->data, 6);
308 /* copy last 10 bytes (R/S ECC) at back of OOB buffer */
309 memcpy(&oob->ecc[i], lpc32xx_nand_mlc_registers->data, 10);
315 * lpc32xx_read_oob - read out-of-band data
316 * @mtd: mtd info structure
317 * @chip: nand chip info structure
318 * @page: page number to read
320 * Read out-of-band data. User Manual section 8.6.4 suggests using Read
321 * Mode(3) which the controller will turn into a Read Mode(1) internally
322 * but nand_base.c will turn Mode(3) into Mode(0), so let's use Mode(0)
325 * ECC covers in- and out-of-band data and was written when out-of-band
326 * data was blank. Therefore, if the out-of-band being read here is not
327 * blank, then the ECC will be false and the read will return bitflips,
328 * even in case of ECC failure where we will return 5 bitflips. The
329 * caller should be prepared to handle this.
332 static int lpc32xx_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
335 unsigned int i, status, timeout, err, max_bitflips = 0;
336 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi;
338 /* No command was sent before calling read_oob() so send one */
340 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
342 /* go through all four small pages */
343 for (i = 0; i < 4; i++) {
344 /* start auto decode (reads 528 NAND bytes) */
345 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_dec_reg);
346 /* wait for controller to return to ready state */
347 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
348 status = readl(&lpc32xx_nand_mlc_registers->isr);
349 if (status & ISR_CONTROLLER_READY)
353 /* if decoder failure, count 'one too many' bitflips */
354 if (status & ISR_DECODER_FAILURE)
356 /* keep count of maximum bitflips performed */
357 if (status & ISR_DECODER_ERROR) {
358 err = ISR_DECODER_ERRORS(status);
359 if (err > max_bitflips)
362 /* set read pointer to OOB area */
363 writel(0, &lpc32xx_nand_mlc_registers->robp);
364 /* copy next 6 bytes at front of OOB buffer */
365 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->buff, 6);
366 /* copy next 10 bytes (R/S ECC) at back of OOB buffer */
367 memcpy(&oob->ecc[i], lpc32xx_nand_mlc_registers->buff, 10);
373 * lpc32xx_write_page_hwecc - write in- and out-of-band data with ECC
374 * @mtd: mtd info structure
375 * @chip: nand chip info structure
377 * @oob_required: must write chip->oob_poi to OOB
379 * Use large block Auto Encode as per User Manual section 8.6.4.
381 * The initial Write Serial Input and final Auto Program commands are
382 * sent by the caller.
385 static int lpc32xx_write_page_hwecc(struct mtd_info *mtd,
386 struct nand_chip *chip, const uint8_t *buf, int oob_required,
389 unsigned int i, status, timeout;
390 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi;
392 /* when we get here we've already had the SEQIN */
393 for (i = 0; i < 4; i++) {
394 /* start encode (expects 518 writes to buff) */
395 writel(0, &lpc32xx_nand_mlc_registers->ecc_enc_reg);
396 /* copy first 512 bytes from buffer */
397 memcpy(&lpc32xx_nand_mlc_registers->buff, buf+512*i, 512);
398 /* copy next 6 bytes from OOB buffer -- excluding ECC */
399 memcpy(&lpc32xx_nand_mlc_registers->buff, &oob->free[i], 6);
400 /* wait for ECC to return to ready state */
401 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
402 status = readl(&lpc32xx_nand_mlc_registers->isr);
403 if (status & ISR_ECC_READY)
407 /* if ECC stalled, return failure */
408 if (!(status & ISR_ECC_READY))
410 /* Trigger auto encode (writes 528 bytes to NAND) */
411 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_enc_reg);
412 /* wait for controller to return to ready state */
413 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
414 status = readl(&lpc32xx_nand_mlc_registers->isr);
415 if (status & ISR_CONTROLLER_READY)
419 /* if controller stalled, return error */
420 if (!(status & ISR_CONTROLLER_READY))
427 * lpc32xx_write_page_raw - write raw (in-band, out-of-band and ECC) data
428 * @mtd: mtd info structure
429 * @chip: nand chip info structure
430 * @buf: buffer to store read data
431 * @oob_required: caller requires OOB data read to chip->oob_poi
432 * @page: page number to read
434 * Use large block write but without encode.
436 * The initial Write Serial Input and final Auto Program commands are
437 * sent by the caller.
439 * This function will write the full out-of-band data, including the
440 * ECC area. Therefore, it can write pages with valid *or* invalid ECC.
443 static int lpc32xx_write_page_raw(struct mtd_info *mtd,
444 struct nand_chip *chip, const uint8_t *buf, int oob_required,
448 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi;
450 /* when we get here we've already had the Read Mode(1) */
451 for (i = 0; i < 4; i++) {
452 /* copy first 512 bytes from buffer */
453 memcpy(lpc32xx_nand_mlc_registers->buff, buf+512*i, 512);
454 /* copy next 6 bytes into OOB buffer -- excluding ECC */
455 memcpy(lpc32xx_nand_mlc_registers->buff, &oob->free[i], 6);
456 /* copy next 10 bytes into OOB buffer -- that is 'ECC' */
457 memcpy(lpc32xx_nand_mlc_registers->buff, &oob->ecc[i], 10);
463 * lpc32xx_write_oob - write out-of-band data
464 * @mtd: mtd info structure
465 * @chip: nand chip info structure
466 * @page: page number to read
468 * Since ECC covers in- and out-of-band data, writing out-of-band data
469 * with ECC will render the page ECC wrong -- or, if the page was blank,
470 * then it will produce a good ECC but a later in-band data write will
473 * Therefore, do not compute or write any ECC, and always return success.
475 * This implies that we do four writes, since non-ECC out-of-band data
476 * are not contiguous in a large page.
479 static int lpc32xx_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
482 /* update oob on all 4 subpages in sequence */
483 unsigned int i, status, timeout;
484 struct lpc32xx_oob *oob = (struct lpc32xx_oob *)chip->oob_poi;
486 for (i = 0; i < 4; i++) {
487 /* start data input */
488 chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x200+0x210*i, page);
489 /* copy 6 non-ECC out-of-band bytes directly into NAND */
490 memcpy(lpc32xx_nand_mlc_registers->data, &oob->free[i], 6);
492 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
493 /* wait for NAND to return to ready state */
494 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
495 status = readl(&lpc32xx_nand_mlc_registers->isr);
496 if (status & ISR_NAND_READY)
500 /* if NAND stalled, return error */
501 if (!(status & ISR_NAND_READY))
508 * lpc32xx_waitfunc - wait until a command is done
509 * @mtd: MTD device structure
510 * @chip: NAND chip structure
512 * Wait for controller and FLASH to both be ready.
515 static int lpc32xx_waitfunc(struct mtd_info *mtd, struct nand_chip *chip)
518 unsigned int timeout;
519 /* wait until both controller and NAND are ready */
520 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
521 status = readl(&lpc32xx_nand_mlc_registers->isr);
522 if ((status & (ISR_CONTROLLER_READY || ISR_NAND_READY))
523 == (ISR_CONTROLLER_READY || ISR_NAND_READY))
527 /* if controller or NAND stalled, return error */
528 if ((status & (ISR_CONTROLLER_READY || ISR_NAND_READY))
529 != (ISR_CONTROLLER_READY || ISR_NAND_READY))
531 /* write NAND status command */
532 writel(NAND_CMD_STATUS, &lpc32xx_nand_mlc_registers->cmd);
533 /* read back status and return it */
534 return readb(&lpc32xx_nand_mlc_registers->data);
538 * We are self-initializing, so we need our own chip struct
541 static struct nand_chip lpc32xx_chip;
544 * Initialize the controller
547 void board_nand_init(void)
549 struct mtd_info *mtd = nand_to_mtd(&lpc32xx_chip);
552 /* Set all BOARDSPECIFIC (actually core-specific) fields */
554 lpc32xx_chip.IO_ADDR_R = &lpc32xx_nand_mlc_registers->buff;
555 lpc32xx_chip.IO_ADDR_W = &lpc32xx_nand_mlc_registers->buff;
556 lpc32xx_chip.cmd_ctrl = lpc32xx_cmd_ctrl;
557 /* do not set init_size: nand_base.c will read sizes from chip */
558 lpc32xx_chip.dev_ready = lpc32xx_dev_ready;
559 /* do not set setup_read_retry: this is NAND-chip-specific */
560 /* do not set chip_delay: we have dev_ready defined. */
561 lpc32xx_chip.options |= NAND_NO_SUBPAGE_WRITE;
563 /* Set needed ECC fields */
565 lpc32xx_chip.ecc.mode = NAND_ECC_HW;
566 lpc32xx_chip.ecc.layout = &lpc32xx_largepage_ecclayout;
567 lpc32xx_chip.ecc.size = 512;
568 lpc32xx_chip.ecc.bytes = 10;
569 lpc32xx_chip.ecc.strength = 4;
570 lpc32xx_chip.ecc.read_page = lpc32xx_read_page_hwecc;
571 lpc32xx_chip.ecc.read_page_raw = lpc32xx_read_page_raw;
572 lpc32xx_chip.ecc.write_page = lpc32xx_write_page_hwecc;
573 lpc32xx_chip.ecc.write_page_raw = lpc32xx_write_page_raw;
574 lpc32xx_chip.ecc.read_oob = lpc32xx_read_oob;
575 lpc32xx_chip.ecc.write_oob = lpc32xx_write_oob;
576 lpc32xx_chip.waitfunc = lpc32xx_waitfunc;
578 lpc32xx_chip.read_byte = lpc32xx_read_byte; /* FIXME: NEEDED? */
580 /* BBT options: read from last two pages */
581 lpc32xx_chip.bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_LASTBLOCK
582 | NAND_BBT_SCANLASTPAGE | NAND_BBT_SCAN2NDPAGE
585 /* Initialize NAND interface */
589 ret = nand_scan_ident(mtd, CFG_SYS_MAX_NAND_CHIPS, NULL);
591 pr_err("nand_scan_ident returned %i", ret);
595 /* finish scanning the chip */
596 ret = nand_scan_tail(mtd);
598 pr_err("nand_scan_tail returned %i", ret);
602 /* chip is good, register it */
603 ret = nand_register(0, mtd);
605 pr_err("nand_register returned %i", ret);
608 #else /* defined(CONFIG_SPL_BUILD) */
612 /* enable NAND controller */
613 lpc32xx_mlc_nand_init();
614 /* initialize NAND controller */
618 void nand_deselect(void)
620 /* nothing to do, but SPL requires this function */
623 static int read_single_page(uint8_t *dest, int page,
624 struct lpc32xx_oob *oob)
626 int status, i, timeout, err, max_bitflips = 0;
628 /* enter read mode */
629 writel(NAND_CMD_READ0, &lpc32xx_nand_mlc_registers->cmd);
630 /* send column (lsb then MSB) and page (lsb to MSB) */
631 writel(0, &lpc32xx_nand_mlc_registers->addr);
632 writel(0, &lpc32xx_nand_mlc_registers->addr);
633 writel(page & 0xff, &lpc32xx_nand_mlc_registers->addr);
634 writel((page>>8) & 0xff, &lpc32xx_nand_mlc_registers->addr);
635 writel((page>>16) & 0xff, &lpc32xx_nand_mlc_registers->addr);
637 writel(NAND_CMD_READSTART, &lpc32xx_nand_mlc_registers->cmd);
639 /* large page auto decode read */
640 for (i = 0; i < 4; i++) {
641 /* start auto decode (reads 528 NAND bytes) */
642 writel(0, &lpc32xx_nand_mlc_registers->ecc_auto_dec_reg);
643 /* wait for controller to return to ready state */
644 for (timeout = LPC32X_NAND_TIMEOUT; timeout; timeout--) {
645 status = readl(&lpc32xx_nand_mlc_registers->isr);
646 if (status & ISR_CONTROLLER_READY)
650 /* if controller stalled, return error */
651 if (!(status & ISR_CONTROLLER_READY))
653 /* if decoder failure, return error */
654 if (status & ISR_DECODER_FAILURE)
656 /* keep count of maximum bitflips performed */
657 if (status & ISR_DECODER_ERROR) {
658 err = ISR_DECODER_ERRORS(status);
659 if (err > max_bitflips)
662 /* copy first 512 bytes into buffer */
663 memcpy(dest+i*512, lpc32xx_nand_mlc_registers->buff, 512);
664 /* copy next 6 bytes bytes into OOB buffer */
665 memcpy(&oob->free[i], lpc32xx_nand_mlc_registers->buff, 6);
671 * Load U-Boot signed image.
672 * This loads an image from NAND, skipping bad blocks.
673 * A block is declared bad if at least one of its readable pages has
674 * a bad block marker in its OOB at position 0.
675 * If all pages ion a block are unreadable, the block is considered
676 * bad (i.e., assumed not to be part of the image) and skipped.
680 * If the first block of the image is fully unreadable, it will be
681 * ignored and skipped as if it had been marked bad. If it was not
682 * actually marked bad at the time of writing the image, the resulting
683 * image loaded will lack a header and magic number. It could thus be
684 * considered as a raw, headerless, image and SPL might erroneously
687 * In order to avoid this risk, LPC32XX-based boards which use this
688 * driver MUST define CONFIG_SPL_PANIC_ON_RAW_IMAGE.
691 #define BYTES_PER_PAGE 2048
692 #define PAGES_PER_BLOCK 64
693 #define BYTES_PER_BLOCK (BYTES_PER_PAGE * PAGES_PER_BLOCK)
694 #define PAGES_PER_CHIP_MAX 524288
696 int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst)
698 int bytes_left = size;
699 int pages_left = DIV_ROUND_UP(size, BYTES_PER_PAGE);
700 int blocks_left = DIV_ROUND_UP(size, BYTES_PER_BLOCK);
702 int page = offs / BYTES_PER_PAGE;
703 /* perform reads block by block */
704 while (blocks_left) {
705 /* compute first page number to read */
706 void *block_page_dst = dst;
707 /* read at most one block, possibly less */
708 int block_bytes_left = bytes_left;
709 if (block_bytes_left > BYTES_PER_BLOCK)
710 block_bytes_left = BYTES_PER_BLOCK;
711 /* keep track of good, failed, and "bad" pages */
712 int block_pages_good = 0;
713 int block_pages_bad = 0;
714 int block_pages_err = 0;
715 /* we shall read a full block of pages, maybe less */
716 int block_pages_left = pages_left;
717 if (block_pages_left > PAGES_PER_BLOCK)
718 block_pages_left = PAGES_PER_BLOCK;
719 int block_pages = block_pages_left;
720 int block_page = page;
721 /* while pages are left and the block is not known as bad */
722 while ((block_pages > 0) && (block_pages_bad == 0)) {
723 /* we will read OOB, too, for bad block markers */
724 struct lpc32xx_oob oob;
726 int res = read_single_page(block_page_dst, block_page,
728 /* count readable pages */
730 /* this page is good */
732 /* this page is bad */
733 if ((oob.free[0].free_oob_bytes[0] != 0xff)
734 | (oob.free[0].free_oob_bytes[1] != 0xff))
739 /* we're done with this page */
741 block_page_dst += BYTES_PER_PAGE;
745 /* a fully unreadable block is considered bad */
746 if (block_pages_good == 0)
747 block_pages_bad = block_pages_err;
748 /* errors are fatal only in good blocks */
749 if ((block_pages_err > 0) && (block_pages_bad == 0))
751 /* we keep reads only of good blocks */
752 if (block_pages_bad == 0) {
753 dst += block_bytes_left;
754 bytes_left -= block_bytes_left;
755 pages_left -= block_pages_left;
758 /* good or bad, we're done with this block */
760 page += PAGES_PER_BLOCK;
767 #endif /* CONFIG_SPL_BUILD */