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.
8 * Additional technical information is available on
9 * http://www.linux-mtd.infradead.org/doc/nand.html
11 * Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
12 * 2002-2006 Thomas Gleixner (tglx@linutronix.de)
15 * David Woodhouse for adding multichip support
17 * Aleph One Ltd. and Toby Churchill Ltd. for supporting the
18 * rework for 2K page size chips
21 * Enable cached programming for 2k page size chips
22 * Check, if mtd->ecctype should be set to MTD_ECC_HW
23 * if we have HW ECC support.
24 * BBT table is not serialized, has to be fixed
26 * This program is free software; you can redistribute it and/or modify
27 * it under the terms of the GNU General Public License version 2 as
28 * published by the Free Software Foundation.
33 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
35 #include <linux/module.h>
36 #include <linux/delay.h>
37 #include <linux/errno.h>
38 #include <linux/err.h>
39 #include <linux/sched.h>
40 #include <linux/slab.h>
41 #include <linux/types.h>
42 #include <linux/mtd/mtd.h>
43 #include <linux/mtd/nand.h>
44 #include <linux/mtd/nand_ecc.h>
45 #include <linux/mtd/nand_bch.h>
46 #include <linux/interrupt.h>
47 #include <linux/bitops.h>
48 #include <linux/leds.h>
50 #include <linux/mtd/partitions.h>
52 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
56 #include <linux/err.h>
57 #include <linux/compat.h>
58 #include <linux/mtd/mtd.h>
59 #include <linux/mtd/nand.h>
60 #include <linux/mtd/nand_ecc.h>
61 #include <linux/mtd/nand_bch.h>
62 #ifdef CONFIG_MTD_PARTITIONS
63 #include <linux/mtd/partitions.h>
66 #include <asm/errno.h>
69 * CONFIG_SYS_NAND_RESET_CNT is used as a timeout mechanism when resetting
70 * a flash. NAND flash is initialized prior to interrupts so standard timers
71 * can't be used. CONFIG_SYS_NAND_RESET_CNT should be set to a value
72 * which is greater than (max NAND reset time / NAND status read time).
73 * A conservative default of 200000 (500 us / 25 ns) is used as a default.
75 #ifndef CONFIG_SYS_NAND_RESET_CNT
76 #define CONFIG_SYS_NAND_RESET_CNT 200000
79 static bool is_module_text_address(unsigned long addr) {return 0;}
82 /* Define default oob placement schemes for large and small page devices */
83 static struct nand_ecclayout nand_oob_8 = {
93 static struct nand_ecclayout nand_oob_16 = {
95 .eccpos = {0, 1, 2, 3, 6, 7},
101 static struct nand_ecclayout nand_oob_64 = {
104 40, 41, 42, 43, 44, 45, 46, 47,
105 48, 49, 50, 51, 52, 53, 54, 55,
106 56, 57, 58, 59, 60, 61, 62, 63},
112 static struct nand_ecclayout nand_oob_128 = {
115 80, 81, 82, 83, 84, 85, 86, 87,
116 88, 89, 90, 91, 92, 93, 94, 95,
117 96, 97, 98, 99, 100, 101, 102, 103,
118 104, 105, 106, 107, 108, 109, 110, 111,
119 112, 113, 114, 115, 116, 117, 118, 119,
120 120, 121, 122, 123, 124, 125, 126, 127},
126 static int nand_get_device(struct mtd_info *mtd, int new_state);
128 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
129 struct mtd_oob_ops *ops);
132 * For devices which display every fart in the system on a separate LED. Is
133 * compiled away when LED support is disabled.
135 DEFINE_LED_TRIGGER(nand_led_trigger);
137 static int check_offs_len(struct mtd_info *mtd,
138 loff_t ofs, uint64_t len)
140 struct nand_chip *chip = mtd->priv;
143 /* Start address must align on block boundary */
144 if (ofs & ((1ULL << chip->phys_erase_shift) - 1)) {
145 pr_debug("%s: unaligned address\n", __func__);
149 /* Length must align on block boundary */
150 if (len & ((1ULL << chip->phys_erase_shift) - 1)) {
151 pr_debug("%s: length not block aligned\n", __func__);
159 * nand_release_device - [GENERIC] release chip
160 * @mtd: MTD device structure
162 * Release chip lock and wake up anyone waiting on the device.
164 static void nand_release_device(struct mtd_info *mtd)
166 struct nand_chip *chip = mtd->priv;
169 /* Release the controller and the chip */
170 spin_lock(&chip->controller->lock);
171 chip->controller->active = NULL;
172 chip->state = FL_READY;
173 wake_up(&chip->controller->wq);
174 spin_unlock(&chip->controller->lock);
176 /* De-select the NAND device */
177 chip->select_chip(mtd, -1);
182 * nand_read_byte - [DEFAULT] read one byte from the chip
183 * @mtd: MTD device structure
185 * Default read function for 8bit buswidth
188 static uint8_t nand_read_byte(struct mtd_info *mtd)
190 uint8_t nand_read_byte(struct mtd_info *mtd)
193 struct nand_chip *chip = mtd->priv;
194 return readb(chip->IO_ADDR_R);
198 * nand_read_byte16 - [DEFAULT] read one byte endianness aware from the chip
199 * nand_read_byte16 - [DEFAULT] read one byte endianness aware from the chip
200 * @mtd: MTD device structure
202 * Default read function for 16bit buswidth with endianness conversion.
205 static uint8_t nand_read_byte16(struct mtd_info *mtd)
207 struct nand_chip *chip = mtd->priv;
208 return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R));
212 * nand_read_word - [DEFAULT] read one word from the chip
213 * @mtd: MTD device structure
215 * Default read function for 16bit buswidth without endianness conversion.
217 static u16 nand_read_word(struct mtd_info *mtd)
219 struct nand_chip *chip = mtd->priv;
220 return readw(chip->IO_ADDR_R);
224 * nand_select_chip - [DEFAULT] control CE line
225 * @mtd: MTD device structure
226 * @chipnr: chipnumber to select, -1 for deselect
228 * Default select function for 1 chip devices.
230 static void nand_select_chip(struct mtd_info *mtd, int chipnr)
232 struct nand_chip *chip = mtd->priv;
236 chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
247 * nand_write_byte - [DEFAULT] write single byte to chip
248 * @mtd: MTD device structure
249 * @byte: value to write
251 * Default function to write a byte to I/O[7:0]
253 static void nand_write_byte(struct mtd_info *mtd, uint8_t byte)
255 struct nand_chip *chip = mtd->priv;
257 chip->write_buf(mtd, &byte, 1);
261 * nand_write_byte16 - [DEFAULT] write single byte to a chip with width 16
262 * @mtd: MTD device structure
263 * @byte: value to write
265 * Default function to write a byte to I/O[7:0] on a 16-bit wide chip.
267 static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte)
269 struct nand_chip *chip = mtd->priv;
270 uint16_t word = byte;
273 * It's not entirely clear what should happen to I/O[15:8] when writing
274 * a byte. The ONFi spec (Revision 3.1; 2012-09-19, Section 2.16) reads:
276 * When the host supports a 16-bit bus width, only data is
277 * transferred at the 16-bit width. All address and command line
278 * transfers shall use only the lower 8-bits of the data bus. During
279 * command transfers, the host may place any value on the upper
280 * 8-bits of the data bus. During address transfers, the host shall
281 * set the upper 8-bits of the data bus to 00h.
283 * One user of the write_byte callback is nand_onfi_set_features. The
284 * four parameters are specified to be written to I/O[7:0], but this is
285 * neither an address nor a command transfer. Let's assume a 0 on the
286 * upper I/O lines is OK.
288 chip->write_buf(mtd, (uint8_t *)&word, 2);
291 #if defined(__UBOOT__) && !defined(CONFIG_BLACKFIN)
292 static void iowrite8_rep(void *addr, const uint8_t *buf, int len)
296 for (i = 0; i < len; i++)
297 writeb(buf[i], addr);
299 static void ioread8_rep(void *addr, uint8_t *buf, int len)
303 for (i = 0; i < len; i++)
304 buf[i] = readb(addr);
307 static void ioread16_rep(void *addr, void *buf, int len)
310 u16 *p = (u16 *) buf;
312 for (i = 0; i < len; i++)
316 static void iowrite16_rep(void *addr, void *buf, int len)
319 u16 *p = (u16 *) buf;
321 for (i = 0; i < len; i++)
327 * nand_write_buf - [DEFAULT] write buffer to chip
328 * @mtd: MTD device structure
330 * @len: number of bytes to write
332 * Default write function for 8bit buswidth.
335 static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
337 void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
340 struct nand_chip *chip = mtd->priv;
342 iowrite8_rep(chip->IO_ADDR_W, buf, len);
346 * nand_read_buf - [DEFAULT] read chip data into buffer
347 * @mtd: MTD device structure
348 * @buf: buffer to store date
349 * @len: number of bytes to read
351 * Default read function for 8bit buswidth.
354 static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
356 void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
359 struct nand_chip *chip = mtd->priv;
361 ioread8_rep(chip->IO_ADDR_R, buf, len);
365 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
367 * nand_verify_buf - [DEFAULT] Verify chip data against buffer
368 * @mtd: MTD device structure
369 * @buf: buffer containing the data to compare
370 * @len: number of bytes to compare
372 * Default verify function for 8bit buswidth.
374 static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
377 struct nand_chip *chip = mtd->priv;
379 for (i = 0; i < len; i++)
380 if (buf[i] != readb(chip->IO_ADDR_R))
386 * nand_verify_buf16 - [DEFAULT] Verify chip data against buffer
387 * @mtd: MTD device structure
388 * @buf: buffer containing the data to compare
389 * @len: number of bytes to compare
391 * Default verify function for 16bit buswidth.
393 static int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
396 struct nand_chip *chip = mtd->priv;
397 u16 *p = (u16 *) buf;
400 for (i = 0; i < len; i++)
401 if (p[i] != readw(chip->IO_ADDR_R))
410 * nand_write_buf16 - [DEFAULT] write buffer to chip
411 * @mtd: MTD device structure
413 * @len: number of bytes to write
415 * Default write function for 16bit buswidth.
418 static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
420 void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
423 struct nand_chip *chip = mtd->priv;
424 u16 *p = (u16 *) buf;
426 iowrite16_rep(chip->IO_ADDR_W, p, len >> 1);
430 * nand_read_buf16 - [DEFAULT] read chip data into buffer
431 * @mtd: MTD device structure
432 * @buf: buffer to store date
433 * @len: number of bytes to read
435 * Default read function for 16bit buswidth.
438 static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
440 void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
443 struct nand_chip *chip = mtd->priv;
444 u16 *p = (u16 *) buf;
446 ioread16_rep(chip->IO_ADDR_R, p, len >> 1);
450 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
451 * @mtd: MTD device structure
452 * @ofs: offset from device start
453 * @getchip: 0, if the chip is already selected
455 * Check, if the block is bad.
457 static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
459 int page, chipnr, res = 0, i = 0;
460 struct nand_chip *chip = mtd->priv;
463 if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
464 ofs += mtd->erasesize - mtd->writesize;
466 page = (int)(ofs >> chip->page_shift) & chip->pagemask;
469 chipnr = (int)(ofs >> chip->chip_shift);
471 nand_get_device(mtd, FL_READING);
473 /* Select the NAND device */
474 chip->select_chip(mtd, chipnr);
478 if (chip->options & NAND_BUSWIDTH_16) {
479 chip->cmdfunc(mtd, NAND_CMD_READOOB,
480 chip->badblockpos & 0xFE, page);
481 bad = cpu_to_le16(chip->read_word(mtd));
482 if (chip->badblockpos & 0x1)
487 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos,
489 bad = chip->read_byte(mtd);
492 if (likely(chip->badblockbits == 8))
495 res = hweight8(bad) < chip->badblockbits;
496 ofs += mtd->writesize;
497 page = (int)(ofs >> chip->page_shift) & chip->pagemask;
499 } while (!res && i < 2 && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE));
502 chip->select_chip(mtd, -1);
503 nand_release_device(mtd);
510 * nand_default_block_markbad - [DEFAULT] mark a block bad via bad block marker
511 * @mtd: MTD device structure
512 * @ofs: offset from device start
514 * This is the default implementation, which can be overridden by a hardware
515 * specific driver. It provides the details for writing a bad block marker to a
518 static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
520 struct nand_chip *chip = mtd->priv;
521 struct mtd_oob_ops ops;
522 uint8_t buf[2] = { 0, 0 };
523 int ret = 0, res, i = 0;
527 ops.ooboffs = chip->badblockpos;
528 if (chip->options & NAND_BUSWIDTH_16) {
529 ops.ooboffs &= ~0x01;
530 ops.len = ops.ooblen = 2;
532 ops.len = ops.ooblen = 1;
534 ops.mode = MTD_OPS_PLACE_OOB;
536 /* Write to first/last page(s) if necessary */
537 if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
538 ofs += mtd->erasesize - mtd->writesize;
540 res = nand_do_write_oob(mtd, ofs, &ops);
545 ofs += mtd->writesize;
546 } while ((chip->bbt_options & NAND_BBT_SCAN2NDPAGE) && i < 2);
552 * nand_block_markbad_lowlevel - mark a block bad
553 * @mtd: MTD device structure
554 * @ofs: offset from device start
556 * This function performs the generic NAND bad block marking steps (i.e., bad
557 * block table(s) and/or marker(s)). We only allow the hardware driver to
558 * specify how to write bad block markers to OOB (chip->block_markbad).
560 * We try operations in the following order:
561 * (1) erase the affected block, to allow OOB marker to be written cleanly
562 * (2) write bad block marker to OOB area of affected block (unless flag
563 * NAND_BBT_NO_OOB_BBM is present)
565 * Note that we retain the first error encountered in (2) or (3), finish the
566 * procedures, and dump the error in the end.
568 static int nand_block_markbad_lowlevel(struct mtd_info *mtd, loff_t ofs)
570 struct nand_chip *chip = mtd->priv;
573 if (!(chip->bbt_options & NAND_BBT_NO_OOB_BBM)) {
574 struct erase_info einfo;
576 /* Attempt erase before marking OOB */
577 memset(&einfo, 0, sizeof(einfo));
580 einfo.len = 1ULL << chip->phys_erase_shift;
581 nand_erase_nand(mtd, &einfo, 0);
583 /* Write bad block marker to OOB */
584 nand_get_device(mtd, FL_WRITING);
585 ret = chip->block_markbad(mtd, ofs);
586 nand_release_device(mtd);
589 /* Mark block bad in BBT */
591 res = nand_markbad_bbt(mtd, ofs);
597 mtd->ecc_stats.badblocks++;
603 * nand_check_wp - [GENERIC] check if the chip is write protected
604 * @mtd: MTD device structure
606 * Check, if the device is write protected. The function expects, that the
607 * device is already selected.
609 static int nand_check_wp(struct mtd_info *mtd)
611 struct nand_chip *chip = mtd->priv;
613 /* Broken xD cards report WP despite being writable */
614 if (chip->options & NAND_BROKEN_XD)
617 /* Check the WP bit */
618 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
619 return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
623 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
624 * @mtd: MTD device structure
625 * @ofs: offset from device start
626 * @getchip: 0, if the chip is already selected
627 * @allowbbt: 1, if its allowed to access the bbt area
629 * Check, if the block is bad. Either by reading the bad block table or
630 * calling of the scan function.
632 static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
635 struct nand_chip *chip = mtd->priv;
638 return chip->block_bad(mtd, ofs, getchip);
640 /* Return info from the table */
641 return nand_isbad_bbt(mtd, ofs, allowbbt);
646 * panic_nand_wait_ready - [GENERIC] Wait for the ready pin after commands.
647 * @mtd: MTD device structure
650 * Helper function for nand_wait_ready used when needing to wait in interrupt
653 static void panic_nand_wait_ready(struct mtd_info *mtd, unsigned long timeo)
655 struct nand_chip *chip = mtd->priv;
658 /* Wait for the device to get ready */
659 for (i = 0; i < timeo; i++) {
660 if (chip->dev_ready(mtd))
662 touch_softlockup_watchdog();
668 /* Wait for the ready pin, after a command. The timeout is caught later. */
669 void nand_wait_ready(struct mtd_info *mtd)
671 struct nand_chip *chip = mtd->priv;
673 unsigned long timeo = jiffies + msecs_to_jiffies(20);
676 if (in_interrupt() || oops_in_progress)
677 return panic_nand_wait_ready(mtd, 400);
679 led_trigger_event(nand_led_trigger, LED_FULL);
680 /* Wait until command is processed or timeout occurs */
682 if (chip->dev_ready(mtd))
684 touch_softlockup_watchdog();
685 } while (time_before(jiffies, timeo));
686 led_trigger_event(nand_led_trigger, LED_OFF);
688 u32 timeo = (CONFIG_SYS_HZ * 20) / 1000;
691 time_start = get_timer(0);
692 /* Wait until command is processed or timeout occurs */
693 while (get_timer(time_start) < timeo) {
695 if (chip->dev_ready(mtd))
700 EXPORT_SYMBOL_GPL(nand_wait_ready);
703 * nand_command - [DEFAULT] Send command to NAND device
704 * @mtd: MTD device structure
705 * @command: the command to be sent
706 * @column: the column address for this command, -1 if none
707 * @page_addr: the page address for this command, -1 if none
709 * Send command to NAND device. This function is used for small page devices
710 * (512 Bytes per page).
712 static void nand_command(struct mtd_info *mtd, unsigned int command,
713 int column, int page_addr)
715 register struct nand_chip *chip = mtd->priv;
716 int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
717 uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
719 /* Write out the command to the device */
720 if (command == NAND_CMD_SEQIN) {
723 if (column >= mtd->writesize) {
725 column -= mtd->writesize;
726 readcmd = NAND_CMD_READOOB;
727 } else if (column < 256) {
728 /* First 256 bytes --> READ0 */
729 readcmd = NAND_CMD_READ0;
732 readcmd = NAND_CMD_READ1;
734 chip->cmd_ctrl(mtd, readcmd, ctrl);
735 ctrl &= ~NAND_CTRL_CHANGE;
737 chip->cmd_ctrl(mtd, command, ctrl);
739 /* Address cycle, when necessary */
740 ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
741 /* Serially input address */
743 /* Adjust columns for 16 bit buswidth */
744 if (chip->options & NAND_BUSWIDTH_16 &&
745 !nand_opcode_8bits(command))
747 chip->cmd_ctrl(mtd, column, ctrl);
748 ctrl &= ~NAND_CTRL_CHANGE;
750 if (page_addr != -1) {
751 chip->cmd_ctrl(mtd, page_addr, ctrl);
752 ctrl &= ~NAND_CTRL_CHANGE;
753 chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
754 /* One more address cycle for devices > 32MiB */
755 if (chip->chipsize > (32 << 20))
756 chip->cmd_ctrl(mtd, page_addr >> 16, ctrl);
758 chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
761 * Program and erase have their own busy handlers status and sequential
766 case NAND_CMD_PAGEPROG:
767 case NAND_CMD_ERASE1:
768 case NAND_CMD_ERASE2:
770 case NAND_CMD_STATUS:
776 udelay(chip->chip_delay);
777 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
778 NAND_CTRL_CLE | NAND_CTRL_CHANGE);
780 NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
781 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
785 /* This applies to read commands */
788 * If we don't have access to the busy pin, we apply the given
791 if (!chip->dev_ready) {
792 udelay(chip->chip_delay);
797 * Apply this short delay always to ensure that we do wait tWB in
798 * any case on any machine.
802 nand_wait_ready(mtd);
806 * nand_command_lp - [DEFAULT] Send command to NAND large page device
807 * @mtd: MTD device structure
808 * @command: the command to be sent
809 * @column: the column address for this command, -1 if none
810 * @page_addr: the page address for this command, -1 if none
812 * Send command to NAND device. This is the version for the new large page
813 * devices. We don't have the separate regions as we have in the small page
814 * devices. We must emulate NAND_CMD_READOOB to keep the code compatible.
816 static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
817 int column, int page_addr)
819 register struct nand_chip *chip = mtd->priv;
820 uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
822 /* Emulate NAND_CMD_READOOB */
823 if (command == NAND_CMD_READOOB) {
824 column += mtd->writesize;
825 command = NAND_CMD_READ0;
828 /* Command latch cycle */
829 chip->cmd_ctrl(mtd, command, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
831 if (column != -1 || page_addr != -1) {
832 int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
834 /* Serially input address */
836 /* Adjust columns for 16 bit buswidth */
837 if (chip->options & NAND_BUSWIDTH_16 &&
838 !nand_opcode_8bits(command))
840 chip->cmd_ctrl(mtd, column, ctrl);
841 ctrl &= ~NAND_CTRL_CHANGE;
842 chip->cmd_ctrl(mtd, column >> 8, ctrl);
844 if (page_addr != -1) {
845 chip->cmd_ctrl(mtd, page_addr, ctrl);
846 chip->cmd_ctrl(mtd, page_addr >> 8,
847 NAND_NCE | NAND_ALE);
848 /* One more address cycle for devices > 128MiB */
849 if (chip->chipsize > (128 << 20))
850 chip->cmd_ctrl(mtd, page_addr >> 16,
851 NAND_NCE | NAND_ALE);
854 chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
857 * Program and erase have their own busy handlers status, sequential
858 * in, and deplete1 need no delay.
862 case NAND_CMD_CACHEDPROG:
863 case NAND_CMD_PAGEPROG:
864 case NAND_CMD_ERASE1:
865 case NAND_CMD_ERASE2:
868 case NAND_CMD_STATUS:
874 udelay(chip->chip_delay);
875 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
876 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
877 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
878 NAND_NCE | NAND_CTRL_CHANGE);
879 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
883 case NAND_CMD_RNDOUT:
884 /* No ready / busy check necessary */
885 chip->cmd_ctrl(mtd, NAND_CMD_RNDOUTSTART,
886 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
887 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
888 NAND_NCE | NAND_CTRL_CHANGE);
892 chip->cmd_ctrl(mtd, NAND_CMD_READSTART,
893 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
894 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
895 NAND_NCE | NAND_CTRL_CHANGE);
897 /* This applies to read commands */
900 * If we don't have access to the busy pin, we apply the given
903 if (!chip->dev_ready) {
904 udelay(chip->chip_delay);
910 * Apply this short delay always to ensure that we do wait tWB in
911 * any case on any machine.
915 nand_wait_ready(mtd);
919 * panic_nand_get_device - [GENERIC] Get chip for selected access
920 * @chip: the nand chip descriptor
921 * @mtd: MTD device structure
922 * @new_state: the state which is requested
924 * Used when in panic, no locks are taken.
926 static void panic_nand_get_device(struct nand_chip *chip,
927 struct mtd_info *mtd, int new_state)
929 /* Hardware controller shared among independent devices */
930 chip->controller->active = chip;
931 chip->state = new_state;
935 * nand_get_device - [GENERIC] Get chip for selected access
936 * @mtd: MTD device structure
937 * @new_state: the state which is requested
939 * Get the device and lock it for exclusive access
942 nand_get_device(struct mtd_info *mtd, int new_state)
944 struct nand_chip *chip = mtd->priv;
946 spinlock_t *lock = &chip->controller->lock;
947 wait_queue_head_t *wq = &chip->controller->wq;
948 DECLARE_WAITQUEUE(wait, current);
952 /* Hardware controller shared among independent devices */
953 if (!chip->controller->active)
954 chip->controller->active = chip;
956 if (chip->controller->active == chip && chip->state == FL_READY) {
957 chip->state = new_state;
961 if (new_state == FL_PM_SUSPENDED) {
962 if (chip->controller->active->state == FL_PM_SUSPENDED) {
963 chip->state = FL_PM_SUSPENDED;
968 set_current_state(TASK_UNINTERRUPTIBLE);
969 add_wait_queue(wq, &wait);
972 remove_wait_queue(wq, &wait);
975 chip->state = new_state;
981 * panic_nand_wait - [GENERIC] wait until the command is done
982 * @mtd: MTD device structure
983 * @chip: NAND chip structure
986 * Wait for command done. This is a helper function for nand_wait used when
987 * we are in interrupt context. May happen when in panic and trying to write
988 * an oops through mtdoops.
990 static void panic_nand_wait(struct mtd_info *mtd, struct nand_chip *chip,
994 for (i = 0; i < timeo; i++) {
995 if (chip->dev_ready) {
996 if (chip->dev_ready(mtd))
999 if (chip->read_byte(mtd) & NAND_STATUS_READY)
1007 * nand_wait - [DEFAULT] wait until the command is done
1008 * @mtd: MTD device structure
1009 * @chip: NAND chip structure
1011 * Wait for command done. This applies to erase and program only. Erase can
1012 * take up to 400ms and program up to 20ms according to general NAND and
1015 static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
1018 int status, state = chip->state;
1019 unsigned long timeo = (state == FL_ERASING ? 400 : 20);
1021 led_trigger_event(nand_led_trigger, LED_FULL);
1024 * Apply this short delay always to ensure that we do wait tWB in any
1025 * case on any machine.
1029 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
1032 if (in_interrupt() || oops_in_progress)
1033 panic_nand_wait(mtd, chip, timeo);
1035 timeo = jiffies + msecs_to_jiffies(timeo);
1036 while (time_before(jiffies, timeo)) {
1037 if (chip->dev_ready) {
1038 if (chip->dev_ready(mtd))
1041 if (chip->read_byte(mtd) & NAND_STATUS_READY)
1048 u32 timer = (CONFIG_SYS_HZ * timeo) / 1000;
1051 time_start = get_timer(0);
1052 while (get_timer(time_start) < timer) {
1053 if (chip->dev_ready) {
1054 if (chip->dev_ready(mtd))
1057 if (chip->read_byte(mtd) & NAND_STATUS_READY)
1062 #ifdef PPCHAMELON_NAND_TIMER_HACK
1063 time_start = get_timer(0);
1064 while (get_timer(time_start) < 10)
1066 #endif /* PPCHAMELON_NAND_TIMER_HACK */
1067 led_trigger_event(nand_led_trigger, LED_OFF);
1069 status = (int)chip->read_byte(mtd);
1070 /* This can happen if in case of timeout or buggy dev_ready */
1071 WARN_ON(!(status & NAND_STATUS_READY));
1077 * __nand_unlock - [REPLACEABLE] unlocks specified locked blocks
1079 * @ofs: offset to start unlock from
1080 * @len: length to unlock
1081 * @invert: when = 0, unlock the range of blocks within the lower and
1082 * upper boundary address
1083 * when = 1, unlock the range of blocks outside the boundaries
1084 * of the lower and upper boundary address
1086 * Returs unlock status.
1088 static int __nand_unlock(struct mtd_info *mtd, loff_t ofs,
1089 uint64_t len, int invert)
1093 struct nand_chip *chip = mtd->priv;
1095 /* Submit address of first page to unlock */
1096 page = ofs >> chip->page_shift;
1097 chip->cmdfunc(mtd, NAND_CMD_UNLOCK1, -1, page & chip->pagemask);
1099 /* Submit address of last page to unlock */
1100 page = (ofs + len) >> chip->page_shift;
1101 chip->cmdfunc(mtd, NAND_CMD_UNLOCK2, -1,
1102 (page | invert) & chip->pagemask);
1104 /* Call wait ready function */
1105 status = chip->waitfunc(mtd, chip);
1106 /* See if device thinks it succeeded */
1107 if (status & NAND_STATUS_FAIL) {
1108 pr_debug("%s: error status = 0x%08x\n",
1117 * nand_unlock - [REPLACEABLE] unlocks specified locked blocks
1119 * @ofs: offset to start unlock from
1120 * @len: length to unlock
1122 * Returns unlock status.
1124 int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1128 struct nand_chip *chip = mtd->priv;
1130 pr_debug("%s: start = 0x%012llx, len = %llu\n",
1131 __func__, (unsigned long long)ofs, len);
1133 if (check_offs_len(mtd, ofs, len))
1136 /* Align to last block address if size addresses end of the device */
1137 if (ofs + len == mtd->size)
1138 len -= mtd->erasesize;
1140 nand_get_device(mtd, FL_UNLOCKING);
1142 /* Shift to get chip number */
1143 chipnr = ofs >> chip->chip_shift;
1145 chip->select_chip(mtd, chipnr);
1147 /* Check, if it is write protected */
1148 if (nand_check_wp(mtd)) {
1149 pr_debug("%s: device is write protected!\n",
1155 ret = __nand_unlock(mtd, ofs, len, 0);
1158 chip->select_chip(mtd, -1);
1159 nand_release_device(mtd);
1163 EXPORT_SYMBOL(nand_unlock);
1166 * nand_lock - [REPLACEABLE] locks all blocks present in the device
1168 * @ofs: offset to start unlock from
1169 * @len: length to unlock
1171 * This feature is not supported in many NAND parts. 'Micron' NAND parts do
1172 * have this feature, but it allows only to lock all blocks, not for specified
1173 * range for block. Implementing 'lock' feature by making use of 'unlock', for
1176 * Returns lock status.
1178 int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1181 int chipnr, status, page;
1182 struct nand_chip *chip = mtd->priv;
1184 pr_debug("%s: start = 0x%012llx, len = %llu\n",
1185 __func__, (unsigned long long)ofs, len);
1187 if (check_offs_len(mtd, ofs, len))
1190 nand_get_device(mtd, FL_LOCKING);
1192 /* Shift to get chip number */
1193 chipnr = ofs >> chip->chip_shift;
1195 chip->select_chip(mtd, chipnr);
1197 /* Check, if it is write protected */
1198 if (nand_check_wp(mtd)) {
1199 pr_debug("%s: device is write protected!\n",
1201 status = MTD_ERASE_FAILED;
1206 /* Submit address of first page to lock */
1207 page = ofs >> chip->page_shift;
1208 chip->cmdfunc(mtd, NAND_CMD_LOCK, -1, page & chip->pagemask);
1210 /* Call wait ready function */
1211 status = chip->waitfunc(mtd, chip);
1212 /* See if device thinks it succeeded */
1213 if (status & NAND_STATUS_FAIL) {
1214 pr_debug("%s: error status = 0x%08x\n",
1220 ret = __nand_unlock(mtd, ofs, len, 0x1);
1223 chip->select_chip(mtd, -1);
1224 nand_release_device(mtd);
1228 EXPORT_SYMBOL(nand_lock);
1232 * nand_read_page_raw - [INTERN] read raw page data without ecc
1233 * @mtd: mtd info structure
1234 * @chip: nand chip info structure
1235 * @buf: buffer to store read data
1236 * @oob_required: caller requires OOB data read to chip->oob_poi
1237 * @page: page number to read
1239 * Not for syndrome calculating ECC controllers, which use a special oob layout.
1241 static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1242 uint8_t *buf, int oob_required, int page)
1244 chip->read_buf(mtd, buf, mtd->writesize);
1246 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1251 * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
1252 * @mtd: mtd info structure
1253 * @chip: nand chip info structure
1254 * @buf: buffer to store read data
1255 * @oob_required: caller requires OOB data read to chip->oob_poi
1256 * @page: page number to read
1258 * We need a special oob layout and handling even when OOB isn't used.
1260 static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
1261 struct nand_chip *chip, uint8_t *buf,
1262 int oob_required, int page)
1264 int eccsize = chip->ecc.size;
1265 int eccbytes = chip->ecc.bytes;
1266 uint8_t *oob = chip->oob_poi;
1269 for (steps = chip->ecc.steps; steps > 0; steps--) {
1270 chip->read_buf(mtd, buf, eccsize);
1273 if (chip->ecc.prepad) {
1274 chip->read_buf(mtd, oob, chip->ecc.prepad);
1275 oob += chip->ecc.prepad;
1278 chip->read_buf(mtd, oob, eccbytes);
1281 if (chip->ecc.postpad) {
1282 chip->read_buf(mtd, oob, chip->ecc.postpad);
1283 oob += chip->ecc.postpad;
1287 size = mtd->oobsize - (oob - chip->oob_poi);
1289 chip->read_buf(mtd, oob, size);
1295 * nand_read_page_swecc - [REPLACEABLE] software ECC based page read function
1296 * @mtd: mtd info structure
1297 * @chip: nand chip info structure
1298 * @buf: buffer to store read data
1299 * @oob_required: caller requires OOB data read to chip->oob_poi
1300 * @page: page number to read
1302 static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
1303 uint8_t *buf, int oob_required, int page)
1305 int i, eccsize = chip->ecc.size;
1306 int eccbytes = chip->ecc.bytes;
1307 int eccsteps = chip->ecc.steps;
1309 uint8_t *ecc_calc = chip->buffers->ecccalc;
1310 uint8_t *ecc_code = chip->buffers->ecccode;
1311 uint32_t *eccpos = chip->ecc.layout->eccpos;
1312 unsigned int max_bitflips = 0;
1314 chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
1316 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
1317 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1319 for (i = 0; i < chip->ecc.total; i++)
1320 ecc_code[i] = chip->oob_poi[eccpos[i]];
1322 eccsteps = chip->ecc.steps;
1325 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1328 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1330 mtd->ecc_stats.failed++;
1332 mtd->ecc_stats.corrected += stat;
1333 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1336 return max_bitflips;
1340 * nand_read_subpage - [REPLACEABLE] ECC based sub-page read function
1341 * @mtd: mtd info structure
1342 * @chip: nand chip info structure
1343 * @data_offs: offset of requested data within the page
1344 * @readlen: data length
1345 * @bufpoi: buffer to store read data
1346 * @page: page number to read
1348 static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
1349 uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi,
1352 int start_step, end_step, num_steps;
1353 uint32_t *eccpos = chip->ecc.layout->eccpos;
1355 int data_col_addr, i, gaps = 0;
1356 int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
1357 int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
1359 unsigned int max_bitflips = 0;
1361 /* Column address within the page aligned to ECC size (256bytes) */
1362 start_step = data_offs / chip->ecc.size;
1363 end_step = (data_offs + readlen - 1) / chip->ecc.size;
1364 num_steps = end_step - start_step + 1;
1365 index = start_step * chip->ecc.bytes;
1367 /* Data size aligned to ECC ecc.size */
1368 datafrag_len = num_steps * chip->ecc.size;
1369 eccfrag_len = num_steps * chip->ecc.bytes;
1371 data_col_addr = start_step * chip->ecc.size;
1372 /* If we read not a page aligned data */
1373 if (data_col_addr != 0)
1374 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
1376 p = bufpoi + data_col_addr;
1377 chip->read_buf(mtd, p, datafrag_len);
1380 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
1381 chip->ecc.calculate(mtd, p, &chip->buffers->ecccalc[i]);
1384 * The performance is faster if we position offsets according to
1385 * ecc.pos. Let's make sure that there are no gaps in ECC positions.
1387 for (i = 0; i < eccfrag_len - 1; i++) {
1388 if (eccpos[i + start_step * chip->ecc.bytes] + 1 !=
1389 eccpos[i + start_step * chip->ecc.bytes + 1]) {
1395 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
1396 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1399 * Send the command to read the particular ECC bytes take care
1400 * about buswidth alignment in read_buf.
1402 aligned_pos = eccpos[index] & ~(busw - 1);
1403 aligned_len = eccfrag_len;
1404 if (eccpos[index] & (busw - 1))
1406 if (eccpos[index + (num_steps * chip->ecc.bytes)] & (busw - 1))
1409 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
1410 mtd->writesize + aligned_pos, -1);
1411 chip->read_buf(mtd, &chip->oob_poi[aligned_pos], aligned_len);
1414 for (i = 0; i < eccfrag_len; i++)
1415 chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
1417 p = bufpoi + data_col_addr;
1418 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
1421 stat = chip->ecc.correct(mtd, p,
1422 &chip->buffers->ecccode[i], &chip->buffers->ecccalc[i]);
1424 mtd->ecc_stats.failed++;
1426 mtd->ecc_stats.corrected += stat;
1427 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1430 return max_bitflips;
1434 * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
1435 * @mtd: mtd info structure
1436 * @chip: nand chip info structure
1437 * @buf: buffer to store read data
1438 * @oob_required: caller requires OOB data read to chip->oob_poi
1439 * @page: page number to read
1441 * Not for syndrome calculating ECC controllers which need a special oob layout.
1443 static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1444 uint8_t *buf, int oob_required, int page)
1446 int i, eccsize = chip->ecc.size;
1447 int eccbytes = chip->ecc.bytes;
1448 int eccsteps = chip->ecc.steps;
1450 uint8_t *ecc_calc = chip->buffers->ecccalc;
1451 uint8_t *ecc_code = chip->buffers->ecccode;
1452 uint32_t *eccpos = chip->ecc.layout->eccpos;
1453 unsigned int max_bitflips = 0;
1455 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1456 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1457 chip->read_buf(mtd, p, eccsize);
1458 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1460 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1462 for (i = 0; i < chip->ecc.total; i++)
1463 ecc_code[i] = chip->oob_poi[eccpos[i]];
1465 eccsteps = chip->ecc.steps;
1468 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1471 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1473 mtd->ecc_stats.failed++;
1475 mtd->ecc_stats.corrected += stat;
1476 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1479 return max_bitflips;
1483 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
1484 * @mtd: mtd info structure
1485 * @chip: nand chip info structure
1486 * @buf: buffer to store read data
1487 * @oob_required: caller requires OOB data read to chip->oob_poi
1488 * @page: page number to read
1490 * Hardware ECC for large page chips, require OOB to be read first. For this
1491 * ECC mode, the write_page method is re-used from ECC_HW. These methods
1492 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
1493 * multiple ECC steps, follows the "infix ECC" scheme and reads/writes ECC from
1494 * the data area, by overwriting the NAND manufacturer bad block markings.
1496 static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
1497 struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
1499 int i, eccsize = chip->ecc.size;
1500 int eccbytes = chip->ecc.bytes;
1501 int eccsteps = chip->ecc.steps;
1503 uint8_t *ecc_code = chip->buffers->ecccode;
1504 uint32_t *eccpos = chip->ecc.layout->eccpos;
1505 uint8_t *ecc_calc = chip->buffers->ecccalc;
1506 unsigned int max_bitflips = 0;
1508 /* Read the OOB area first */
1509 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1510 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1511 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1513 for (i = 0; i < chip->ecc.total; i++)
1514 ecc_code[i] = chip->oob_poi[eccpos[i]];
1516 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1519 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1520 chip->read_buf(mtd, p, eccsize);
1521 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1523 stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
1525 mtd->ecc_stats.failed++;
1527 mtd->ecc_stats.corrected += stat;
1528 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1531 return max_bitflips;
1535 * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
1536 * @mtd: mtd info structure
1537 * @chip: nand chip info structure
1538 * @buf: buffer to store read data
1539 * @oob_required: caller requires OOB data read to chip->oob_poi
1540 * @page: page number to read
1542 * The hw generator calculates the error syndrome automatically. Therefore we
1543 * need a special oob layout and handling.
1545 static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1546 uint8_t *buf, int oob_required, int page)
1548 int i, eccsize = chip->ecc.size;
1549 int eccbytes = chip->ecc.bytes;
1550 int eccsteps = chip->ecc.steps;
1552 uint8_t *oob = chip->oob_poi;
1553 unsigned int max_bitflips = 0;
1555 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1558 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1559 chip->read_buf(mtd, p, eccsize);
1561 if (chip->ecc.prepad) {
1562 chip->read_buf(mtd, oob, chip->ecc.prepad);
1563 oob += chip->ecc.prepad;
1566 chip->ecc.hwctl(mtd, NAND_ECC_READSYN);
1567 chip->read_buf(mtd, oob, eccbytes);
1568 stat = chip->ecc.correct(mtd, p, oob, NULL);
1571 mtd->ecc_stats.failed++;
1573 mtd->ecc_stats.corrected += stat;
1574 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1579 if (chip->ecc.postpad) {
1580 chip->read_buf(mtd, oob, chip->ecc.postpad);
1581 oob += chip->ecc.postpad;
1585 /* Calculate remaining oob bytes */
1586 i = mtd->oobsize - (oob - chip->oob_poi);
1588 chip->read_buf(mtd, oob, i);
1590 return max_bitflips;
1594 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
1595 * @chip: nand chip structure
1596 * @oob: oob destination address
1597 * @ops: oob ops structure
1598 * @len: size of oob to transfer
1600 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
1601 struct mtd_oob_ops *ops, size_t len)
1603 switch (ops->mode) {
1605 case MTD_OPS_PLACE_OOB:
1607 memcpy(oob, chip->oob_poi + ops->ooboffs, len);
1610 case MTD_OPS_AUTO_OOB: {
1611 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1612 uint32_t boffs = 0, roffs = ops->ooboffs;
1615 for (; free->length && len; free++, len -= bytes) {
1616 /* Read request not from offset 0? */
1617 if (unlikely(roffs)) {
1618 if (roffs >= free->length) {
1619 roffs -= free->length;
1622 boffs = free->offset + roffs;
1623 bytes = min_t(size_t, len,
1624 (free->length - roffs));
1627 bytes = min_t(size_t, len, free->length);
1628 boffs = free->offset;
1630 memcpy(oob, chip->oob_poi + boffs, bytes);
1642 * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
1643 * @mtd: MTD device structure
1644 * @retry_mode: the retry mode to use
1646 * Some vendors supply a special command to shift the Vt threshold, to be used
1647 * when there are too many bitflips in a page (i.e., ECC error). After setting
1648 * a new threshold, the host should retry reading the page.
1650 static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
1652 struct nand_chip *chip = mtd->priv;
1654 pr_debug("setting READ RETRY mode %d\n", retry_mode);
1656 if (retry_mode >= chip->read_retries)
1659 if (!chip->setup_read_retry)
1662 return chip->setup_read_retry(mtd, retry_mode);
1666 * nand_do_read_ops - [INTERN] Read data with ECC
1667 * @mtd: MTD device structure
1668 * @from: offset to read from
1669 * @ops: oob ops structure
1671 * Internal function. Called with chip held.
1673 static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
1674 struct mtd_oob_ops *ops)
1676 int chipnr, page, realpage, col, bytes, aligned, oob_required;
1677 struct nand_chip *chip = mtd->priv;
1679 uint32_t readlen = ops->len;
1680 uint32_t oobreadlen = ops->ooblen;
1681 uint32_t max_oobsize = ops->mode == MTD_OPS_AUTO_OOB ?
1682 mtd->oobavail : mtd->oobsize;
1684 uint8_t *bufpoi, *oob, *buf;
1685 unsigned int max_bitflips = 0;
1687 bool ecc_fail = false;
1689 chipnr = (int)(from >> chip->chip_shift);
1690 chip->select_chip(mtd, chipnr);
1692 realpage = (int)(from >> chip->page_shift);
1693 page = realpage & chip->pagemask;
1695 col = (int)(from & (mtd->writesize - 1));
1699 oob_required = oob ? 1 : 0;
1702 unsigned int ecc_failures = mtd->ecc_stats.failed;
1705 bytes = min(mtd->writesize - col, readlen);
1706 aligned = (bytes == mtd->writesize);
1708 /* Is the current page in the buffer? */
1709 if (realpage != chip->pagebuf || oob) {
1710 bufpoi = aligned ? buf : chip->buffers->databuf;
1713 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1716 * Now read the page into the buffer. Absent an error,
1717 * the read methods return max bitflips per ecc step.
1719 if (unlikely(ops->mode == MTD_OPS_RAW))
1720 ret = chip->ecc.read_page_raw(mtd, chip, bufpoi,
1723 else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
1725 ret = chip->ecc.read_subpage(mtd, chip,
1729 ret = chip->ecc.read_page(mtd, chip, bufpoi,
1730 oob_required, page);
1733 /* Invalidate page cache */
1738 max_bitflips = max_t(unsigned int, max_bitflips, ret);
1740 /* Transfer not aligned data */
1742 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
1743 !(mtd->ecc_stats.failed - ecc_failures) &&
1744 (ops->mode != MTD_OPS_RAW)) {
1745 chip->pagebuf = realpage;
1746 chip->pagebuf_bitflips = ret;
1748 /* Invalidate page cache */
1751 memcpy(buf, chip->buffers->databuf + col, bytes);
1754 if (unlikely(oob)) {
1755 int toread = min(oobreadlen, max_oobsize);
1758 oob = nand_transfer_oob(chip,
1760 oobreadlen -= toread;
1764 if (chip->options & NAND_NEED_READRDY) {
1765 /* Apply delay or wait for ready/busy pin */
1766 if (!chip->dev_ready)
1767 udelay(chip->chip_delay);
1769 nand_wait_ready(mtd);
1772 if (mtd->ecc_stats.failed - ecc_failures) {
1773 if (retry_mode + 1 < chip->read_retries) {
1775 ret = nand_setup_read_retry(mtd,
1780 /* Reset failures; retry */
1781 mtd->ecc_stats.failed = ecc_failures;
1784 /* No more retry modes; real failure */
1791 memcpy(buf, chip->buffers->databuf + col, bytes);
1793 max_bitflips = max_t(unsigned int, max_bitflips,
1794 chip->pagebuf_bitflips);
1799 /* Reset to retry mode 0 */
1801 ret = nand_setup_read_retry(mtd, 0);
1810 /* For subsequent reads align to page boundary */
1812 /* Increment page address */
1815 page = realpage & chip->pagemask;
1816 /* Check, if we cross a chip boundary */
1819 chip->select_chip(mtd, -1);
1820 chip->select_chip(mtd, chipnr);
1823 chip->select_chip(mtd, -1);
1825 ops->retlen = ops->len - (size_t) readlen;
1827 ops->oobretlen = ops->ooblen - oobreadlen;
1835 return max_bitflips;
1839 * nand_read - [MTD Interface] MTD compatibility function for nand_do_read_ecc
1840 * @mtd: MTD device structure
1841 * @from: offset to read from
1842 * @len: number of bytes to read
1843 * @retlen: pointer to variable to store the number of read bytes
1844 * @buf: the databuffer to put data
1846 * Get hold of the chip and call nand_do_read.
1848 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
1849 size_t *retlen, uint8_t *buf)
1851 struct mtd_oob_ops ops;
1854 nand_get_device(mtd, FL_READING);
1858 ops.mode = MTD_OPS_PLACE_OOB;
1859 ret = nand_do_read_ops(mtd, from, &ops);
1860 *retlen = ops.retlen;
1861 nand_release_device(mtd);
1866 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
1867 * @mtd: mtd info structure
1868 * @chip: nand chip info structure
1869 * @page: page number to read
1871 static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1874 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1875 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1880 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
1882 * @mtd: mtd info structure
1883 * @chip: nand chip info structure
1884 * @page: page number to read
1886 static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1889 uint8_t *buf = chip->oob_poi;
1890 int length = mtd->oobsize;
1891 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1892 int eccsize = chip->ecc.size;
1893 uint8_t *bufpoi = buf;
1894 int i, toread, sndrnd = 0, pos;
1896 chip->cmdfunc(mtd, NAND_CMD_READ0, chip->ecc.size, page);
1897 for (i = 0; i < chip->ecc.steps; i++) {
1899 pos = eccsize + i * (eccsize + chunk);
1900 if (mtd->writesize > 512)
1901 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, pos, -1);
1903 chip->cmdfunc(mtd, NAND_CMD_READ0, pos, page);
1906 toread = min_t(int, length, chunk);
1907 chip->read_buf(mtd, bufpoi, toread);
1912 chip->read_buf(mtd, bufpoi, length);
1918 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
1919 * @mtd: mtd info structure
1920 * @chip: nand chip info structure
1921 * @page: page number to write
1923 static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1927 const uint8_t *buf = chip->oob_poi;
1928 int length = mtd->oobsize;
1930 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
1931 chip->write_buf(mtd, buf, length);
1932 /* Send command to program the OOB data */
1933 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1935 status = chip->waitfunc(mtd, chip);
1937 return status & NAND_STATUS_FAIL ? -EIO : 0;
1941 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
1942 * with syndrome - only for large page flash
1943 * @mtd: mtd info structure
1944 * @chip: nand chip info structure
1945 * @page: page number to write
1947 static int nand_write_oob_syndrome(struct mtd_info *mtd,
1948 struct nand_chip *chip, int page)
1950 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1951 int eccsize = chip->ecc.size, length = mtd->oobsize;
1952 int i, len, pos, status = 0, sndcmd = 0, steps = chip->ecc.steps;
1953 const uint8_t *bufpoi = chip->oob_poi;
1956 * data-ecc-data-ecc ... ecc-oob
1958 * data-pad-ecc-pad-data-pad .... ecc-pad-oob
1960 if (!chip->ecc.prepad && !chip->ecc.postpad) {
1961 pos = steps * (eccsize + chunk);
1966 chip->cmdfunc(mtd, NAND_CMD_SEQIN, pos, page);
1967 for (i = 0; i < steps; i++) {
1969 if (mtd->writesize <= 512) {
1970 uint32_t fill = 0xFFFFFFFF;
1974 int num = min_t(int, len, 4);
1975 chip->write_buf(mtd, (uint8_t *)&fill,
1980 pos = eccsize + i * (eccsize + chunk);
1981 chip->cmdfunc(mtd, NAND_CMD_RNDIN, pos, -1);
1985 len = min_t(int, length, chunk);
1986 chip->write_buf(mtd, bufpoi, len);
1991 chip->write_buf(mtd, bufpoi, length);
1993 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1994 status = chip->waitfunc(mtd, chip);
1996 return status & NAND_STATUS_FAIL ? -EIO : 0;
2000 * nand_do_read_oob - [INTERN] NAND read out-of-band
2001 * @mtd: MTD device structure
2002 * @from: offset to read from
2003 * @ops: oob operations description structure
2005 * NAND read out-of-band data from the spare area.
2007 static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
2008 struct mtd_oob_ops *ops)
2010 int page, realpage, chipnr;
2011 struct nand_chip *chip = mtd->priv;
2012 struct mtd_ecc_stats stats;
2013 int readlen = ops->ooblen;
2015 uint8_t *buf = ops->oobbuf;
2018 pr_debug("%s: from = 0x%08Lx, len = %i\n",
2019 __func__, (unsigned long long)from, readlen);
2021 stats = mtd->ecc_stats;
2023 if (ops->mode == MTD_OPS_AUTO_OOB)
2024 len = chip->ecc.layout->oobavail;
2028 if (unlikely(ops->ooboffs >= len)) {
2029 pr_debug("%s: attempt to start read outside oob\n",
2034 /* Do not allow reads past end of device */
2035 if (unlikely(from >= mtd->size ||
2036 ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
2037 (from >> chip->page_shift)) * len)) {
2038 pr_debug("%s: attempt to read beyond end of device\n",
2043 chipnr = (int)(from >> chip->chip_shift);
2044 chip->select_chip(mtd, chipnr);
2046 /* Shift to get page */
2047 realpage = (int)(from >> chip->page_shift);
2048 page = realpage & chip->pagemask;
2053 if (ops->mode == MTD_OPS_RAW)
2054 ret = chip->ecc.read_oob_raw(mtd, chip, page);
2056 ret = chip->ecc.read_oob(mtd, chip, page);
2061 len = min(len, readlen);
2062 buf = nand_transfer_oob(chip, buf, ops, len);
2064 if (chip->options & NAND_NEED_READRDY) {
2065 /* Apply delay or wait for ready/busy pin */
2066 if (!chip->dev_ready)
2067 udelay(chip->chip_delay);
2069 nand_wait_ready(mtd);
2076 /* Increment page address */
2079 page = realpage & chip->pagemask;
2080 /* Check, if we cross a chip boundary */
2083 chip->select_chip(mtd, -1);
2084 chip->select_chip(mtd, chipnr);
2087 chip->select_chip(mtd, -1);
2089 ops->oobretlen = ops->ooblen - readlen;
2094 if (mtd->ecc_stats.failed - stats.failed)
2097 return mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
2101 * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
2102 * @mtd: MTD device structure
2103 * @from: offset to read from
2104 * @ops: oob operation description structure
2106 * NAND read data and/or out-of-band data.
2108 static int nand_read_oob(struct mtd_info *mtd, loff_t from,
2109 struct mtd_oob_ops *ops)
2111 int ret = -ENOTSUPP;
2115 /* Do not allow reads past end of device */
2116 if (ops->datbuf && (from + ops->len) > mtd->size) {
2117 pr_debug("%s: attempt to read beyond end of device\n",
2122 nand_get_device(mtd, FL_READING);
2124 switch (ops->mode) {
2125 case MTD_OPS_PLACE_OOB:
2126 case MTD_OPS_AUTO_OOB:
2135 ret = nand_do_read_oob(mtd, from, ops);
2137 ret = nand_do_read_ops(mtd, from, ops);
2140 nand_release_device(mtd);
2146 * nand_write_page_raw - [INTERN] raw page write function
2147 * @mtd: mtd info structure
2148 * @chip: nand chip info structure
2150 * @oob_required: must write chip->oob_poi to OOB
2152 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2154 static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
2155 const uint8_t *buf, int oob_required)
2157 chip->write_buf(mtd, buf, mtd->writesize);
2159 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2165 * nand_write_page_raw_syndrome - [INTERN] raw page write function
2166 * @mtd: mtd info structure
2167 * @chip: nand chip info structure
2169 * @oob_required: must write chip->oob_poi to OOB
2171 * We need a special oob layout and handling even when ECC isn't checked.
2173 static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
2174 struct nand_chip *chip,
2175 const uint8_t *buf, int oob_required)
2177 int eccsize = chip->ecc.size;
2178 int eccbytes = chip->ecc.bytes;
2179 uint8_t *oob = chip->oob_poi;
2182 for (steps = chip->ecc.steps; steps > 0; steps--) {
2183 chip->write_buf(mtd, buf, eccsize);
2186 if (chip->ecc.prepad) {
2187 chip->write_buf(mtd, oob, chip->ecc.prepad);
2188 oob += chip->ecc.prepad;
2191 chip->write_buf(mtd, oob, eccbytes);
2194 if (chip->ecc.postpad) {
2195 chip->write_buf(mtd, oob, chip->ecc.postpad);
2196 oob += chip->ecc.postpad;
2200 size = mtd->oobsize - (oob - chip->oob_poi);
2202 chip->write_buf(mtd, oob, size);
2207 * nand_write_page_swecc - [REPLACEABLE] software ECC based page write function
2208 * @mtd: mtd info structure
2209 * @chip: nand chip info structure
2211 * @oob_required: must write chip->oob_poi to OOB
2213 static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
2214 const uint8_t *buf, int oob_required)
2216 int i, eccsize = chip->ecc.size;
2217 int eccbytes = chip->ecc.bytes;
2218 int eccsteps = chip->ecc.steps;
2219 uint8_t *ecc_calc = chip->buffers->ecccalc;
2220 const uint8_t *p = buf;
2221 uint32_t *eccpos = chip->ecc.layout->eccpos;
2223 /* Software ECC calculation */
2224 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
2225 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2227 for (i = 0; i < chip->ecc.total; i++)
2228 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2230 return chip->ecc.write_page_raw(mtd, chip, buf, 1);
2234 * nand_write_page_hwecc - [REPLACEABLE] hardware ECC based page write function
2235 * @mtd: mtd info structure
2236 * @chip: nand chip info structure
2238 * @oob_required: must write chip->oob_poi to OOB
2240 static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
2241 const uint8_t *buf, int oob_required)
2243 int i, eccsize = chip->ecc.size;
2244 int eccbytes = chip->ecc.bytes;
2245 int eccsteps = chip->ecc.steps;
2246 uint8_t *ecc_calc = chip->buffers->ecccalc;
2247 const uint8_t *p = buf;
2248 uint32_t *eccpos = chip->ecc.layout->eccpos;
2250 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2251 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2252 chip->write_buf(mtd, p, eccsize);
2253 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2256 for (i = 0; i < chip->ecc.total; i++)
2257 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2259 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2266 * nand_write_subpage_hwecc - [REPLACABLE] hardware ECC based subpage write
2267 * @mtd: mtd info structure
2268 * @chip: nand chip info structure
2269 * @offset: column address of subpage within the page
2270 * @data_len: data length
2272 * @oob_required: must write chip->oob_poi to OOB
2274 static int nand_write_subpage_hwecc(struct mtd_info *mtd,
2275 struct nand_chip *chip, uint32_t offset,
2276 uint32_t data_len, const uint8_t *buf,
2279 uint8_t *oob_buf = chip->oob_poi;
2280 uint8_t *ecc_calc = chip->buffers->ecccalc;
2281 int ecc_size = chip->ecc.size;
2282 int ecc_bytes = chip->ecc.bytes;
2283 int ecc_steps = chip->ecc.steps;
2284 uint32_t *eccpos = chip->ecc.layout->eccpos;
2285 uint32_t start_step = offset / ecc_size;
2286 uint32_t end_step = (offset + data_len - 1) / ecc_size;
2287 int oob_bytes = mtd->oobsize / ecc_steps;
2290 for (step = 0; step < ecc_steps; step++) {
2291 /* configure controller for WRITE access */
2292 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2294 /* write data (untouched subpages already masked by 0xFF) */
2295 chip->write_buf(mtd, buf, ecc_size);
2297 /* mask ECC of un-touched subpages by padding 0xFF */
2298 if ((step < start_step) || (step > end_step))
2299 memset(ecc_calc, 0xff, ecc_bytes);
2301 chip->ecc.calculate(mtd, buf, ecc_calc);
2303 /* mask OOB of un-touched subpages by padding 0xFF */
2304 /* if oob_required, preserve OOB metadata of written subpage */
2305 if (!oob_required || (step < start_step) || (step > end_step))
2306 memset(oob_buf, 0xff, oob_bytes);
2309 ecc_calc += ecc_bytes;
2310 oob_buf += oob_bytes;
2313 /* copy calculated ECC for whole page to chip->buffer->oob */
2314 /* this include masked-value(0xFF) for unwritten subpages */
2315 ecc_calc = chip->buffers->ecccalc;
2316 for (i = 0; i < chip->ecc.total; i++)
2317 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2319 /* write OOB buffer to NAND device */
2320 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2327 * nand_write_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page write
2328 * @mtd: mtd info structure
2329 * @chip: nand chip info structure
2331 * @oob_required: must write chip->oob_poi to OOB
2333 * The hw generator calculates the error syndrome automatically. Therefore we
2334 * need a special oob layout and handling.
2336 static int nand_write_page_syndrome(struct mtd_info *mtd,
2337 struct nand_chip *chip,
2338 const uint8_t *buf, int oob_required)
2340 int i, eccsize = chip->ecc.size;
2341 int eccbytes = chip->ecc.bytes;
2342 int eccsteps = chip->ecc.steps;
2343 const uint8_t *p = buf;
2344 uint8_t *oob = chip->oob_poi;
2346 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2348 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2349 chip->write_buf(mtd, p, eccsize);
2351 if (chip->ecc.prepad) {
2352 chip->write_buf(mtd, oob, chip->ecc.prepad);
2353 oob += chip->ecc.prepad;
2356 chip->ecc.calculate(mtd, p, oob);
2357 chip->write_buf(mtd, oob, eccbytes);
2360 if (chip->ecc.postpad) {
2361 chip->write_buf(mtd, oob, chip->ecc.postpad);
2362 oob += chip->ecc.postpad;
2366 /* Calculate remaining oob bytes */
2367 i = mtd->oobsize - (oob - chip->oob_poi);
2369 chip->write_buf(mtd, oob, i);
2375 * nand_write_page - [REPLACEABLE] write one page
2376 * @mtd: MTD device structure
2377 * @chip: NAND chip descriptor
2378 * @offset: address offset within the page
2379 * @data_len: length of actual data to be written
2380 * @buf: the data to write
2381 * @oob_required: must write chip->oob_poi to OOB
2382 * @page: page number to write
2383 * @cached: cached programming
2384 * @raw: use _raw version of write_page
2386 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
2387 uint32_t offset, int data_len, const uint8_t *buf,
2388 int oob_required, int page, int cached, int raw)
2390 int status, subpage;
2392 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
2393 chip->ecc.write_subpage)
2394 subpage = offset || (data_len < mtd->writesize);
2398 chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
2401 status = chip->ecc.write_page_raw(mtd, chip, buf,
2404 status = chip->ecc.write_subpage(mtd, chip, offset, data_len,
2407 status = chip->ecc.write_page(mtd, chip, buf, oob_required);
2413 * Cached progamming disabled for now. Not sure if it's worth the
2414 * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s).
2418 if (!cached || !NAND_HAS_CACHEPROG(chip)) {
2420 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
2421 status = chip->waitfunc(mtd, chip);
2423 * See if operation failed and additional status checks are
2426 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2427 status = chip->errstat(mtd, chip, FL_WRITING, status,
2430 if (status & NAND_STATUS_FAIL)
2433 chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
2434 status = chip->waitfunc(mtd, chip);
2439 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
2440 /* Send command to read back the data */
2441 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
2443 if (chip->verify_buf(mtd, buf, mtd->writesize))
2446 /* Make sure the next page prog is preceded by a status read */
2447 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
2455 * nand_fill_oob - [INTERN] Transfer client buffer to oob
2456 * @mtd: MTD device structure
2457 * @oob: oob data buffer
2458 * @len: oob data write length
2459 * @ops: oob ops structure
2461 static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len,
2462 struct mtd_oob_ops *ops)
2464 struct nand_chip *chip = mtd->priv;
2467 * Initialise to all 0xFF, to avoid the possibility of left over OOB
2468 * data from a previous OOB read.
2470 memset(chip->oob_poi, 0xff, mtd->oobsize);
2472 switch (ops->mode) {
2474 case MTD_OPS_PLACE_OOB:
2476 memcpy(chip->oob_poi + ops->ooboffs, oob, len);
2479 case MTD_OPS_AUTO_OOB: {
2480 struct nand_oobfree *free = chip->ecc.layout->oobfree;
2481 uint32_t boffs = 0, woffs = ops->ooboffs;
2484 for (; free->length && len; free++, len -= bytes) {
2485 /* Write request not from offset 0? */
2486 if (unlikely(woffs)) {
2487 if (woffs >= free->length) {
2488 woffs -= free->length;
2491 boffs = free->offset + woffs;
2492 bytes = min_t(size_t, len,
2493 (free->length - woffs));
2496 bytes = min_t(size_t, len, free->length);
2497 boffs = free->offset;
2499 memcpy(chip->oob_poi + boffs, oob, bytes);
2510 #define NOTALIGNED(x) ((x & (chip->subpagesize - 1)) != 0)
2513 * nand_do_write_ops - [INTERN] NAND write with ECC
2514 * @mtd: MTD device structure
2515 * @to: offset to write to
2516 * @ops: oob operations description structure
2518 * NAND write with ECC.
2520 static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
2521 struct mtd_oob_ops *ops)
2523 int chipnr, realpage, page, blockmask, column;
2524 struct nand_chip *chip = mtd->priv;
2525 uint32_t writelen = ops->len;
2527 uint32_t oobwritelen = ops->ooblen;
2528 uint32_t oobmaxlen = ops->mode == MTD_OPS_AUTO_OOB ?
2529 mtd->oobavail : mtd->oobsize;
2531 uint8_t *oob = ops->oobbuf;
2532 uint8_t *buf = ops->datbuf;
2534 int oob_required = oob ? 1 : 0;
2541 /* Reject writes, which are not page aligned */
2542 if (NOTALIGNED(to) || NOTALIGNED(ops->len)) {
2544 /* Reject writes, which are not page aligned */
2545 if (NOTALIGNED(to)) {
2547 pr_notice("%s: attempt to write non page aligned data\n",
2552 column = to & (mtd->writesize - 1);
2554 chipnr = (int)(to >> chip->chip_shift);
2555 chip->select_chip(mtd, chipnr);
2557 /* Check, if it is write protected */
2558 if (nand_check_wp(mtd)) {
2563 realpage = (int)(to >> chip->page_shift);
2564 page = realpage & chip->pagemask;
2565 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
2567 /* Invalidate the page cache, when we write to the cached page */
2568 if (to <= (chip->pagebuf << chip->page_shift) &&
2569 (chip->pagebuf << chip->page_shift) < (to + ops->len))
2572 /* Don't allow multipage oob writes with offset */
2573 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
2579 int bytes = mtd->writesize;
2580 int cached = writelen > bytes && page != blockmask;
2581 uint8_t *wbuf = buf;
2584 /* Partial page write? */
2585 if (unlikely(column || writelen < (mtd->writesize - 1))) {
2587 bytes = min_t(int, bytes - column, (int) writelen);
2589 memset(chip->buffers->databuf, 0xff, mtd->writesize);
2590 memcpy(&chip->buffers->databuf[column], buf, bytes);
2591 wbuf = chip->buffers->databuf;
2594 if (unlikely(oob)) {
2595 size_t len = min(oobwritelen, oobmaxlen);
2596 oob = nand_fill_oob(mtd, oob, len, ops);
2599 /* We still need to erase leftover OOB data */
2600 memset(chip->oob_poi, 0xff, mtd->oobsize);
2602 ret = chip->write_page(mtd, chip, column, bytes, wbuf,
2603 oob_required, page, cached,
2604 (ops->mode == MTD_OPS_RAW));
2616 page = realpage & chip->pagemask;
2617 /* Check, if we cross a chip boundary */
2620 chip->select_chip(mtd, -1);
2621 chip->select_chip(mtd, chipnr);
2625 ops->retlen = ops->len - writelen;
2627 ops->oobretlen = ops->ooblen;
2630 chip->select_chip(mtd, -1);
2635 * panic_nand_write - [MTD Interface] NAND write with ECC
2636 * @mtd: MTD device structure
2637 * @to: offset to write to
2638 * @len: number of bytes to write
2639 * @retlen: pointer to variable to store the number of written bytes
2640 * @buf: the data to write
2642 * NAND write with ECC. Used when performing writes in interrupt context, this
2643 * may for example be called by mtdoops when writing an oops while in panic.
2645 static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2646 size_t *retlen, const uint8_t *buf)
2648 struct nand_chip *chip = mtd->priv;
2649 struct mtd_oob_ops ops;
2652 /* Wait for the device to get ready */
2653 panic_nand_wait(mtd, chip, 400);
2655 /* Grab the device */
2656 panic_nand_get_device(chip, mtd, FL_WRITING);
2659 ops.datbuf = (uint8_t *)buf;
2661 ops.mode = MTD_OPS_PLACE_OOB;
2663 ret = nand_do_write_ops(mtd, to, &ops);
2665 *retlen = ops.retlen;
2670 * nand_write - [MTD Interface] NAND write with ECC
2671 * @mtd: MTD device structure
2672 * @to: offset to write to
2673 * @len: number of bytes to write
2674 * @retlen: pointer to variable to store the number of written bytes
2675 * @buf: the data to write
2677 * NAND write with ECC.
2679 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2680 size_t *retlen, const uint8_t *buf)
2682 struct mtd_oob_ops ops;
2685 nand_get_device(mtd, FL_WRITING);
2687 ops.datbuf = (uint8_t *)buf;
2689 ops.mode = MTD_OPS_PLACE_OOB;
2690 ret = nand_do_write_ops(mtd, to, &ops);
2691 *retlen = ops.retlen;
2692 nand_release_device(mtd);
2697 * nand_do_write_oob - [MTD Interface] NAND write out-of-band
2698 * @mtd: MTD device structure
2699 * @to: offset to write to
2700 * @ops: oob operation description structure
2702 * NAND write out-of-band.
2704 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
2705 struct mtd_oob_ops *ops)
2707 int chipnr, page, status, len;
2708 struct nand_chip *chip = mtd->priv;
2710 pr_debug("%s: to = 0x%08x, len = %i\n",
2711 __func__, (unsigned int)to, (int)ops->ooblen);
2713 if (ops->mode == MTD_OPS_AUTO_OOB)
2714 len = chip->ecc.layout->oobavail;
2718 /* Do not allow write past end of page */
2719 if ((ops->ooboffs + ops->ooblen) > len) {
2720 pr_debug("%s: attempt to write past end of page\n",
2725 if (unlikely(ops->ooboffs >= len)) {
2726 pr_debug("%s: attempt to start write outside oob\n",
2731 /* Do not allow write past end of device */
2732 if (unlikely(to >= mtd->size ||
2733 ops->ooboffs + ops->ooblen >
2734 ((mtd->size >> chip->page_shift) -
2735 (to >> chip->page_shift)) * len)) {
2736 pr_debug("%s: attempt to write beyond end of device\n",
2741 chipnr = (int)(to >> chip->chip_shift);
2742 chip->select_chip(mtd, chipnr);
2744 /* Shift to get page */
2745 page = (int)(to >> chip->page_shift);
2748 * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
2749 * of my DiskOnChip 2000 test units) will clear the whole data page too
2750 * if we don't do this. I have no clue why, but I seem to have 'fixed'
2751 * it in the doc2000 driver in August 1999. dwmw2.
2753 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2755 /* Check, if it is write protected */
2756 if (nand_check_wp(mtd)) {
2757 chip->select_chip(mtd, -1);
2761 /* Invalidate the page cache, if we write to the cached page */
2762 if (page == chip->pagebuf)
2765 nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops);
2767 if (ops->mode == MTD_OPS_RAW)
2768 status = chip->ecc.write_oob_raw(mtd, chip, page & chip->pagemask);
2770 status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);
2772 chip->select_chip(mtd, -1);
2777 ops->oobretlen = ops->ooblen;
2783 * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
2784 * @mtd: MTD device structure
2785 * @to: offset to write to
2786 * @ops: oob operation description structure
2788 static int nand_write_oob(struct mtd_info *mtd, loff_t to,
2789 struct mtd_oob_ops *ops)
2791 int ret = -ENOTSUPP;
2795 /* Do not allow writes past end of device */
2796 if (ops->datbuf && (to + ops->len) > mtd->size) {
2797 pr_debug("%s: attempt to write beyond end of device\n",
2802 nand_get_device(mtd, FL_WRITING);
2804 switch (ops->mode) {
2805 case MTD_OPS_PLACE_OOB:
2806 case MTD_OPS_AUTO_OOB:
2815 ret = nand_do_write_oob(mtd, to, ops);
2817 ret = nand_do_write_ops(mtd, to, ops);
2820 nand_release_device(mtd);
2825 * single_erase_cmd - [GENERIC] NAND standard block erase command function
2826 * @mtd: MTD device structure
2827 * @page: the page address of the block which will be erased
2829 * Standard erase command for NAND chips.
2831 static void single_erase_cmd(struct mtd_info *mtd, int page)
2833 struct nand_chip *chip = mtd->priv;
2834 /* Send commands to erase a block */
2835 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2836 chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2840 * nand_erase - [MTD Interface] erase block(s)
2841 * @mtd: MTD device structure
2842 * @instr: erase instruction
2844 * Erase one ore more blocks.
2846 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
2848 return nand_erase_nand(mtd, instr, 0);
2852 * nand_erase_nand - [INTERN] erase block(s)
2853 * @mtd: MTD device structure
2854 * @instr: erase instruction
2855 * @allowbbt: allow erasing the bbt area
2857 * Erase one ore more blocks.
2859 int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
2862 int page, status, pages_per_block, ret, chipnr;
2863 struct nand_chip *chip = mtd->priv;
2866 pr_debug("%s: start = 0x%012llx, len = %llu\n",
2867 __func__, (unsigned long long)instr->addr,
2868 (unsigned long long)instr->len);
2870 if (check_offs_len(mtd, instr->addr, instr->len))
2873 /* Grab the lock and see if the device is available */
2874 nand_get_device(mtd, FL_ERASING);
2876 /* Shift to get first page */
2877 page = (int)(instr->addr >> chip->page_shift);
2878 chipnr = (int)(instr->addr >> chip->chip_shift);
2880 /* Calculate pages in each block */
2881 pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
2883 /* Select the NAND device */
2884 chip->select_chip(mtd, chipnr);
2886 /* Check, if it is write protected */
2887 if (nand_check_wp(mtd)) {
2888 pr_debug("%s: device is write protected!\n",
2890 instr->state = MTD_ERASE_FAILED;
2894 /* Loop through the pages */
2897 instr->state = MTD_ERASING;
2902 /* Check if we have a bad block, we do not erase bad blocks! */
2903 if (nand_block_checkbad(mtd, ((loff_t) page) <<
2904 chip->page_shift, 0, allowbbt)) {
2905 pr_warn("%s: attempt to erase a bad block at page 0x%08x\n",
2907 instr->state = MTD_ERASE_FAILED;
2912 * Invalidate the page cache, if we erase the block which
2913 * contains the current cached page.
2915 if (page <= chip->pagebuf && chip->pagebuf <
2916 (page + pages_per_block))
2919 chip->erase_cmd(mtd, page & chip->pagemask);
2921 status = chip->waitfunc(mtd, chip);
2924 * See if operation failed and additional status checks are
2927 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2928 status = chip->errstat(mtd, chip, FL_ERASING,
2931 /* See if block erase succeeded */
2932 if (status & NAND_STATUS_FAIL) {
2933 pr_debug("%s: failed erase, page 0x%08x\n",
2935 instr->state = MTD_ERASE_FAILED;
2937 ((loff_t)page << chip->page_shift);
2941 /* Increment page address and decrement length */
2942 len -= (1ULL << chip->phys_erase_shift);
2943 page += pages_per_block;
2945 /* Check, if we cross a chip boundary */
2946 if (len && !(page & chip->pagemask)) {
2948 chip->select_chip(mtd, -1);
2949 chip->select_chip(mtd, chipnr);
2952 instr->state = MTD_ERASE_DONE;
2956 ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
2958 /* Deselect and wake up anyone waiting on the device */
2959 chip->select_chip(mtd, -1);
2960 nand_release_device(mtd);
2962 /* Do call back function */
2964 mtd_erase_callback(instr);
2966 /* Return more or less happy */
2971 * nand_sync - [MTD Interface] sync
2972 * @mtd: MTD device structure
2974 * Sync is actually a wait for chip ready function.
2976 static void nand_sync(struct mtd_info *mtd)
2978 pr_debug("%s: called\n", __func__);
2980 /* Grab the lock and see if the device is available */
2981 nand_get_device(mtd, FL_SYNCING);
2982 /* Release it and go back */
2983 nand_release_device(mtd);
2987 * nand_block_isbad - [MTD Interface] Check if block at offset is bad
2988 * @mtd: MTD device structure
2989 * @offs: offset relative to mtd start
2991 static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
2993 return nand_block_checkbad(mtd, offs, 1, 0);
2997 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
2998 * @mtd: MTD device structure
2999 * @ofs: offset relative to mtd start
3001 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
3005 ret = nand_block_isbad(mtd, ofs);
3007 /* If it was bad already, return success and do nothing */
3013 return nand_block_markbad_lowlevel(mtd, ofs);
3017 * nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand
3018 * @mtd: MTD device structure
3019 * @chip: nand chip info structure
3020 * @addr: feature address.
3021 * @subfeature_param: the subfeature parameters, a four bytes array.
3023 static int nand_onfi_set_features(struct mtd_info *mtd, struct nand_chip *chip,
3024 int addr, uint8_t *subfeature_param)
3029 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3030 if (!chip->onfi_version ||
3031 !(le16_to_cpu(chip->onfi_params.opt_cmd)
3032 & ONFI_OPT_CMD_SET_GET_FEATURES))
3036 chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, addr, -1);
3037 for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3038 chip->write_byte(mtd, subfeature_param[i]);
3040 status = chip->waitfunc(mtd, chip);
3041 if (status & NAND_STATUS_FAIL)
3047 * nand_onfi_get_features- [REPLACEABLE] get features for ONFI nand
3048 * @mtd: MTD device structure
3049 * @chip: nand chip info structure
3050 * @addr: feature address.
3051 * @subfeature_param: the subfeature parameters, a four bytes array.
3053 static int nand_onfi_get_features(struct mtd_info *mtd, struct nand_chip *chip,
3054 int addr, uint8_t *subfeature_param)
3058 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3059 if (!chip->onfi_version ||
3060 !(le16_to_cpu(chip->onfi_params.opt_cmd)
3061 & ONFI_OPT_CMD_SET_GET_FEATURES))
3065 /* clear the sub feature parameters */
3066 memset(subfeature_param, 0, ONFI_SUBFEATURE_PARAM_LEN);
3068 chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES, addr, -1);
3069 for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3070 *subfeature_param++ = chip->read_byte(mtd);
3076 * nand_suspend - [MTD Interface] Suspend the NAND flash
3077 * @mtd: MTD device structure
3079 static int nand_suspend(struct mtd_info *mtd)
3081 return nand_get_device(mtd, FL_PM_SUSPENDED);
3085 * nand_resume - [MTD Interface] Resume the NAND flash
3086 * @mtd: MTD device structure
3088 static void nand_resume(struct mtd_info *mtd)
3090 struct nand_chip *chip = mtd->priv;
3092 if (chip->state == FL_PM_SUSPENDED)
3093 nand_release_device(mtd);
3095 pr_err("%s called for a chip which is not in suspended state\n",
3100 /* Set default functions */
3101 static void nand_set_defaults(struct nand_chip *chip, int busw)
3103 /* check for proper chip_delay setup, set 20us if not */
3104 if (!chip->chip_delay)
3105 chip->chip_delay = 20;
3107 /* check, if a user supplied command function given */
3108 if (chip->cmdfunc == NULL)
3109 chip->cmdfunc = nand_command;
3111 /* check, if a user supplied wait function given */
3112 if (chip->waitfunc == NULL)
3113 chip->waitfunc = nand_wait;
3115 if (!chip->select_chip)
3116 chip->select_chip = nand_select_chip;
3118 /* set for ONFI nand */
3119 if (!chip->onfi_set_features)
3120 chip->onfi_set_features = nand_onfi_set_features;
3121 if (!chip->onfi_get_features)
3122 chip->onfi_get_features = nand_onfi_get_features;
3124 /* If called twice, pointers that depend on busw may need to be reset */
3125 if (!chip->read_byte || chip->read_byte == nand_read_byte)
3126 chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
3127 if (!chip->read_word)
3128 chip->read_word = nand_read_word;
3129 if (!chip->block_bad)
3130 chip->block_bad = nand_block_bad;
3131 if (!chip->block_markbad)
3132 chip->block_markbad = nand_default_block_markbad;
3133 if (!chip->write_buf || chip->write_buf == nand_write_buf)
3134 chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
3135 if (!chip->write_byte || chip->write_byte == nand_write_byte)
3136 chip->write_byte = busw ? nand_write_byte16 : nand_write_byte;
3137 if (!chip->read_buf || chip->read_buf == nand_read_buf)
3138 chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
3139 if (!chip->scan_bbt)
3140 chip->scan_bbt = nand_default_bbt;
3142 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
3143 if (!chip->verify_buf)
3144 chip->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
3148 if (!chip->controller) {
3149 chip->controller = &chip->hwcontrol;
3150 spin_lock_init(&chip->controller->lock);
3151 init_waitqueue_head(&chip->controller->wq);
3156 /* Sanitize ONFI strings so we can safely print them */
3158 static void sanitize_string(uint8_t *s, size_t len)
3160 static void sanitize_string(char *s, size_t len)
3165 /* Null terminate */
3168 /* Remove non printable chars */
3169 for (i = 0; i < len - 1; i++) {
3170 if (s[i] < ' ' || s[i] > 127)
3174 /* Remove trailing spaces */
3178 static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
3183 for (i = 0; i < 8; i++)
3184 crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0);
3190 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3191 /* Parse the Extended Parameter Page. */
3192 static int nand_flash_detect_ext_param_page(struct mtd_info *mtd,
3193 struct nand_chip *chip, struct nand_onfi_params *p)
3195 struct onfi_ext_param_page *ep;
3196 struct onfi_ext_section *s;
3197 struct onfi_ext_ecc_info *ecc;
3203 len = le16_to_cpu(p->ext_param_page_length) * 16;
3204 ep = kmalloc(len, GFP_KERNEL);
3208 /* Send our own NAND_CMD_PARAM. */
3209 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3211 /* Use the Change Read Column command to skip the ONFI param pages. */
3212 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
3213 sizeof(*p) * p->num_of_param_pages , -1);
3215 /* Read out the Extended Parameter Page. */
3216 chip->read_buf(mtd, (uint8_t *)ep, len);
3217 if ((onfi_crc16(ONFI_CRC_BASE, ((uint8_t *)ep) + 2, len - 2)
3218 != le16_to_cpu(ep->crc))) {
3219 pr_debug("fail in the CRC.\n");
3224 * Check the signature.
3225 * Do not strictly follow the ONFI spec, maybe changed in future.
3228 if (strncmp(ep->sig, "EPPS", 4)) {
3230 if (strncmp((char *)ep->sig, "EPPS", 4)) {
3232 pr_debug("The signature is invalid.\n");
3236 /* find the ECC section. */
3237 cursor = (uint8_t *)(ep + 1);
3238 for (i = 0; i < ONFI_EXT_SECTION_MAX; i++) {
3239 s = ep->sections + i;
3240 if (s->type == ONFI_SECTION_TYPE_2)
3242 cursor += s->length * 16;
3244 if (i == ONFI_EXT_SECTION_MAX) {
3245 pr_debug("We can not find the ECC section.\n");
3249 /* get the info we want. */
3250 ecc = (struct onfi_ext_ecc_info *)cursor;
3252 if (!ecc->codeword_size) {
3253 pr_debug("Invalid codeword size\n");
3257 chip->ecc_strength_ds = ecc->ecc_bits;
3258 chip->ecc_step_ds = 1 << ecc->codeword_size;
3266 static int nand_setup_read_retry_micron(struct mtd_info *mtd, int retry_mode)
3268 struct nand_chip *chip = mtd->priv;
3269 uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode};
3271 return chip->onfi_set_features(mtd, chip, ONFI_FEATURE_ADDR_READ_RETRY,
3276 * Configure chip properties from Micron vendor-specific ONFI table
3278 static void nand_onfi_detect_micron(struct nand_chip *chip,
3279 struct nand_onfi_params *p)
3281 struct nand_onfi_vendor_micron *micron = (void *)p->vendor;
3283 if (le16_to_cpu(p->vendor_revision) < 1)
3286 chip->read_retries = micron->read_retry_options;
3287 chip->setup_read_retry = nand_setup_read_retry_micron;
3291 * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise.
3293 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3296 struct nand_onfi_params *p = &chip->onfi_params;
3300 /* Try ONFI for unknown chip or LP */
3301 chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
3302 if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
3303 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
3306 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3307 for (i = 0; i < 3; i++) {
3308 for (j = 0; j < sizeof(*p); j++)
3309 ((uint8_t *)p)[j] = chip->read_byte(mtd);
3310 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
3311 le16_to_cpu(p->crc)) {
3317 pr_err("Could not find valid ONFI parameter page; aborting\n");
3322 val = le16_to_cpu(p->revision);
3324 chip->onfi_version = 23;
3325 else if (val & (1 << 4))
3326 chip->onfi_version = 22;
3327 else if (val & (1 << 3))
3328 chip->onfi_version = 21;
3329 else if (val & (1 << 2))
3330 chip->onfi_version = 20;
3331 else if (val & (1 << 1))
3332 chip->onfi_version = 10;
3334 if (!chip->onfi_version) {
3335 pr_info("unsupported ONFI version: %d\n", val);
3339 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
3340 sanitize_string(p->model, sizeof(p->model));
3342 mtd->name = p->model;
3344 mtd->writesize = le32_to_cpu(p->byte_per_page);
3347 * pages_per_block and blocks_per_lun may not be a power-of-2 size
3348 * (don't ask me who thought of this...). MTD assumes that these
3349 * dimensions will be power-of-2, so just truncate the remaining area.
3351 mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
3352 mtd->erasesize *= mtd->writesize;
3354 mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
3356 /* See erasesize comment */
3357 chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
3358 chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
3359 chip->bits_per_cell = p->bits_per_cell;
3361 if (onfi_feature(chip) & ONFI_FEATURE_16_BIT_BUS)
3362 *busw = NAND_BUSWIDTH_16;
3366 if (p->ecc_bits != 0xff) {
3367 chip->ecc_strength_ds = p->ecc_bits;
3368 chip->ecc_step_ds = 512;
3369 } else if (chip->onfi_version >= 21 &&
3370 (onfi_feature(chip) & ONFI_FEATURE_EXT_PARAM_PAGE)) {
3373 * The nand_flash_detect_ext_param_page() uses the
3374 * Change Read Column command which maybe not supported
3375 * by the chip->cmdfunc. So try to update the chip->cmdfunc
3376 * now. We do not replace user supplied command function.
3378 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
3379 chip->cmdfunc = nand_command_lp;
3381 /* The Extended Parameter Page is supported since ONFI 2.1. */
3382 if (nand_flash_detect_ext_param_page(mtd, chip, p))
3383 pr_warn("Failed to detect ONFI extended param page\n");
3385 pr_warn("Could not retrieve ONFI ECC requirements\n");
3388 if (p->jedec_id == NAND_MFR_MICRON)
3389 nand_onfi_detect_micron(chip, p);
3394 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3402 * Check if the NAND chip is JEDEC compliant, returns 1 if it is, 0 otherwise.
3404 static int nand_flash_detect_jedec(struct mtd_info *mtd, struct nand_chip *chip,
3407 struct nand_jedec_params *p = &chip->jedec_params;
3408 struct jedec_ecc_info *ecc;
3412 /* Try JEDEC for unknown chip or LP */
3413 chip->cmdfunc(mtd, NAND_CMD_READID, 0x40, -1);
3414 if (chip->read_byte(mtd) != 'J' || chip->read_byte(mtd) != 'E' ||
3415 chip->read_byte(mtd) != 'D' || chip->read_byte(mtd) != 'E' ||
3416 chip->read_byte(mtd) != 'C')
3419 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0x40, -1);
3420 for (i = 0; i < 3; i++) {
3421 for (j = 0; j < sizeof(*p); j++)
3422 ((uint8_t *)p)[j] = chip->read_byte(mtd);
3424 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 510) ==
3425 le16_to_cpu(p->crc))
3430 pr_err("Could not find valid JEDEC parameter page; aborting\n");
3435 val = le16_to_cpu(p->revision);
3437 chip->jedec_version = 10;
3438 else if (val & (1 << 1))
3439 chip->jedec_version = 1; /* vendor specific version */
3441 if (!chip->jedec_version) {
3442 pr_info("unsupported JEDEC version: %d\n", val);
3446 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
3447 sanitize_string(p->model, sizeof(p->model));
3449 mtd->name = p->model;
3451 mtd->writesize = le32_to_cpu(p->byte_per_page);
3453 /* Please reference to the comment for nand_flash_detect_onfi. */
3454 mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
3455 mtd->erasesize *= mtd->writesize;
3457 mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
3459 /* Please reference to the comment for nand_flash_detect_onfi. */
3460 chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
3461 chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
3462 chip->bits_per_cell = p->bits_per_cell;
3464 if (jedec_feature(chip) & JEDEC_FEATURE_16_BIT_BUS)
3465 *busw = NAND_BUSWIDTH_16;
3470 ecc = &p->ecc_info[0];
3472 if (ecc->codeword_size >= 9) {
3473 chip->ecc_strength_ds = ecc->ecc_bits;
3474 chip->ecc_step_ds = 1 << ecc->codeword_size;
3476 pr_warn("Invalid codeword size\n");
3483 * nand_id_has_period - Check if an ID string has a given wraparound period
3484 * @id_data: the ID string
3485 * @arrlen: the length of the @id_data array
3486 * @period: the period of repitition
3488 * Check if an ID string is repeated within a given sequence of bytes at
3489 * specific repetition interval period (e.g., {0x20,0x01,0x7F,0x20} has a
3490 * period of 3). This is a helper function for nand_id_len(). Returns non-zero
3491 * if the repetition has a period of @period; otherwise, returns zero.
3493 static int nand_id_has_period(u8 *id_data, int arrlen, int period)
3496 for (i = 0; i < period; i++)
3497 for (j = i + period; j < arrlen; j += period)
3498 if (id_data[i] != id_data[j])
3504 * nand_id_len - Get the length of an ID string returned by CMD_READID
3505 * @id_data: the ID string
3506 * @arrlen: the length of the @id_data array
3508 * Returns the length of the ID string, according to known wraparound/trailing
3509 * zero patterns. If no pattern exists, returns the length of the array.
3511 static int nand_id_len(u8 *id_data, int arrlen)
3513 int last_nonzero, period;
3515 /* Find last non-zero byte */
3516 for (last_nonzero = arrlen - 1; last_nonzero >= 0; last_nonzero--)
3517 if (id_data[last_nonzero])
3521 if (last_nonzero < 0)
3524 /* Calculate wraparound period */
3525 for (period = 1; period < arrlen; period++)
3526 if (nand_id_has_period(id_data, arrlen, period))
3529 /* There's a repeated pattern */
3530 if (period < arrlen)
3533 /* There are trailing zeros */
3534 if (last_nonzero < arrlen - 1)
3535 return last_nonzero + 1;
3537 /* No pattern detected */
3541 /* Extract the bits of per cell from the 3rd byte of the extended ID */
3542 static int nand_get_bits_per_cell(u8 cellinfo)
3546 bits = cellinfo & NAND_CI_CELLTYPE_MSK;
3547 bits >>= NAND_CI_CELLTYPE_SHIFT;
3552 * Many new NAND share similar device ID codes, which represent the size of the
3553 * chip. The rest of the parameters must be decoded according to generic or
3554 * manufacturer-specific "extended ID" decoding patterns.
3556 static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
3557 u8 id_data[8], int *busw)
3560 /* The 3rd id byte holds MLC / multichip data */
3561 chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3562 /* The 4th id byte is the important one */
3565 id_len = nand_id_len(id_data, 8);
3568 * Field definitions are in the following datasheets:
3569 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
3570 * New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44)
3571 * Hynix MLC (6 byte ID): Hynix H27UBG8T2B (p.22)
3573 * Check for ID length, non-zero 6th byte, cell type, and Hynix/Samsung
3574 * ID to decide what to do.
3576 if (id_len == 6 && id_data[0] == NAND_MFR_SAMSUNG &&
3577 !nand_is_slc(chip) && id_data[5] != 0x00) {
3579 mtd->writesize = 2048 << (extid & 0x03);
3582 switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3602 default: /* Other cases are "reserved" (unknown) */
3603 mtd->oobsize = 1024;
3607 /* Calc blocksize */
3608 mtd->erasesize = (128 * 1024) <<
3609 (((extid >> 1) & 0x04) | (extid & 0x03));
3611 } else if (id_len == 6 && id_data[0] == NAND_MFR_HYNIX &&
3612 !nand_is_slc(chip)) {
3616 mtd->writesize = 2048 << (extid & 0x03);
3619 switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3643 /* Calc blocksize */
3644 tmp = ((extid >> 1) & 0x04) | (extid & 0x03);
3646 mtd->erasesize = (128 * 1024) << tmp;
3647 else if (tmp == 0x03)
3648 mtd->erasesize = 768 * 1024;
3650 mtd->erasesize = (64 * 1024) << tmp;
3654 mtd->writesize = 1024 << (extid & 0x03);
3657 mtd->oobsize = (8 << (extid & 0x01)) *
3658 (mtd->writesize >> 9);
3660 /* Calc blocksize. Blocksize is multiples of 64KiB */
3661 mtd->erasesize = (64 * 1024) << (extid & 0x03);
3663 /* Get buswidth information */
3664 *busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
3667 * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per
3668 * 512B page. For Toshiba SLC, we decode the 5th/6th byte as
3670 * - ID byte 6, bits[2:0]: 100b -> 43nm, 101b -> 32nm,
3672 * - ID byte 5, bit[7]: 1 -> BENAND, 0 -> raw SLC
3674 if (id_len >= 6 && id_data[0] == NAND_MFR_TOSHIBA &&
3675 nand_is_slc(chip) &&
3676 (id_data[5] & 0x7) == 0x6 /* 24nm */ &&
3677 !(id_data[4] & 0x80) /* !BENAND */) {
3678 mtd->oobsize = 32 * mtd->writesize >> 9;
3685 * Old devices have chip data hardcoded in the device ID table. nand_decode_id
3686 * decodes a matching ID table entry and assigns the MTD size parameters for
3689 static void nand_decode_id(struct mtd_info *mtd, struct nand_chip *chip,
3690 struct nand_flash_dev *type, u8 id_data[8],
3693 int maf_id = id_data[0];
3695 mtd->erasesize = type->erasesize;
3696 mtd->writesize = type->pagesize;
3697 mtd->oobsize = mtd->writesize / 32;
3698 *busw = type->options & NAND_BUSWIDTH_16;
3700 /* All legacy ID NAND are small-page, SLC */
3701 chip->bits_per_cell = 1;
3704 * Check for Spansion/AMD ID + repeating 5th, 6th byte since
3705 * some Spansion chips have erasesize that conflicts with size
3706 * listed in nand_ids table.
3707 * Data sheet (5 byte ID): Spansion S30ML-P ORNAND (p.39)
3709 if (maf_id == NAND_MFR_AMD && id_data[4] != 0x00 && id_data[5] == 0x00
3710 && id_data[6] == 0x00 && id_data[7] == 0x00
3711 && mtd->writesize == 512) {
3712 mtd->erasesize = 128 * 1024;
3713 mtd->erasesize <<= ((id_data[3] & 0x03) << 1);
3718 * Set the bad block marker/indicator (BBM/BBI) patterns according to some
3719 * heuristic patterns using various detected parameters (e.g., manufacturer,
3720 * page size, cell-type information).
3722 static void nand_decode_bbm_options(struct mtd_info *mtd,
3723 struct nand_chip *chip, u8 id_data[8])
3725 int maf_id = id_data[0];
3727 /* Set the bad block position */
3728 if (mtd->writesize > 512 || (chip->options & NAND_BUSWIDTH_16))
3729 chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
3731 chip->badblockpos = NAND_SMALL_BADBLOCK_POS;
3734 * Bad block marker is stored in the last page of each block on Samsung
3735 * and Hynix MLC devices; stored in first two pages of each block on
3736 * Micron devices with 2KiB pages and on SLC Samsung, Hynix, Toshiba,
3737 * AMD/Spansion, and Macronix. All others scan only the first page.
3739 if (!nand_is_slc(chip) &&
3740 (maf_id == NAND_MFR_SAMSUNG ||
3741 maf_id == NAND_MFR_HYNIX))
3742 chip->bbt_options |= NAND_BBT_SCANLASTPAGE;
3743 else if ((nand_is_slc(chip) &&
3744 (maf_id == NAND_MFR_SAMSUNG ||
3745 maf_id == NAND_MFR_HYNIX ||
3746 maf_id == NAND_MFR_TOSHIBA ||
3747 maf_id == NAND_MFR_AMD ||
3748 maf_id == NAND_MFR_MACRONIX)) ||
3749 (mtd->writesize == 2048 &&
3750 maf_id == NAND_MFR_MICRON))
3751 chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
3754 static inline bool is_full_id_nand(struct nand_flash_dev *type)
3756 return type->id_len;
3759 static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
3760 struct nand_flash_dev *type, u8 *id_data, int *busw)
3763 if (!strncmp(type->id, id_data, type->id_len)) {
3765 if (!strncmp((char *)type->id, (char *)id_data, type->id_len)) {
3767 mtd->writesize = type->pagesize;
3768 mtd->erasesize = type->erasesize;
3769 mtd->oobsize = type->oobsize;
3771 chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3772 chip->chipsize = (uint64_t)type->chipsize << 20;
3773 chip->options |= type->options;
3774 chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
3775 chip->ecc_step_ds = NAND_ECC_STEP(type);
3777 *busw = type->options & NAND_BUSWIDTH_16;
3780 mtd->name = type->name;
3788 * Get the flash and manufacturer id and lookup if the type is supported.
3790 static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
3791 struct nand_chip *chip,
3792 int *maf_id, int *dev_id,
3793 struct nand_flash_dev *type)
3799 /* Select the device */
3800 chip->select_chip(mtd, 0);
3803 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
3806 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
3808 /* Send the command for reading device ID */
3809 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3811 /* Read manufacturer and device IDs */
3812 *maf_id = chip->read_byte(mtd);
3813 *dev_id = chip->read_byte(mtd);
3816 * Try again to make sure, as some systems the bus-hold or other
3817 * interface concerns can cause random data which looks like a
3818 * possibly credible NAND flash to appear. If the two results do
3819 * not match, ignore the device completely.
3822 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3824 /* Read entire ID string */
3825 for (i = 0; i < 8; i++)
3826 id_data[i] = chip->read_byte(mtd);
3828 if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
3829 pr_info("second ID read did not match %02x,%02x against %02x,%02x\n",
3830 *maf_id, *dev_id, id_data[0], id_data[1]);
3831 return ERR_PTR(-ENODEV);
3835 type = nand_flash_ids;
3837 for (; type->name != NULL; type++) {
3838 if (is_full_id_nand(type)) {
3839 if (find_full_id_nand(mtd, chip, type, id_data, &busw))
3841 } else if (*dev_id == type->dev_id) {
3846 chip->onfi_version = 0;
3847 if (!type->name || !type->pagesize) {
3848 /* Check is chip is ONFI compliant */
3849 if (nand_flash_detect_onfi(mtd, chip, &busw))
3852 /* Check if the chip is JEDEC compliant */
3853 if (nand_flash_detect_jedec(mtd, chip, &busw))
3858 return ERR_PTR(-ENODEV);
3861 mtd->name = type->name;
3863 chip->chipsize = (uint64_t)type->chipsize << 20;
3865 if (!type->pagesize && chip->init_size) {
3866 /* Set the pagesize, oobsize, erasesize by the driver */
3867 busw = chip->init_size(mtd, chip, id_data);
3868 } else if (!type->pagesize) {
3869 /* Decode parameters from extended ID */
3870 nand_decode_ext_id(mtd, chip, id_data, &busw);
3872 nand_decode_id(mtd, chip, type, id_data, &busw);
3874 /* Get chip options */
3875 chip->options |= type->options;
3878 * Check if chip is not a Samsung device. Do not clear the
3879 * options for chips which do not have an extended id.
3881 if (*maf_id != NAND_MFR_SAMSUNG && !type->pagesize)
3882 chip->options &= ~NAND_SAMSUNG_LP_OPTIONS;
3885 /* Try to identify manufacturer */
3886 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
3887 if (nand_manuf_ids[maf_idx].id == *maf_id)
3891 if (chip->options & NAND_BUSWIDTH_AUTO) {
3892 WARN_ON(chip->options & NAND_BUSWIDTH_16);
3893 chip->options |= busw;
3894 nand_set_defaults(chip, busw);
3895 } else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
3897 * Check, if buswidth is correct. Hardware drivers should set
3900 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
3902 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
3903 pr_warn("bus width %d instead %d bit\n",
3904 (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
3906 return ERR_PTR(-EINVAL);
3909 nand_decode_bbm_options(mtd, chip, id_data);
3911 /* Calculate the address shift from the page size */
3912 chip->page_shift = ffs(mtd->writesize) - 1;
3913 /* Convert chipsize to number of pages per chip -1 */
3914 chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
3916 chip->bbt_erase_shift = chip->phys_erase_shift =
3917 ffs(mtd->erasesize) - 1;
3918 if (chip->chipsize & 0xffffffff)
3919 chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
3921 chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
3922 chip->chip_shift += 32 - 1;
3925 chip->badblockbits = 8;
3926 chip->erase_cmd = single_erase_cmd;
3928 /* Do not replace user supplied command function! */
3929 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
3930 chip->cmdfunc = nand_command_lp;
3932 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
3935 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3936 if (chip->onfi_version)
3937 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3938 chip->onfi_params.model);
3939 else if (chip->jedec_version)
3940 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3941 chip->jedec_params.model);
3943 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3946 if (chip->jedec_version)
3947 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3948 chip->jedec_params.model);
3950 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3953 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3957 pr_info("%dMiB, %s, page size: %d, OOB size: %d\n",
3958 (int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
3959 mtd->writesize, mtd->oobsize);
3964 * nand_scan_ident - [NAND Interface] Scan for the NAND device
3965 * @mtd: MTD device structure
3966 * @maxchips: number of chips to scan for
3967 * @table: alternative NAND ID table
3969 * This is the first phase of the normal nand_scan() function. It reads the
3970 * flash ID and sets up MTD fields accordingly.
3972 * The mtd->owner field must be set to the module of the caller.
3974 int nand_scan_ident(struct mtd_info *mtd, int maxchips,
3975 struct nand_flash_dev *table)
3977 int i, nand_maf_id, nand_dev_id;
3978 struct nand_chip *chip = mtd->priv;
3979 struct nand_flash_dev *type;
3981 /* Set the default functions */
3982 nand_set_defaults(chip, chip->options & NAND_BUSWIDTH_16);
3984 /* Read the flash type */
3985 type = nand_get_flash_type(mtd, chip, &nand_maf_id,
3986 &nand_dev_id, table);
3989 if (!(chip->options & NAND_SCAN_SILENT_NODEV))
3990 pr_warn("No NAND device found\n");
3991 chip->select_chip(mtd, -1);
3992 return PTR_ERR(type);
3995 chip->select_chip(mtd, -1);
3997 /* Check for a chip array */
3998 for (i = 1; i < maxchips; i++) {
3999 chip->select_chip(mtd, i);
4000 /* See comment in nand_get_flash_type for reset */
4001 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
4002 /* Send the command for reading device ID */
4003 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
4004 /* Read manufacturer and device IDs */
4005 if (nand_maf_id != chip->read_byte(mtd) ||
4006 nand_dev_id != chip->read_byte(mtd)) {
4007 chip->select_chip(mtd, -1);
4010 chip->select_chip(mtd, -1);
4015 pr_info("%d chips detected\n", i);
4018 /* Store the number of chips and calc total size for mtd */
4020 mtd->size = i * chip->chipsize;
4024 EXPORT_SYMBOL(nand_scan_ident);
4028 * nand_scan_tail - [NAND Interface] Scan for the NAND device
4029 * @mtd: MTD device structure
4031 * This is the second phase of the normal nand_scan() function. It fills out
4032 * all the uninitialized function pointers with the defaults and scans for a
4033 * bad block table if appropriate.
4035 int nand_scan_tail(struct mtd_info *mtd)
4038 struct nand_chip *chip = mtd->priv;
4039 struct nand_ecc_ctrl *ecc = &chip->ecc;
4040 struct nand_buffers *nbuf;
4042 /* New bad blocks should be marked in OOB, flash-based BBT, or both */
4043 BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
4044 !(chip->bbt_options & NAND_BBT_USE_FLASH));
4046 if (!(chip->options & NAND_OWN_BUFFERS)) {
4048 nbuf = kzalloc(sizeof(*nbuf) + mtd->writesize
4049 + mtd->oobsize * 3, GFP_KERNEL);
4052 nbuf->ecccalc = (uint8_t *)(nbuf + 1);
4053 nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
4054 nbuf->databuf = nbuf->ecccode + mtd->oobsize;
4056 nbuf = kzalloc(sizeof(struct nand_buffers), GFP_KERNEL);
4059 chip->buffers = nbuf;
4065 /* Set the internal oob buffer location, just after the page data */
4066 chip->oob_poi = chip->buffers->databuf + mtd->writesize;
4069 * If no default placement scheme is given, select an appropriate one.
4071 if (!ecc->layout && (ecc->mode != NAND_ECC_SOFT_BCH)) {
4072 switch (mtd->oobsize) {
4074 ecc->layout = &nand_oob_8;
4077 ecc->layout = &nand_oob_16;
4080 ecc->layout = &nand_oob_64;
4083 ecc->layout = &nand_oob_128;
4086 pr_warn("No oob scheme defined for oobsize %d\n",
4092 if (!chip->write_page)
4093 chip->write_page = nand_write_page;
4096 * Check ECC mode, default to software if 3byte/512byte hardware ECC is
4097 * selected and we have 256 byte pagesize fallback to software ECC
4100 switch (ecc->mode) {
4101 case NAND_ECC_HW_OOB_FIRST:
4102 /* Similar to NAND_ECC_HW, but a separate read_page handle */
4103 if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
4104 pr_warn("No ECC functions supplied; "
4105 "hardware ECC not possible\n");
4108 if (!ecc->read_page)
4109 ecc->read_page = nand_read_page_hwecc_oob_first;
4112 /* Use standard hwecc read page function? */
4113 if (!ecc->read_page)
4114 ecc->read_page = nand_read_page_hwecc;
4115 if (!ecc->write_page)
4116 ecc->write_page = nand_write_page_hwecc;
4117 if (!ecc->read_page_raw)
4118 ecc->read_page_raw = nand_read_page_raw;
4119 if (!ecc->write_page_raw)
4120 ecc->write_page_raw = nand_write_page_raw;
4122 ecc->read_oob = nand_read_oob_std;
4123 if (!ecc->write_oob)
4124 ecc->write_oob = nand_write_oob_std;
4125 if (!ecc->read_subpage)
4126 ecc->read_subpage = nand_read_subpage;
4127 if (!ecc->write_subpage)
4128 ecc->write_subpage = nand_write_subpage_hwecc;
4130 case NAND_ECC_HW_SYNDROME:
4131 if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) &&
4133 ecc->read_page == nand_read_page_hwecc ||
4135 ecc->write_page == nand_write_page_hwecc)) {
4136 pr_warn("No ECC functions supplied; "
4137 "hardware ECC not possible\n");
4140 /* Use standard syndrome read/write page function? */
4141 if (!ecc->read_page)
4142 ecc->read_page = nand_read_page_syndrome;
4143 if (!ecc->write_page)
4144 ecc->write_page = nand_write_page_syndrome;
4145 if (!ecc->read_page_raw)
4146 ecc->read_page_raw = nand_read_page_raw_syndrome;
4147 if (!ecc->write_page_raw)
4148 ecc->write_page_raw = nand_write_page_raw_syndrome;
4150 ecc->read_oob = nand_read_oob_syndrome;
4151 if (!ecc->write_oob)
4152 ecc->write_oob = nand_write_oob_syndrome;
4154 if (mtd->writesize >= ecc->size) {
4155 if (!ecc->strength) {
4156 pr_warn("Driver must set ecc.strength when using hardware ECC\n");
4161 pr_warn("%d byte HW ECC not possible on "
4162 "%d byte page size, fallback to SW ECC\n",
4163 ecc->size, mtd->writesize);
4164 ecc->mode = NAND_ECC_SOFT;
4167 ecc->calculate = nand_calculate_ecc;
4168 ecc->correct = nand_correct_data;
4169 ecc->read_page = nand_read_page_swecc;
4170 ecc->read_subpage = nand_read_subpage;
4171 ecc->write_page = nand_write_page_swecc;
4172 ecc->read_page_raw = nand_read_page_raw;
4173 ecc->write_page_raw = nand_write_page_raw;
4174 ecc->read_oob = nand_read_oob_std;
4175 ecc->write_oob = nand_write_oob_std;
4182 case NAND_ECC_SOFT_BCH:
4183 if (!mtd_nand_has_bch()) {
4184 pr_warn("CONFIG_MTD_NAND_ECC_BCH not enabled\n");
4187 ecc->calculate = nand_bch_calculate_ecc;
4188 ecc->correct = nand_bch_correct_data;
4189 ecc->read_page = nand_read_page_swecc;
4190 ecc->read_subpage = nand_read_subpage;
4191 ecc->write_page = nand_write_page_swecc;
4192 ecc->read_page_raw = nand_read_page_raw;
4193 ecc->write_page_raw = nand_write_page_raw;
4194 ecc->read_oob = nand_read_oob_std;
4195 ecc->write_oob = nand_write_oob_std;
4197 * Board driver should supply ecc.size and ecc.bytes values to
4198 * select how many bits are correctable; see nand_bch_init()
4199 * for details. Otherwise, default to 4 bits for large page
4202 if (!ecc->size && (mtd->oobsize >= 64)) {
4206 ecc->priv = nand_bch_init(mtd, ecc->size, ecc->bytes,
4209 pr_warn("BCH ECC initialization failed!\n");
4212 ecc->strength = ecc->bytes * 8 / fls(8 * ecc->size);
4216 pr_warn("NAND_ECC_NONE selected by board driver. "
4217 "This is not recommended!\n");
4218 ecc->read_page = nand_read_page_raw;
4219 ecc->write_page = nand_write_page_raw;
4220 ecc->read_oob = nand_read_oob_std;
4221 ecc->read_page_raw = nand_read_page_raw;
4222 ecc->write_page_raw = nand_write_page_raw;
4223 ecc->write_oob = nand_write_oob_std;
4224 ecc->size = mtd->writesize;
4230 pr_warn("Invalid NAND_ECC_MODE %d\n", ecc->mode);
4234 /* For many systems, the standard OOB write also works for raw */
4235 if (!ecc->read_oob_raw)
4236 ecc->read_oob_raw = ecc->read_oob;
4237 if (!ecc->write_oob_raw)
4238 ecc->write_oob_raw = ecc->write_oob;
4241 * The number of bytes available for a client to place data into
4242 * the out of band area.
4244 ecc->layout->oobavail = 0;
4245 for (i = 0; ecc->layout->oobfree[i].length
4246 && i < ARRAY_SIZE(ecc->layout->oobfree); i++)
4247 ecc->layout->oobavail += ecc->layout->oobfree[i].length;
4248 mtd->oobavail = ecc->layout->oobavail;
4251 * Set the number of read / write steps for one page depending on ECC
4254 ecc->steps = mtd->writesize / ecc->size;
4255 if (ecc->steps * ecc->size != mtd->writesize) {
4256 pr_warn("Invalid ECC parameters\n");
4259 ecc->total = ecc->steps * ecc->bytes;
4261 /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
4262 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
4263 switch (ecc->steps) {
4265 mtd->subpage_sft = 1;
4270 mtd->subpage_sft = 2;
4274 chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
4276 /* Initialize state */
4277 chip->state = FL_READY;
4279 /* Invalidate the pagebuffer reference */
4282 /* Large page NAND with SOFT_ECC should support subpage reads */
4283 if ((ecc->mode == NAND_ECC_SOFT) && (chip->page_shift > 9))
4284 chip->options |= NAND_SUBPAGE_READ;
4286 /* Fill in remaining MTD driver data */
4287 mtd->type = nand_is_slc(chip) ? MTD_NANDFLASH : MTD_MLCNANDFLASH;
4288 mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
4290 mtd->_erase = nand_erase;
4293 mtd->_unpoint = NULL;
4295 mtd->_read = nand_read;
4296 mtd->_write = nand_write;
4297 mtd->_panic_write = panic_nand_write;
4298 mtd->_read_oob = nand_read_oob;
4299 mtd->_write_oob = nand_write_oob;
4300 mtd->_sync = nand_sync;
4302 mtd->_unlock = NULL;
4304 mtd->_suspend = nand_suspend;
4305 mtd->_resume = nand_resume;
4307 mtd->_block_isbad = nand_block_isbad;
4308 mtd->_block_markbad = nand_block_markbad;
4309 mtd->writebufsize = mtd->writesize;
4311 /* propagate ecc info to mtd_info */
4312 mtd->ecclayout = ecc->layout;
4313 mtd->ecc_strength = ecc->strength;
4314 mtd->ecc_step_size = ecc->size;
4316 * Initialize bitflip_threshold to its default prior scan_bbt() call.
4317 * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
4320 if (!mtd->bitflip_threshold)
4321 mtd->bitflip_threshold = mtd->ecc_strength;
4323 /* Check, if we should skip the bad block table scan */
4324 if (chip->options & NAND_SKIP_BBTSCAN)
4327 /* Build bad block table */
4328 return chip->scan_bbt(mtd);
4330 EXPORT_SYMBOL(nand_scan_tail);
4333 * is_module_text_address() isn't exported, and it's mostly a pointless
4334 * test if this is a module _anyway_ -- they'd have to try _really_ hard
4335 * to call us from in-kernel code if the core NAND support is modular.
4338 #define caller_is_module() (1)
4340 #define caller_is_module() \
4341 is_module_text_address((unsigned long)__builtin_return_address(0))
4345 * nand_scan - [NAND Interface] Scan for the NAND device
4346 * @mtd: MTD device structure
4347 * @maxchips: number of chips to scan for
4349 * This fills out all the uninitialized function pointers with the defaults.
4350 * The flash ID is read and the mtd/chip structures are filled with the
4351 * appropriate values. The mtd->owner field must be set to the module of the
4354 int nand_scan(struct mtd_info *mtd, int maxchips)
4358 /* Many callers got this wrong, so check for it for a while... */
4359 if (!mtd->owner && caller_is_module()) {
4360 pr_crit("%s called with NULL mtd->owner!\n", __func__);
4364 ret = nand_scan_ident(mtd, maxchips, NULL);
4366 ret = nand_scan_tail(mtd);
4369 EXPORT_SYMBOL(nand_scan);
4373 * nand_release - [NAND Interface] Free resources held by the NAND device
4374 * @mtd: MTD device structure
4376 void nand_release(struct mtd_info *mtd)
4378 struct nand_chip *chip = mtd->priv;
4380 if (chip->ecc.mode == NAND_ECC_SOFT_BCH)
4381 nand_bch_free((struct nand_bch_control *)chip->ecc.priv);
4383 mtd_device_unregister(mtd);
4385 /* Free bad block table memory */
4387 if (!(chip->options & NAND_OWN_BUFFERS))
4388 kfree(chip->buffers);
4390 /* Free bad block descriptor memory */
4391 if (chip->badblock_pattern && chip->badblock_pattern->options
4392 & NAND_BBT_DYNAMICSTRUCT)
4393 kfree(chip->badblock_pattern);
4395 EXPORT_SYMBOL_GPL(nand_release);
4397 static int __init nand_base_init(void)
4399 led_trigger_register_simple("nand-disk", &nand_led_trigger);
4403 static void __exit nand_base_exit(void)
4405 led_trigger_unregister_simple(nand_led_trigger);
4409 module_init(nand_base_init);
4410 module_exit(nand_base_exit);
4412 MODULE_LICENSE("GPL");
4413 MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>");
4414 MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
4415 MODULE_DESCRIPTION("Generic NAND flash driver code");