5 * This is the generic MTD driver for NAND flash devices. It should be
6 * capable of working with almost all NAND chips currently available.
7 * Basic support for AG-AND chips is provided.
9 * Additional technical information is available on
10 * http://www.linux-mtd.infradead.org/doc/nand.html
12 * Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
13 * 2002-2006 Thomas Gleixner (tglx@linutronix.de)
16 * David Woodhouse for adding multichip support
18 * Aleph One Ltd. and Toby Churchill Ltd. for supporting the
19 * rework for 2K page size chips
22 * Enable cached programming for 2k page size chips
23 * Check, if mtd->ecctype should be set to MTD_ECC_HW
24 * if we have HW ecc support.
25 * The AG-AND chips have nice features for speed improvement,
26 * which are not supported yet. Read / program 4 pages in one go.
27 * BBT table is not serialized, has to be fixed
29 * This program is free software; you can redistribute it and/or modify
30 * it under the terms of the GNU General Public License version 2 as
31 * published by the Free Software Foundation.
37 #define ENOTSUPP 524 /* Operation is not supported */
41 #include <linux/err.h>
42 #include <linux/compat.h>
43 #include <linux/mtd/mtd.h>
44 #include <linux/mtd/nand.h>
45 #include <linux/mtd/nand_ecc.h>
46 #include <linux/mtd/nand_bch.h>
48 #ifdef CONFIG_MTD_PARTITIONS
49 #include <linux/mtd/partitions.h>
53 #include <asm/errno.h>
56 * CONFIG_SYS_NAND_RESET_CNT is used as a timeout mechanism when resetting
57 * a flash. NAND flash is initialized prior to interrupts so standard timers
58 * can't be used. CONFIG_SYS_NAND_RESET_CNT should be set to a value
59 * which is greater than (max NAND reset time / NAND status read time).
60 * A conservative default of 200000 (500 us / 25 ns) is used as a default.
62 #ifndef CONFIG_SYS_NAND_RESET_CNT
63 #define CONFIG_SYS_NAND_RESET_CNT 200000
66 /* Define default oob placement schemes for large and small page devices */
67 static struct nand_ecclayout nand_oob_8 = {
77 static struct nand_ecclayout nand_oob_16 = {
79 .eccpos = {0, 1, 2, 3, 6, 7},
85 static struct nand_ecclayout nand_oob_64 = {
88 40, 41, 42, 43, 44, 45, 46, 47,
89 48, 49, 50, 51, 52, 53, 54, 55,
90 56, 57, 58, 59, 60, 61, 62, 63},
96 static struct nand_ecclayout nand_oob_128 = {
99 80, 81, 82, 83, 84, 85, 86, 87,
100 88, 89, 90, 91, 92, 93, 94, 95,
101 96, 97, 98, 99, 100, 101, 102, 103,
102 104, 105, 106, 107, 108, 109, 110, 111,
103 112, 113, 114, 115, 116, 117, 118, 119,
104 120, 121, 122, 123, 124, 125, 126, 127},
110 static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd,
113 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
114 struct mtd_oob_ops *ops);
116 static int nand_wait(struct mtd_info *mtd, struct nand_chip *this);
118 static int check_offs_len(struct mtd_info *mtd,
119 loff_t ofs, uint64_t len)
121 struct nand_chip *chip = mtd->priv;
124 /* Start address must align on block boundary */
125 if (ofs & ((1 << chip->phys_erase_shift) - 1)) {
126 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Unaligned address\n", __func__);
130 /* Length must align on block boundary */
131 if (len & ((1 << chip->phys_erase_shift) - 1)) {
132 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Length not block aligned\n",
137 /* Do not allow past end of device */
138 if (ofs + len > mtd->size) {
139 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Past end of device\n",
148 * nand_release_device - [GENERIC] release chip
149 * @mtd: MTD device structure
151 * Deselect, release chip lock and wake up anyone waiting on the device
153 static void nand_release_device(struct mtd_info *mtd)
155 struct nand_chip *chip = mtd->priv;
157 /* De-select the NAND device */
158 chip->select_chip(mtd, -1);
162 * nand_read_byte - [DEFAULT] read one byte from the chip
163 * @mtd: MTD device structure
165 * Default read function for 8bit buswith
167 uint8_t nand_read_byte(struct mtd_info *mtd)
169 struct nand_chip *chip = mtd->priv;
170 return readb(chip->IO_ADDR_R);
174 * nand_read_byte16 - [DEFAULT] read one byte endianess aware from the chip
175 * @mtd: MTD device structure
177 * Default read function for 16bit buswith with
178 * endianess conversion
180 static uint8_t nand_read_byte16(struct mtd_info *mtd)
182 struct nand_chip *chip = mtd->priv;
183 return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R));
187 * nand_read_word - [DEFAULT] read one word from the chip
188 * @mtd: MTD device structure
190 * Default read function for 16bit buswith without
191 * endianess conversion
193 static u16 nand_read_word(struct mtd_info *mtd)
195 struct nand_chip *chip = mtd->priv;
196 return readw(chip->IO_ADDR_R);
200 * nand_select_chip - [DEFAULT] control CE line
201 * @mtd: MTD device structure
202 * @chipnr: chipnumber to select, -1 for deselect
204 * Default select function for 1 chip devices.
206 static void nand_select_chip(struct mtd_info *mtd, int chipnr)
208 struct nand_chip *chip = mtd->priv;
212 chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
223 * nand_write_buf - [DEFAULT] write buffer to chip
224 * @mtd: MTD device structure
226 * @len: number of bytes to write
228 * Default write function for 8bit buswith
230 void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
233 struct nand_chip *chip = mtd->priv;
235 for (i = 0; i < len; i++)
236 writeb(buf[i], chip->IO_ADDR_W);
240 * nand_read_buf - [DEFAULT] read chip data into buffer
241 * @mtd: MTD device structure
242 * @buf: buffer to store date
243 * @len: number of bytes to read
245 * Default read function for 8bit buswith
247 void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
250 struct nand_chip *chip = mtd->priv;
252 for (i = 0; i < len; i++)
253 buf[i] = readb(chip->IO_ADDR_R);
257 * nand_verify_buf - [DEFAULT] Verify chip data against buffer
258 * @mtd: MTD device structure
259 * @buf: buffer containing the data to compare
260 * @len: number of bytes to compare
262 * Default verify function for 8bit buswith
264 static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
267 struct nand_chip *chip = mtd->priv;
269 for (i = 0; i < len; i++)
270 if (buf[i] != readb(chip->IO_ADDR_R))
276 * nand_write_buf16 - [DEFAULT] write buffer to chip
277 * @mtd: MTD device structure
279 * @len: number of bytes to write
281 * Default write function for 16bit buswith
283 void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
286 struct nand_chip *chip = mtd->priv;
287 u16 *p = (u16 *) buf;
290 for (i = 0; i < len; i++)
291 writew(p[i], chip->IO_ADDR_W);
296 * nand_read_buf16 - [DEFAULT] read chip data into buffer
297 * @mtd: MTD device structure
298 * @buf: buffer to store date
299 * @len: number of bytes to read
301 * Default read function for 16bit buswith
303 void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
306 struct nand_chip *chip = mtd->priv;
307 u16 *p = (u16 *) buf;
310 for (i = 0; i < len; i++)
311 p[i] = readw(chip->IO_ADDR_R);
315 * nand_verify_buf16 - [DEFAULT] Verify chip data against buffer
316 * @mtd: MTD device structure
317 * @buf: buffer containing the data to compare
318 * @len: number of bytes to compare
320 * Default verify function for 16bit buswith
322 static int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
325 struct nand_chip *chip = mtd->priv;
326 u16 *p = (u16 *) buf;
329 for (i = 0; i < len; i++)
330 if (p[i] != readw(chip->IO_ADDR_R))
337 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
338 * @mtd: MTD device structure
339 * @ofs: offset from device start
340 * @getchip: 0, if the chip is already selected
342 * Check, if the block is bad.
344 static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
346 int page, chipnr, res = 0;
347 struct nand_chip *chip = mtd->priv;
350 if (chip->options & NAND_BBT_SCANLASTPAGE)
351 ofs += mtd->erasesize - mtd->writesize;
353 page = (int)(ofs >> chip->page_shift) & chip->pagemask;
356 chipnr = (int)(ofs >> chip->chip_shift);
358 nand_get_device(chip, mtd, FL_READING);
360 /* Select the NAND device */
361 chip->select_chip(mtd, chipnr);
364 if (chip->options & NAND_BUSWIDTH_16) {
365 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos & 0xFE,
367 bad = cpu_to_le16(chip->read_word(mtd));
368 if (chip->badblockpos & 0x1)
373 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, page);
374 bad = chip->read_byte(mtd);
377 if (likely(chip->badblockbits == 8))
380 res = hweight8(bad) < chip->badblockbits;
383 nand_release_device(mtd);
389 * nand_default_block_markbad - [DEFAULT] mark a block bad
390 * @mtd: MTD device structure
391 * @ofs: offset from device start
393 * This is the default implementation, which can be overridden by
394 * a hardware specific driver.
396 static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
398 struct nand_chip *chip = mtd->priv;
399 uint8_t buf[2] = { 0, 0 };
400 int block, ret, i = 0;
402 if (chip->options & NAND_BBT_SCANLASTPAGE)
403 ofs += mtd->erasesize - mtd->writesize;
405 /* Get block number */
406 block = (int)(ofs >> chip->bbt_erase_shift);
408 chip->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
410 /* Do we have a flash based bad block table ? */
411 if (chip->options & NAND_USE_FLASH_BBT)
412 ret = nand_update_bbt(mtd, ofs);
414 nand_get_device(chip, mtd, FL_WRITING);
416 /* Write to first two pages and to byte 1 and 6 if necessary.
417 * If we write to more than one location, the first error
418 * encountered quits the procedure. We write two bytes per
419 * location, so we dont have to mess with 16 bit access.
422 chip->ops.len = chip->ops.ooblen = 2;
423 chip->ops.datbuf = NULL;
424 chip->ops.oobbuf = buf;
425 chip->ops.ooboffs = chip->badblockpos & ~0x01;
427 ret = nand_do_write_oob(mtd, ofs, &chip->ops);
429 if (!ret && (chip->options & NAND_BBT_SCANBYTE1AND6)) {
430 chip->ops.ooboffs = NAND_SMALL_BADBLOCK_POS
432 ret = nand_do_write_oob(mtd, ofs, &chip->ops);
435 ofs += mtd->writesize;
436 } while (!ret && (chip->options & NAND_BBT_SCAN2NDPAGE) &&
439 nand_release_device(mtd);
442 mtd->ecc_stats.badblocks++;
448 * nand_check_wp - [GENERIC] check if the chip is write protected
449 * @mtd: MTD device structure
450 * Check, if the device is write protected
452 * The function expects, that the device is already selected
454 static int nand_check_wp(struct mtd_info *mtd)
456 struct nand_chip *chip = mtd->priv;
458 /* broken xD cards report WP despite being writable */
459 if (chip->options & NAND_BROKEN_XD)
462 /* Check the WP bit */
463 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
464 return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
468 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
469 * @mtd: MTD device structure
470 * @ofs: offset from device start
471 * @getchip: 0, if the chip is already selected
472 * @allowbbt: 1, if its allowed to access the bbt area
474 * Check, if the block is bad. Either by reading the bad block table or
475 * calling of the scan function.
477 static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
480 struct nand_chip *chip = mtd->priv;
482 if (!(chip->options & NAND_BBT_SCANNED)) {
483 chip->options |= NAND_BBT_SCANNED;
488 return chip->block_bad(mtd, ofs, getchip);
490 /* Return info from the table */
491 return nand_isbad_bbt(mtd, ofs, allowbbt);
495 * Wait for the ready pin, after a command
496 * The timeout is catched later.
498 void nand_wait_ready(struct mtd_info *mtd)
500 struct nand_chip *chip = mtd->priv;
501 u32 timeo = (CONFIG_SYS_HZ * 20) / 1000;
504 time_start = get_timer(0);
506 /* wait until command is processed or timeout occures */
507 while (get_timer(time_start) < timeo) {
509 if (chip->dev_ready(mtd))
515 * nand_command - [DEFAULT] Send command to NAND device
516 * @mtd: MTD device structure
517 * @command: the command to be sent
518 * @column: the column address for this command, -1 if none
519 * @page_addr: the page address for this command, -1 if none
521 * Send command to NAND device. This function is used for small page
522 * devices (256/512 Bytes per page)
524 static void nand_command(struct mtd_info *mtd, unsigned int command,
525 int column, int page_addr)
527 register struct nand_chip *chip = mtd->priv;
528 int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
529 uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
532 * Write out the command to the device.
534 if (command == NAND_CMD_SEQIN) {
537 if (column >= mtd->writesize) {
539 column -= mtd->writesize;
540 readcmd = NAND_CMD_READOOB;
541 } else if (column < 256) {
542 /* First 256 bytes --> READ0 */
543 readcmd = NAND_CMD_READ0;
546 readcmd = NAND_CMD_READ1;
548 chip->cmd_ctrl(mtd, readcmd, ctrl);
549 ctrl &= ~NAND_CTRL_CHANGE;
551 chip->cmd_ctrl(mtd, command, ctrl);
554 * Address cycle, when necessary
556 ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
557 /* Serially input address */
559 /* Adjust columns for 16 bit buswidth */
560 if (chip->options & NAND_BUSWIDTH_16)
562 chip->cmd_ctrl(mtd, column, ctrl);
563 ctrl &= ~NAND_CTRL_CHANGE;
565 if (page_addr != -1) {
566 chip->cmd_ctrl(mtd, page_addr, ctrl);
567 ctrl &= ~NAND_CTRL_CHANGE;
568 chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
569 /* One more address cycle for devices > 32MiB */
570 if (chip->chipsize > (32 << 20))
571 chip->cmd_ctrl(mtd, page_addr >> 16, ctrl);
573 chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
576 * program and erase have their own busy handlers
577 * status and sequential in needs no delay
581 case NAND_CMD_PAGEPROG:
582 case NAND_CMD_ERASE1:
583 case NAND_CMD_ERASE2:
585 case NAND_CMD_STATUS:
591 udelay(chip->chip_delay);
592 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
593 NAND_CTRL_CLE | NAND_CTRL_CHANGE);
595 NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
596 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
600 /* This applies to read commands */
603 * If we don't have access to the busy pin, we apply the given
606 if (!chip->dev_ready) {
607 udelay(chip->chip_delay);
611 /* Apply this short delay always to ensure that we do wait tWB in
612 * any case on any machine. */
615 nand_wait_ready(mtd);
619 * nand_command_lp - [DEFAULT] Send command to NAND large page device
620 * @mtd: MTD device structure
621 * @command: the command to be sent
622 * @column: the column address for this command, -1 if none
623 * @page_addr: the page address for this command, -1 if none
625 * Send command to NAND device. This is the version for the new large page
626 * devices We dont have the separate regions as we have in the small page
627 * devices. We must emulate NAND_CMD_READOOB to keep the code compatible.
629 static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
630 int column, int page_addr)
632 register struct nand_chip *chip = mtd->priv;
633 uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
635 /* Emulate NAND_CMD_READOOB */
636 if (command == NAND_CMD_READOOB) {
637 column += mtd->writesize;
638 command = NAND_CMD_READ0;
641 /* Command latch cycle */
642 chip->cmd_ctrl(mtd, command & 0xff,
643 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
645 if (column != -1 || page_addr != -1) {
646 int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
648 /* Serially input address */
650 /* Adjust columns for 16 bit buswidth */
651 if (chip->options & NAND_BUSWIDTH_16)
653 chip->cmd_ctrl(mtd, column, ctrl);
654 ctrl &= ~NAND_CTRL_CHANGE;
655 chip->cmd_ctrl(mtd, column >> 8, ctrl);
657 if (page_addr != -1) {
658 chip->cmd_ctrl(mtd, page_addr, ctrl);
659 chip->cmd_ctrl(mtd, page_addr >> 8,
660 NAND_NCE | NAND_ALE);
661 /* One more address cycle for devices > 128MiB */
662 if (chip->chipsize > (128 << 20))
663 chip->cmd_ctrl(mtd, page_addr >> 16,
664 NAND_NCE | NAND_ALE);
667 chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
670 * program and erase have their own busy handlers
671 * status, sequential in, and deplete1 need no delay
675 case NAND_CMD_CACHEDPROG:
676 case NAND_CMD_PAGEPROG:
677 case NAND_CMD_ERASE1:
678 case NAND_CMD_ERASE2:
681 case NAND_CMD_STATUS:
682 case NAND_CMD_DEPLETE1:
686 * read error status commands require only a short delay
688 case NAND_CMD_STATUS_ERROR:
689 case NAND_CMD_STATUS_ERROR0:
690 case NAND_CMD_STATUS_ERROR1:
691 case NAND_CMD_STATUS_ERROR2:
692 case NAND_CMD_STATUS_ERROR3:
693 udelay(chip->chip_delay);
699 udelay(chip->chip_delay);
700 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
701 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
702 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
703 NAND_NCE | NAND_CTRL_CHANGE);
704 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
708 case NAND_CMD_RNDOUT:
709 /* No ready / busy check necessary */
710 chip->cmd_ctrl(mtd, NAND_CMD_RNDOUTSTART,
711 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
712 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
713 NAND_NCE | NAND_CTRL_CHANGE);
717 chip->cmd_ctrl(mtd, NAND_CMD_READSTART,
718 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
719 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
720 NAND_NCE | NAND_CTRL_CHANGE);
722 /* This applies to read commands */
725 * If we don't have access to the busy pin, we apply the given
728 if (!chip->dev_ready) {
729 udelay(chip->chip_delay);
734 /* Apply this short delay always to ensure that we do wait tWB in
735 * any case on any machine. */
738 nand_wait_ready(mtd);
742 * nand_get_device - [GENERIC] Get chip for selected access
743 * @chip: the nand chip descriptor
744 * @mtd: MTD device structure
745 * @new_state: the state which is requested
747 * Get the device and lock it for exclusive access
750 nand_get_device(struct nand_chip *chip, struct mtd_info *mtd, int new_state)
752 chip->state = new_state;
757 * nand_wait - [DEFAULT] wait until the command is done
758 * @mtd: MTD device structure
759 * @chip: NAND chip structure
761 * Wait for command done. This applies to erase and program only
762 * Erase can take up to 400ms and program up to 20ms according to
763 * general NAND and SmartMedia specs
765 static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
768 int state = chip->state;
771 if (state == FL_ERASING)
772 timeo = (CONFIG_SYS_HZ * 400) / 1000;
774 timeo = (CONFIG_SYS_HZ * 20) / 1000;
776 if ((state == FL_ERASING) && (chip->options & NAND_IS_AND))
777 chip->cmdfunc(mtd, NAND_CMD_STATUS_MULTI, -1, -1);
779 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
781 time_start = get_timer(0);
784 if (get_timer(time_start) > timeo) {
789 if (chip->dev_ready) {
790 if (chip->dev_ready(mtd))
793 if (chip->read_byte(mtd) & NAND_STATUS_READY)
797 #ifdef PPCHAMELON_NAND_TIMER_HACK
798 time_start = get_timer(0);
799 while (get_timer(time_start) < 10)
801 #endif /* PPCHAMELON_NAND_TIMER_HACK */
803 return (int)chip->read_byte(mtd);
807 * nand_read_page_raw - [Intern] read raw page data without ecc
808 * @mtd: mtd info structure
809 * @chip: nand chip info structure
810 * @buf: buffer to store read data
811 * @page: page number to read
813 * Not for syndrome calculating ecc controllers, which use a special oob layout
815 static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
816 uint8_t *buf, int page)
818 chip->read_buf(mtd, buf, mtd->writesize);
819 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
824 * nand_read_page_raw_syndrome - [Intern] read raw page data without ecc
825 * @mtd: mtd info structure
826 * @chip: nand chip info structure
827 * @buf: buffer to store read data
828 * @page: page number to read
830 * We need a special oob layout and handling even when OOB isn't used.
832 static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
833 struct nand_chip *chip,
834 uint8_t *buf, int page)
836 int eccsize = chip->ecc.size;
837 int eccbytes = chip->ecc.bytes;
838 uint8_t *oob = chip->oob_poi;
841 for (steps = chip->ecc.steps; steps > 0; steps--) {
842 chip->read_buf(mtd, buf, eccsize);
845 if (chip->ecc.prepad) {
846 chip->read_buf(mtd, oob, chip->ecc.prepad);
847 oob += chip->ecc.prepad;
850 chip->read_buf(mtd, oob, eccbytes);
853 if (chip->ecc.postpad) {
854 chip->read_buf(mtd, oob, chip->ecc.postpad);
855 oob += chip->ecc.postpad;
859 size = mtd->oobsize - (oob - chip->oob_poi);
861 chip->read_buf(mtd, oob, size);
867 * nand_read_page_swecc - [REPLACABLE] software ecc based page read function
868 * @mtd: mtd info structure
869 * @chip: nand chip info structure
870 * @buf: buffer to store read data
871 * @page: page number to read
873 static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
874 uint8_t *buf, int page)
876 int i, eccsize = chip->ecc.size;
877 int eccbytes = chip->ecc.bytes;
878 int eccsteps = chip->ecc.steps;
880 uint8_t *ecc_calc = chip->buffers->ecccalc;
881 uint8_t *ecc_code = chip->buffers->ecccode;
882 uint32_t *eccpos = chip->ecc.layout->eccpos;
884 chip->ecc.read_page_raw(mtd, chip, buf, page);
886 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
887 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
889 for (i = 0; i < chip->ecc.total; i++)
890 ecc_code[i] = chip->oob_poi[eccpos[i]];
892 eccsteps = chip->ecc.steps;
895 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
898 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
900 mtd->ecc_stats.failed++;
902 mtd->ecc_stats.corrected += stat;
908 * nand_read_subpage - [REPLACABLE] software ecc based sub-page read function
909 * @mtd: mtd info structure
910 * @chip: nand chip info structure
911 * @data_offs: offset of requested data within the page
912 * @readlen: data length
913 * @bufpoi: buffer to store read data
915 static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
916 uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi)
918 int start_step, end_step, num_steps;
919 uint32_t *eccpos = chip->ecc.layout->eccpos;
921 int data_col_addr, i, gaps = 0;
922 int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
923 int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
926 /* Column address wihin the page aligned to ECC size (256bytes). */
927 start_step = data_offs / chip->ecc.size;
928 end_step = (data_offs + readlen - 1) / chip->ecc.size;
929 num_steps = end_step - start_step + 1;
931 /* Data size aligned to ECC ecc.size*/
932 datafrag_len = num_steps * chip->ecc.size;
933 eccfrag_len = num_steps * chip->ecc.bytes;
935 data_col_addr = start_step * chip->ecc.size;
936 /* If we read not a page aligned data */
937 if (data_col_addr != 0)
938 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
940 p = bufpoi + data_col_addr;
941 chip->read_buf(mtd, p, datafrag_len);
944 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
945 chip->ecc.calculate(mtd, p, &chip->buffers->ecccalc[i]);
947 /* The performance is faster if to position offsets
948 according to ecc.pos. Let make sure here that
949 there are no gaps in ecc positions */
950 for (i = 0; i < eccfrag_len - 1; i++) {
951 if (eccpos[i + start_step * chip->ecc.bytes] + 1 !=
952 eccpos[i + start_step * chip->ecc.bytes + 1]) {
958 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
959 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
961 /* send the command to read the particular ecc bytes */
962 /* take care about buswidth alignment in read_buf */
963 index = start_step * chip->ecc.bytes;
965 aligned_pos = eccpos[index] & ~(busw - 1);
966 aligned_len = eccfrag_len;
967 if (eccpos[index] & (busw - 1))
969 if (eccpos[index + (num_steps * chip->ecc.bytes)] & (busw - 1))
972 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
973 mtd->writesize + aligned_pos, -1);
974 chip->read_buf(mtd, &chip->oob_poi[aligned_pos], aligned_len);
977 for (i = 0; i < eccfrag_len; i++)
978 chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
980 p = bufpoi + data_col_addr;
981 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
984 stat = chip->ecc.correct(mtd, p,
985 &chip->buffers->ecccode[i], &chip->buffers->ecccalc[i]);
987 mtd->ecc_stats.failed++;
989 mtd->ecc_stats.corrected += stat;
995 * nand_read_page_hwecc - [REPLACABLE] hardware ecc based page read function
996 * @mtd: mtd info structure
997 * @chip: nand chip info structure
998 * @buf: buffer to store read data
999 * @page: page number to read
1001 * Not for syndrome calculating ecc controllers which need a special oob layout
1003 static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1004 uint8_t *buf, int page)
1006 int i, eccsize = chip->ecc.size;
1007 int eccbytes = chip->ecc.bytes;
1008 int eccsteps = chip->ecc.steps;
1010 uint8_t *ecc_calc = chip->buffers->ecccalc;
1011 uint8_t *ecc_code = chip->buffers->ecccode;
1012 uint32_t *eccpos = chip->ecc.layout->eccpos;
1014 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1015 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1016 chip->read_buf(mtd, p, eccsize);
1017 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1019 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1021 for (i = 0; i < chip->ecc.total; i++)
1022 ecc_code[i] = chip->oob_poi[eccpos[i]];
1024 eccsteps = chip->ecc.steps;
1027 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1030 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1032 mtd->ecc_stats.failed++;
1034 mtd->ecc_stats.corrected += stat;
1040 * nand_read_page_hwecc_oob_first - [REPLACABLE] hw ecc, read oob first
1041 * @mtd: mtd info structure
1042 * @chip: nand chip info structure
1043 * @buf: buffer to store read data
1044 * @page: page number to read
1046 * Hardware ECC for large page chips, require OOB to be read first.
1047 * For this ECC mode, the write_page method is re-used from ECC_HW.
1048 * These methods read/write ECC from the OOB area, unlike the
1049 * ECC_HW_SYNDROME support with multiple ECC steps, follows the
1050 * "infix ECC" scheme and reads/writes ECC from the data area, by
1051 * overwriting the NAND manufacturer bad block markings.
1053 static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
1054 struct nand_chip *chip, uint8_t *buf, int page)
1056 int i, eccsize = chip->ecc.size;
1057 int eccbytes = chip->ecc.bytes;
1058 int eccsteps = chip->ecc.steps;
1060 uint8_t *ecc_code = chip->buffers->ecccode;
1061 uint32_t *eccpos = chip->ecc.layout->eccpos;
1062 uint8_t *ecc_calc = chip->buffers->ecccalc;
1064 /* Read the OOB area first */
1065 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1066 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1067 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1069 for (i = 0; i < chip->ecc.total; i++)
1070 ecc_code[i] = chip->oob_poi[eccpos[i]];
1072 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1075 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1076 chip->read_buf(mtd, p, eccsize);
1077 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1079 stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
1081 mtd->ecc_stats.failed++;
1083 mtd->ecc_stats.corrected += stat;
1089 * nand_read_page_syndrome - [REPLACABLE] hardware ecc syndrom based page read
1090 * @mtd: mtd info structure
1091 * @chip: nand chip info structure
1092 * @buf: buffer to store read data
1093 * @page: page number to read
1095 * The hw generator calculates the error syndrome automatically. Therefor
1096 * we need a special oob layout and handling.
1098 static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1099 uint8_t *buf, int page)
1101 int i, eccsize = chip->ecc.size;
1102 int eccbytes = chip->ecc.bytes;
1103 int eccsteps = chip->ecc.steps;
1105 uint8_t *oob = chip->oob_poi;
1107 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1110 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1111 chip->read_buf(mtd, p, eccsize);
1113 if (chip->ecc.prepad) {
1114 chip->read_buf(mtd, oob, chip->ecc.prepad);
1115 oob += chip->ecc.prepad;
1118 chip->ecc.hwctl(mtd, NAND_ECC_READSYN);
1119 chip->read_buf(mtd, oob, eccbytes);
1120 stat = chip->ecc.correct(mtd, p, oob, NULL);
1123 mtd->ecc_stats.failed++;
1125 mtd->ecc_stats.corrected += stat;
1129 if (chip->ecc.postpad) {
1130 chip->read_buf(mtd, oob, chip->ecc.postpad);
1131 oob += chip->ecc.postpad;
1135 /* Calculate remaining oob bytes */
1136 i = mtd->oobsize - (oob - chip->oob_poi);
1138 chip->read_buf(mtd, oob, i);
1144 * nand_transfer_oob - [Internal] Transfer oob to client buffer
1145 * @chip: nand chip structure
1146 * @oob: oob destination address
1147 * @ops: oob ops structure
1148 * @len: size of oob to transfer
1150 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
1151 struct mtd_oob_ops *ops, size_t len)
1153 switch (ops->mode) {
1157 memcpy(oob, chip->oob_poi + ops->ooboffs, len);
1160 case MTD_OOB_AUTO: {
1161 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1162 uint32_t boffs = 0, roffs = ops->ooboffs;
1165 for (; free->length && len; free++, len -= bytes) {
1166 /* Read request not from offset 0 ? */
1167 if (unlikely(roffs)) {
1168 if (roffs >= free->length) {
1169 roffs -= free->length;
1172 boffs = free->offset + roffs;
1173 bytes = min_t(size_t, len,
1174 (free->length - roffs));
1177 bytes = min_t(size_t, len, free->length);
1178 boffs = free->offset;
1180 memcpy(oob, chip->oob_poi + boffs, bytes);
1192 * nand_do_read_ops - [Internal] Read data with ECC
1194 * @mtd: MTD device structure
1195 * @from: offset to read from
1196 * @ops: oob ops structure
1198 * Internal function. Called with chip held.
1200 static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
1201 struct mtd_oob_ops *ops)
1203 int chipnr, page, realpage, col, bytes, aligned;
1204 struct nand_chip *chip = mtd->priv;
1205 struct mtd_ecc_stats stats;
1206 int blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
1209 uint32_t readlen = ops->len;
1210 uint32_t oobreadlen = ops->ooblen;
1211 uint32_t max_oobsize = ops->mode == MTD_OOB_AUTO ?
1212 mtd->oobavail : mtd->oobsize;
1214 uint8_t *bufpoi, *oob, *buf;
1216 stats = mtd->ecc_stats;
1218 chipnr = (int)(from >> chip->chip_shift);
1219 chip->select_chip(mtd, chipnr);
1221 realpage = (int)(from >> chip->page_shift);
1222 page = realpage & chip->pagemask;
1224 col = (int)(from & (mtd->writesize - 1));
1232 bytes = min(mtd->writesize - col, readlen);
1233 aligned = (bytes == mtd->writesize);
1235 /* Is the current page in the buffer ? */
1236 if (realpage != chip->pagebuf || oob) {
1237 bufpoi = aligned ? buf : chip->buffers->databuf;
1239 if (likely(sndcmd)) {
1240 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1244 /* Now read the page into the buffer */
1245 if (unlikely(ops->mode == MTD_OOB_RAW))
1246 ret = chip->ecc.read_page_raw(mtd, chip,
1248 else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
1250 ret = chip->ecc.read_subpage(mtd, chip,
1251 col, bytes, bufpoi);
1253 ret = chip->ecc.read_page(mtd, chip, bufpoi,
1258 /* Transfer not aligned data */
1260 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
1261 !(mtd->ecc_stats.failed - stats.failed))
1262 chip->pagebuf = realpage;
1263 memcpy(buf, chip->buffers->databuf + col, bytes);
1268 if (unlikely(oob)) {
1270 int toread = min(oobreadlen, max_oobsize);
1273 oob = nand_transfer_oob(chip,
1275 oobreadlen -= toread;
1279 if (!(chip->options & NAND_NO_READRDY)) {
1281 * Apply delay or wait for ready/busy pin. Do
1282 * this before the AUTOINCR check, so no
1283 * problems arise if a chip which does auto
1284 * increment is marked as NOAUTOINCR by the
1287 if (!chip->dev_ready)
1288 udelay(chip->chip_delay);
1290 nand_wait_ready(mtd);
1293 memcpy(buf, chip->buffers->databuf + col, bytes);
1302 /* For subsequent reads align to page boundary. */
1304 /* Increment page address */
1307 page = realpage & chip->pagemask;
1308 /* Check, if we cross a chip boundary */
1311 chip->select_chip(mtd, -1);
1312 chip->select_chip(mtd, chipnr);
1315 /* Check, if the chip supports auto page increment
1316 * or if we have hit a block boundary.
1318 if (!NAND_CANAUTOINCR(chip) || !(page & blkcheck))
1322 ops->retlen = ops->len - (size_t) readlen;
1324 ops->oobretlen = ops->ooblen - oobreadlen;
1329 if (mtd->ecc_stats.failed - stats.failed)
1332 return mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
1336 * nand_read - [MTD Interface] MTD compatibility function for nand_do_read_ecc
1337 * @mtd: MTD device structure
1338 * @from: offset to read from
1339 * @len: number of bytes to read
1340 * @retlen: pointer to variable to store the number of read bytes
1341 * @buf: the databuffer to put data
1343 * Get hold of the chip and call nand_do_read
1345 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
1346 size_t *retlen, uint8_t *buf)
1348 struct nand_chip *chip = mtd->priv;
1351 /* Do not allow reads past end of device */
1352 if ((from + len) > mtd->size)
1357 nand_get_device(chip, mtd, FL_READING);
1359 chip->ops.len = len;
1360 chip->ops.datbuf = buf;
1361 chip->ops.oobbuf = NULL;
1363 ret = nand_do_read_ops(mtd, from, &chip->ops);
1365 *retlen = chip->ops.retlen;
1367 nand_release_device(mtd);
1373 * nand_read_oob_std - [REPLACABLE] the most common OOB data read function
1374 * @mtd: mtd info structure
1375 * @chip: nand chip info structure
1376 * @page: page number to read
1377 * @sndcmd: flag whether to issue read command or not
1379 static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1380 int page, int sndcmd)
1383 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1386 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1391 * nand_read_oob_syndrome - [REPLACABLE] OOB data read function for HW ECC
1393 * @mtd: mtd info structure
1394 * @chip: nand chip info structure
1395 * @page: page number to read
1396 * @sndcmd: flag whether to issue read command or not
1398 static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1399 int page, int sndcmd)
1401 uint8_t *buf = chip->oob_poi;
1402 int length = mtd->oobsize;
1403 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1404 int eccsize = chip->ecc.size;
1405 uint8_t *bufpoi = buf;
1406 int i, toread, sndrnd = 0, pos;
1408 chip->cmdfunc(mtd, NAND_CMD_READ0, chip->ecc.size, page);
1409 for (i = 0; i < chip->ecc.steps; i++) {
1411 pos = eccsize + i * (eccsize + chunk);
1412 if (mtd->writesize > 512)
1413 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, pos, -1);
1415 chip->cmdfunc(mtd, NAND_CMD_READ0, pos, page);
1418 toread = min_t(int, length, chunk);
1419 chip->read_buf(mtd, bufpoi, toread);
1424 chip->read_buf(mtd, bufpoi, length);
1430 * nand_write_oob_std - [REPLACABLE] the most common OOB data write function
1431 * @mtd: mtd info structure
1432 * @chip: nand chip info structure
1433 * @page: page number to write
1435 static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1439 const uint8_t *buf = chip->oob_poi;
1440 int length = mtd->oobsize;
1442 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
1443 chip->write_buf(mtd, buf, length);
1444 /* Send command to program the OOB data */
1445 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1447 status = chip->waitfunc(mtd, chip);
1449 return status & NAND_STATUS_FAIL ? -EIO : 0;
1453 * nand_write_oob_syndrome - [REPLACABLE] OOB data write function for HW ECC
1454 * with syndrome - only for large page flash !
1455 * @mtd: mtd info structure
1456 * @chip: nand chip info structure
1457 * @page: page number to write
1459 static int nand_write_oob_syndrome(struct mtd_info *mtd,
1460 struct nand_chip *chip, int page)
1462 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1463 int eccsize = chip->ecc.size, length = mtd->oobsize;
1464 int i, len, pos, status = 0, sndcmd = 0, steps = chip->ecc.steps;
1465 const uint8_t *bufpoi = chip->oob_poi;
1468 * data-ecc-data-ecc ... ecc-oob
1470 * data-pad-ecc-pad-data-pad .... ecc-pad-oob
1472 if (!chip->ecc.prepad && !chip->ecc.postpad) {
1473 pos = steps * (eccsize + chunk);
1478 chip->cmdfunc(mtd, NAND_CMD_SEQIN, pos, page);
1479 for (i = 0; i < steps; i++) {
1481 if (mtd->writesize <= 512) {
1482 uint32_t fill = 0xFFFFFFFF;
1486 int num = min_t(int, len, 4);
1487 chip->write_buf(mtd, (uint8_t *)&fill,
1492 pos = eccsize + i * (eccsize + chunk);
1493 chip->cmdfunc(mtd, NAND_CMD_RNDIN, pos, -1);
1497 len = min_t(int, length, chunk);
1498 chip->write_buf(mtd, bufpoi, len);
1503 chip->write_buf(mtd, bufpoi, length);
1505 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1506 status = chip->waitfunc(mtd, chip);
1508 return status & NAND_STATUS_FAIL ? -EIO : 0;
1512 * nand_do_read_oob - [Intern] NAND read out-of-band
1513 * @mtd: MTD device structure
1514 * @from: offset to read from
1515 * @ops: oob operations description structure
1517 * NAND read out-of-band data from the spare area
1519 static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
1520 struct mtd_oob_ops *ops)
1522 int page, realpage, chipnr, sndcmd = 1;
1523 struct nand_chip *chip = mtd->priv;
1524 int blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
1525 int readlen = ops->ooblen;
1527 uint8_t *buf = ops->oobbuf;
1529 MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: from = 0x%08Lx, len = %i\n",
1530 __func__, (unsigned long long)from, readlen);
1532 if (ops->mode == MTD_OOB_AUTO)
1533 len = chip->ecc.layout->oobavail;
1537 if (unlikely(ops->ooboffs >= len)) {
1538 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to start read "
1539 "outside oob\n", __func__);
1543 /* Do not allow reads past end of device */
1544 if (unlikely(from >= mtd->size ||
1545 ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
1546 (from >> chip->page_shift)) * len)) {
1547 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read beyond end "
1548 "of device\n", __func__);
1552 chipnr = (int)(from >> chip->chip_shift);
1553 chip->select_chip(mtd, chipnr);
1555 /* Shift to get page */
1556 realpage = (int)(from >> chip->page_shift);
1557 page = realpage & chip->pagemask;
1561 sndcmd = chip->ecc.read_oob(mtd, chip, page, sndcmd);
1563 len = min(len, readlen);
1564 buf = nand_transfer_oob(chip, buf, ops, len);
1566 if (!(chip->options & NAND_NO_READRDY)) {
1568 * Apply delay or wait for ready/busy pin. Do this
1569 * before the AUTOINCR check, so no problems arise if a
1570 * chip which does auto increment is marked as
1571 * NOAUTOINCR by the board driver.
1573 if (!chip->dev_ready)
1574 udelay(chip->chip_delay);
1576 nand_wait_ready(mtd);
1583 /* Increment page address */
1586 page = realpage & chip->pagemask;
1587 /* Check, if we cross a chip boundary */
1590 chip->select_chip(mtd, -1);
1591 chip->select_chip(mtd, chipnr);
1594 /* Check, if the chip supports auto page increment
1595 * or if we have hit a block boundary.
1597 if (!NAND_CANAUTOINCR(chip) || !(page & blkcheck))
1601 ops->oobretlen = ops->ooblen;
1606 * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
1607 * @mtd: MTD device structure
1608 * @from: offset to read from
1609 * @ops: oob operation description structure
1611 * NAND read data and/or out-of-band data
1613 static int nand_read_oob(struct mtd_info *mtd, loff_t from,
1614 struct mtd_oob_ops *ops)
1616 struct nand_chip *chip = mtd->priv;
1617 int ret = -ENOTSUPP;
1621 /* Do not allow reads past end of device */
1622 if (ops->datbuf && (from + ops->len) > mtd->size) {
1623 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read "
1624 "beyond end of device\n", __func__);
1628 nand_get_device(chip, mtd, FL_READING);
1630 switch (ops->mode) {
1641 ret = nand_do_read_oob(mtd, from, ops);
1643 ret = nand_do_read_ops(mtd, from, ops);
1646 nand_release_device(mtd);
1652 * nand_write_page_raw - [Intern] raw page write function
1653 * @mtd: mtd info structure
1654 * @chip: nand chip info structure
1657 * Not for syndrome calculating ecc controllers, which use a special oob layout
1659 static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1662 chip->write_buf(mtd, buf, mtd->writesize);
1663 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
1667 * nand_write_page_raw_syndrome - [Intern] raw page write function
1668 * @mtd: mtd info structure
1669 * @chip: nand chip info structure
1672 * We need a special oob layout and handling even when ECC isn't checked.
1674 static void nand_write_page_raw_syndrome(struct mtd_info *mtd,
1675 struct nand_chip *chip,
1678 int eccsize = chip->ecc.size;
1679 int eccbytes = chip->ecc.bytes;
1680 uint8_t *oob = chip->oob_poi;
1683 for (steps = chip->ecc.steps; steps > 0; steps--) {
1684 chip->write_buf(mtd, buf, eccsize);
1687 if (chip->ecc.prepad) {
1688 chip->write_buf(mtd, oob, chip->ecc.prepad);
1689 oob += chip->ecc.prepad;
1692 chip->read_buf(mtd, oob, eccbytes);
1695 if (chip->ecc.postpad) {
1696 chip->write_buf(mtd, oob, chip->ecc.postpad);
1697 oob += chip->ecc.postpad;
1701 size = mtd->oobsize - (oob - chip->oob_poi);
1703 chip->write_buf(mtd, oob, size);
1706 * nand_write_page_swecc - [REPLACABLE] software ecc based page write function
1707 * @mtd: mtd info structure
1708 * @chip: nand chip info structure
1711 static void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
1714 int i, eccsize = chip->ecc.size;
1715 int eccbytes = chip->ecc.bytes;
1716 int eccsteps = chip->ecc.steps;
1717 uint8_t *ecc_calc = chip->buffers->ecccalc;
1718 const uint8_t *p = buf;
1719 uint32_t *eccpos = chip->ecc.layout->eccpos;
1721 /* Software ecc calculation */
1722 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
1723 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1725 for (i = 0; i < chip->ecc.total; i++)
1726 chip->oob_poi[eccpos[i]] = ecc_calc[i];
1728 chip->ecc.write_page_raw(mtd, chip, buf);
1732 * nand_write_page_hwecc - [REPLACABLE] hardware ecc based page write function
1733 * @mtd: mtd info structure
1734 * @chip: nand chip info structure
1737 static void nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1740 int i, eccsize = chip->ecc.size;
1741 int eccbytes = chip->ecc.bytes;
1742 int eccsteps = chip->ecc.steps;
1743 uint8_t *ecc_calc = chip->buffers->ecccalc;
1744 const uint8_t *p = buf;
1745 uint32_t *eccpos = chip->ecc.layout->eccpos;
1747 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1748 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
1749 chip->write_buf(mtd, p, eccsize);
1750 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1753 for (i = 0; i < chip->ecc.total; i++)
1754 chip->oob_poi[eccpos[i]] = ecc_calc[i];
1756 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
1760 * nand_write_page_syndrome - [REPLACABLE] hardware ecc syndrom based page write
1761 * @mtd: mtd info structure
1762 * @chip: nand chip info structure
1765 * The hw generator calculates the error syndrome automatically. Therefor
1766 * we need a special oob layout and handling.
1768 static void nand_write_page_syndrome(struct mtd_info *mtd,
1769 struct nand_chip *chip, const uint8_t *buf)
1771 int i, eccsize = chip->ecc.size;
1772 int eccbytes = chip->ecc.bytes;
1773 int eccsteps = chip->ecc.steps;
1774 const uint8_t *p = buf;
1775 uint8_t *oob = chip->oob_poi;
1777 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1779 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
1780 chip->write_buf(mtd, p, eccsize);
1782 if (chip->ecc.prepad) {
1783 chip->write_buf(mtd, oob, chip->ecc.prepad);
1784 oob += chip->ecc.prepad;
1787 chip->ecc.calculate(mtd, p, oob);
1788 chip->write_buf(mtd, oob, eccbytes);
1791 if (chip->ecc.postpad) {
1792 chip->write_buf(mtd, oob, chip->ecc.postpad);
1793 oob += chip->ecc.postpad;
1797 /* Calculate remaining oob bytes */
1798 i = mtd->oobsize - (oob - chip->oob_poi);
1800 chip->write_buf(mtd, oob, i);
1804 * nand_write_page - [REPLACEABLE] write one page
1805 * @mtd: MTD device structure
1806 * @chip: NAND chip descriptor
1807 * @buf: the data to write
1808 * @page: page number to write
1809 * @cached: cached programming
1810 * @raw: use _raw version of write_page
1812 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
1813 const uint8_t *buf, int page, int cached, int raw)
1817 chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
1820 chip->ecc.write_page_raw(mtd, chip, buf);
1822 chip->ecc.write_page(mtd, chip, buf);
1825 * Cached progamming disabled for now, Not sure if its worth the
1826 * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s)
1830 if (!cached || !(chip->options & NAND_CACHEPRG)) {
1832 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1833 status = chip->waitfunc(mtd, chip);
1835 * See if operation failed and additional status checks are
1838 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
1839 status = chip->errstat(mtd, chip, FL_WRITING, status,
1842 if (status & NAND_STATUS_FAIL)
1845 chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
1846 status = chip->waitfunc(mtd, chip);
1849 #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
1850 /* Send command to read back the data */
1851 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1853 if (chip->verify_buf(mtd, buf, mtd->writesize))
1860 * nand_fill_oob - [Internal] Transfer client buffer to oob
1861 * @chip: nand chip structure
1862 * @oob: oob data buffer
1863 * @len: oob data write length
1864 * @ops: oob ops structure
1866 static uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, size_t len,
1867 struct mtd_oob_ops *ops)
1869 switch (ops->mode) {
1873 memcpy(chip->oob_poi + ops->ooboffs, oob, len);
1876 case MTD_OOB_AUTO: {
1877 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1878 uint32_t boffs = 0, woffs = ops->ooboffs;
1881 for (; free->length && len; free++, len -= bytes) {
1882 /* Write request not from offset 0 ? */
1883 if (unlikely(woffs)) {
1884 if (woffs >= free->length) {
1885 woffs -= free->length;
1888 boffs = free->offset + woffs;
1889 bytes = min_t(size_t, len,
1890 (free->length - woffs));
1893 bytes = min_t(size_t, len, free->length);
1894 boffs = free->offset;
1896 memcpy(chip->oob_poi + boffs, oob, bytes);
1907 #define NOTALIGNED(x) ((x & (chip->subpagesize - 1)) != 0)
1910 * nand_do_write_ops - [Internal] NAND write with ECC
1911 * @mtd: MTD device structure
1912 * @to: offset to write to
1913 * @ops: oob operations description structure
1915 * NAND write with ECC
1917 static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
1918 struct mtd_oob_ops *ops)
1920 int chipnr, realpage, page, blockmask, column;
1921 struct nand_chip *chip = mtd->priv;
1922 uint32_t writelen = ops->len;
1924 uint32_t oobwritelen = ops->ooblen;
1925 uint32_t oobmaxlen = ops->mode == MTD_OOB_AUTO ?
1926 mtd->oobavail : mtd->oobsize;
1928 uint8_t *oob = ops->oobbuf;
1929 uint8_t *buf = ops->datbuf;
1936 column = to & (mtd->writesize - 1);
1937 subpage = column || (writelen & (mtd->writesize - 1));
1942 chipnr = (int)(to >> chip->chip_shift);
1943 chip->select_chip(mtd, chipnr);
1945 /* Check, if it is write protected */
1946 if (nand_check_wp(mtd)) {
1947 printk (KERN_NOTICE "nand_do_write_ops: Device is write protected\n");
1951 realpage = (int)(to >> chip->page_shift);
1952 page = realpage & chip->pagemask;
1953 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
1955 /* Invalidate the page cache, when we write to the cached page */
1956 if (to <= (chip->pagebuf << chip->page_shift) &&
1957 (chip->pagebuf << chip->page_shift) < (to + ops->len))
1960 /* If we're not given explicit OOB data, let it be 0xFF */
1962 memset(chip->oob_poi, 0xff, mtd->oobsize);
1964 /* Don't allow multipage oob writes with offset */
1965 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen))
1971 int bytes = mtd->writesize;
1972 int cached = writelen > bytes && page != blockmask;
1973 uint8_t *wbuf = buf;
1975 /* Partial page write ? */
1976 if (unlikely(column || writelen < (mtd->writesize - 1))) {
1978 bytes = min_t(int, bytes - column, (int) writelen);
1980 memset(chip->buffers->databuf, 0xff, mtd->writesize);
1981 memcpy(&chip->buffers->databuf[column], buf, bytes);
1982 wbuf = chip->buffers->databuf;
1985 if (unlikely(oob)) {
1986 size_t len = min(oobwritelen, oobmaxlen);
1987 oob = nand_fill_oob(chip, oob, len, ops);
1991 ret = chip->write_page(mtd, chip, wbuf, page, cached,
1992 (ops->mode == MTD_OOB_RAW));
2004 page = realpage & chip->pagemask;
2005 /* Check, if we cross a chip boundary */
2008 chip->select_chip(mtd, -1);
2009 chip->select_chip(mtd, chipnr);
2013 ops->retlen = ops->len - writelen;
2015 ops->oobretlen = ops->ooblen;
2020 * nand_write - [MTD Interface] NAND write with ECC
2021 * @mtd: MTD device structure
2022 * @to: offset to write to
2023 * @len: number of bytes to write
2024 * @retlen: pointer to variable to store the number of written bytes
2025 * @buf: the data to write
2027 * NAND write with ECC
2029 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2030 size_t *retlen, const uint8_t *buf)
2032 struct nand_chip *chip = mtd->priv;
2035 /* Do not allow writes past end of device */
2036 if ((to + len) > mtd->size)
2041 nand_get_device(chip, mtd, FL_WRITING);
2043 chip->ops.len = len;
2044 chip->ops.datbuf = (uint8_t *)buf;
2045 chip->ops.oobbuf = NULL;
2047 ret = nand_do_write_ops(mtd, to, &chip->ops);
2049 *retlen = chip->ops.retlen;
2051 nand_release_device(mtd);
2057 * nand_do_write_oob - [MTD Interface] NAND write out-of-band
2058 * @mtd: MTD device structure
2059 * @to: offset to write to
2060 * @ops: oob operation description structure
2062 * NAND write out-of-band
2064 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
2065 struct mtd_oob_ops *ops)
2067 int chipnr, page, status, len;
2068 struct nand_chip *chip = mtd->priv;
2070 MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: to = 0x%08x, len = %i\n",
2071 __func__, (unsigned int)to, (int)ops->ooblen);
2073 if (ops->mode == MTD_OOB_AUTO)
2074 len = chip->ecc.layout->oobavail;
2078 /* Do not allow write past end of page */
2079 if ((ops->ooboffs + ops->ooblen) > len) {
2080 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write "
2081 "past end of page\n", __func__);
2085 if (unlikely(ops->ooboffs >= len)) {
2086 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to start "
2087 "write outside oob\n", __func__);
2091 /* Do not allow write past end of device */
2092 if (unlikely(to >= mtd->size ||
2093 ops->ooboffs + ops->ooblen >
2094 ((mtd->size >> chip->page_shift) -
2095 (to >> chip->page_shift)) * len)) {
2096 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
2097 "end of device\n", __func__);
2101 chipnr = (int)(to >> chip->chip_shift);
2102 chip->select_chip(mtd, chipnr);
2104 /* Shift to get page */
2105 page = (int)(to >> chip->page_shift);
2108 * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
2109 * of my DiskOnChip 2000 test units) will clear the whole data page too
2110 * if we don't do this. I have no clue why, but I seem to have 'fixed'
2111 * it in the doc2000 driver in August 1999. dwmw2.
2113 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2115 /* Check, if it is write protected */
2116 if (nand_check_wp(mtd))
2119 /* Invalidate the page cache, if we write to the cached page */
2120 if (page == chip->pagebuf)
2123 memset(chip->oob_poi, 0xff, mtd->oobsize);
2124 nand_fill_oob(chip, ops->oobbuf, ops->ooblen, ops);
2125 status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);
2126 memset(chip->oob_poi, 0xff, mtd->oobsize);
2131 ops->oobretlen = ops->ooblen;
2137 * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
2138 * @mtd: MTD device structure
2139 * @to: offset to write to
2140 * @ops: oob operation description structure
2142 static int nand_write_oob(struct mtd_info *mtd, loff_t to,
2143 struct mtd_oob_ops *ops)
2145 struct nand_chip *chip = mtd->priv;
2146 int ret = -ENOTSUPP;
2150 /* Do not allow writes past end of device */
2151 if (ops->datbuf && (to + ops->len) > mtd->size) {
2152 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
2153 "end of device\n", __func__);
2157 nand_get_device(chip, mtd, FL_WRITING);
2159 switch (ops->mode) {
2170 ret = nand_do_write_oob(mtd, to, ops);
2172 ret = nand_do_write_ops(mtd, to, ops);
2175 nand_release_device(mtd);
2180 * single_erease_cmd - [GENERIC] NAND standard block erase command function
2181 * @mtd: MTD device structure
2182 * @page: the page address of the block which will be erased
2184 * Standard erase command for NAND chips
2186 static void single_erase_cmd(struct mtd_info *mtd, int page)
2188 struct nand_chip *chip = mtd->priv;
2189 /* Send commands to erase a block */
2190 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2191 chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2195 * multi_erease_cmd - [GENERIC] AND specific block erase command function
2196 * @mtd: MTD device structure
2197 * @page: the page address of the block which will be erased
2199 * AND multi block erase command function
2200 * Erase 4 consecutive blocks
2202 static void multi_erase_cmd(struct mtd_info *mtd, int page)
2204 struct nand_chip *chip = mtd->priv;
2205 /* Send commands to erase a block */
2206 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
2207 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
2208 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
2209 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2210 chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2214 * nand_erase - [MTD Interface] erase block(s)
2215 * @mtd: MTD device structure
2216 * @instr: erase instruction
2218 * Erase one ore more blocks
2220 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
2222 return nand_erase_nand(mtd, instr, 0);
2225 #define BBT_PAGE_MASK 0xffffff3f
2227 * nand_erase_nand - [Internal] erase block(s)
2228 * @mtd: MTD device structure
2229 * @instr: erase instruction
2230 * @allowbbt: allow erasing the bbt area
2232 * Erase one ore more blocks
2234 int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
2237 int page, status, pages_per_block, ret, chipnr;
2238 struct nand_chip *chip = mtd->priv;
2239 loff_t rewrite_bbt[CONFIG_SYS_NAND_MAX_CHIPS] = {0};
2240 unsigned int bbt_masked_page = 0xffffffff;
2243 MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: start = 0x%012llx, len = %llu\n",
2244 __func__, (unsigned long long)instr->addr,
2245 (unsigned long long)instr->len);
2247 if (check_offs_len(mtd, instr->addr, instr->len))
2250 instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
2252 /* Grab the lock and see if the device is available */
2253 nand_get_device(chip, mtd, FL_ERASING);
2255 /* Shift to get first page */
2256 page = (int)(instr->addr >> chip->page_shift);
2257 chipnr = (int)(instr->addr >> chip->chip_shift);
2259 /* Calculate pages in each block */
2260 pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
2262 /* Select the NAND device */
2263 chip->select_chip(mtd, chipnr);
2265 /* Check, if it is write protected */
2266 if (nand_check_wp(mtd)) {
2267 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Device is write protected!!!\n",
2269 instr->state = MTD_ERASE_FAILED;
2274 * If BBT requires refresh, set the BBT page mask to see if the BBT
2275 * should be rewritten. Otherwise the mask is set to 0xffffffff which
2276 * can not be matched. This is also done when the bbt is actually
2277 * erased to avoid recusrsive updates
2279 if (chip->options & BBT_AUTO_REFRESH && !allowbbt)
2280 bbt_masked_page = chip->bbt_td->pages[chipnr] & BBT_PAGE_MASK;
2282 /* Loop through the pages */
2285 instr->state = MTD_ERASING;
2290 * heck if we have a bad block, we do not erase bad blocks !
2292 if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
2293 chip->page_shift, 0, allowbbt)) {
2294 printk(KERN_WARNING "%s: attempt to erase a bad block "
2295 "at page 0x%08x\n", __func__, page);
2296 instr->state = MTD_ERASE_FAILED;
2301 * Invalidate the page cache, if we erase the block which
2302 * contains the current cached page
2304 if (page <= chip->pagebuf && chip->pagebuf <
2305 (page + pages_per_block))
2308 chip->erase_cmd(mtd, page & chip->pagemask);
2310 status = chip->waitfunc(mtd, chip);
2313 * See if operation failed and additional status checks are
2316 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2317 status = chip->errstat(mtd, chip, FL_ERASING,
2320 /* See if block erase succeeded */
2321 if (status & NAND_STATUS_FAIL) {
2322 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase, "
2323 "page 0x%08x\n", __func__, page);
2324 instr->state = MTD_ERASE_FAILED;
2326 ((loff_t)page << chip->page_shift);
2331 * If BBT requires refresh, set the BBT rewrite flag to the
2334 if (bbt_masked_page != 0xffffffff &&
2335 (page & BBT_PAGE_MASK) == bbt_masked_page)
2336 rewrite_bbt[chipnr] =
2337 ((loff_t)page << chip->page_shift);
2339 /* Increment page address and decrement length */
2340 len -= (1 << chip->phys_erase_shift);
2341 page += pages_per_block;
2343 /* Check, if we cross a chip boundary */
2344 if (len && !(page & chip->pagemask)) {
2346 chip->select_chip(mtd, -1);
2347 chip->select_chip(mtd, chipnr);
2350 * If BBT requires refresh and BBT-PERCHIP, set the BBT
2351 * page mask to see if this BBT should be rewritten
2353 if (bbt_masked_page != 0xffffffff &&
2354 (chip->bbt_td->options & NAND_BBT_PERCHIP))
2355 bbt_masked_page = chip->bbt_td->pages[chipnr] &
2359 instr->state = MTD_ERASE_DONE;
2363 ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
2365 /* Deselect and wake up anyone waiting on the device */
2366 nand_release_device(mtd);
2368 /* Do call back function */
2370 mtd_erase_callback(instr);
2373 * If BBT requires refresh and erase was successful, rewrite any
2374 * selected bad block tables
2376 if (bbt_masked_page == 0xffffffff || ret)
2379 for (chipnr = 0; chipnr < chip->numchips; chipnr++) {
2380 if (!rewrite_bbt[chipnr])
2382 /* update the BBT for chip */
2383 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: nand_update_bbt "
2384 "(%d:0x%0llx 0x%0x)\n", __func__, chipnr,
2385 rewrite_bbt[chipnr], chip->bbt_td->pages[chipnr]);
2386 nand_update_bbt(mtd, rewrite_bbt[chipnr]);
2389 /* Return more or less happy */
2394 * nand_sync - [MTD Interface] sync
2395 * @mtd: MTD device structure
2397 * Sync is actually a wait for chip ready function
2399 static void nand_sync(struct mtd_info *mtd)
2401 struct nand_chip *chip = mtd->priv;
2403 MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: called\n", __func__);
2405 /* Grab the lock and see if the device is available */
2406 nand_get_device(chip, mtd, FL_SYNCING);
2407 /* Release it and go back */
2408 nand_release_device(mtd);
2412 * nand_block_isbad - [MTD Interface] Check if block at offset is bad
2413 * @mtd: MTD device structure
2414 * @offs: offset relative to mtd start
2416 static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
2418 /* Check for invalid offset */
2419 if (offs > mtd->size)
2422 return nand_block_checkbad(mtd, offs, 1, 0);
2426 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
2427 * @mtd: MTD device structure
2428 * @ofs: offset relative to mtd start
2430 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
2432 struct nand_chip *chip = mtd->priv;
2435 ret = nand_block_isbad(mtd, ofs);
2437 /* If it was bad already, return success and do nothing. */
2443 return chip->block_markbad(mtd, ofs);
2447 * Set default functions
2449 static void nand_set_defaults(struct nand_chip *chip, int busw)
2451 /* check for proper chip_delay setup, set 20us if not */
2452 if (!chip->chip_delay)
2453 chip->chip_delay = 20;
2455 /* check, if a user supplied command function given */
2456 if (chip->cmdfunc == NULL)
2457 chip->cmdfunc = nand_command;
2459 /* check, if a user supplied wait function given */
2460 if (chip->waitfunc == NULL)
2461 chip->waitfunc = nand_wait;
2463 if (!chip->select_chip)
2464 chip->select_chip = nand_select_chip;
2465 if (!chip->read_byte)
2466 chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
2467 if (!chip->read_word)
2468 chip->read_word = nand_read_word;
2469 if (!chip->block_bad)
2470 chip->block_bad = nand_block_bad;
2471 if (!chip->block_markbad)
2472 chip->block_markbad = nand_default_block_markbad;
2473 if (!chip->write_buf)
2474 chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
2475 if (!chip->read_buf)
2476 chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
2477 if (!chip->verify_buf)
2478 chip->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
2479 if (!chip->scan_bbt)
2480 chip->scan_bbt = nand_default_bbt;
2481 if (!chip->controller)
2482 chip->controller = &chip->hwcontrol;
2485 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
2487 * sanitize ONFI strings so we can safely print them
2489 static void sanitize_string(char *s, size_t len)
2493 /* null terminate */
2496 /* remove non printable chars */
2497 for (i = 0; i < len - 1; i++) {
2498 if (s[i] < ' ' || s[i] > 127)
2502 /* remove trailing spaces */
2506 static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
2511 for (i = 0; i < 8; i++)
2512 crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0);
2519 * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise
2521 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
2524 struct nand_onfi_params *p = &chip->onfi_params;
2528 /* try ONFI for unknow chip or LP */
2529 chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
2530 if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
2531 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
2534 MTDDEBUG(MTD_DEBUG_LEVEL0, "ONFI flash detected\n");
2535 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
2536 for (i = 0; i < 3; i++) {
2537 chip->read_buf(mtd, (uint8_t *)p, sizeof(*p));
2538 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
2539 le16_to_cpu(p->crc)) {
2540 MTDDEBUG(MTD_DEBUG_LEVEL0,
2541 "ONFI param page %d valid\n", i);
2550 val = le16_to_cpu(p->revision);
2552 chip->onfi_version = 23;
2553 else if (val & (1 << 4))
2554 chip->onfi_version = 22;
2555 else if (val & (1 << 3))
2556 chip->onfi_version = 21;
2557 else if (val & (1 << 2))
2558 chip->onfi_version = 20;
2559 else if (val & (1 << 1))
2560 chip->onfi_version = 10;
2562 chip->onfi_version = 0;
2564 if (!chip->onfi_version) {
2565 printk(KERN_INFO "%s: unsupported ONFI version: %d\n",
2570 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
2571 sanitize_string(p->model, sizeof(p->model));
2573 mtd->name = p->model;
2574 mtd->writesize = le32_to_cpu(p->byte_per_page);
2575 mtd->erasesize = le32_to_cpu(p->pages_per_block) * mtd->writesize;
2576 mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
2577 chip->chipsize = le32_to_cpu(p->blocks_per_lun);
2578 chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
2580 if (le16_to_cpu(p->features) & 1)
2581 *busw = NAND_BUSWIDTH_16;
2583 chip->options |= NAND_NO_READRDY | NAND_NO_AUTOINCR;
2588 static inline int nand_flash_detect_onfi(struct mtd_info *mtd,
2589 struct nand_chip *chip,
2597 * Get the flash and manufacturer id and lookup if the type is supported
2599 static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
2600 struct nand_chip *chip,
2602 int *maf_id, int *dev_id,
2603 const struct nand_flash_dev *type)
2610 /* Select the device */
2611 chip->select_chip(mtd, 0);
2614 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
2617 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2619 /* Send the command for reading device ID */
2620 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2622 /* Read manufacturer and device IDs */
2623 *maf_id = chip->read_byte(mtd);
2624 *dev_id = chip->read_byte(mtd);
2626 /* Try again to make sure, as some systems the bus-hold or other
2627 * interface concerns can cause random data which looks like a
2628 * possibly credible NAND flash to appear. If the two results do
2629 * not match, ignore the device completely.
2632 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2634 for (i = 0; i < 2; i++)
2635 id_data[i] = chip->read_byte(mtd);
2637 if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
2638 printk(KERN_INFO "%s: second ID read did not match "
2639 "%02x,%02x against %02x,%02x\n", __func__,
2640 *maf_id, *dev_id, id_data[0], id_data[1]);
2641 return ERR_PTR(-ENODEV);
2645 type = nand_flash_ids;
2647 for (; type->name != NULL; type++)
2648 if (*dev_id == type->id)
2651 chip->onfi_version = 0;
2652 if (!type->name || !type->pagesize) {
2653 /* Check is chip is ONFI compliant */
2654 ret = nand_flash_detect_onfi(mtd, chip, &busw);
2659 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2661 /* Read entire ID string */
2663 for (i = 0; i < 8; i++)
2664 id_data[i] = chip->read_byte(mtd);
2667 return ERR_PTR(-ENODEV);
2670 mtd->name = type->name;
2672 chip->chipsize = (uint64_t)type->chipsize << 20;
2674 if (!type->pagesize && chip->init_size) {
2675 /* set the pagesize, oobsize, erasesize by the driver*/
2676 busw = chip->init_size(mtd, chip, id_data);
2677 } else if (!type->pagesize) {
2679 /* The 3rd id byte holds MLC / multichip data */
2680 chip->cellinfo = id_data[2];
2681 /* The 4th id byte is the important one */
2685 * Field definitions are in the following datasheets:
2686 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
2687 * New style (6 byte ID): Samsung K9GBG08U0M (p.40)
2689 * Check for wraparound + Samsung ID + nonzero 6th byte
2690 * to decide what to do.
2692 if (id_data[0] == id_data[6] && id_data[1] == id_data[7] &&
2693 id_data[0] == NAND_MFR_SAMSUNG &&
2694 (chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
2695 id_data[5] != 0x00) {
2697 mtd->writesize = 2048 << (extid & 0x03);
2700 switch (extid & 0x03) {
2715 /* Calc blocksize */
2716 mtd->erasesize = (128 * 1024) <<
2717 (((extid >> 1) & 0x04) | (extid & 0x03));
2721 mtd->writesize = 1024 << (extid & 0x03);
2724 mtd->oobsize = (8 << (extid & 0x01)) *
2725 (mtd->writesize >> 9);
2727 /* Calc blocksize. Blocksize is multiples of 64KiB */
2728 mtd->erasesize = (64 * 1024) << (extid & 0x03);
2730 /* Get buswidth information */
2731 busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
2735 * Old devices have chip data hardcoded in the device id table
2737 mtd->erasesize = type->erasesize;
2738 mtd->writesize = type->pagesize;
2739 mtd->oobsize = mtd->writesize / 32;
2740 busw = type->options & NAND_BUSWIDTH_16;
2743 * Check for Spansion/AMD ID + repeating 5th, 6th byte since
2744 * some Spansion chips have erasesize that conflicts with size
2745 * listed in nand_ids table
2746 * Data sheet (5 byte ID): Spansion S30ML-P ORNAND (p.39)
2748 if (*maf_id == NAND_MFR_AMD && id_data[4] != 0x00 &&
2749 id_data[5] == 0x00 && id_data[6] == 0x00 &&
2750 id_data[7] == 0x00 && mtd->writesize == 512) {
2751 mtd->erasesize = 128 * 1024;
2752 mtd->erasesize <<= ((id_data[3] & 0x03) << 1);
2755 /* Get chip options, preserve non chip based options */
2756 chip->options |= type->options;
2758 /* Check if chip is a not a samsung device. Do not clear the
2759 * options for chips which are not having an extended id.
2761 if (*maf_id != NAND_MFR_SAMSUNG && !type->pagesize)
2762 chip->options &= ~NAND_SAMSUNG_LP_OPTIONS;
2766 * Set chip as a default. Board drivers can override it, if necessary
2768 chip->options |= NAND_NO_AUTOINCR;
2770 /* Try to identify manufacturer */
2771 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
2772 if (nand_manuf_ids[maf_idx].id == *maf_id)
2777 * Check, if buswidth is correct. Hardware drivers should set
2780 if (busw != (chip->options & NAND_BUSWIDTH_16)) {
2781 printk(KERN_INFO "NAND device: Manufacturer ID:"
2782 " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id,
2783 *dev_id, nand_manuf_ids[maf_idx].name, mtd->name);
2784 printk(KERN_WARNING "NAND bus width %d instead %d bit\n",
2785 (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
2787 return ERR_PTR(-EINVAL);
2790 /* Calculate the address shift from the page size */
2791 chip->page_shift = ffs(mtd->writesize) - 1;
2792 /* Convert chipsize to number of pages per chip -1. */
2793 chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
2795 chip->bbt_erase_shift = chip->phys_erase_shift =
2796 ffs(mtd->erasesize) - 1;
2797 if (chip->chipsize & 0xffffffff)
2798 chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
2800 chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
2801 chip->chip_shift += 32 - 1;
2804 chip->badblockbits = 8;
2806 /* Set the bad block position */
2807 if (mtd->writesize > 512 || (busw & NAND_BUSWIDTH_16))
2808 chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
2810 chip->badblockpos = NAND_SMALL_BADBLOCK_POS;
2813 * Bad block marker is stored in the last page of each block
2814 * on Samsung and Hynix MLC devices; stored in first two pages
2815 * of each block on Micron devices with 2KiB pages and on
2816 * SLC Samsung, Hynix, Toshiba and AMD/Spansion. All others scan
2817 * only the first page.
2819 if ((chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
2820 (*maf_id == NAND_MFR_SAMSUNG ||
2821 *maf_id == NAND_MFR_HYNIX))
2822 chip->options |= NAND_BBT_SCANLASTPAGE;
2823 else if ((!(chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
2824 (*maf_id == NAND_MFR_SAMSUNG ||
2825 *maf_id == NAND_MFR_HYNIX ||
2826 *maf_id == NAND_MFR_TOSHIBA ||
2827 *maf_id == NAND_MFR_AMD)) ||
2828 (mtd->writesize == 2048 &&
2829 *maf_id == NAND_MFR_MICRON))
2830 chip->options |= NAND_BBT_SCAN2NDPAGE;
2833 * Numonyx/ST 2K pages, x8 bus use BOTH byte 1 and 6
2835 if (!(busw & NAND_BUSWIDTH_16) &&
2836 *maf_id == NAND_MFR_STMICRO &&
2837 mtd->writesize == 2048) {
2838 chip->options |= NAND_BBT_SCANBYTE1AND6;
2839 chip->badblockpos = 0;
2842 /* Check for AND chips with 4 page planes */
2843 if (chip->options & NAND_4PAGE_ARRAY)
2844 chip->erase_cmd = multi_erase_cmd;
2846 chip->erase_cmd = single_erase_cmd;
2848 /* Do not replace user supplied command function ! */
2849 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
2850 chip->cmdfunc = nand_command_lp;
2852 /* TODO onfi flash name */
2854 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
2855 if (chip->onfi_version)
2856 name = chip->onfi_params.model;
2858 MTDDEBUG(MTD_DEBUG_LEVEL0, "NAND device: Manufacturer ID:"
2859 " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id, *dev_id,
2860 nand_manuf_ids[maf_idx].name, name);
2866 * nand_scan_ident - [NAND Interface] Scan for the NAND device
2867 * @mtd: MTD device structure
2868 * @maxchips: Number of chips to scan for
2869 * @table: Alternative NAND ID table
2871 * This is the first phase of the normal nand_scan() function. It
2872 * reads the flash ID and sets up MTD fields accordingly.
2874 * The mtd->owner field must be set to the module of the caller.
2876 int nand_scan_ident(struct mtd_info *mtd, int maxchips,
2877 const struct nand_flash_dev *table)
2879 int i, busw, nand_maf_id, nand_dev_id;
2880 struct nand_chip *chip = mtd->priv;
2881 const struct nand_flash_dev *type;
2883 /* Get buswidth to select the correct functions */
2884 busw = chip->options & NAND_BUSWIDTH_16;
2885 /* Set the default functions */
2886 nand_set_defaults(chip, busw);
2888 /* Read the flash type */
2889 type = nand_get_flash_type(mtd, chip, busw,
2890 &nand_maf_id, &nand_dev_id, table);
2893 #ifndef CONFIG_SYS_NAND_QUIET_TEST
2894 printk(KERN_WARNING "No NAND device found!!!\n");
2896 chip->select_chip(mtd, -1);
2897 return PTR_ERR(type);
2900 /* Check for a chip array */
2901 for (i = 1; i < maxchips; i++) {
2902 chip->select_chip(mtd, i);
2903 /* See comment in nand_get_flash_type for reset */
2904 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2905 /* Send the command for reading device ID */
2906 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2907 /* Read manufacturer and device IDs */
2908 if (nand_maf_id != chip->read_byte(mtd) ||
2909 nand_dev_id != chip->read_byte(mtd))
2914 printk(KERN_INFO "%d NAND chips detected\n", i);
2917 /* Store the number of chips and calc total size for mtd */
2919 mtd->size = i * chip->chipsize;
2926 * nand_scan_tail - [NAND Interface] Scan for the NAND device
2927 * @mtd: MTD device structure
2929 * This is the second phase of the normal nand_scan() function. It
2930 * fills out all the uninitialized function pointers with the defaults
2931 * and scans for a bad block table if appropriate.
2933 int nand_scan_tail(struct mtd_info *mtd)
2936 struct nand_chip *chip = mtd->priv;
2938 if (!(chip->options & NAND_OWN_BUFFERS))
2939 chip->buffers = memalign(ARCH_DMA_MINALIGN,
2940 sizeof(*chip->buffers));
2944 /* Set the internal oob buffer location, just after the page data */
2945 chip->oob_poi = chip->buffers->databuf + mtd->writesize;
2948 * If no default placement scheme is given, select an appropriate one
2950 if (!chip->ecc.layout && (chip->ecc.mode != NAND_ECC_SOFT_BCH)) {
2951 switch (mtd->oobsize) {
2953 chip->ecc.layout = &nand_oob_8;
2956 chip->ecc.layout = &nand_oob_16;
2959 chip->ecc.layout = &nand_oob_64;
2962 chip->ecc.layout = &nand_oob_128;
2965 printk(KERN_WARNING "No oob scheme defined for "
2966 "oobsize %d\n", mtd->oobsize);
2970 if (!chip->write_page)
2971 chip->write_page = nand_write_page;
2974 * check ECC mode, default to software if 3byte/512byte hardware ECC is
2975 * selected and we have 256 byte pagesize fallback to software ECC
2978 switch (chip->ecc.mode) {
2979 case NAND_ECC_HW_OOB_FIRST:
2980 /* Similar to NAND_ECC_HW, but a separate read_page handle */
2981 if (!chip->ecc.calculate || !chip->ecc.correct ||
2983 printk(KERN_WARNING "No ECC functions supplied; "
2984 "Hardware ECC not possible\n");
2987 if (!chip->ecc.read_page)
2988 chip->ecc.read_page = nand_read_page_hwecc_oob_first;
2991 /* Use standard hwecc read page function ? */
2992 if (!chip->ecc.read_page)
2993 chip->ecc.read_page = nand_read_page_hwecc;
2994 if (!chip->ecc.write_page)
2995 chip->ecc.write_page = nand_write_page_hwecc;
2996 if (!chip->ecc.read_page_raw)
2997 chip->ecc.read_page_raw = nand_read_page_raw;
2998 if (!chip->ecc.write_page_raw)
2999 chip->ecc.write_page_raw = nand_write_page_raw;
3000 if (!chip->ecc.read_oob)
3001 chip->ecc.read_oob = nand_read_oob_std;
3002 if (!chip->ecc.write_oob)
3003 chip->ecc.write_oob = nand_write_oob_std;
3005 case NAND_ECC_HW_SYNDROME:
3006 if ((!chip->ecc.calculate || !chip->ecc.correct ||
3007 !chip->ecc.hwctl) &&
3008 (!chip->ecc.read_page ||
3009 chip->ecc.read_page == nand_read_page_hwecc ||
3010 !chip->ecc.write_page ||
3011 chip->ecc.write_page == nand_write_page_hwecc)) {
3012 printk(KERN_WARNING "No ECC functions supplied; "
3013 "Hardware ECC not possible\n");
3016 /* Use standard syndrome read/write page function ? */
3017 if (!chip->ecc.read_page)
3018 chip->ecc.read_page = nand_read_page_syndrome;
3019 if (!chip->ecc.write_page)
3020 chip->ecc.write_page = nand_write_page_syndrome;
3021 if (!chip->ecc.read_page_raw)
3022 chip->ecc.read_page_raw = nand_read_page_raw_syndrome;
3023 if (!chip->ecc.write_page_raw)
3024 chip->ecc.write_page_raw = nand_write_page_raw_syndrome;
3025 if (!chip->ecc.read_oob)
3026 chip->ecc.read_oob = nand_read_oob_syndrome;
3027 if (!chip->ecc.write_oob)
3028 chip->ecc.write_oob = nand_write_oob_syndrome;
3030 if (mtd->writesize >= chip->ecc.size)
3032 printk(KERN_WARNING "%d byte HW ECC not possible on "
3033 "%d byte page size, fallback to SW ECC\n",
3034 chip->ecc.size, mtd->writesize);
3035 chip->ecc.mode = NAND_ECC_SOFT;
3038 chip->ecc.calculate = nand_calculate_ecc;
3039 chip->ecc.correct = nand_correct_data;
3040 chip->ecc.read_page = nand_read_page_swecc;
3041 chip->ecc.read_subpage = nand_read_subpage;
3042 chip->ecc.write_page = nand_write_page_swecc;
3043 chip->ecc.read_page_raw = nand_read_page_raw;
3044 chip->ecc.write_page_raw = nand_write_page_raw;
3045 chip->ecc.read_oob = nand_read_oob_std;
3046 chip->ecc.write_oob = nand_write_oob_std;
3047 if (!chip->ecc.size)
3048 chip->ecc.size = 256;
3049 chip->ecc.bytes = 3;
3052 case NAND_ECC_SOFT_BCH:
3053 if (!mtd_nand_has_bch()) {
3054 printk(KERN_WARNING "CONFIG_MTD_ECC_BCH not enabled\n");
3057 chip->ecc.calculate = nand_bch_calculate_ecc;
3058 chip->ecc.correct = nand_bch_correct_data;
3059 chip->ecc.read_page = nand_read_page_swecc;
3060 chip->ecc.read_subpage = nand_read_subpage;
3061 chip->ecc.write_page = nand_write_page_swecc;
3062 chip->ecc.read_page_raw = nand_read_page_raw;
3063 chip->ecc.write_page_raw = nand_write_page_raw;
3064 chip->ecc.read_oob = nand_read_oob_std;
3065 chip->ecc.write_oob = nand_write_oob_std;
3067 * Board driver should supply ecc.size and ecc.bytes values to
3068 * select how many bits are correctable; see nand_bch_init()
3070 * Otherwise, default to 4 bits for large page devices
3072 if (!chip->ecc.size && (mtd->oobsize >= 64)) {
3073 chip->ecc.size = 512;
3074 chip->ecc.bytes = 7;
3076 chip->ecc.priv = nand_bch_init(mtd,
3080 if (!chip->ecc.priv)
3081 printk(KERN_WARNING "BCH ECC initialization failed!\n");
3086 printk(KERN_WARNING "NAND_ECC_NONE selected by board driver. "
3087 "This is not recommended !!\n");
3088 chip->ecc.read_page = nand_read_page_raw;
3089 chip->ecc.write_page = nand_write_page_raw;
3090 chip->ecc.read_oob = nand_read_oob_std;
3091 chip->ecc.read_page_raw = nand_read_page_raw;
3092 chip->ecc.write_page_raw = nand_write_page_raw;
3093 chip->ecc.write_oob = nand_write_oob_std;
3094 chip->ecc.size = mtd->writesize;
3095 chip->ecc.bytes = 0;
3099 printk(KERN_WARNING "Invalid NAND_ECC_MODE %d\n",
3105 * The number of bytes available for a client to place data into
3106 * the out of band area
3108 chip->ecc.layout->oobavail = 0;
3109 for (i = 0; chip->ecc.layout->oobfree[i].length
3110 && i < ARRAY_SIZE(chip->ecc.layout->oobfree); i++)
3111 chip->ecc.layout->oobavail +=
3112 chip->ecc.layout->oobfree[i].length;
3113 mtd->oobavail = chip->ecc.layout->oobavail;
3116 * Set the number of read / write steps for one page depending on ECC
3119 chip->ecc.steps = mtd->writesize / chip->ecc.size;
3120 if (chip->ecc.steps * chip->ecc.size != mtd->writesize) {
3121 printk(KERN_WARNING "Invalid ecc parameters\n");
3124 chip->ecc.total = chip->ecc.steps * chip->ecc.bytes;
3127 * Allow subpage writes up to ecc.steps. Not possible for MLC
3130 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
3131 !(chip->cellinfo & NAND_CI_CELLTYPE_MSK)) {
3132 switch (chip->ecc.steps) {
3134 mtd->subpage_sft = 1;
3139 mtd->subpage_sft = 2;
3143 chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
3145 /* Initialize state */
3146 chip->state = FL_READY;
3148 /* De-select the device */
3149 chip->select_chip(mtd, -1);
3151 /* Invalidate the pagebuffer reference */
3154 /* Large page NAND with SOFT_ECC should support subpage reads */
3155 if ((chip->ecc.mode == NAND_ECC_SOFT) && (chip->page_shift > 9))
3156 chip->options |= NAND_SUBPAGE_READ;
3158 /* Fill in remaining MTD driver data */
3159 mtd->type = MTD_NANDFLASH;
3160 mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
3162 mtd->erase = nand_erase;
3164 mtd->unpoint = NULL;
3165 mtd->read = nand_read;
3166 mtd->write = nand_write;
3167 mtd->read_oob = nand_read_oob;
3168 mtd->write_oob = nand_write_oob;
3169 mtd->sync = nand_sync;
3172 mtd->block_isbad = nand_block_isbad;
3173 mtd->block_markbad = nand_block_markbad;
3175 /* propagate ecc.layout to mtd_info */
3176 mtd->ecclayout = chip->ecc.layout;
3178 /* Check, if we should skip the bad block table scan */
3179 if (chip->options & NAND_SKIP_BBTSCAN)
3180 chip->options |= NAND_BBT_SCANNED;
3186 * nand_scan - [NAND Interface] Scan for the NAND device
3187 * @mtd: MTD device structure
3188 * @maxchips: Number of chips to scan for
3190 * This fills out all the uninitialized function pointers
3191 * with the defaults.
3192 * The flash ID is read and the mtd/chip structures are
3193 * filled with the appropriate values.
3194 * The mtd->owner field must be set to the module of the caller
3197 int nand_scan(struct mtd_info *mtd, int maxchips)
3201 ret = nand_scan_ident(mtd, maxchips, NULL);
3203 ret = nand_scan_tail(mtd);
3208 * nand_release - [NAND Interface] Free resources held by the NAND device
3209 * @mtd: MTD device structure
3211 void nand_release(struct mtd_info *mtd)
3213 struct nand_chip *chip = mtd->priv;
3215 if (chip->ecc.mode == NAND_ECC_SOFT_BCH)
3216 nand_bch_free((struct nand_bch_control *)chip->ecc.priv);
3218 #ifdef CONFIG_MTD_PARTITIONS
3219 /* Deregister partitions */
3220 del_mtd_partitions(mtd);
3223 /* Free bad block table memory */
3225 if (!(chip->options & NAND_OWN_BUFFERS))
3226 kfree(chip->buffers);
3228 /* Free bad block descriptor memory */
3229 if (chip->badblock_pattern && chip->badblock_pattern->options
3230 & NAND_BBT_DYNAMICSTRUCT)
3231 kfree(chip->badblock_pattern);