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/tech/nand.html
12 * Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
13 * 2002 Thomas Gleixner (tglx@linutronix.de)
15 * 02-08-2004 tglx: support for strange chips, which cannot auto increment
16 * pages on read / read_oob
18 * 03-17-2004 tglx: Check ready before auto increment check. Simon Bayes
19 * pointed this out, as he marked an auto increment capable chip
20 * as NOAUTOINCR in the board driver.
21 * Make reads over block boundaries work too
23 * 04-14-2004 tglx: first working version for 2k page size chips
25 * 05-19-2004 tglx: Basic support for Renesas AG-AND chips
27 * 09-24-2004 tglx: add support for hardware controllers (e.g. ECC) shared
28 * among multiple independend devices. Suggestions and initial
29 * patch from Ben Dooks <ben-mtd@fluff.org>
31 * 12-05-2004 dmarlin: add workaround for Renesas AG-AND chips "disturb"
32 * issue. Basically, any block not rewritten may lose data when
33 * surrounding blocks are rewritten many times. JFFS2 ensures
34 * this doesn't happen for blocks it uses, but the Bad Block
35 * Table(s) may not be rewritten. To ensure they do not lose
36 * data, force them to be rewritten when some of the surrounding
37 * blocks are erased. Rather than tracking a specific nearby
38 * block (which could itself go bad), use a page address 'mask' to
39 * select several blocks in the same area, and rewrite the BBT
40 * when any of them are erased.
42 * 01-03-2005 dmarlin: added support for the device recovery command sequence
43 * for Renesas AG-AND chips. If there was a sudden loss of power
44 * during an erase operation, a "device recovery" operation must
45 * be performed when power is restored to ensure correct
48 * 01-20-2005 dmarlin: added support for optional hardware specific callback
49 * routine to perform extra error status checks on erase and write
50 * failures. This required adding a wrapper function for
53 * 08-20-2005 vwool: suspend/resume added
56 * David Woodhouse for adding multichip support
58 * Aleph One Ltd. and Toby Churchill Ltd. for supporting the
59 * rework for 2K page size chips
62 * Enable cached programming for 2k page size chips
63 * Check, if mtd->ecctype should be set to MTD_ECC_HW
64 * if we have HW ecc support.
65 * The AG-AND chips have nice features for speed improvement,
66 * which are not supported yet. Read / program 4 pages in one go.
68 * $Id: nand_base.c,v 1.150 2005/09/15 13:58:48 vwool Exp $
70 * This program is free software; you can redistribute it and/or modify
71 * it under the terms of the GNU General Public License version 2 as
72 * published by the Free Software Foundation.
76 #include <linux/module.h>
77 #include <linux/delay.h>
78 #include <linux/errno.h>
79 #include <linux/err.h>
80 #include <linux/sched.h>
81 #include <linux/slab.h>
82 #include <linux/types.h>
83 #include <linux/mtd/mtd.h>
84 #include <linux/mtd/nand.h>
85 #include <linux/mtd/nand_ecc.h>
86 #include <linux/mtd/compatmac.h>
87 #include <linux/interrupt.h>
88 #include <linux/bitops.h>
89 #include <linux/leds.h>
92 #ifdef CONFIG_MTD_PARTITIONS
93 #include <linux/mtd/partitions.h>
96 /* Define default oob placement schemes for large and small page devices */
97 static struct nand_oobinfo nand_oob_8 = {
98 .useecc = MTD_NANDECC_AUTOPLACE,
101 .oobfree = {{3, 2}, {6, 2}}
104 static struct nand_oobinfo nand_oob_16 = {
105 .useecc = MTD_NANDECC_AUTOPLACE,
107 .eccpos = {0, 1, 2, 3, 6, 7},
111 static struct nand_oobinfo nand_oob_64 = {
112 .useecc = MTD_NANDECC_AUTOPLACE,
115 40, 41, 42, 43, 44, 45, 46, 47,
116 48, 49, 50, 51, 52, 53, 54, 55,
117 56, 57, 58, 59, 60, 61, 62, 63},
121 /* This is used for padding purposes in nand_write_oob */
122 static uint8_t ffchars[] = {
123 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
124 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
125 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
126 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
127 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
128 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
129 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
130 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
134 * NAND low-level MTD interface functions
136 static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
137 static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
138 static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
140 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
141 size_t *retlen, uint8_t *buf);
142 static int nand_read_oob(struct mtd_info *mtd, loff_t from, size_t len,
143 size_t *retlen, uint8_t *buf);
144 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
145 size_t *retlen, const uint8_t *buf);
146 static int nand_write_oob(struct mtd_info *mtd, loff_t to, size_t len,
147 size_t *retlen, const uint8_t *buf);
148 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr);
149 static void nand_sync(struct mtd_info *mtd);
151 /* Some internal functions */
152 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *this,
153 int page, uint8_t * oob_buf,
154 struct nand_oobinfo *oobsel, int mode);
155 #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
156 static int nand_verify_pages(struct mtd_info *mtd, struct nand_chip *this,
157 int page, int numpages, uint8_t *oob_buf,
158 struct nand_oobinfo *oobsel, int chipnr,
161 #define nand_verify_pages(...) (0)
164 static int nand_get_device(struct nand_chip *this, struct mtd_info *mtd,
168 * nand_release_device - [GENERIC] release chip
169 * @mtd: MTD device structure
171 * Deselect, release chip lock and wake up anyone waiting on the device
173 static void nand_release_device(struct mtd_info *mtd)
175 struct nand_chip *this = mtd->priv;
177 /* De-select the NAND device */
178 this->select_chip(mtd, -1);
180 /* Release the controller and the chip */
181 spin_lock(&this->controller->lock);
182 this->controller->active = NULL;
183 this->state = FL_READY;
184 wake_up(&this->controller->wq);
185 spin_unlock(&this->controller->lock);
189 * nand_read_byte - [DEFAULT] read one byte from the chip
190 * @mtd: MTD device structure
192 * Default read function for 8bit buswith
194 static uint8_t nand_read_byte(struct mtd_info *mtd)
196 struct nand_chip *this = mtd->priv;
197 return readb(this->IO_ADDR_R);
201 * nand_write_byte - [DEFAULT] write one byte to the chip
202 * @mtd: MTD device structure
203 * @byte: pointer to data byte to write
205 * Default write function for 8it buswith
207 static void nand_write_byte(struct mtd_info *mtd, uint8_t byte)
209 struct nand_chip *this = mtd->priv;
210 writeb(byte, this->IO_ADDR_W);
214 * nand_read_byte16 - [DEFAULT] read one byte endianess aware from the chip
215 * @mtd: MTD device structure
217 * Default read function for 16bit buswith with
218 * endianess conversion
220 static uint8_t nand_read_byte16(struct mtd_info *mtd)
222 struct nand_chip *this = mtd->priv;
223 return (uint8_t) cpu_to_le16(readw(this->IO_ADDR_R));
227 * nand_write_byte16 - [DEFAULT] write one byte endianess aware to the chip
228 * @mtd: MTD device structure
229 * @byte: pointer to data byte to write
231 * Default write function for 16bit buswith with
232 * endianess conversion
234 static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte)
236 struct nand_chip *this = mtd->priv;
237 writew(le16_to_cpu((u16) byte), this->IO_ADDR_W);
241 * nand_read_word - [DEFAULT] read one word from the chip
242 * @mtd: MTD device structure
244 * Default read function for 16bit buswith without
245 * endianess conversion
247 static u16 nand_read_word(struct mtd_info *mtd)
249 struct nand_chip *this = mtd->priv;
250 return readw(this->IO_ADDR_R);
254 * nand_write_word - [DEFAULT] write one word to the chip
255 * @mtd: MTD device structure
256 * @word: data word to write
258 * Default write function for 16bit buswith without
259 * endianess conversion
261 static void nand_write_word(struct mtd_info *mtd, u16 word)
263 struct nand_chip *this = mtd->priv;
264 writew(word, this->IO_ADDR_W);
268 * nand_select_chip - [DEFAULT] control CE line
269 * @mtd: MTD device structure
270 * @chip: chipnumber to select, -1 for deselect
272 * Default select function for 1 chip devices.
274 static void nand_select_chip(struct mtd_info *mtd, int chip)
276 struct nand_chip *this = mtd->priv;
279 this->hwcontrol(mtd, NAND_CTL_CLRNCE);
282 this->hwcontrol(mtd, NAND_CTL_SETNCE);
291 * nand_write_buf - [DEFAULT] write buffer to chip
292 * @mtd: MTD device structure
294 * @len: number of bytes to write
296 * Default write function for 8bit buswith
298 static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
301 struct nand_chip *this = mtd->priv;
303 for (i = 0; i < len; i++)
304 writeb(buf[i], this->IO_ADDR_W);
308 * nand_read_buf - [DEFAULT] read chip data into buffer
309 * @mtd: MTD device structure
310 * @buf: buffer to store date
311 * @len: number of bytes to read
313 * Default read function for 8bit buswith
315 static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
318 struct nand_chip *this = mtd->priv;
320 for (i = 0; i < len; i++)
321 buf[i] = readb(this->IO_ADDR_R);
325 * nand_verify_buf - [DEFAULT] Verify chip data against buffer
326 * @mtd: MTD device structure
327 * @buf: buffer containing the data to compare
328 * @len: number of bytes to compare
330 * Default verify function for 8bit buswith
332 static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
335 struct nand_chip *this = mtd->priv;
337 for (i = 0; i < len; i++)
338 if (buf[i] != readb(this->IO_ADDR_R))
345 * nand_write_buf16 - [DEFAULT] write buffer to chip
346 * @mtd: MTD device structure
348 * @len: number of bytes to write
350 * Default write function for 16bit buswith
352 static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
355 struct nand_chip *this = mtd->priv;
356 u16 *p = (u16 *) buf;
359 for (i = 0; i < len; i++)
360 writew(p[i], this->IO_ADDR_W);
365 * nand_read_buf16 - [DEFAULT] read chip data into buffer
366 * @mtd: MTD device structure
367 * @buf: buffer to store date
368 * @len: number of bytes to read
370 * Default read function for 16bit buswith
372 static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
375 struct nand_chip *this = mtd->priv;
376 u16 *p = (u16 *) buf;
379 for (i = 0; i < len; i++)
380 p[i] = readw(this->IO_ADDR_R);
384 * nand_verify_buf16 - [DEFAULT] Verify chip data against buffer
385 * @mtd: MTD device structure
386 * @buf: buffer containing the data to compare
387 * @len: number of bytes to compare
389 * Default verify function for 16bit buswith
391 static int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
394 struct nand_chip *this = mtd->priv;
395 u16 *p = (u16 *) buf;
398 for (i = 0; i < len; i++)
399 if (p[i] != readw(this->IO_ADDR_R))
406 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
407 * @mtd: MTD device structure
408 * @ofs: offset from device start
409 * @getchip: 0, if the chip is already selected
411 * Check, if the block is bad.
413 static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
415 int page, chipnr, res = 0;
416 struct nand_chip *this = mtd->priv;
420 page = (int)(ofs >> this->page_shift);
421 chipnr = (int)(ofs >> this->chip_shift);
423 /* Grab the lock and see if the device is available */
424 nand_get_device(this, mtd, FL_READING);
426 /* Select the NAND device */
427 this->select_chip(mtd, chipnr);
431 if (this->options & NAND_BUSWIDTH_16) {
432 this->cmdfunc(mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE,
433 page & this->pagemask);
434 bad = cpu_to_le16(this->read_word(mtd));
435 if (this->badblockpos & 0x1)
437 if ((bad & 0xFF) != 0xff)
440 this->cmdfunc(mtd, NAND_CMD_READOOB, this->badblockpos,
441 page & this->pagemask);
442 if (this->read_byte(mtd) != 0xff)
447 /* Deselect and wake up anyone waiting on the device */
448 nand_release_device(mtd);
455 * nand_default_block_markbad - [DEFAULT] mark a block bad
456 * @mtd: MTD device structure
457 * @ofs: offset from device start
459 * This is the default implementation, which can be overridden by
460 * a hardware specific driver.
462 static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
464 struct nand_chip *this = mtd->priv;
465 uint8_t buf[2] = { 0, 0 };
469 /* Get block number */
470 block = ((int)ofs) >> this->bbt_erase_shift;
472 this->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
474 /* Do we have a flash based bad block table ? */
475 if (this->options & NAND_USE_FLASH_BBT)
476 return nand_update_bbt(mtd, ofs);
478 /* We write two bytes, so we dont have to mess with 16 bit access */
479 ofs += mtd->oobsize + (this->badblockpos & ~0x01);
480 return nand_write_oob(mtd, ofs, 2, &retlen, buf);
484 * nand_check_wp - [GENERIC] check if the chip is write protected
485 * @mtd: MTD device structure
486 * Check, if the device is write protected
488 * The function expects, that the device is already selected
490 static int nand_check_wp(struct mtd_info *mtd)
492 struct nand_chip *this = mtd->priv;
493 /* Check the WP bit */
494 this->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
495 return (this->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
499 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
500 * @mtd: MTD device structure
501 * @ofs: offset from device start
502 * @getchip: 0, if the chip is already selected
503 * @allowbbt: 1, if its allowed to access the bbt area
505 * Check, if the block is bad. Either by reading the bad block table or
506 * calling of the scan function.
508 static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
511 struct nand_chip *this = mtd->priv;
514 return this->block_bad(mtd, ofs, getchip);
516 /* Return info from the table */
517 return nand_isbad_bbt(mtd, ofs, allowbbt);
520 DEFINE_LED_TRIGGER(nand_led_trigger);
523 * Wait for the ready pin, after a command
524 * The timeout is catched later.
526 static void nand_wait_ready(struct mtd_info *mtd)
528 struct nand_chip *this = mtd->priv;
529 unsigned long timeo = jiffies + 2;
531 led_trigger_event(nand_led_trigger, LED_FULL);
532 /* wait until command is processed or timeout occures */
534 if (this->dev_ready(mtd))
536 touch_softlockup_watchdog();
537 } while (time_before(jiffies, timeo));
538 led_trigger_event(nand_led_trigger, LED_OFF);
542 * nand_command - [DEFAULT] Send command to NAND device
543 * @mtd: MTD device structure
544 * @command: the command to be sent
545 * @column: the column address for this command, -1 if none
546 * @page_addr: the page address for this command, -1 if none
548 * Send command to NAND device. This function is used for small page
549 * devices (256/512 Bytes per page)
551 static void nand_command(struct mtd_info *mtd, unsigned command, int column,
554 register struct nand_chip *this = mtd->priv;
556 /* Begin command latch cycle */
557 this->hwcontrol(mtd, NAND_CTL_SETCLE);
559 * Write out the command to the device.
561 if (command == NAND_CMD_SEQIN) {
564 if (column >= mtd->writesize) {
566 column -= mtd->writesize;
567 readcmd = NAND_CMD_READOOB;
568 } else if (column < 256) {
569 /* First 256 bytes --> READ0 */
570 readcmd = NAND_CMD_READ0;
573 readcmd = NAND_CMD_READ1;
575 this->write_byte(mtd, readcmd);
577 this->write_byte(mtd, command);
579 /* Set ALE and clear CLE to start address cycle */
580 this->hwcontrol(mtd, NAND_CTL_CLRCLE);
582 if (column != -1 || page_addr != -1) {
583 this->hwcontrol(mtd, NAND_CTL_SETALE);
585 /* Serially input address */
587 /* Adjust columns for 16 bit buswidth */
588 if (this->options & NAND_BUSWIDTH_16)
590 this->write_byte(mtd, column);
592 if (page_addr != -1) {
593 this->write_byte(mtd, (uint8_t)(page_addr & 0xff));
594 this->write_byte(mtd, (uint8_t)((page_addr >> 8) & 0xff));
595 /* One more address cycle for devices > 32MiB */
596 if (this->chipsize > (32 << 20))
597 this->write_byte(mtd, (uint8_t)((page_addr >> 16) & 0x0f));
599 /* Latch in address */
600 this->hwcontrol(mtd, NAND_CTL_CLRALE);
604 * program and erase have their own busy handlers
605 * status and sequential in needs no delay
609 case NAND_CMD_PAGEPROG:
610 case NAND_CMD_ERASE1:
611 case NAND_CMD_ERASE2:
613 case NAND_CMD_STATUS:
619 udelay(this->chip_delay);
620 this->hwcontrol(mtd, NAND_CTL_SETCLE);
621 this->write_byte(mtd, NAND_CMD_STATUS);
622 this->hwcontrol(mtd, NAND_CTL_CLRCLE);
623 while (!(this->read_byte(mtd) & NAND_STATUS_READY)) ;
626 /* This applies to read commands */
629 * If we don't have access to the busy pin, we apply the given
632 if (!this->dev_ready) {
633 udelay(this->chip_delay);
637 /* Apply this short delay always to ensure that we do wait tWB in
638 * any case on any machine. */
641 nand_wait_ready(mtd);
645 * nand_command_lp - [DEFAULT] Send command to NAND large page device
646 * @mtd: MTD device structure
647 * @command: the command to be sent
648 * @column: the column address for this command, -1 if none
649 * @page_addr: the page address for this command, -1 if none
651 * Send command to NAND device. This is the version for the new large page devices
652 * We dont have the separate regions as we have in the small page devices.
653 * We must emulate NAND_CMD_READOOB to keep the code compatible.
656 static void nand_command_lp(struct mtd_info *mtd, unsigned command, int column, int page_addr)
658 register struct nand_chip *this = mtd->priv;
660 /* Emulate NAND_CMD_READOOB */
661 if (command == NAND_CMD_READOOB) {
662 column += mtd->writesize;
663 command = NAND_CMD_READ0;
666 /* Begin command latch cycle */
667 this->hwcontrol(mtd, NAND_CTL_SETCLE);
668 /* Write out the command to the device. */
669 this->write_byte(mtd, (command & 0xff));
670 /* End command latch cycle */
671 this->hwcontrol(mtd, NAND_CTL_CLRCLE);
673 if (column != -1 || page_addr != -1) {
674 this->hwcontrol(mtd, NAND_CTL_SETALE);
676 /* Serially input address */
678 /* Adjust columns for 16 bit buswidth */
679 if (this->options & NAND_BUSWIDTH_16)
681 this->write_byte(mtd, column & 0xff);
682 this->write_byte(mtd, column >> 8);
684 if (page_addr != -1) {
685 this->write_byte(mtd, (uint8_t)(page_addr & 0xff));
686 this->write_byte(mtd, (uint8_t)((page_addr >> 8) & 0xff));
687 /* One more address cycle for devices > 128MiB */
688 if (this->chipsize > (128 << 20))
689 this->write_byte(mtd, (uint8_t)((page_addr >> 16) & 0xff));
691 /* Latch in address */
692 this->hwcontrol(mtd, NAND_CTL_CLRALE);
696 * program and erase have their own busy handlers
697 * status, sequential in, and deplete1 need no delay
701 case NAND_CMD_CACHEDPROG:
702 case NAND_CMD_PAGEPROG:
703 case NAND_CMD_ERASE1:
704 case NAND_CMD_ERASE2:
706 case NAND_CMD_STATUS:
707 case NAND_CMD_DEPLETE1:
711 * read error status commands require only a short delay
713 case NAND_CMD_STATUS_ERROR:
714 case NAND_CMD_STATUS_ERROR0:
715 case NAND_CMD_STATUS_ERROR1:
716 case NAND_CMD_STATUS_ERROR2:
717 case NAND_CMD_STATUS_ERROR3:
718 udelay(this->chip_delay);
724 udelay(this->chip_delay);
725 this->hwcontrol(mtd, NAND_CTL_SETCLE);
726 this->write_byte(mtd, NAND_CMD_STATUS);
727 this->hwcontrol(mtd, NAND_CTL_CLRCLE);
728 while (!(this->read_byte(mtd) & NAND_STATUS_READY)) ;
732 /* Begin command latch cycle */
733 this->hwcontrol(mtd, NAND_CTL_SETCLE);
734 /* Write out the start read command */
735 this->write_byte(mtd, NAND_CMD_READSTART);
736 /* End command latch cycle */
737 this->hwcontrol(mtd, NAND_CTL_CLRCLE);
738 /* Fall through into ready check */
740 /* This applies to read commands */
743 * If we don't have access to the busy pin, we apply the given
746 if (!this->dev_ready) {
747 udelay(this->chip_delay);
752 /* Apply this short delay always to ensure that we do wait tWB in
753 * any case on any machine. */
756 nand_wait_ready(mtd);
760 * nand_get_device - [GENERIC] Get chip for selected access
761 * @this: the nand chip descriptor
762 * @mtd: MTD device structure
763 * @new_state: the state which is requested
765 * Get the device and lock it for exclusive access
768 nand_get_device(struct nand_chip *this, struct mtd_info *mtd, int new_state)
770 spinlock_t *lock = &this->controller->lock;
771 wait_queue_head_t *wq = &this->controller->wq;
772 DECLARE_WAITQUEUE(wait, current);
776 /* Hardware controller shared among independend devices */
777 /* Hardware controller shared among independend devices */
778 if (!this->controller->active)
779 this->controller->active = this;
781 if (this->controller->active == this && this->state == FL_READY) {
782 this->state = new_state;
786 if (new_state == FL_PM_SUSPENDED) {
788 return (this->state == FL_PM_SUSPENDED) ? 0 : -EAGAIN;
790 set_current_state(TASK_UNINTERRUPTIBLE);
791 add_wait_queue(wq, &wait);
794 remove_wait_queue(wq, &wait);
799 * nand_wait - [DEFAULT] wait until the command is done
800 * @mtd: MTD device structure
801 * @this: NAND chip structure
802 * @state: state to select the max. timeout value
804 * Wait for command done. This applies to erase and program only
805 * Erase can take up to 400ms and program up to 20ms according to
806 * general NAND and SmartMedia specs
809 static int nand_wait(struct mtd_info *mtd, struct nand_chip *this, int state)
812 unsigned long timeo = jiffies;
815 if (state == FL_ERASING)
816 timeo += (HZ * 400) / 1000;
818 timeo += (HZ * 20) / 1000;
820 led_trigger_event(nand_led_trigger, LED_FULL);
822 /* Apply this short delay always to ensure that we do wait tWB in
823 * any case on any machine. */
826 if ((state == FL_ERASING) && (this->options & NAND_IS_AND))
827 this->cmdfunc(mtd, NAND_CMD_STATUS_MULTI, -1, -1);
829 this->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
831 while (time_before(jiffies, timeo)) {
832 /* Check, if we were interrupted */
833 if (this->state != state)
836 if (this->dev_ready) {
837 if (this->dev_ready(mtd))
840 if (this->read_byte(mtd) & NAND_STATUS_READY)
845 led_trigger_event(nand_led_trigger, LED_OFF);
847 status = (int)this->read_byte(mtd);
852 * nand_write_page - [GENERIC] write one page
853 * @mtd: MTD device structure
854 * @this: NAND chip structure
855 * @page: startpage inside the chip, must be called with (page & this->pagemask)
856 * @oob_buf: out of band data buffer
857 * @oobsel: out of band selecttion structre
858 * @cached: 1 = enable cached programming if supported by chip
860 * Nand_page_program function is used for write and writev !
861 * This function will always program a full page of data
862 * If you call it with a non page aligned buffer, you're lost :)
864 * Cached programming is not supported yet.
866 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *this, int page,
867 uint8_t *oob_buf, struct nand_oobinfo *oobsel, int cached)
870 uint8_t ecc_code[32];
871 int eccmode = oobsel->useecc ? this->ecc.mode : NAND_ECC_NONE;
872 int *oob_config = oobsel->eccpos;
873 int datidx = 0, eccidx = 0, eccsteps = this->ecc.steps;
876 /* FIXME: Enable cached programming */
879 /* Send command to begin auto page programming */
880 this->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
882 /* Write out complete page of data, take care of eccmode */
884 /* No ecc, write all */
886 printk(KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");
887 this->write_buf(mtd, this->data_poi, mtd->writesize);
890 /* Software ecc 3/256, write all */
892 for (; eccsteps; eccsteps--) {
893 this->ecc.calculate(mtd, &this->data_poi[datidx], ecc_code);
894 for (i = 0; i < 3; i++, eccidx++)
895 oob_buf[oob_config[eccidx]] = ecc_code[i];
896 datidx += this->ecc.size;
898 this->write_buf(mtd, this->data_poi, mtd->writesize);
901 eccbytes = this->ecc.bytes;
902 for (; eccsteps; eccsteps--) {
903 /* enable hardware ecc logic for write */
904 this->ecc.hwctl(mtd, NAND_ECC_WRITE);
905 this->write_buf(mtd, &this->data_poi[datidx], this->ecc.size);
906 this->ecc.calculate(mtd, &this->data_poi[datidx], ecc_code);
907 for (i = 0; i < eccbytes; i++, eccidx++)
908 oob_buf[oob_config[eccidx]] = ecc_code[i];
909 /* If the hardware ecc provides syndromes then
910 * the ecc code must be written immidiately after
911 * the data bytes (words) */
912 if (this->options & NAND_HWECC_SYNDROME)
913 this->write_buf(mtd, ecc_code, eccbytes);
914 datidx += this->ecc.size;
919 /* Write out OOB data */
920 if (this->options & NAND_HWECC_SYNDROME)
921 this->write_buf(mtd, &oob_buf[oobsel->eccbytes], mtd->oobsize - oobsel->eccbytes);
923 this->write_buf(mtd, oob_buf, mtd->oobsize);
925 /* Send command to actually program the data */
926 this->cmdfunc(mtd, cached ? NAND_CMD_CACHEDPROG : NAND_CMD_PAGEPROG, -1, -1);
929 /* call wait ready function */
930 status = this->waitfunc(mtd, this, FL_WRITING);
932 /* See if operation failed and additional status checks are available */
933 if ((status & NAND_STATUS_FAIL) && (this->errstat)) {
934 status = this->errstat(mtd, this, FL_WRITING, status, page);
937 /* See if device thinks it succeeded */
938 if (status & NAND_STATUS_FAIL) {
939 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write, page 0x%08x, ", __FUNCTION__, page);
943 /* FIXME: Implement cached programming ! */
944 /* wait until cache is ready */
945 // status = this->waitfunc (mtd, this, FL_CACHEDRPG);
950 #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
952 * nand_verify_pages - [GENERIC] verify the chip contents after a write
953 * @mtd: MTD device structure
954 * @this: NAND chip structure
955 * @page: startpage inside the chip, must be called with (page & this->pagemask)
956 * @numpages: number of pages to verify
957 * @oob_buf: out of band data buffer
958 * @oobsel: out of band selecttion structre
959 * @chipnr: number of the current chip
960 * @oobmode: 1 = full buffer verify, 0 = ecc only
962 * The NAND device assumes that it is always writing to a cleanly erased page.
963 * Hence, it performs its internal write verification only on bits that
964 * transitioned from 1 to 0. The device does NOT verify the whole page on a
965 * byte by byte basis. It is possible that the page was not completely erased
966 * or the page is becoming unusable due to wear. The read with ECC would catch
967 * the error later when the ECC page check fails, but we would rather catch
968 * it early in the page write stage. Better to write no data than invalid data.
970 static int nand_verify_pages(struct mtd_info *mtd, struct nand_chip *this, int page, int numpages,
971 uint8_t *oob_buf, struct nand_oobinfo *oobsel, int chipnr, int oobmode)
973 int i, j, datidx = 0, oobofs = 0, res = -EIO;
974 int eccsteps = this->eccsteps;
978 hweccbytes = (this->options & NAND_HWECC_SYNDROME) ? (oobsel->eccbytes / eccsteps) : 0;
980 /* Send command to read back the first page */
981 this->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
984 for (j = 0; j < eccsteps; j++) {
985 /* Loop through and verify the data */
986 if (this->verify_buf(mtd, &this->data_poi[datidx], mtd->eccsize)) {
987 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write verify, page 0x%08x ", __FUNCTION__, page);
990 datidx += mtd->eccsize;
991 /* Have we a hw generator layout ? */
994 if (this->verify_buf(mtd, &this->oob_buf[oobofs], hweccbytes)) {
995 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write verify, page 0x%08x ", __FUNCTION__, page);
998 oobofs += hweccbytes;
1001 /* check, if we must compare all data or if we just have to
1002 * compare the ecc bytes
1005 if (this->verify_buf(mtd, &oob_buf[oobofs], mtd->oobsize - hweccbytes * eccsteps)) {
1006 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write verify, page 0x%08x ", __FUNCTION__, page);
1010 /* Read always, else autoincrement fails */
1011 this->read_buf(mtd, oobdata, mtd->oobsize - hweccbytes * eccsteps);
1013 if (oobsel->useecc != MTD_NANDECC_OFF && !hweccbytes) {
1014 int ecccnt = oobsel->eccbytes;
1016 for (i = 0; i < ecccnt; i++) {
1017 int idx = oobsel->eccpos[i];
1018 if (oobdata[idx] != oob_buf[oobofs + idx]) {
1019 DEBUG(MTD_DEBUG_LEVEL0, "%s: Failed ECC write verify, page 0x%08x, %6i bytes were succesful\n",
1020 __FUNCTION__, page, i);
1026 oobofs += mtd->oobsize - hweccbytes * eccsteps;
1030 /* Apply delay or wait for ready/busy pin
1031 * Do this before the AUTOINCR check, so no problems
1032 * arise if a chip which does auto increment
1033 * is marked as NOAUTOINCR by the board driver.
1034 * Do this also before returning, so the chip is
1035 * ready for the next command.
1037 if (!this->dev_ready)
1038 udelay(this->chip_delay);
1040 nand_wait_ready(mtd);
1042 /* All done, return happy */
1046 /* Check, if the chip supports auto page increment */
1047 if (!NAND_CANAUTOINCR(this))
1048 this->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1051 * Terminate the read command. We come here in case of an error
1052 * So we must issue a reset command.
1055 this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1061 * nand_read - [MTD Interface] MTD compability function for nand_do_read_ecc
1062 * @mtd: MTD device structure
1063 * @from: offset to read from
1064 * @len: number of bytes to read
1065 * @retlen: pointer to variable to store the number of read bytes
1066 * @buf: the databuffer to put data
1068 * This function simply calls nand_do_read_ecc with oob buffer and oobsel = NULL
1071 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, uint8_t *buf)
1073 return nand_do_read_ecc(mtd, from, len, retlen, buf, NULL, &mtd->oobinfo, 0xff);
1077 * nand_do_read_ecc - [MTD Interface] Read data with ECC
1078 * @mtd: MTD device structure
1079 * @from: offset to read from
1080 * @len: number of bytes to read
1081 * @retlen: pointer to variable to store the number of read bytes
1082 * @buf: the databuffer to put data
1083 * @oob_buf: filesystem supplied oob data buffer (can be NULL)
1084 * @oobsel: oob selection structure
1085 * @flags: flag to indicate if nand_get_device/nand_release_device should be preformed
1086 * and how many corrected error bits are acceptable:
1087 * bits 0..7 - number of tolerable errors
1088 * bit 8 - 0 == do not get/release chip, 1 == get/release chip
1090 * NAND read with ECC
1092 int nand_do_read_ecc(struct mtd_info *mtd, loff_t from, size_t len,
1093 size_t *retlen, uint8_t *buf, uint8_t *oob_buf, struct nand_oobinfo *oobsel, int flags)
1096 int i, j, col, realpage, page, end, ecc, chipnr, sndcmd = 1;
1097 int read = 0, oob = 0, ecc_status = 0, ecc_failed = 0;
1098 struct nand_chip *this = mtd->priv;
1099 uint8_t *data_poi, *oob_data = oob_buf;
1100 uint8_t ecc_calc[32];
1101 uint8_t ecc_code[32];
1102 int eccmode, eccsteps;
1103 int *oob_config, datidx;
1104 int blockcheck = (1 << (this->phys_erase_shift - this->page_shift)) - 1;
1109 DEBUG(MTD_DEBUG_LEVEL3, "nand_read_ecc: from = 0x%08x, len = %i\n", (unsigned int)from, (int)len);
1111 /* Do not allow reads past end of device */
1112 if ((from + len) > mtd->size) {
1113 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_ecc: Attempt read beyond end of device\n");
1118 /* Grab the lock and see if the device is available */
1119 if (flags & NAND_GET_DEVICE)
1120 nand_get_device(this, mtd, FL_READING);
1122 /* Autoplace of oob data ? Use the default placement scheme */
1123 if (oobsel->useecc == MTD_NANDECC_AUTOPLACE)
1124 oobsel = this->autooob;
1126 eccmode = oobsel->useecc ? this->ecc.mode : NAND_ECC_NONE;
1127 oob_config = oobsel->eccpos;
1129 /* Select the NAND device */
1130 chipnr = (int)(from >> this->chip_shift);
1131 this->select_chip(mtd, chipnr);
1133 /* First we calculate the starting page */
1134 realpage = (int)(from >> this->page_shift);
1135 page = realpage & this->pagemask;
1137 /* Get raw starting column */
1138 col = from & (mtd->writesize - 1);
1140 end = mtd->writesize;
1141 ecc = this->ecc.size;
1142 eccbytes = this->ecc.bytes;
1144 if ((eccmode == NAND_ECC_NONE) || (this->options & NAND_HWECC_SYNDROME))
1147 oobreadlen = mtd->oobsize;
1148 if (this->options & NAND_HWECC_SYNDROME)
1149 oobreadlen -= oobsel->eccbytes;
1151 /* Loop until all data read */
1152 while (read < len) {
1154 int aligned = (!col && (len - read) >= end);
1156 * If the read is not page aligned, we have to read into data buffer
1157 * due to ecc, else we read into return buffer direct
1160 data_poi = &buf[read];
1162 data_poi = this->data_buf;
1164 /* Check, if we have this page in the buffer
1166 * FIXME: Make it work when we must provide oob data too,
1167 * check the usage of data_buf oob field
1169 if (realpage == this->pagebuf && !oob_buf) {
1170 /* aligned read ? */
1172 memcpy(data_poi, this->data_buf, end);
1176 /* Check, if we must send the read command */
1178 this->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1182 /* get oob area, if we have no oob buffer from fs-driver */
1183 if (!oob_buf || oobsel->useecc == MTD_NANDECC_AUTOPLACE ||
1184 oobsel->useecc == MTD_NANDECC_AUTOPL_USR)
1185 oob_data = &this->data_buf[end];
1187 eccsteps = this->ecc.steps;
1190 case NAND_ECC_NONE:{
1191 /* No ECC, Read in a page */
1192 static unsigned long lastwhinge = 0;
1193 if ((lastwhinge / HZ) != (jiffies / HZ)) {
1195 "Reading data from NAND FLASH without ECC is not recommended\n");
1196 lastwhinge = jiffies;
1198 this->read_buf(mtd, data_poi, end);
1202 case NAND_ECC_SOFT: /* Software ECC 3/256: Read in a page + oob data */
1203 this->read_buf(mtd, data_poi, end);
1204 for (i = 0, datidx = 0; eccsteps; eccsteps--, i += 3, datidx += ecc)
1205 this->ecc.calculate(mtd, &data_poi[datidx], &ecc_calc[i]);
1209 for (i = 0, datidx = 0; eccsteps; eccsteps--, i += eccbytes, datidx += ecc) {
1210 this->ecc.hwctl(mtd, NAND_ECC_READ);
1211 this->read_buf(mtd, &data_poi[datidx], ecc);
1213 /* HW ecc with syndrome calculation must read the
1214 * syndrome from flash immidiately after the data */
1216 /* Some hw ecc generators need to know when the
1217 * syndrome is read from flash */
1218 this->ecc.hwctl(mtd, NAND_ECC_READSYN);
1219 this->read_buf(mtd, &oob_data[i], eccbytes);
1220 /* We calc error correction directly, it checks the hw
1221 * generator for an error, reads back the syndrome and
1222 * does the error correction on the fly */
1223 ecc_status = this->ecc.correct(mtd, &data_poi[datidx], &oob_data[i], &ecc_code[i]);
1224 if ((ecc_status == -1) || (ecc_status > (flags && 0xff))) {
1225 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_ecc: "
1226 "Failed ECC read, page 0x%08x on chip %d\n", page, chipnr);
1230 this->ecc.calculate(mtd, &data_poi[datidx], &ecc_calc[i]);
1237 this->read_buf(mtd, &oob_data[mtd->oobsize - oobreadlen], oobreadlen);
1239 /* Skip ECC check, if not requested (ECC_NONE or HW_ECC with syndromes) */
1243 /* Pick the ECC bytes out of the oob data */
1244 for (j = 0; j < oobsel->eccbytes; j++)
1245 ecc_code[j] = oob_data[oob_config[j]];
1247 /* correct data, if necessary */
1248 for (i = 0, j = 0, datidx = 0; i < this->ecc.steps; i++, datidx += ecc) {
1249 ecc_status = this->ecc.correct(mtd, &data_poi[datidx], &ecc_code[j], &ecc_calc[j]);
1251 /* Get next chunk of ecc bytes */
1254 /* Check, if we have a fs supplied oob-buffer,
1255 * This is the legacy mode. Used by YAFFS1
1256 * Should go away some day
1258 if (oob_buf && oobsel->useecc == MTD_NANDECC_PLACE) {
1259 int *p = (int *)(&oob_data[mtd->oobsize]);
1263 if ((ecc_status == -1) || (ecc_status > (flags && 0xff))) {
1264 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_ecc: " "Failed ECC read, page 0x%08x\n", page);
1270 /* check, if we have a fs supplied oob-buffer */
1272 /* without autoplace. Legacy mode used by YAFFS1 */
1273 switch (oobsel->useecc) {
1274 case MTD_NANDECC_AUTOPLACE:
1275 case MTD_NANDECC_AUTOPL_USR:
1276 /* Walk through the autoplace chunks */
1277 for (i = 0; oobsel->oobfree[i][1]; i++) {
1278 int from = oobsel->oobfree[i][0];
1279 int num = oobsel->oobfree[i][1];
1280 memcpy(&oob_buf[oob], &oob_data[from], num);
1284 case MTD_NANDECC_PLACE:
1285 /* YAFFS1 legacy mode */
1286 oob_data += this->ecc.steps * sizeof(int);
1288 oob_data += mtd->oobsize;
1292 /* Partial page read, transfer data into fs buffer */
1294 for (j = col; j < end && read < len; j++)
1295 buf[read++] = data_poi[j];
1296 this->pagebuf = realpage;
1298 read += mtd->writesize;
1300 /* Apply delay or wait for ready/busy pin
1301 * Do this before the AUTOINCR check, so no problems
1302 * arise if a chip which does auto increment
1303 * is marked as NOAUTOINCR by the board driver.
1305 if (!this->dev_ready)
1306 udelay(this->chip_delay);
1308 nand_wait_ready(mtd);
1313 /* For subsequent reads align to page boundary. */
1315 /* Increment page address */
1318 page = realpage & this->pagemask;
1319 /* Check, if we cross a chip boundary */
1322 this->select_chip(mtd, -1);
1323 this->select_chip(mtd, chipnr);
1325 /* Check, if the chip supports auto page increment
1326 * or if we have hit a block boundary.
1328 if (!NAND_CANAUTOINCR(this) || !(page & blockcheck))
1332 /* Deselect and wake up anyone waiting on the device */
1333 if (flags & NAND_GET_DEVICE)
1334 nand_release_device(mtd);
1337 * Return success, if no ECC failures, else -EBADMSG
1338 * fs driver will take care of that, because
1339 * retlen == desired len and result == -EBADMSG
1342 return ecc_failed ? -EBADMSG : 0;
1346 * nand_read_oob - [MTD Interface] NAND read out-of-band
1347 * @mtd: MTD device structure
1348 * @from: offset to read from
1349 * @len: number of bytes to read
1350 * @retlen: pointer to variable to store the number of read bytes
1351 * @buf: the databuffer to put data
1353 * NAND read out-of-band data from the spare area
1355 static int nand_read_oob(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, uint8_t *buf)
1357 int i, col, page, chipnr;
1358 struct nand_chip *this = mtd->priv;
1359 int blockcheck = (1 << (this->phys_erase_shift - this->page_shift)) - 1;
1361 DEBUG(MTD_DEBUG_LEVEL3, "nand_read_oob: from = 0x%08x, len = %i\n", (unsigned int)from, (int)len);
1363 /* Shift to get page */
1364 page = (int)(from >> this->page_shift);
1365 chipnr = (int)(from >> this->chip_shift);
1367 /* Mask to get column */
1368 col = from & (mtd->oobsize - 1);
1370 /* Initialize return length value */
1373 /* Do not allow reads past end of device */
1374 if ((from + len) > mtd->size) {
1375 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: Attempt read beyond end of device\n");
1380 /* Grab the lock and see if the device is available */
1381 nand_get_device(this, mtd, FL_READING);
1383 /* Select the NAND device */
1384 this->select_chip(mtd, chipnr);
1386 /* Send the read command */
1387 this->cmdfunc(mtd, NAND_CMD_READOOB, col, page & this->pagemask);
1389 * Read the data, if we read more than one page
1390 * oob data, let the device transfer the data !
1394 int thislen = mtd->oobsize - col;
1395 thislen = min_t(int, thislen, len);
1396 this->read_buf(mtd, &buf[i], thislen);
1404 /* Check, if we cross a chip boundary */
1405 if (!(page & this->pagemask)) {
1407 this->select_chip(mtd, -1);
1408 this->select_chip(mtd, chipnr);
1411 /* Apply delay or wait for ready/busy pin
1412 * Do this before the AUTOINCR check, so no problems
1413 * arise if a chip which does auto increment
1414 * is marked as NOAUTOINCR by the board driver.
1416 if (!this->dev_ready)
1417 udelay(this->chip_delay);
1419 nand_wait_ready(mtd);
1421 /* Check, if the chip supports auto page increment
1422 * or if we have hit a block boundary.
1424 if (!NAND_CANAUTOINCR(this) || !(page & blockcheck)) {
1425 /* For subsequent page reads set offset to 0 */
1426 this->cmdfunc(mtd, NAND_CMD_READOOB, 0x0, page & this->pagemask);
1431 /* Deselect and wake up anyone waiting on the device */
1432 nand_release_device(mtd);
1440 * nand_read_raw - [GENERIC] Read raw data including oob into buffer
1441 * @mtd: MTD device structure
1442 * @buf: temporary buffer
1443 * @from: offset to read from
1444 * @len: number of bytes to read
1445 * @ooblen: number of oob data bytes to read
1447 * Read raw data including oob into buffer
1449 int nand_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t from, size_t len, size_t ooblen)
1451 struct nand_chip *this = mtd->priv;
1452 int page = (int)(from >> this->page_shift);
1453 int chip = (int)(from >> this->chip_shift);
1456 int pagesize = mtd->writesize + mtd->oobsize;
1457 int blockcheck = (1 << (this->phys_erase_shift - this->page_shift)) - 1;
1459 /* Do not allow reads past end of device */
1460 if ((from + len) > mtd->size) {
1461 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_raw: Attempt read beyond end of device\n");
1465 /* Grab the lock and see if the device is available */
1466 nand_get_device(this, mtd, FL_READING);
1468 this->select_chip(mtd, chip);
1470 /* Add requested oob length */
1475 this->cmdfunc(mtd, NAND_CMD_READ0, 0, page & this->pagemask);
1478 this->read_buf(mtd, &buf[cnt], pagesize);
1484 if (!this->dev_ready)
1485 udelay(this->chip_delay);
1487 nand_wait_ready(mtd);
1489 /* Check, if the chip supports auto page increment */
1490 if (!NAND_CANAUTOINCR(this) || !(page & blockcheck))
1494 /* Deselect and wake up anyone waiting on the device */
1495 nand_release_device(mtd);
1500 * nand_write_raw - [GENERIC] Write raw data including oob
1501 * @mtd: MTD device structure
1502 * @buf: source buffer
1503 * @to: offset to write to
1504 * @len: number of bytes to write
1505 * @buf: source buffer
1508 * Write raw data including oob
1510 int nand_write_raw(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
1511 uint8_t *buf, uint8_t *oob)
1513 struct nand_chip *this = mtd->priv;
1514 int page = (int)(to >> this->page_shift);
1515 int chip = (int)(to >> this->chip_shift);
1520 /* Do not allow writes past end of device */
1521 if ((to + len) > mtd->size) {
1522 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_raw: Attempt write "
1523 "beyond end of device\n");
1527 /* Grab the lock and see if the device is available */
1528 nand_get_device(this, mtd, FL_WRITING);
1530 this->select_chip(mtd, chip);
1531 this->data_poi = buf;
1533 while (len != *retlen) {
1534 ret = nand_write_page(mtd, this, page, oob, &mtd->oobinfo, 0);
1538 *retlen += mtd->writesize;
1539 this->data_poi += mtd->writesize;
1540 oob += mtd->oobsize;
1543 /* Deselect and wake up anyone waiting on the device */
1544 nand_release_device(mtd);
1547 EXPORT_SYMBOL_GPL(nand_write_raw);
1550 * nand_prepare_oobbuf - [GENERIC] Prepare the out of band buffer
1551 * @mtd: MTD device structure
1552 * @fsbuf: buffer given by fs driver
1553 * @oobsel: out of band selection structre
1554 * @autoplace: 1 = place given buffer into the oob bytes
1555 * @numpages: number of pages to prepare
1558 * 1. Filesystem buffer available and autoplacement is off,
1559 * return filesystem buffer
1560 * 2. No filesystem buffer or autoplace is off, return internal
1562 * 3. Filesystem buffer is given and autoplace selected
1563 * put data from fs buffer into internal buffer and
1564 * retrun internal buffer
1566 * Note: The internal buffer is filled with 0xff. This must
1567 * be done only once, when no autoplacement happens
1568 * Autoplacement sets the buffer dirty flag, which
1569 * forces the 0xff fill before using the buffer again.
1572 static uint8_t *nand_prepare_oobbuf(struct mtd_info *mtd, uint8_t *fsbuf, struct nand_oobinfo *oobsel,
1573 int autoplace, int numpages)
1575 struct nand_chip *this = mtd->priv;
1578 /* Zero copy fs supplied buffer */
1579 if (fsbuf && !autoplace)
1582 /* Check, if the buffer must be filled with ff again */
1583 if (this->oobdirty) {
1584 memset(this->oob_buf, 0xff, mtd->oobsize << (this->phys_erase_shift - this->page_shift));
1588 /* If we have no autoplacement or no fs buffer use the internal one */
1589 if (!autoplace || !fsbuf)
1590 return this->oob_buf;
1592 /* Walk through the pages and place the data */
1595 while (numpages--) {
1596 for (i = 0, len = 0; len < mtd->oobavail; i++) {
1597 int to = ofs + oobsel->oobfree[i][0];
1598 int num = oobsel->oobfree[i][1];
1599 memcpy(&this->oob_buf[to], fsbuf, num);
1603 ofs += mtd->oobavail;
1605 return this->oob_buf;
1608 #define NOTALIGNED(x) (x & (mtd->writesize-1)) != 0
1611 * nand_write - [MTD Interface] NAND write with ECC
1612 * @mtd: MTD device structure
1613 * @to: offset to write to
1614 * @len: number of bytes to write
1615 * @retlen: pointer to variable to store the number of written bytes
1616 * @buf: the data to write
1618 * NAND write with ECC
1620 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
1621 size_t *retlen, const uint8_t *buf)
1623 int startpage, page, ret = -EIO, oob = 0, written = 0, chipnr;
1624 int autoplace = 0, numpages, totalpages;
1625 struct nand_chip *this = mtd->priv;
1626 uint8_t *oobbuf, *bufstart, *eccbuf = NULL;
1627 int ppblock = (1 << (this->phys_erase_shift - this->page_shift));
1628 struct nand_oobinfo *oobsel = &mtd->oobinfo;
1630 DEBUG(MTD_DEBUG_LEVEL3, "nand_write: to = 0x%08x, len = %i\n", (unsigned int)to, (int)len);
1632 /* Initialize retlen, in case of early exit */
1635 /* Do not allow write past end of device */
1636 if ((to + len) > mtd->size) {
1637 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: Attempt to write past end of page\n");
1641 /* reject writes, which are not page aligned */
1642 if (NOTALIGNED(to) || NOTALIGNED(len)) {
1643 printk(KERN_NOTICE "nand_write: Attempt to write not page aligned data\n");
1647 /* Grab the lock and see if the device is available */
1648 nand_get_device(this, mtd, FL_WRITING);
1650 /* Calculate chipnr */
1651 chipnr = (int)(to >> this->chip_shift);
1652 /* Select the NAND device */
1653 this->select_chip(mtd, chipnr);
1655 /* Check, if it is write protected */
1656 if (nand_check_wp(mtd))
1659 /* Autoplace of oob data ? Use the default placement scheme */
1660 if (oobsel->useecc == MTD_NANDECC_AUTOPLACE) {
1661 oobsel = this->autooob;
1664 if (oobsel->useecc == MTD_NANDECC_AUTOPL_USR)
1667 /* Setup variables and oob buffer */
1668 totalpages = len >> this->page_shift;
1669 page = (int)(to >> this->page_shift);
1670 /* Invalidate the page cache, if we write to the cached page */
1671 if (page <= this->pagebuf && this->pagebuf < (page + totalpages))
1674 /* Set it relative to chip */
1675 page &= this->pagemask;
1677 /* Calc number of pages we can write in one go */
1678 numpages = min(ppblock - (startpage & (ppblock - 1)), totalpages);
1679 oobbuf = nand_prepare_oobbuf(mtd, eccbuf, oobsel, autoplace, numpages);
1680 bufstart = (uint8_t *) buf;
1682 /* Loop until all data is written */
1683 while (written < len) {
1685 this->data_poi = (uint8_t *) &buf[written];
1686 /* Write one page. If this is the last page to write
1687 * or the last page in this block, then use the
1688 * real pageprogram command, else select cached programming
1689 * if supported by the chip.
1691 ret = nand_write_page(mtd, this, page, &oobbuf[oob], oobsel, (--numpages > 0));
1693 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: write_page failed %d\n", ret);
1697 oob += mtd->oobsize;
1698 /* Update written bytes count */
1699 written += mtd->writesize;
1703 /* Increment page address */
1706 /* Have we hit a block boundary ? Then we have to verify and
1707 * if verify is ok, we have to setup the oob buffer for
1710 if (!(page & (ppblock - 1))) {
1712 this->data_poi = bufstart;
1713 ret = nand_verify_pages(mtd, this, startpage, page - startpage,
1714 oobbuf, oobsel, chipnr, (eccbuf != NULL));
1716 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: verify_pages failed %d\n", ret);
1721 ofs = autoplace ? mtd->oobavail : mtd->oobsize;
1723 eccbuf += (page - startpage) * ofs;
1724 totalpages -= page - startpage;
1725 numpages = min(totalpages, ppblock);
1726 page &= this->pagemask;
1728 oobbuf = nand_prepare_oobbuf(mtd, eccbuf, oobsel, autoplace, numpages);
1730 /* Check, if we cross a chip boundary */
1733 this->select_chip(mtd, -1);
1734 this->select_chip(mtd, chipnr);
1738 /* Verify the remaining pages */
1740 this->data_poi = bufstart;
1741 ret = nand_verify_pages(mtd, this, startpage, totalpages, oobbuf, oobsel, chipnr, (eccbuf != NULL));
1745 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: verify_pages failed %d\n", ret);
1748 /* Deselect and wake up anyone waiting on the device */
1749 nand_release_device(mtd);
1755 * nand_write_oob - [MTD Interface] NAND write out-of-band
1756 * @mtd: MTD device structure
1757 * @to: offset to write to
1758 * @len: number of bytes to write
1759 * @retlen: pointer to variable to store the number of written bytes
1760 * @buf: the data to write
1762 * NAND write out-of-band
1764 static int nand_write_oob(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const uint8_t *buf)
1766 int column, page, status, ret = -EIO, chipnr;
1767 struct nand_chip *this = mtd->priv;
1769 DEBUG(MTD_DEBUG_LEVEL3, "nand_write_oob: to = 0x%08x, len = %i\n", (unsigned int)to, (int)len);
1771 /* Shift to get page */
1772 page = (int)(to >> this->page_shift);
1773 chipnr = (int)(to >> this->chip_shift);
1775 /* Mask to get column */
1776 column = to & (mtd->oobsize - 1);
1778 /* Initialize return length value */
1781 /* Do not allow write past end of page */
1782 if ((column + len) > mtd->oobsize) {
1783 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: Attempt to write past end of page\n");
1787 /* Grab the lock and see if the device is available */
1788 nand_get_device(this, mtd, FL_WRITING);
1790 /* Select the NAND device */
1791 this->select_chip(mtd, chipnr);
1793 /* Reset the chip. Some chips (like the Toshiba TC5832DC found
1794 in one of my DiskOnChip 2000 test units) will clear the whole
1795 data page too if we don't do this. I have no clue why, but
1796 I seem to have 'fixed' it in the doc2000 driver in
1797 August 1999. dwmw2. */
1798 this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1800 /* Check, if it is write protected */
1801 if (nand_check_wp(mtd))
1804 /* Invalidate the page cache, if we write to the cached page */
1805 if (page == this->pagebuf)
1808 if (NAND_MUST_PAD(this)) {
1809 /* Write out desired data */
1810 this->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page & this->pagemask);
1811 /* prepad 0xff for partial programming */
1812 this->write_buf(mtd, ffchars, column);
1814 this->write_buf(mtd, buf, len);
1815 /* postpad 0xff for partial programming */
1816 this->write_buf(mtd, ffchars, mtd->oobsize - (len + column));
1818 /* Write out desired data */
1819 this->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize + column, page & this->pagemask);
1821 this->write_buf(mtd, buf, len);
1823 /* Send command to program the OOB data */
1824 this->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1826 status = this->waitfunc(mtd, this, FL_WRITING);
1828 /* See if device thinks it succeeded */
1829 if (status & NAND_STATUS_FAIL) {
1830 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write, page 0x%08x\n", page);
1837 #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
1838 /* Send command to read back the data */
1839 this->cmdfunc(mtd, NAND_CMD_READOOB, column, page & this->pagemask);
1841 if (this->verify_buf(mtd, buf, len)) {
1842 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write verify, page 0x%08x\n", page);
1849 /* Deselect and wake up anyone waiting on the device */
1850 nand_release_device(mtd);
1856 * single_erease_cmd - [GENERIC] NAND standard block erase command function
1857 * @mtd: MTD device structure
1858 * @page: the page address of the block which will be erased
1860 * Standard erase command for NAND chips
1862 static void single_erase_cmd(struct mtd_info *mtd, int page)
1864 struct nand_chip *this = mtd->priv;
1865 /* Send commands to erase a block */
1866 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
1867 this->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
1871 * multi_erease_cmd - [GENERIC] AND specific block erase command function
1872 * @mtd: MTD device structure
1873 * @page: the page address of the block which will be erased
1875 * AND multi block erase command function
1876 * Erase 4 consecutive blocks
1878 static void multi_erase_cmd(struct mtd_info *mtd, int page)
1880 struct nand_chip *this = mtd->priv;
1881 /* Send commands to erase a block */
1882 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
1883 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
1884 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
1885 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
1886 this->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
1890 * nand_erase - [MTD Interface] erase block(s)
1891 * @mtd: MTD device structure
1892 * @instr: erase instruction
1894 * Erase one ore more blocks
1896 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
1898 return nand_erase_nand(mtd, instr, 0);
1901 #define BBT_PAGE_MASK 0xffffff3f
1903 * nand_erase_intern - [NAND Interface] erase block(s)
1904 * @mtd: MTD device structure
1905 * @instr: erase instruction
1906 * @allowbbt: allow erasing the bbt area
1908 * Erase one ore more blocks
1910 int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, int allowbbt)
1912 int page, len, status, pages_per_block, ret, chipnr;
1913 struct nand_chip *this = mtd->priv;
1914 int rewrite_bbt[NAND_MAX_CHIPS]={0}; /* flags to indicate the page, if bbt needs to be rewritten. */
1915 unsigned int bbt_masked_page; /* bbt mask to compare to page being erased. */
1916 /* It is used to see if the current page is in the same */
1917 /* 256 block group and the same bank as the bbt. */
1919 DEBUG(MTD_DEBUG_LEVEL3, "nand_erase: start = 0x%08x, len = %i\n", (unsigned int)instr->addr, (unsigned int)instr->len);
1921 /* Start address must align on block boundary */
1922 if (instr->addr & ((1 << this->phys_erase_shift) - 1)) {
1923 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Unaligned address\n");
1927 /* Length must align on block boundary */
1928 if (instr->len & ((1 << this->phys_erase_shift) - 1)) {
1929 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Length not block aligned\n");
1933 /* Do not allow erase past end of device */
1934 if ((instr->len + instr->addr) > mtd->size) {
1935 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Erase past end of device\n");
1939 instr->fail_addr = 0xffffffff;
1941 /* Grab the lock and see if the device is available */
1942 nand_get_device(this, mtd, FL_ERASING);
1944 /* Shift to get first page */
1945 page = (int)(instr->addr >> this->page_shift);
1946 chipnr = (int)(instr->addr >> this->chip_shift);
1948 /* Calculate pages in each block */
1949 pages_per_block = 1 << (this->phys_erase_shift - this->page_shift);
1951 /* Select the NAND device */
1952 this->select_chip(mtd, chipnr);
1954 /* Check the WP bit */
1955 /* Check, if it is write protected */
1956 if (nand_check_wp(mtd)) {
1957 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Device is write protected!!!\n");
1958 instr->state = MTD_ERASE_FAILED;
1962 /* if BBT requires refresh, set the BBT page mask to see if the BBT should be rewritten */
1963 if (this->options & BBT_AUTO_REFRESH) {
1964 bbt_masked_page = this->bbt_td->pages[chipnr] & BBT_PAGE_MASK;
1966 bbt_masked_page = 0xffffffff; /* should not match anything */
1969 /* Loop through the pages */
1972 instr->state = MTD_ERASING;
1975 /* Check if we have a bad block, we do not erase bad blocks ! */
1976 if (nand_block_checkbad(mtd, ((loff_t) page) << this->page_shift, 0, allowbbt)) {
1977 printk(KERN_WARNING "nand_erase: attempt to erase a bad block at page 0x%08x\n", page);
1978 instr->state = MTD_ERASE_FAILED;
1982 /* Invalidate the page cache, if we erase the block which contains
1983 the current cached page */
1984 if (page <= this->pagebuf && this->pagebuf < (page + pages_per_block))
1987 this->erase_cmd(mtd, page & this->pagemask);
1989 status = this->waitfunc(mtd, this, FL_ERASING);
1991 /* See if operation failed and additional status checks are available */
1992 if ((status & NAND_STATUS_FAIL) && (this->errstat)) {
1993 status = this->errstat(mtd, this, FL_ERASING, status, page);
1996 /* See if block erase succeeded */
1997 if (status & NAND_STATUS_FAIL) {
1998 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: " "Failed erase, page 0x%08x\n", page);
1999 instr->state = MTD_ERASE_FAILED;
2000 instr->fail_addr = (page << this->page_shift);
2004 /* if BBT requires refresh, set the BBT rewrite flag to the page being erased */
2005 if (this->options & BBT_AUTO_REFRESH) {
2006 if (((page & BBT_PAGE_MASK) == bbt_masked_page) &&
2007 (page != this->bbt_td->pages[chipnr])) {
2008 rewrite_bbt[chipnr] = (page << this->page_shift);
2012 /* Increment page address and decrement length */
2013 len -= (1 << this->phys_erase_shift);
2014 page += pages_per_block;
2016 /* Check, if we cross a chip boundary */
2017 if (len && !(page & this->pagemask)) {
2019 this->select_chip(mtd, -1);
2020 this->select_chip(mtd, chipnr);
2022 /* if BBT requires refresh and BBT-PERCHIP,
2023 * set the BBT page mask to see if this BBT should be rewritten */
2024 if ((this->options & BBT_AUTO_REFRESH) && (this->bbt_td->options & NAND_BBT_PERCHIP)) {
2025 bbt_masked_page = this->bbt_td->pages[chipnr] & BBT_PAGE_MASK;
2030 instr->state = MTD_ERASE_DONE;
2034 ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
2035 /* Do call back function */
2037 mtd_erase_callback(instr);
2039 /* Deselect and wake up anyone waiting on the device */
2040 nand_release_device(mtd);
2042 /* if BBT requires refresh and erase was successful, rewrite any selected bad block tables */
2043 if ((this->options & BBT_AUTO_REFRESH) && (!ret)) {
2044 for (chipnr = 0; chipnr < this->numchips; chipnr++) {
2045 if (rewrite_bbt[chipnr]) {
2046 /* update the BBT for chip */
2047 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase_nand: nand_update_bbt (%d:0x%0x 0x%0x)\n",
2048 chipnr, rewrite_bbt[chipnr], this->bbt_td->pages[chipnr]);
2049 nand_update_bbt(mtd, rewrite_bbt[chipnr]);
2054 /* Return more or less happy */
2059 * nand_sync - [MTD Interface] sync
2060 * @mtd: MTD device structure
2062 * Sync is actually a wait for chip ready function
2064 static void nand_sync(struct mtd_info *mtd)
2066 struct nand_chip *this = mtd->priv;
2068 DEBUG(MTD_DEBUG_LEVEL3, "nand_sync: called\n");
2070 /* Grab the lock and see if the device is available */
2071 nand_get_device(this, mtd, FL_SYNCING);
2072 /* Release it and go back */
2073 nand_release_device(mtd);
2077 * nand_block_isbad - [MTD Interface] Check whether the block at the given offset is bad
2078 * @mtd: MTD device structure
2079 * @ofs: offset relative to mtd start
2081 static int nand_block_isbad(struct mtd_info *mtd, loff_t ofs)
2083 /* Check for invalid offset */
2084 if (ofs > mtd->size)
2087 return nand_block_checkbad(mtd, ofs, 1, 0);
2091 * nand_block_markbad - [MTD Interface] Mark the block at the given offset as bad
2092 * @mtd: MTD device structure
2093 * @ofs: offset relative to mtd start
2095 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
2097 struct nand_chip *this = mtd->priv;
2100 if ((ret = nand_block_isbad(mtd, ofs))) {
2101 /* If it was bad already, return success and do nothing. */
2107 return this->block_markbad(mtd, ofs);
2111 * nand_suspend - [MTD Interface] Suspend the NAND flash
2112 * @mtd: MTD device structure
2114 static int nand_suspend(struct mtd_info *mtd)
2116 struct nand_chip *this = mtd->priv;
2118 return nand_get_device(this, mtd, FL_PM_SUSPENDED);
2122 * nand_resume - [MTD Interface] Resume the NAND flash
2123 * @mtd: MTD device structure
2125 static void nand_resume(struct mtd_info *mtd)
2127 struct nand_chip *this = mtd->priv;
2129 if (this->state == FL_PM_SUSPENDED)
2130 nand_release_device(mtd);
2132 printk(KERN_ERR "nand_resume() called for a chip which is not "
2133 "in suspended state\n");
2137 * Free allocated data structures
2139 static void nand_free_kmem(struct nand_chip *this)
2141 /* Buffer allocated by nand_scan ? */
2142 if (this->options & NAND_OOBBUF_ALLOC)
2143 kfree(this->oob_buf);
2144 /* Buffer allocated by nand_scan ? */
2145 if (this->options & NAND_DATABUF_ALLOC)
2146 kfree(this->data_buf);
2147 /* Controller allocated by nand_scan ? */
2148 if (this->options & NAND_CONTROLLER_ALLOC)
2149 kfree(this->controller);
2153 * Allocate buffers and data structures
2155 static int nand_allocate_kmem(struct mtd_info *mtd, struct nand_chip *this)
2159 if (!this->oob_buf) {
2160 len = mtd->oobsize <<
2161 (this->phys_erase_shift - this->page_shift);
2162 this->oob_buf = kmalloc(len, GFP_KERNEL);
2165 this->options |= NAND_OOBBUF_ALLOC;
2168 if (!this->data_buf) {
2169 len = mtd->writesize + mtd->oobsize;
2170 this->data_buf = kmalloc(len, GFP_KERNEL);
2171 if (!this->data_buf)
2173 this->options |= NAND_DATABUF_ALLOC;
2176 if (!this->controller) {
2177 this->controller = kzalloc(sizeof(struct nand_hw_control),
2179 if (!this->controller)
2181 this->options |= NAND_CONTROLLER_ALLOC;
2186 printk(KERN_ERR "nand_scan(): Cannot allocate buffers\n");
2187 nand_free_kmem(this);
2192 * Set default functions
2194 static void nand_set_defaults(struct nand_chip *this, int busw)
2196 /* check for proper chip_delay setup, set 20us if not */
2197 if (!this->chip_delay)
2198 this->chip_delay = 20;
2200 /* check, if a user supplied command function given */
2201 if (this->cmdfunc == NULL)
2202 this->cmdfunc = nand_command;
2204 /* check, if a user supplied wait function given */
2205 if (this->waitfunc == NULL)
2206 this->waitfunc = nand_wait;
2208 if (!this->select_chip)
2209 this->select_chip = nand_select_chip;
2210 if (!this->write_byte)
2211 this->write_byte = busw ? nand_write_byte16 : nand_write_byte;
2212 if (!this->read_byte)
2213 this->read_byte = busw ? nand_read_byte16 : nand_read_byte;
2214 if (!this->write_word)
2215 this->write_word = nand_write_word;
2216 if (!this->read_word)
2217 this->read_word = nand_read_word;
2218 if (!this->block_bad)
2219 this->block_bad = nand_block_bad;
2220 if (!this->block_markbad)
2221 this->block_markbad = nand_default_block_markbad;
2222 if (!this->write_buf)
2223 this->write_buf = busw ? nand_write_buf16 : nand_write_buf;
2224 if (!this->read_buf)
2225 this->read_buf = busw ? nand_read_buf16 : nand_read_buf;
2226 if (!this->verify_buf)
2227 this->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
2228 if (!this->scan_bbt)
2229 this->scan_bbt = nand_default_bbt;
2233 * Get the flash and manufacturer id and lookup if the typ is supported
2235 static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
2236 struct nand_chip *this,
2237 int busw, int *maf_id)
2239 struct nand_flash_dev *type = NULL;
2240 int i, dev_id, maf_idx;
2242 /* Select the device */
2243 this->select_chip(mtd, 0);
2245 /* Send the command for reading device ID */
2246 this->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2248 /* Read manufacturer and device IDs */
2249 *maf_id = this->read_byte(mtd);
2250 dev_id = this->read_byte(mtd);
2252 /* Lookup the flash id */
2253 for (i = 0; nand_flash_ids[i].name != NULL; i++) {
2254 if (dev_id == nand_flash_ids[i].id) {
2255 type = &nand_flash_ids[i];
2261 return ERR_PTR(-ENODEV);
2263 this->chipsize = nand_flash_ids[i].chipsize << 20;
2265 /* Newer devices have all the information in additional id bytes */
2266 if (!nand_flash_ids[i].pagesize) {
2268 /* The 3rd id byte contains non relevant data ATM */
2269 extid = this->read_byte(mtd);
2270 /* The 4th id byte is the important one */
2271 extid = this->read_byte(mtd);
2273 mtd->writesize = 1024 << (extid & 0x3);
2276 mtd->oobsize = (8 << (extid & 0x01)) * (mtd->writesize >> 9);
2278 /* Calc blocksize. Blocksize is multiples of 64KiB */
2279 mtd->erasesize = (64 * 1024) << (extid & 0x03);
2281 /* Get buswidth information */
2282 busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
2286 * Old devices have this data hardcoded in the device id table
2288 mtd->erasesize = nand_flash_ids[i].erasesize;
2289 mtd->writesize = nand_flash_ids[i].pagesize;
2290 mtd->oobsize = mtd->writesize / 32;
2291 busw = nand_flash_ids[i].options & NAND_BUSWIDTH_16;
2294 /* Try to identify manufacturer */
2295 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_id++) {
2296 if (nand_manuf_ids[maf_idx].id == *maf_id)
2301 * Check, if buswidth is correct. Hardware drivers should set
2304 if (busw != (this->options & NAND_BUSWIDTH_16)) {
2305 printk(KERN_INFO "NAND device: Manufacturer ID:"
2306 " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id,
2307 dev_id, nand_manuf_ids[maf_idx].name, mtd->name);
2308 printk(KERN_WARNING "NAND bus width %d instead %d bit\n",
2309 (this->options & NAND_BUSWIDTH_16) ? 16 : 8,
2311 return ERR_PTR(-EINVAL);
2314 /* Calculate the address shift from the page size */
2315 this->page_shift = ffs(mtd->writesize) - 1;
2316 /* Convert chipsize to number of pages per chip -1. */
2317 this->pagemask = (this->chipsize >> this->page_shift) - 1;
2319 this->bbt_erase_shift = this->phys_erase_shift =
2320 ffs(mtd->erasesize) - 1;
2321 this->chip_shift = ffs(this->chipsize) - 1;
2323 /* Set the bad block position */
2324 this->badblockpos = mtd->writesize > 512 ?
2325 NAND_LARGE_BADBLOCK_POS : NAND_SMALL_BADBLOCK_POS;
2327 /* Get chip options, preserve non chip based options */
2328 this->options &= ~NAND_CHIPOPTIONS_MSK;
2329 this->options |= nand_flash_ids[i].options & NAND_CHIPOPTIONS_MSK;
2332 * Set this as a default. Board drivers can override it, if necessary
2334 this->options |= NAND_NO_AUTOINCR;
2336 /* Check if this is a not a samsung device. Do not clear the
2337 * options for chips which are not having an extended id.
2339 if (*maf_id != NAND_MFR_SAMSUNG && !nand_flash_ids[i].pagesize)
2340 this->options &= ~NAND_SAMSUNG_LP_OPTIONS;
2342 /* Check for AND chips with 4 page planes */
2343 if (this->options & NAND_4PAGE_ARRAY)
2344 this->erase_cmd = multi_erase_cmd;
2346 this->erase_cmd = single_erase_cmd;
2348 /* Do not replace user supplied command function ! */
2349 if (mtd->writesize > 512 && this->cmdfunc == nand_command)
2350 this->cmdfunc = nand_command_lp;
2352 printk(KERN_INFO "NAND device: Manufacturer ID:"
2353 " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id, dev_id,
2354 nand_manuf_ids[maf_idx].name, type->name);
2359 /* module_text_address() isn't exported, and it's mostly a pointless
2360 test if this is a module _anyway_ -- they'd have to try _really_ hard
2361 to call us from in-kernel code if the core NAND support is modular. */
2363 #define caller_is_module() (1)
2365 #define caller_is_module() \
2366 module_text_address((unsigned long)__builtin_return_address(0))
2370 * nand_scan - [NAND Interface] Scan for the NAND device
2371 * @mtd: MTD device structure
2372 * @maxchips: Number of chips to scan for
2374 * This fills out all the uninitialized function pointers
2375 * with the defaults.
2376 * The flash ID is read and the mtd/chip structures are
2377 * filled with the appropriate values. Buffers are allocated if
2378 * they are not provided by the board driver
2379 * The mtd->owner field must be set to the module of the caller
2382 int nand_scan(struct mtd_info *mtd, int maxchips)
2384 int i, busw, nand_maf_id;
2385 struct nand_chip *this = mtd->priv;
2386 struct nand_flash_dev *type;
2388 /* Many callers got this wrong, so check for it for a while... */
2389 if (!mtd->owner && caller_is_module()) {
2390 printk(KERN_CRIT "nand_scan() called with NULL mtd->owner!\n");
2394 /* Get buswidth to select the correct functions */
2395 busw = this->options & NAND_BUSWIDTH_16;
2396 /* Set the default functions */
2397 nand_set_defaults(this, busw);
2399 /* Read the flash type */
2400 type = nand_get_flash_type(mtd, this, busw, &nand_maf_id);
2403 printk(KERN_WARNING "No NAND device found!!!\n");
2404 this->select_chip(mtd, -1);
2405 return PTR_ERR(type);
2408 /* Check for a chip array */
2409 for (i = 1; i < maxchips; i++) {
2410 this->select_chip(mtd, i);
2411 /* Send the command for reading device ID */
2412 this->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2413 /* Read manufacturer and device IDs */
2414 if (nand_maf_id != this->read_byte(mtd) ||
2415 type->id != this->read_byte(mtd))
2419 printk(KERN_INFO "%d NAND chips detected\n", i);
2421 /* Store the number of chips and calc total size for mtd */
2423 mtd->size = i * this->chipsize;
2425 /* Allocate buffers and data structures */
2426 if (nand_allocate_kmem(mtd, this))
2429 /* Preset the internal oob buffer */
2430 memset(this->oob_buf, 0xff,
2431 mtd->oobsize << (this->phys_erase_shift - this->page_shift));
2434 * If no default placement scheme is given, select an appropriate one
2436 if (!this->autooob) {
2437 switch (mtd->oobsize) {
2439 this->autooob = &nand_oob_8;
2442 this->autooob = &nand_oob_16;
2445 this->autooob = &nand_oob_64;
2448 printk(KERN_WARNING "No oob scheme defined for "
2449 "oobsize %d\n", mtd->oobsize);
2455 * The number of bytes available for the filesystem to place fs
2456 * dependend oob data
2459 for (i = 0; this->autooob->oobfree[i][1]; i++)
2460 mtd->oobavail += this->autooob->oobfree[i][1];
2463 * check ECC mode, default to software if 3byte/512byte hardware ECC is
2464 * selected and we have 256 byte pagesize fallback to software ECC
2466 switch (this->ecc.mode) {
2468 case NAND_ECC_HW_SYNDROME:
2469 if (!this->ecc.calculate || !this->ecc.correct ||
2471 printk(KERN_WARNING "No ECC functions supplied, "
2472 "Hardware ECC not possible\n");
2475 if (mtd->writesize >= this->ecc.size)
2477 printk(KERN_WARNING "%d byte HW ECC not possible on "
2478 "%d byte page size, fallback to SW ECC\n",
2479 this->ecc.size, mtd->writesize);
2480 this->ecc.mode = NAND_ECC_SOFT;
2483 this->ecc.calculate = nand_calculate_ecc;
2484 this->ecc.correct = nand_correct_data;
2485 this->ecc.size = 256;
2486 this->ecc.bytes = 3;
2490 printk(KERN_WARNING "NAND_ECC_NONE selected by board driver. "
2491 "This is not recommended !!\n");
2492 this->ecc.size = mtd->writesize;
2493 this->ecc.bytes = 0;
2496 printk(KERN_WARNING "Invalid NAND_ECC_MODE %d\n",
2502 * Set the number of read / write steps for one page depending on ECC
2505 this->ecc.steps = mtd->writesize / this->ecc.size;
2506 if(this->ecc.steps * this->ecc.size != mtd->writesize) {
2507 printk(KERN_WARNING "Invalid ecc parameters\n");
2511 /* Initialize state, waitqueue and spinlock */
2512 this->state = FL_READY;
2513 init_waitqueue_head(&this->controller->wq);
2514 spin_lock_init(&this->controller->lock);
2516 /* De-select the device */
2517 this->select_chip(mtd, -1);
2519 /* Invalidate the pagebuffer reference */
2522 /* Fill in remaining MTD driver data */
2523 mtd->type = MTD_NANDFLASH;
2524 mtd->flags = MTD_CAP_NANDFLASH;
2525 mtd->ecctype = MTD_ECC_SW;
2526 mtd->erase = nand_erase;
2528 mtd->unpoint = NULL;
2529 mtd->read = nand_read;
2530 mtd->write = nand_write;
2531 mtd->read_oob = nand_read_oob;
2532 mtd->write_oob = nand_write_oob;
2533 mtd->sync = nand_sync;
2536 mtd->suspend = nand_suspend;
2537 mtd->resume = nand_resume;
2538 mtd->block_isbad = nand_block_isbad;
2539 mtd->block_markbad = nand_block_markbad;
2541 /* and make the autooob the default one */
2542 memcpy(&mtd->oobinfo, this->autooob, sizeof(mtd->oobinfo));
2544 /* Check, if we should skip the bad block table scan */
2545 if (this->options & NAND_SKIP_BBTSCAN)
2548 /* Build bad block table */
2549 return this->scan_bbt(mtd);
2553 * nand_release - [NAND Interface] Free resources held by the NAND device
2554 * @mtd: MTD device structure
2556 void nand_release(struct mtd_info *mtd)
2558 struct nand_chip *this = mtd->priv;
2560 #ifdef CONFIG_MTD_PARTITIONS
2561 /* Deregister partitions */
2562 del_mtd_partitions(mtd);
2564 /* Deregister the device */
2565 del_mtd_device(mtd);
2567 /* Free bad block table memory */
2570 nand_free_kmem(this);
2573 EXPORT_SYMBOL_GPL(nand_scan);
2574 EXPORT_SYMBOL_GPL(nand_release);
2576 static int __init nand_base_init(void)
2578 led_trigger_register_simple("nand-disk", &nand_led_trigger);
2582 static void __exit nand_base_exit(void)
2584 led_trigger_unregister_simple(nand_led_trigger);
2587 module_init(nand_base_init);
2588 module_exit(nand_base_exit);
2590 MODULE_LICENSE("GPL");
2591 MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>, Thomas Gleixner <tglx@linutronix.de>");
2592 MODULE_DESCRIPTION("Generic NAND flash driver code");