]> git.sur5r.net Git - u-boot/blob - drivers/mtd/nand/nand_base.c
imx: Move some header files from arch-mxs to imx-common
[u-boot] / drivers / mtd / nand / nand_base.c
1 /*
2  *  drivers/mtd/nand.c
3  *
4  *  Overview:
5  *   This is the generic MTD driver for NAND flash devices. It should be
6  *   capable of working with almost all NAND chips currently available.
7  *   Basic support for AG-AND chips is provided.
8  *
9  *      Additional technical information is available on
10  *      http://www.linux-mtd.infradead.org/doc/nand.html
11  *
12  *  Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
13  *                2002-2006 Thomas Gleixner (tglx@linutronix.de)
14  *
15  *  Credits:
16  *      David Woodhouse for adding multichip support
17  *
18  *      Aleph One Ltd. and Toby Churchill Ltd. for supporting the
19  *      rework for 2K page size chips
20  *
21  *  TODO:
22  *      Enable cached programming for 2k page size chips
23  *      Check, if mtd->ecctype should be set to MTD_ECC_HW
24  *      if we have HW ecc support.
25  *      The AG-AND chips have nice features for speed improvement,
26  *      which are not supported yet. Read / program 4 pages in one go.
27  *      BBT table is not serialized, has to be fixed
28  *
29  * This program is free software; you can redistribute it and/or modify
30  * it under the terms of the GNU General Public License version 2 as
31  * published by the Free Software Foundation.
32  *
33  */
34
35 #include <common.h>
36
37 #define ENOTSUPP        524     /* Operation is not supported */
38
39 #include <malloc.h>
40 #include <watchdog.h>
41 #include <linux/err.h>
42 #include <linux/compat.h>
43 #include <linux/mtd/mtd.h>
44 #include <linux/mtd/nand.h>
45 #include <linux/mtd/nand_ecc.h>
46 #include <linux/mtd/nand_bch.h>
47
48 #ifdef CONFIG_MTD_PARTITIONS
49 #include <linux/mtd/partitions.h>
50 #endif
51
52 #include <asm/io.h>
53 #include <asm/errno.h>
54
55 /*
56  * CONFIG_SYS_NAND_RESET_CNT is used as a timeout mechanism when resetting
57  * a flash.  NAND flash is initialized prior to interrupts so standard timers
58  * can't be used.  CONFIG_SYS_NAND_RESET_CNT should be set to a value
59  * which is greater than (max NAND reset time / NAND status read time).
60  * A conservative default of 200000 (500 us / 25 ns) is used as a default.
61  */
62 #ifndef CONFIG_SYS_NAND_RESET_CNT
63 #define CONFIG_SYS_NAND_RESET_CNT 200000
64 #endif
65
66 /* Define default oob placement schemes for large and small page devices */
67 static struct nand_ecclayout nand_oob_8 = {
68         .eccbytes = 3,
69         .eccpos = {0, 1, 2},
70         .oobfree = {
71                 {.offset = 3,
72                  .length = 2},
73                 {.offset = 6,
74                  .length = 2} }
75 };
76
77 static struct nand_ecclayout nand_oob_16 = {
78         .eccbytes = 6,
79         .eccpos = {0, 1, 2, 3, 6, 7},
80         .oobfree = {
81                 {.offset = 8,
82                  . length = 8} }
83 };
84
85 static struct nand_ecclayout nand_oob_64 = {
86         .eccbytes = 24,
87         .eccpos = {
88                    40, 41, 42, 43, 44, 45, 46, 47,
89                    48, 49, 50, 51, 52, 53, 54, 55,
90                    56, 57, 58, 59, 60, 61, 62, 63},
91         .oobfree = {
92                 {.offset = 2,
93                  .length = 38} }
94 };
95
96 static struct nand_ecclayout nand_oob_128 = {
97         .eccbytes = 48,
98         .eccpos = {
99                    80, 81, 82, 83, 84, 85, 86, 87,
100                    88, 89, 90, 91, 92, 93, 94, 95,
101                    96, 97, 98, 99, 100, 101, 102, 103,
102                    104, 105, 106, 107, 108, 109, 110, 111,
103                    112, 113, 114, 115, 116, 117, 118, 119,
104                    120, 121, 122, 123, 124, 125, 126, 127},
105         .oobfree = {
106                 {.offset = 2,
107                  .length = 78} }
108 };
109
110 static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd,
111                            int new_state);
112
113 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
114                              struct mtd_oob_ops *ops);
115
116 static int nand_wait(struct mtd_info *mtd, struct nand_chip *this);
117
118 static int check_offs_len(struct mtd_info *mtd,
119                                         loff_t ofs, uint64_t len)
120 {
121         struct nand_chip *chip = mtd->priv;
122         int ret = 0;
123
124         /* Start address must align on block boundary */
125         if (ofs & ((1 << chip->phys_erase_shift) - 1)) {
126                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Unaligned address\n", __func__);
127                 ret = -EINVAL;
128         }
129
130         /* Length must align on block boundary */
131         if (len & ((1 << chip->phys_erase_shift) - 1)) {
132                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Length not block aligned\n",
133                                         __func__);
134                 ret = -EINVAL;
135         }
136
137         /* Do not allow past end of device */
138         if (ofs + len > mtd->size) {
139                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Past end of device\n",
140                                         __func__);
141                 ret = -EINVAL;
142         }
143
144         return ret;
145 }
146
147 /**
148  * nand_release_device - [GENERIC] release chip
149  * @mtd:        MTD device structure
150  *
151  * Deselect, release chip lock and wake up anyone waiting on the device
152  */
153 static void nand_release_device(struct mtd_info *mtd)
154 {
155         struct nand_chip *chip = mtd->priv;
156
157         /* De-select the NAND device */
158         chip->select_chip(mtd, -1);
159 }
160
161 /**
162  * nand_read_byte - [DEFAULT] read one byte from the chip
163  * @mtd:        MTD device structure
164  *
165  * Default read function for 8bit buswith
166  */
167 uint8_t nand_read_byte(struct mtd_info *mtd)
168 {
169         struct nand_chip *chip = mtd->priv;
170         return readb(chip->IO_ADDR_R);
171 }
172
173 /**
174  * nand_read_byte16 - [DEFAULT] read one byte endianess aware from the chip
175  * @mtd:        MTD device structure
176  *
177  * Default read function for 16bit buswith with
178  * endianess conversion
179  */
180 static uint8_t nand_read_byte16(struct mtd_info *mtd)
181 {
182         struct nand_chip *chip = mtd->priv;
183         return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R));
184 }
185
186 /**
187  * nand_read_word - [DEFAULT] read one word from the chip
188  * @mtd:        MTD device structure
189  *
190  * Default read function for 16bit buswith without
191  * endianess conversion
192  */
193 static u16 nand_read_word(struct mtd_info *mtd)
194 {
195         struct nand_chip *chip = mtd->priv;
196         return readw(chip->IO_ADDR_R);
197 }
198
199 /**
200  * nand_select_chip - [DEFAULT] control CE line
201  * @mtd:        MTD device structure
202  * @chipnr:     chipnumber to select, -1 for deselect
203  *
204  * Default select function for 1 chip devices.
205  */
206 static void nand_select_chip(struct mtd_info *mtd, int chipnr)
207 {
208         struct nand_chip *chip = mtd->priv;
209
210         switch (chipnr) {
211         case -1:
212                 chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
213                 break;
214         case 0:
215                 break;
216
217         default:
218                 BUG();
219         }
220 }
221
222 /**
223  * nand_write_buf - [DEFAULT] write buffer to chip
224  * @mtd:        MTD device structure
225  * @buf:        data buffer
226  * @len:        number of bytes to write
227  *
228  * Default write function for 8bit buswith
229  */
230 void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
231 {
232         int i;
233         struct nand_chip *chip = mtd->priv;
234
235         for (i = 0; i < len; i++)
236                 writeb(buf[i], chip->IO_ADDR_W);
237 }
238
239 /**
240  * nand_read_buf - [DEFAULT] read chip data into buffer
241  * @mtd:        MTD device structure
242  * @buf:        buffer to store date
243  * @len:        number of bytes to read
244  *
245  * Default read function for 8bit buswith
246  */
247 void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
248 {
249         int i;
250         struct nand_chip *chip = mtd->priv;
251
252         for (i = 0; i < len; i++)
253                 buf[i] = readb(chip->IO_ADDR_R);
254 }
255
256 /**
257  * nand_verify_buf - [DEFAULT] Verify chip data against buffer
258  * @mtd:        MTD device structure
259  * @buf:        buffer containing the data to compare
260  * @len:        number of bytes to compare
261  *
262  * Default verify function for 8bit buswith
263  */
264 static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
265 {
266         int i;
267         struct nand_chip *chip = mtd->priv;
268
269         for (i = 0; i < len; i++)
270                 if (buf[i] != readb(chip->IO_ADDR_R))
271                         return -EFAULT;
272         return 0;
273 }
274
275 /**
276  * nand_write_buf16 - [DEFAULT] write buffer to chip
277  * @mtd:        MTD device structure
278  * @buf:        data buffer
279  * @len:        number of bytes to write
280  *
281  * Default write function for 16bit buswith
282  */
283 void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
284 {
285         int i;
286         struct nand_chip *chip = mtd->priv;
287         u16 *p = (u16 *) buf;
288         len >>= 1;
289
290         for (i = 0; i < len; i++)
291                 writew(p[i], chip->IO_ADDR_W);
292
293 }
294
295 /**
296  * nand_read_buf16 - [DEFAULT] read chip data into buffer
297  * @mtd:        MTD device structure
298  * @buf:        buffer to store date
299  * @len:        number of bytes to read
300  *
301  * Default read function for 16bit buswith
302  */
303 void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
304 {
305         int i;
306         struct nand_chip *chip = mtd->priv;
307         u16 *p = (u16 *) buf;
308         len >>= 1;
309
310         for (i = 0; i < len; i++)
311                 p[i] = readw(chip->IO_ADDR_R);
312 }
313
314 /**
315  * nand_verify_buf16 - [DEFAULT] Verify chip data against buffer
316  * @mtd:        MTD device structure
317  * @buf:        buffer containing the data to compare
318  * @len:        number of bytes to compare
319  *
320  * Default verify function for 16bit buswith
321  */
322 static int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
323 {
324         int i;
325         struct nand_chip *chip = mtd->priv;
326         u16 *p = (u16 *) buf;
327         len >>= 1;
328
329         for (i = 0; i < len; i++)
330                 if (p[i] != readw(chip->IO_ADDR_R))
331                         return -EFAULT;
332
333         return 0;
334 }
335
336 /**
337  * nand_block_bad - [DEFAULT] Read bad block marker from the chip
338  * @mtd:        MTD device structure
339  * @ofs:        offset from device start
340  * @getchip:    0, if the chip is already selected
341  *
342  * Check, if the block is bad.
343  */
344 static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
345 {
346         int page, chipnr, res = 0;
347         struct nand_chip *chip = mtd->priv;
348         u16 bad;
349
350         if (chip->options & NAND_BBT_SCANLASTPAGE)
351                 ofs += mtd->erasesize - mtd->writesize;
352
353         page = (int)(ofs >> chip->page_shift) & chip->pagemask;
354
355         if (getchip) {
356                 chipnr = (int)(ofs >> chip->chip_shift);
357
358                 nand_get_device(chip, mtd, FL_READING);
359
360                 /* Select the NAND device */
361                 chip->select_chip(mtd, chipnr);
362         }
363
364         if (chip->options & NAND_BUSWIDTH_16) {
365                 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos & 0xFE,
366                               page);
367                 bad = cpu_to_le16(chip->read_word(mtd));
368                 if (chip->badblockpos & 0x1)
369                         bad >>= 8;
370                 else
371                         bad &= 0xFF;
372         } else {
373                 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, page);
374                 bad = chip->read_byte(mtd);
375         }
376
377         if (likely(chip->badblockbits == 8))
378                 res = bad != 0xFF;
379         else
380                 res = hweight8(bad) < chip->badblockbits;
381
382         if (getchip)
383                 nand_release_device(mtd);
384
385         return res;
386 }
387
388 /**
389  * nand_default_block_markbad - [DEFAULT] mark a block bad
390  * @mtd:        MTD device structure
391  * @ofs:        offset from device start
392  *
393  * This is the default implementation, which can be overridden by
394  * a hardware specific driver.
395 */
396 static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
397 {
398         struct nand_chip *chip = mtd->priv;
399         uint8_t buf[2] = { 0, 0 };
400         int block, ret, i = 0;
401
402         if (chip->options & NAND_BBT_SCANLASTPAGE)
403                 ofs += mtd->erasesize - mtd->writesize;
404
405         /* Get block number */
406         block = (int)(ofs >> chip->bbt_erase_shift);
407         if (chip->bbt)
408                 chip->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
409
410         /* Do we have a flash based bad block table ? */
411         if (chip->options & NAND_USE_FLASH_BBT)
412                 ret = nand_update_bbt(mtd, ofs);
413         else {
414                 nand_get_device(chip, mtd, FL_WRITING);
415
416                 /* Write to first two pages and to byte 1 and 6 if necessary.
417                  * If we write to more than one location, the first error
418                  * encountered quits the procedure. We write two bytes per
419                  * location, so we dont have to mess with 16 bit access.
420                  */
421                 do {
422                         chip->ops.len = chip->ops.ooblen = 2;
423                         chip->ops.datbuf = NULL;
424                         chip->ops.oobbuf = buf;
425                         chip->ops.ooboffs = chip->badblockpos & ~0x01;
426
427                         ret = nand_do_write_oob(mtd, ofs, &chip->ops);
428
429                         if (!ret && (chip->options & NAND_BBT_SCANBYTE1AND6)) {
430                                 chip->ops.ooboffs = NAND_SMALL_BADBLOCK_POS
431                                         & ~0x01;
432                                 ret = nand_do_write_oob(mtd, ofs, &chip->ops);
433                         }
434                         i++;
435                         ofs += mtd->writesize;
436                 } while (!ret && (chip->options & NAND_BBT_SCAN2NDPAGE) &&
437                                 i < 2);
438
439                 nand_release_device(mtd);
440         }
441         if (!ret)
442                 mtd->ecc_stats.badblocks++;
443
444         return ret;
445 }
446
447 /**
448  * nand_check_wp - [GENERIC] check if the chip is write protected
449  * @mtd:        MTD device structure
450  * Check, if the device is write protected
451  *
452  * The function expects, that the device is already selected
453  */
454 static int nand_check_wp(struct mtd_info *mtd)
455 {
456         struct nand_chip *chip = mtd->priv;
457
458         /* broken xD cards report WP despite being writable */
459         if (chip->options & NAND_BROKEN_XD)
460                 return 0;
461
462         /* Check the WP bit */
463         chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
464         return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
465 }
466
467 /**
468  * nand_block_checkbad - [GENERIC] Check if a block is marked bad
469  * @mtd:        MTD device structure
470  * @ofs:        offset from device start
471  * @getchip:    0, if the chip is already selected
472  * @allowbbt:   1, if its allowed to access the bbt area
473  *
474  * Check, if the block is bad. Either by reading the bad block table or
475  * calling of the scan function.
476  */
477 static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
478                                int allowbbt)
479 {
480         struct nand_chip *chip = mtd->priv;
481
482         if (!(chip->options & NAND_BBT_SCANNED)) {
483                 chip->options |= NAND_BBT_SCANNED;
484                 chip->scan_bbt(mtd);
485         }
486
487         if (!chip->bbt)
488                 return chip->block_bad(mtd, ofs, getchip);
489
490         /* Return info from the table */
491         return nand_isbad_bbt(mtd, ofs, allowbbt);
492 }
493
494 /*
495  * Wait for the ready pin, after a command
496  * The timeout is catched later.
497  */
498 void nand_wait_ready(struct mtd_info *mtd)
499 {
500         struct nand_chip *chip = mtd->priv;
501         u32 timeo = (CONFIG_SYS_HZ * 20) / 1000;
502         u32 time_start;
503
504         time_start = get_timer(0);
505
506         /* wait until command is processed or timeout occures */
507         while (get_timer(time_start) < timeo) {
508                 if (chip->dev_ready)
509                         if (chip->dev_ready(mtd))
510                                 break;
511         }
512 }
513
514 /**
515  * nand_command - [DEFAULT] Send command to NAND device
516  * @mtd:        MTD device structure
517  * @command:    the command to be sent
518  * @column:     the column address for this command, -1 if none
519  * @page_addr:  the page address for this command, -1 if none
520  *
521  * Send command to NAND device. This function is used for small page
522  * devices (256/512 Bytes per page)
523  */
524 static void nand_command(struct mtd_info *mtd, unsigned int command,
525                          int column, int page_addr)
526 {
527         register struct nand_chip *chip = mtd->priv;
528         int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
529         uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
530
531         /*
532          * Write out the command to the device.
533          */
534         if (command == NAND_CMD_SEQIN) {
535                 int readcmd;
536
537                 if (column >= mtd->writesize) {
538                         /* OOB area */
539                         column -= mtd->writesize;
540                         readcmd = NAND_CMD_READOOB;
541                 } else if (column < 256) {
542                         /* First 256 bytes --> READ0 */
543                         readcmd = NAND_CMD_READ0;
544                 } else {
545                         column -= 256;
546                         readcmd = NAND_CMD_READ1;
547                 }
548                 chip->cmd_ctrl(mtd, readcmd, ctrl);
549                 ctrl &= ~NAND_CTRL_CHANGE;
550         }
551         chip->cmd_ctrl(mtd, command, ctrl);
552
553         /*
554          * Address cycle, when necessary
555          */
556         ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
557         /* Serially input address */
558         if (column != -1) {
559                 /* Adjust columns for 16 bit buswidth */
560                 if (chip->options & NAND_BUSWIDTH_16)
561                         column >>= 1;
562                 chip->cmd_ctrl(mtd, column, ctrl);
563                 ctrl &= ~NAND_CTRL_CHANGE;
564         }
565         if (page_addr != -1) {
566                 chip->cmd_ctrl(mtd, page_addr, ctrl);
567                 ctrl &= ~NAND_CTRL_CHANGE;
568                 chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
569                 /* One more address cycle for devices > 32MiB */
570                 if (chip->chipsize > (32 << 20))
571                         chip->cmd_ctrl(mtd, page_addr >> 16, ctrl);
572         }
573         chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
574
575         /*
576          * program and erase have their own busy handlers
577          * status and sequential in needs no delay
578          */
579         switch (command) {
580
581         case NAND_CMD_PAGEPROG:
582         case NAND_CMD_ERASE1:
583         case NAND_CMD_ERASE2:
584         case NAND_CMD_SEQIN:
585         case NAND_CMD_STATUS:
586                 return;
587
588         case NAND_CMD_RESET:
589                 if (chip->dev_ready)
590                         break;
591                 udelay(chip->chip_delay);
592                 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
593                                NAND_CTRL_CLE | NAND_CTRL_CHANGE);
594                 chip->cmd_ctrl(mtd,
595                                NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
596                 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
597                         (rst_sts_cnt--));
598                 return;
599
600                 /* This applies to read commands */
601         default:
602                 /*
603                  * If we don't have access to the busy pin, we apply the given
604                  * command delay
605                  */
606                 if (!chip->dev_ready) {
607                         udelay(chip->chip_delay);
608                         return;
609                 }
610         }
611         /* Apply this short delay always to ensure that we do wait tWB in
612          * any case on any machine. */
613         ndelay(100);
614
615         nand_wait_ready(mtd);
616 }
617
618 /**
619  * nand_command_lp - [DEFAULT] Send command to NAND large page device
620  * @mtd:        MTD device structure
621  * @command:    the command to be sent
622  * @column:     the column address for this command, -1 if none
623  * @page_addr:  the page address for this command, -1 if none
624  *
625  * Send command to NAND device. This is the version for the new large page
626  * devices We dont have the separate regions as we have in the small page
627  * devices.  We must emulate NAND_CMD_READOOB to keep the code compatible.
628  */
629 static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
630                             int column, int page_addr)
631 {
632         register struct nand_chip *chip = mtd->priv;
633         uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
634
635         /* Emulate NAND_CMD_READOOB */
636         if (command == NAND_CMD_READOOB) {
637                 column += mtd->writesize;
638                 command = NAND_CMD_READ0;
639         }
640
641         /* Command latch cycle */
642         chip->cmd_ctrl(mtd, command & 0xff,
643                        NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
644
645         if (column != -1 || page_addr != -1) {
646                 int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
647
648                 /* Serially input address */
649                 if (column != -1) {
650                         /* Adjust columns for 16 bit buswidth */
651                         if (chip->options & NAND_BUSWIDTH_16)
652                                 column >>= 1;
653                         chip->cmd_ctrl(mtd, column, ctrl);
654                         ctrl &= ~NAND_CTRL_CHANGE;
655                         chip->cmd_ctrl(mtd, column >> 8, ctrl);
656                 }
657                 if (page_addr != -1) {
658                         chip->cmd_ctrl(mtd, page_addr, ctrl);
659                         chip->cmd_ctrl(mtd, page_addr >> 8,
660                                        NAND_NCE | NAND_ALE);
661                         /* One more address cycle for devices > 128MiB */
662                         if (chip->chipsize > (128 << 20))
663                                 chip->cmd_ctrl(mtd, page_addr >> 16,
664                                                NAND_NCE | NAND_ALE);
665                 }
666         }
667         chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
668
669         /*
670          * program and erase have their own busy handlers
671          * status, sequential in, and deplete1 need no delay
672          */
673         switch (command) {
674
675         case NAND_CMD_CACHEDPROG:
676         case NAND_CMD_PAGEPROG:
677         case NAND_CMD_ERASE1:
678         case NAND_CMD_ERASE2:
679         case NAND_CMD_SEQIN:
680         case NAND_CMD_RNDIN:
681         case NAND_CMD_STATUS:
682         case NAND_CMD_DEPLETE1:
683                 return;
684
685                 /*
686                  * read error status commands require only a short delay
687                  */
688         case NAND_CMD_STATUS_ERROR:
689         case NAND_CMD_STATUS_ERROR0:
690         case NAND_CMD_STATUS_ERROR1:
691         case NAND_CMD_STATUS_ERROR2:
692         case NAND_CMD_STATUS_ERROR3:
693                 udelay(chip->chip_delay);
694                 return;
695
696         case NAND_CMD_RESET:
697                 if (chip->dev_ready)
698                         break;
699                 udelay(chip->chip_delay);
700                 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
701                                NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
702                 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
703                                NAND_NCE | NAND_CTRL_CHANGE);
704                 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
705                         (rst_sts_cnt--));
706                 return;
707
708         case NAND_CMD_RNDOUT:
709                 /* No ready / busy check necessary */
710                 chip->cmd_ctrl(mtd, NAND_CMD_RNDOUTSTART,
711                                NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
712                 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
713                                NAND_NCE | NAND_CTRL_CHANGE);
714                 return;
715
716         case NAND_CMD_READ0:
717                 chip->cmd_ctrl(mtd, NAND_CMD_READSTART,
718                                NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
719                 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
720                                NAND_NCE | NAND_CTRL_CHANGE);
721
722                 /* This applies to read commands */
723         default:
724                 /*
725                  * If we don't have access to the busy pin, we apply the given
726                  * command delay
727                  */
728                 if (!chip->dev_ready) {
729                         udelay(chip->chip_delay);
730                         return;
731                 }
732         }
733
734         /* Apply this short delay always to ensure that we do wait tWB in
735          * any case on any machine. */
736         ndelay(100);
737
738         nand_wait_ready(mtd);
739 }
740
741 /**
742  * nand_get_device - [GENERIC] Get chip for selected access
743  * @chip:       the nand chip descriptor
744  * @mtd:        MTD device structure
745  * @new_state:  the state which is requested
746  *
747  * Get the device and lock it for exclusive access
748  */
749 static int
750 nand_get_device(struct nand_chip *chip, struct mtd_info *mtd, int new_state)
751 {
752         chip->state = new_state;
753         return 0;
754 }
755
756 /**
757  * nand_wait - [DEFAULT]  wait until the command is done
758  * @mtd:        MTD device structure
759  * @chip:       NAND chip structure
760  *
761  * Wait for command done. This applies to erase and program only
762  * Erase can take up to 400ms and program up to 20ms according to
763  * general NAND and SmartMedia specs
764  */
765 static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
766 {
767         unsigned long   timeo;
768         int state = chip->state;
769         u32 time_start;
770
771         if (state == FL_ERASING)
772                 timeo = (CONFIG_SYS_HZ * 400) / 1000;
773         else
774                 timeo = (CONFIG_SYS_HZ * 20) / 1000;
775
776         if ((state == FL_ERASING) && (chip->options & NAND_IS_AND))
777                 chip->cmdfunc(mtd, NAND_CMD_STATUS_MULTI, -1, -1);
778         else
779                 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
780
781         time_start = get_timer(0);
782
783         while (1) {
784                 if (get_timer(time_start) > timeo) {
785                         printf("Timeout!");
786                         return 0x01;
787                 }
788
789                 if (chip->dev_ready) {
790                         if (chip->dev_ready(mtd))
791                                 break;
792                 } else {
793                         if (chip->read_byte(mtd) & NAND_STATUS_READY)
794                                 break;
795                 }
796         }
797 #ifdef PPCHAMELON_NAND_TIMER_HACK
798         time_start = get_timer(0);
799         while (get_timer(time_start) < 10)
800                 ;
801 #endif /*  PPCHAMELON_NAND_TIMER_HACK */
802
803         return (int)chip->read_byte(mtd);
804 }
805
806 /**
807  * nand_read_page_raw - [Intern] read raw page data without ecc
808  * @mtd:        mtd info structure
809  * @chip:       nand chip info structure
810  * @buf:        buffer to store read data
811  * @page:       page number to read
812  *
813  * Not for syndrome calculating ecc controllers, which use a special oob layout
814  */
815 static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
816                               uint8_t *buf, int page)
817 {
818         chip->read_buf(mtd, buf, mtd->writesize);
819         chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
820         return 0;
821 }
822
823 /**
824  * nand_read_page_raw_syndrome - [Intern] read raw page data without ecc
825  * @mtd:        mtd info structure
826  * @chip:       nand chip info structure
827  * @buf:        buffer to store read data
828  * @page:       page number to read
829  *
830  * We need a special oob layout and handling even when OOB isn't used.
831  */
832 static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
833                                         struct nand_chip *chip,
834                                         uint8_t *buf, int page)
835 {
836         int eccsize = chip->ecc.size;
837         int eccbytes = chip->ecc.bytes;
838         uint8_t *oob = chip->oob_poi;
839         int steps, size;
840
841         for (steps = chip->ecc.steps; steps > 0; steps--) {
842                 chip->read_buf(mtd, buf, eccsize);
843                 buf += eccsize;
844
845                 if (chip->ecc.prepad) {
846                         chip->read_buf(mtd, oob, chip->ecc.prepad);
847                         oob += chip->ecc.prepad;
848                 }
849
850                 chip->read_buf(mtd, oob, eccbytes);
851                 oob += eccbytes;
852
853                 if (chip->ecc.postpad) {
854                         chip->read_buf(mtd, oob, chip->ecc.postpad);
855                         oob += chip->ecc.postpad;
856                 }
857         }
858
859         size = mtd->oobsize - (oob - chip->oob_poi);
860         if (size)
861                 chip->read_buf(mtd, oob, size);
862
863         return 0;
864 }
865
866 /**
867  * nand_read_page_swecc - [REPLACABLE] software ecc based page read function
868  * @mtd:        mtd info structure
869  * @chip:       nand chip info structure
870  * @buf:        buffer to store read data
871  * @page:       page number to read
872  */
873 static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
874                                 uint8_t *buf, int page)
875 {
876         int i, eccsize = chip->ecc.size;
877         int eccbytes = chip->ecc.bytes;
878         int eccsteps = chip->ecc.steps;
879         uint8_t *p = buf;
880         uint8_t *ecc_calc = chip->buffers->ecccalc;
881         uint8_t *ecc_code = chip->buffers->ecccode;
882         uint32_t *eccpos = chip->ecc.layout->eccpos;
883
884         chip->ecc.read_page_raw(mtd, chip, buf, page);
885
886         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
887                 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
888
889         for (i = 0; i < chip->ecc.total; i++)
890                 ecc_code[i] = chip->oob_poi[eccpos[i]];
891
892         eccsteps = chip->ecc.steps;
893         p = buf;
894
895         for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
896                 int stat;
897
898                 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
899                 if (stat < 0)
900                         mtd->ecc_stats.failed++;
901                 else
902                         mtd->ecc_stats.corrected += stat;
903         }
904         return 0;
905 }
906
907 /**
908  * nand_read_subpage - [REPLACABLE] software ecc based sub-page read function
909  * @mtd:        mtd info structure
910  * @chip:       nand chip info structure
911  * @data_offs:  offset of requested data within the page
912  * @readlen:    data length
913  * @bufpoi:     buffer to store read data
914  */
915 static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
916                         uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi)
917 {
918         int start_step, end_step, num_steps;
919         uint32_t *eccpos = chip->ecc.layout->eccpos;
920         uint8_t *p;
921         int data_col_addr, i, gaps = 0;
922         int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
923         int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
924         int index = 0;
925
926         /* Column address wihin the page aligned to ECC size (256bytes). */
927         start_step = data_offs / chip->ecc.size;
928         end_step = (data_offs + readlen - 1) / chip->ecc.size;
929         num_steps = end_step - start_step + 1;
930
931         /* Data size aligned to ECC ecc.size*/
932         datafrag_len = num_steps * chip->ecc.size;
933         eccfrag_len = num_steps * chip->ecc.bytes;
934
935         data_col_addr = start_step * chip->ecc.size;
936         /* If we read not a page aligned data */
937         if (data_col_addr != 0)
938                 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
939
940         p = bufpoi + data_col_addr;
941         chip->read_buf(mtd, p, datafrag_len);
942
943         /* Calculate  ECC */
944         for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
945                 chip->ecc.calculate(mtd, p, &chip->buffers->ecccalc[i]);
946
947         /* The performance is faster if to position offsets
948            according to ecc.pos. Let make sure here that
949            there are no gaps in ecc positions */
950         for (i = 0; i < eccfrag_len - 1; i++) {
951                 if (eccpos[i + start_step * chip->ecc.bytes] + 1 !=
952                         eccpos[i + start_step * chip->ecc.bytes + 1]) {
953                         gaps = 1;
954                         break;
955                 }
956         }
957         if (gaps) {
958                 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
959                 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
960         } else {
961                 /* send the command to read the particular ecc bytes */
962                 /* take care about buswidth alignment in read_buf */
963                 index = start_step * chip->ecc.bytes;
964
965                 aligned_pos = eccpos[index] & ~(busw - 1);
966                 aligned_len = eccfrag_len;
967                 if (eccpos[index] & (busw - 1))
968                         aligned_len++;
969                 if (eccpos[index + (num_steps * chip->ecc.bytes)] & (busw - 1))
970                         aligned_len++;
971
972                 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
973                                         mtd->writesize + aligned_pos, -1);
974                 chip->read_buf(mtd, &chip->oob_poi[aligned_pos], aligned_len);
975         }
976
977         for (i = 0; i < eccfrag_len; i++)
978                 chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
979
980         p = bufpoi + data_col_addr;
981         for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
982                 int stat;
983
984                 stat = chip->ecc.correct(mtd, p,
985                         &chip->buffers->ecccode[i], &chip->buffers->ecccalc[i]);
986                 if (stat < 0)
987                         mtd->ecc_stats.failed++;
988                 else
989                         mtd->ecc_stats.corrected += stat;
990         }
991         return 0;
992 }
993
994 /**
995  * nand_read_page_hwecc - [REPLACABLE] hardware ecc based page read function
996  * @mtd:        mtd info structure
997  * @chip:       nand chip info structure
998  * @buf:        buffer to store read data
999  * @page:       page number to read
1000  *
1001  * Not for syndrome calculating ecc controllers which need a special oob layout
1002  */
1003 static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1004                                 uint8_t *buf, int page)
1005 {
1006         int i, eccsize = chip->ecc.size;
1007         int eccbytes = chip->ecc.bytes;
1008         int eccsteps = chip->ecc.steps;
1009         uint8_t *p = buf;
1010         uint8_t *ecc_calc = chip->buffers->ecccalc;
1011         uint8_t *ecc_code = chip->buffers->ecccode;
1012         uint32_t *eccpos = chip->ecc.layout->eccpos;
1013
1014         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1015                 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1016                 chip->read_buf(mtd, p, eccsize);
1017                 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1018         }
1019         chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1020
1021         for (i = 0; i < chip->ecc.total; i++)
1022                 ecc_code[i] = chip->oob_poi[eccpos[i]];
1023
1024         eccsteps = chip->ecc.steps;
1025         p = buf;
1026
1027         for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1028                 int stat;
1029
1030                 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1031                 if (stat < 0)
1032                         mtd->ecc_stats.failed++;
1033                 else
1034                         mtd->ecc_stats.corrected += stat;
1035         }
1036         return 0;
1037 }
1038
1039 /**
1040  * nand_read_page_hwecc_oob_first - [REPLACABLE] hw ecc, read oob first
1041  * @mtd:        mtd info structure
1042  * @chip:       nand chip info structure
1043  * @buf:        buffer to store read data
1044  * @page:       page number to read
1045  *
1046  * Hardware ECC for large page chips, require OOB to be read first.
1047  * For this ECC mode, the write_page method is re-used from ECC_HW.
1048  * These methods read/write ECC from the OOB area, unlike the
1049  * ECC_HW_SYNDROME support with multiple ECC steps, follows the
1050  * "infix ECC" scheme and reads/writes ECC from the data area, by
1051  * overwriting the NAND manufacturer bad block markings.
1052  */
1053 static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
1054         struct nand_chip *chip, uint8_t *buf, int page)
1055 {
1056         int i, eccsize = chip->ecc.size;
1057         int eccbytes = chip->ecc.bytes;
1058         int eccsteps = chip->ecc.steps;
1059         uint8_t *p = buf;
1060         uint8_t *ecc_code = chip->buffers->ecccode;
1061         uint32_t *eccpos = chip->ecc.layout->eccpos;
1062         uint8_t *ecc_calc = chip->buffers->ecccalc;
1063
1064         /* Read the OOB area first */
1065         chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1066         chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1067         chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1068
1069         for (i = 0; i < chip->ecc.total; i++)
1070                 ecc_code[i] = chip->oob_poi[eccpos[i]];
1071
1072         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1073                 int stat;
1074
1075                 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1076                 chip->read_buf(mtd, p, eccsize);
1077                 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1078
1079                 stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
1080                 if (stat < 0)
1081                         mtd->ecc_stats.failed++;
1082                 else
1083                         mtd->ecc_stats.corrected += stat;
1084         }
1085         return 0;
1086 }
1087
1088 /**
1089  * nand_read_page_syndrome - [REPLACABLE] hardware ecc syndrom based page read
1090  * @mtd:        mtd info structure
1091  * @chip:       nand chip info structure
1092  * @buf:        buffer to store read data
1093  * @page:       page number to read
1094  *
1095  * The hw generator calculates the error syndrome automatically. Therefor
1096  * we need a special oob layout and handling.
1097  */
1098 static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1099                                    uint8_t *buf, int page)
1100 {
1101         int i, eccsize = chip->ecc.size;
1102         int eccbytes = chip->ecc.bytes;
1103         int eccsteps = chip->ecc.steps;
1104         uint8_t *p = buf;
1105         uint8_t *oob = chip->oob_poi;
1106
1107         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1108                 int stat;
1109
1110                 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1111                 chip->read_buf(mtd, p, eccsize);
1112
1113                 if (chip->ecc.prepad) {
1114                         chip->read_buf(mtd, oob, chip->ecc.prepad);
1115                         oob += chip->ecc.prepad;
1116                 }
1117
1118                 chip->ecc.hwctl(mtd, NAND_ECC_READSYN);
1119                 chip->read_buf(mtd, oob, eccbytes);
1120                 stat = chip->ecc.correct(mtd, p, oob, NULL);
1121
1122                 if (stat < 0)
1123                         mtd->ecc_stats.failed++;
1124                 else
1125                         mtd->ecc_stats.corrected += stat;
1126
1127                 oob += eccbytes;
1128
1129                 if (chip->ecc.postpad) {
1130                         chip->read_buf(mtd, oob, chip->ecc.postpad);
1131                         oob += chip->ecc.postpad;
1132                 }
1133         }
1134
1135         /* Calculate remaining oob bytes */
1136         i = mtd->oobsize - (oob - chip->oob_poi);
1137         if (i)
1138                 chip->read_buf(mtd, oob, i);
1139
1140         return 0;
1141 }
1142
1143 /**
1144  * nand_transfer_oob - [Internal] Transfer oob to client buffer
1145  * @chip:       nand chip structure
1146  * @oob:        oob destination address
1147  * @ops:        oob ops structure
1148  * @len:        size of oob to transfer
1149  */
1150 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
1151                                   struct mtd_oob_ops *ops, size_t len)
1152 {
1153         switch (ops->mode) {
1154
1155         case MTD_OOB_PLACE:
1156         case MTD_OOB_RAW:
1157                 memcpy(oob, chip->oob_poi + ops->ooboffs, len);
1158                 return oob + len;
1159
1160         case MTD_OOB_AUTO: {
1161                 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1162                 uint32_t boffs = 0, roffs = ops->ooboffs;
1163                 size_t bytes = 0;
1164
1165                 for (; free->length && len; free++, len -= bytes) {
1166                         /* Read request not from offset 0 ? */
1167                         if (unlikely(roffs)) {
1168                                 if (roffs >= free->length) {
1169                                         roffs -= free->length;
1170                                         continue;
1171                                 }
1172                                 boffs = free->offset + roffs;
1173                                 bytes = min_t(size_t, len,
1174                                               (free->length - roffs));
1175                                 roffs = 0;
1176                         } else {
1177                                 bytes = min_t(size_t, len, free->length);
1178                                 boffs = free->offset;
1179                         }
1180                         memcpy(oob, chip->oob_poi + boffs, bytes);
1181                         oob += bytes;
1182                 }
1183                 return oob;
1184         }
1185         default:
1186                 BUG();
1187         }
1188         return NULL;
1189 }
1190
1191 /**
1192  * nand_do_read_ops - [Internal] Read data with ECC
1193  *
1194  * @mtd:        MTD device structure
1195  * @from:       offset to read from
1196  * @ops:        oob ops structure
1197  *
1198  * Internal function. Called with chip held.
1199  */
1200 static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
1201                             struct mtd_oob_ops *ops)
1202 {
1203         int chipnr, page, realpage, col, bytes, aligned;
1204         struct nand_chip *chip = mtd->priv;
1205         struct mtd_ecc_stats stats;
1206         int blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
1207         int sndcmd = 1;
1208         int ret = 0;
1209         uint32_t readlen = ops->len;
1210         uint32_t oobreadlen = ops->ooblen;
1211         uint32_t max_oobsize = ops->mode == MTD_OOB_AUTO ?
1212                 mtd->oobavail : mtd->oobsize;
1213
1214         uint8_t *bufpoi, *oob, *buf;
1215
1216         stats = mtd->ecc_stats;
1217
1218         chipnr = (int)(from >> chip->chip_shift);
1219         chip->select_chip(mtd, chipnr);
1220
1221         realpage = (int)(from >> chip->page_shift);
1222         page = realpage & chip->pagemask;
1223
1224         col = (int)(from & (mtd->writesize - 1));
1225
1226         buf = ops->datbuf;
1227         oob = ops->oobbuf;
1228
1229         while (1) {
1230                 WATCHDOG_RESET();
1231
1232                 bytes = min(mtd->writesize - col, readlen);
1233                 aligned = (bytes == mtd->writesize);
1234
1235                 /* Is the current page in the buffer ? */
1236                 if (realpage != chip->pagebuf || oob) {
1237                         bufpoi = aligned ? buf : chip->buffers->databuf;
1238
1239                         if (likely(sndcmd)) {
1240                                 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1241                                 sndcmd = 0;
1242                         }
1243
1244                         /* Now read the page into the buffer */
1245                         if (unlikely(ops->mode == MTD_OOB_RAW))
1246                                 ret = chip->ecc.read_page_raw(mtd, chip,
1247                                                               bufpoi, page);
1248                         else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
1249                             !oob)
1250                                 ret = chip->ecc.read_subpage(mtd, chip,
1251                                                         col, bytes, bufpoi);
1252                         else
1253                                 ret = chip->ecc.read_page(mtd, chip, bufpoi,
1254                                                           page);
1255                         if (ret < 0)
1256                                 break;
1257
1258                         /* Transfer not aligned data */
1259                         if (!aligned) {
1260                                 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
1261                                     !(mtd->ecc_stats.failed - stats.failed))
1262                                         chip->pagebuf = realpage;
1263                                 memcpy(buf, chip->buffers->databuf + col, bytes);
1264                         }
1265
1266                         buf += bytes;
1267
1268                         if (unlikely(oob)) {
1269
1270                                 int toread = min(oobreadlen, max_oobsize);
1271
1272                                 if (toread) {
1273                                         oob = nand_transfer_oob(chip,
1274                                                 oob, ops, toread);
1275                                         oobreadlen -= toread;
1276                                 }
1277                         }
1278
1279                         if (!(chip->options & NAND_NO_READRDY)) {
1280                                 /*
1281                                  * Apply delay or wait for ready/busy pin. Do
1282                                  * this before the AUTOINCR check, so no
1283                                  * problems arise if a chip which does auto
1284                                  * increment is marked as NOAUTOINCR by the
1285                                  * board driver.
1286                                  */
1287                                 if (!chip->dev_ready)
1288                                         udelay(chip->chip_delay);
1289                                 else
1290                                         nand_wait_ready(mtd);
1291                         }
1292                 } else {
1293                         memcpy(buf, chip->buffers->databuf + col, bytes);
1294                         buf += bytes;
1295                 }
1296
1297                 readlen -= bytes;
1298
1299                 if (!readlen)
1300                         break;
1301
1302                 /* For subsequent reads align to page boundary. */
1303                 col = 0;
1304                 /* Increment page address */
1305                 realpage++;
1306
1307                 page = realpage & chip->pagemask;
1308                 /* Check, if we cross a chip boundary */
1309                 if (!page) {
1310                         chipnr++;
1311                         chip->select_chip(mtd, -1);
1312                         chip->select_chip(mtd, chipnr);
1313                 }
1314
1315                 /* Check, if the chip supports auto page increment
1316                  * or if we have hit a block boundary.
1317                  */
1318                 if (!NAND_CANAUTOINCR(chip) || !(page & blkcheck))
1319                         sndcmd = 1;
1320         }
1321
1322         ops->retlen = ops->len - (size_t) readlen;
1323         if (oob)
1324                 ops->oobretlen = ops->ooblen - oobreadlen;
1325
1326         if (ret)
1327                 return ret;
1328
1329         if (mtd->ecc_stats.failed - stats.failed)
1330                 return -EBADMSG;
1331
1332         return  mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
1333 }
1334
1335 /**
1336  * nand_read - [MTD Interface] MTD compatibility function for nand_do_read_ecc
1337  * @mtd:        MTD device structure
1338  * @from:       offset to read from
1339  * @len:        number of bytes to read
1340  * @retlen:     pointer to variable to store the number of read bytes
1341  * @buf:        the databuffer to put data
1342  *
1343  * Get hold of the chip and call nand_do_read
1344  */
1345 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
1346                      size_t *retlen, uint8_t *buf)
1347 {
1348         struct nand_chip *chip = mtd->priv;
1349         int ret;
1350
1351         /* Do not allow reads past end of device */
1352         if ((from + len) > mtd->size)
1353                 return -EINVAL;
1354         if (!len)
1355                 return 0;
1356
1357         nand_get_device(chip, mtd, FL_READING);
1358
1359         chip->ops.len = len;
1360         chip->ops.datbuf = buf;
1361         chip->ops.oobbuf = NULL;
1362
1363         ret = nand_do_read_ops(mtd, from, &chip->ops);
1364
1365         *retlen = chip->ops.retlen;
1366
1367         nand_release_device(mtd);
1368
1369         return ret;
1370 }
1371
1372 /**
1373  * nand_read_oob_std - [REPLACABLE] the most common OOB data read function
1374  * @mtd:        mtd info structure
1375  * @chip:       nand chip info structure
1376  * @page:       page number to read
1377  * @sndcmd:     flag whether to issue read command or not
1378  */
1379 static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1380                              int page, int sndcmd)
1381 {
1382         if (sndcmd) {
1383                 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1384                 sndcmd = 0;
1385         }
1386         chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1387         return sndcmd;
1388 }
1389
1390 /**
1391  * nand_read_oob_syndrome - [REPLACABLE] OOB data read function for HW ECC
1392  *                          with syndromes
1393  * @mtd:        mtd info structure
1394  * @chip:       nand chip info structure
1395  * @page:       page number to read
1396  * @sndcmd:     flag whether to issue read command or not
1397  */
1398 static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1399                                   int page, int sndcmd)
1400 {
1401         uint8_t *buf = chip->oob_poi;
1402         int length = mtd->oobsize;
1403         int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1404         int eccsize = chip->ecc.size;
1405         uint8_t *bufpoi = buf;
1406         int i, toread, sndrnd = 0, pos;
1407
1408         chip->cmdfunc(mtd, NAND_CMD_READ0, chip->ecc.size, page);
1409         for (i = 0; i < chip->ecc.steps; i++) {
1410                 if (sndrnd) {
1411                         pos = eccsize + i * (eccsize + chunk);
1412                         if (mtd->writesize > 512)
1413                                 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, pos, -1);
1414                         else
1415                                 chip->cmdfunc(mtd, NAND_CMD_READ0, pos, page);
1416                 } else
1417                         sndrnd = 1;
1418                 toread = min_t(int, length, chunk);
1419                 chip->read_buf(mtd, bufpoi, toread);
1420                 bufpoi += toread;
1421                 length -= toread;
1422         }
1423         if (length > 0)
1424                 chip->read_buf(mtd, bufpoi, length);
1425
1426         return 1;
1427 }
1428
1429 /**
1430  * nand_write_oob_std - [REPLACABLE] the most common OOB data write function
1431  * @mtd:        mtd info structure
1432  * @chip:       nand chip info structure
1433  * @page:       page number to write
1434  */
1435 static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1436                               int page)
1437 {
1438         int status = 0;
1439         const uint8_t *buf = chip->oob_poi;
1440         int length = mtd->oobsize;
1441
1442         chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
1443         chip->write_buf(mtd, buf, length);
1444         /* Send command to program the OOB data */
1445         chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1446
1447         status = chip->waitfunc(mtd, chip);
1448
1449         return status & NAND_STATUS_FAIL ? -EIO : 0;
1450 }
1451
1452 /**
1453  * nand_write_oob_syndrome - [REPLACABLE] OOB data write function for HW ECC
1454  *                           with syndrome - only for large page flash !
1455  * @mtd:        mtd info structure
1456  * @chip:       nand chip info structure
1457  * @page:       page number to write
1458  */
1459 static int nand_write_oob_syndrome(struct mtd_info *mtd,
1460                                    struct nand_chip *chip, int page)
1461 {
1462         int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1463         int eccsize = chip->ecc.size, length = mtd->oobsize;
1464         int i, len, pos, status = 0, sndcmd = 0, steps = chip->ecc.steps;
1465         const uint8_t *bufpoi = chip->oob_poi;
1466
1467         /*
1468          * data-ecc-data-ecc ... ecc-oob
1469          * or
1470          * data-pad-ecc-pad-data-pad .... ecc-pad-oob
1471          */
1472         if (!chip->ecc.prepad && !chip->ecc.postpad) {
1473                 pos = steps * (eccsize + chunk);
1474                 steps = 0;
1475         } else
1476                 pos = eccsize;
1477
1478         chip->cmdfunc(mtd, NAND_CMD_SEQIN, pos, page);
1479         for (i = 0; i < steps; i++) {
1480                 if (sndcmd) {
1481                         if (mtd->writesize <= 512) {
1482                                 uint32_t fill = 0xFFFFFFFF;
1483
1484                                 len = eccsize;
1485                                 while (len > 0) {
1486                                         int num = min_t(int, len, 4);
1487                                         chip->write_buf(mtd, (uint8_t *)&fill,
1488                                                         num);
1489                                         len -= num;
1490                                 }
1491                         } else {
1492                                 pos = eccsize + i * (eccsize + chunk);
1493                                 chip->cmdfunc(mtd, NAND_CMD_RNDIN, pos, -1);
1494                         }
1495                 } else
1496                         sndcmd = 1;
1497                 len = min_t(int, length, chunk);
1498                 chip->write_buf(mtd, bufpoi, len);
1499                 bufpoi += len;
1500                 length -= len;
1501         }
1502         if (length > 0)
1503                 chip->write_buf(mtd, bufpoi, length);
1504
1505         chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1506         status = chip->waitfunc(mtd, chip);
1507
1508         return status & NAND_STATUS_FAIL ? -EIO : 0;
1509 }
1510
1511 /**
1512  * nand_do_read_oob - [Intern] NAND read out-of-band
1513  * @mtd:        MTD device structure
1514  * @from:       offset to read from
1515  * @ops:        oob operations description structure
1516  *
1517  * NAND read out-of-band data from the spare area
1518  */
1519 static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
1520                             struct mtd_oob_ops *ops)
1521 {
1522         int page, realpage, chipnr, sndcmd = 1;
1523         struct nand_chip *chip = mtd->priv;
1524         int blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
1525         int readlen = ops->ooblen;
1526         int len;
1527         uint8_t *buf = ops->oobbuf;
1528
1529         MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: from = 0x%08Lx, len = %i\n",
1530                         __func__, (unsigned long long)from, readlen);
1531
1532         if (ops->mode == MTD_OOB_AUTO)
1533                 len = chip->ecc.layout->oobavail;
1534         else
1535                 len = mtd->oobsize;
1536
1537         if (unlikely(ops->ooboffs >= len)) {
1538                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to start read "
1539                                         "outside oob\n", __func__);
1540                 return -EINVAL;
1541         }
1542
1543         /* Do not allow reads past end of device */
1544         if (unlikely(from >= mtd->size ||
1545                      ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
1546                                         (from >> chip->page_shift)) * len)) {
1547                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read beyond end "
1548                                         "of device\n", __func__);
1549                 return -EINVAL;
1550         }
1551
1552         chipnr = (int)(from >> chip->chip_shift);
1553         chip->select_chip(mtd, chipnr);
1554
1555         /* Shift to get page */
1556         realpage = (int)(from >> chip->page_shift);
1557         page = realpage & chip->pagemask;
1558
1559         while (1) {
1560                 WATCHDOG_RESET();
1561                 sndcmd = chip->ecc.read_oob(mtd, chip, page, sndcmd);
1562
1563                 len = min(len, readlen);
1564                 buf = nand_transfer_oob(chip, buf, ops, len);
1565
1566                 if (!(chip->options & NAND_NO_READRDY)) {
1567                         /*
1568                          * Apply delay or wait for ready/busy pin. Do this
1569                          * before the AUTOINCR check, so no problems arise if a
1570                          * chip which does auto increment is marked as
1571                          * NOAUTOINCR by the board driver.
1572                          */
1573                         if (!chip->dev_ready)
1574                                 udelay(chip->chip_delay);
1575                         else
1576                                 nand_wait_ready(mtd);
1577                 }
1578
1579                 readlen -= len;
1580                 if (!readlen)
1581                         break;
1582
1583                 /* Increment page address */
1584                 realpage++;
1585
1586                 page = realpage & chip->pagemask;
1587                 /* Check, if we cross a chip boundary */
1588                 if (!page) {
1589                         chipnr++;
1590                         chip->select_chip(mtd, -1);
1591                         chip->select_chip(mtd, chipnr);
1592                 }
1593
1594                 /* Check, if the chip supports auto page increment
1595                  * or if we have hit a block boundary.
1596                  */
1597                 if (!NAND_CANAUTOINCR(chip) || !(page & blkcheck))
1598                         sndcmd = 1;
1599         }
1600
1601         ops->oobretlen = ops->ooblen;
1602         return 0;
1603 }
1604
1605 /**
1606  * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
1607  * @mtd:        MTD device structure
1608  * @from:       offset to read from
1609  * @ops:        oob operation description structure
1610  *
1611  * NAND read data and/or out-of-band data
1612  */
1613 static int nand_read_oob(struct mtd_info *mtd, loff_t from,
1614                          struct mtd_oob_ops *ops)
1615 {
1616         struct nand_chip *chip = mtd->priv;
1617         int ret = -ENOTSUPP;
1618
1619         ops->retlen = 0;
1620
1621         /* Do not allow reads past end of device */
1622         if (ops->datbuf && (from + ops->len) > mtd->size) {
1623                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read "
1624                                 "beyond end of device\n", __func__);
1625                 return -EINVAL;
1626         }
1627
1628         nand_get_device(chip, mtd, FL_READING);
1629
1630         switch (ops->mode) {
1631         case MTD_OOB_PLACE:
1632         case MTD_OOB_AUTO:
1633         case MTD_OOB_RAW:
1634                 break;
1635
1636         default:
1637                 goto out;
1638         }
1639
1640         if (!ops->datbuf)
1641                 ret = nand_do_read_oob(mtd, from, ops);
1642         else
1643                 ret = nand_do_read_ops(mtd, from, ops);
1644
1645 out:
1646         nand_release_device(mtd);
1647         return ret;
1648 }
1649
1650
1651 /**
1652  * nand_write_page_raw - [Intern] raw page write function
1653  * @mtd:        mtd info structure
1654  * @chip:       nand chip info structure
1655  * @buf:        data buffer
1656  *
1657  * Not for syndrome calculating ecc controllers, which use a special oob layout
1658  */
1659 static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1660                                 const uint8_t *buf)
1661 {
1662         chip->write_buf(mtd, buf, mtd->writesize);
1663         chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
1664 }
1665
1666 /**
1667  * nand_write_page_raw_syndrome - [Intern] raw page write function
1668  * @mtd:        mtd info structure
1669  * @chip:       nand chip info structure
1670  * @buf:        data buffer
1671  *
1672  * We need a special oob layout and handling even when ECC isn't checked.
1673  */
1674 static void nand_write_page_raw_syndrome(struct mtd_info *mtd,
1675                                         struct nand_chip *chip,
1676                                         const uint8_t *buf)
1677 {
1678         int eccsize = chip->ecc.size;
1679         int eccbytes = chip->ecc.bytes;
1680         uint8_t *oob = chip->oob_poi;
1681         int steps, size;
1682
1683         for (steps = chip->ecc.steps; steps > 0; steps--) {
1684                 chip->write_buf(mtd, buf, eccsize);
1685                 buf += eccsize;
1686
1687                 if (chip->ecc.prepad) {
1688                         chip->write_buf(mtd, oob, chip->ecc.prepad);
1689                         oob += chip->ecc.prepad;
1690                 }
1691
1692                 chip->read_buf(mtd, oob, eccbytes);
1693                 oob += eccbytes;
1694
1695                 if (chip->ecc.postpad) {
1696                         chip->write_buf(mtd, oob, chip->ecc.postpad);
1697                         oob += chip->ecc.postpad;
1698                 }
1699         }
1700
1701         size = mtd->oobsize - (oob - chip->oob_poi);
1702         if (size)
1703                 chip->write_buf(mtd, oob, size);
1704 }
1705 /**
1706  * nand_write_page_swecc - [REPLACABLE] software ecc based page write function
1707  * @mtd:        mtd info structure
1708  * @chip:       nand chip info structure
1709  * @buf:        data buffer
1710  */
1711 static void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
1712                                   const uint8_t *buf)
1713 {
1714         int i, eccsize = chip->ecc.size;
1715         int eccbytes = chip->ecc.bytes;
1716         int eccsteps = chip->ecc.steps;
1717         uint8_t *ecc_calc = chip->buffers->ecccalc;
1718         const uint8_t *p = buf;
1719         uint32_t *eccpos = chip->ecc.layout->eccpos;
1720
1721         /* Software ecc calculation */
1722         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
1723                 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1724
1725         for (i = 0; i < chip->ecc.total; i++)
1726                 chip->oob_poi[eccpos[i]] = ecc_calc[i];
1727
1728         chip->ecc.write_page_raw(mtd, chip, buf);
1729 }
1730
1731 /**
1732  * nand_write_page_hwecc - [REPLACABLE] hardware ecc based page write function
1733  * @mtd:        mtd info structure
1734  * @chip:       nand chip info structure
1735  * @buf:        data buffer
1736  */
1737 static void nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1738                                   const uint8_t *buf)
1739 {
1740         int i, eccsize = chip->ecc.size;
1741         int eccbytes = chip->ecc.bytes;
1742         int eccsteps = chip->ecc.steps;
1743         uint8_t *ecc_calc = chip->buffers->ecccalc;
1744         const uint8_t *p = buf;
1745         uint32_t *eccpos = chip->ecc.layout->eccpos;
1746
1747         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1748                 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
1749                 chip->write_buf(mtd, p, eccsize);
1750                 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1751         }
1752
1753         for (i = 0; i < chip->ecc.total; i++)
1754                 chip->oob_poi[eccpos[i]] = ecc_calc[i];
1755
1756         chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
1757 }
1758
1759 /**
1760  * nand_write_page_syndrome - [REPLACABLE] hardware ecc syndrom based page write
1761  * @mtd:        mtd info structure
1762  * @chip:       nand chip info structure
1763  * @buf:        data buffer
1764  *
1765  * The hw generator calculates the error syndrome automatically. Therefor
1766  * we need a special oob layout and handling.
1767  */
1768 static void nand_write_page_syndrome(struct mtd_info *mtd,
1769                                     struct nand_chip *chip, const uint8_t *buf)
1770 {
1771         int i, eccsize = chip->ecc.size;
1772         int eccbytes = chip->ecc.bytes;
1773         int eccsteps = chip->ecc.steps;
1774         const uint8_t *p = buf;
1775         uint8_t *oob = chip->oob_poi;
1776
1777         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1778
1779                 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
1780                 chip->write_buf(mtd, p, eccsize);
1781
1782                 if (chip->ecc.prepad) {
1783                         chip->write_buf(mtd, oob, chip->ecc.prepad);
1784                         oob += chip->ecc.prepad;
1785                 }
1786
1787                 chip->ecc.calculate(mtd, p, oob);
1788                 chip->write_buf(mtd, oob, eccbytes);
1789                 oob += eccbytes;
1790
1791                 if (chip->ecc.postpad) {
1792                         chip->write_buf(mtd, oob, chip->ecc.postpad);
1793                         oob += chip->ecc.postpad;
1794                 }
1795         }
1796
1797         /* Calculate remaining oob bytes */
1798         i = mtd->oobsize - (oob - chip->oob_poi);
1799         if (i)
1800                 chip->write_buf(mtd, oob, i);
1801 }
1802
1803 /**
1804  * nand_write_page - [REPLACEABLE] write one page
1805  * @mtd:        MTD device structure
1806  * @chip:       NAND chip descriptor
1807  * @buf:        the data to write
1808  * @page:       page number to write
1809  * @cached:     cached programming
1810  * @raw:        use _raw version of write_page
1811  */
1812 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
1813                            const uint8_t *buf, int page, int cached, int raw)
1814 {
1815         int status;
1816
1817         chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
1818
1819         if (unlikely(raw))
1820                 chip->ecc.write_page_raw(mtd, chip, buf);
1821         else
1822                 chip->ecc.write_page(mtd, chip, buf);
1823
1824         /*
1825          * Cached progamming disabled for now, Not sure if its worth the
1826          * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s)
1827          */
1828         cached = 0;
1829
1830         if (!cached || !(chip->options & NAND_CACHEPRG)) {
1831
1832                 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1833                 status = chip->waitfunc(mtd, chip);
1834                 /*
1835                  * See if operation failed and additional status checks are
1836                  * available
1837                  */
1838                 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
1839                         status = chip->errstat(mtd, chip, FL_WRITING, status,
1840                                                page);
1841
1842                 if (status & NAND_STATUS_FAIL)
1843                         return -EIO;
1844         } else {
1845                 chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
1846                 status = chip->waitfunc(mtd, chip);
1847         }
1848
1849 #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
1850         /* Send command to read back the data */
1851         chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1852
1853         if (chip->verify_buf(mtd, buf, mtd->writesize))
1854                 return -EIO;
1855 #endif
1856         return 0;
1857 }
1858
1859 /**
1860  * nand_fill_oob - [Internal] Transfer client buffer to oob
1861  * @chip:       nand chip structure
1862  * @oob:        oob data buffer
1863  * @len:        oob data write length
1864  * @ops:        oob ops structure
1865  */
1866 static uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, size_t len,
1867                                                 struct mtd_oob_ops *ops)
1868 {
1869         switch (ops->mode) {
1870
1871         case MTD_OOB_PLACE:
1872         case MTD_OOB_RAW:
1873                 memcpy(chip->oob_poi + ops->ooboffs, oob, len);
1874                 return oob + len;
1875
1876         case MTD_OOB_AUTO: {
1877                 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1878                 uint32_t boffs = 0, woffs = ops->ooboffs;
1879                 size_t bytes = 0;
1880
1881                 for (; free->length && len; free++, len -= bytes) {
1882                         /* Write request not from offset 0 ? */
1883                         if (unlikely(woffs)) {
1884                                 if (woffs >= free->length) {
1885                                         woffs -= free->length;
1886                                         continue;
1887                                 }
1888                                 boffs = free->offset + woffs;
1889                                 bytes = min_t(size_t, len,
1890                                               (free->length - woffs));
1891                                 woffs = 0;
1892                         } else {
1893                                 bytes = min_t(size_t, len, free->length);
1894                                 boffs = free->offset;
1895                         }
1896                         memcpy(chip->oob_poi + boffs, oob, bytes);
1897                         oob += bytes;
1898                 }
1899                 return oob;
1900         }
1901         default:
1902                 BUG();
1903         }
1904         return NULL;
1905 }
1906
1907 #define NOTALIGNED(x)   ((x & (chip->subpagesize - 1)) != 0)
1908
1909 /**
1910  * nand_do_write_ops - [Internal] NAND write with ECC
1911  * @mtd:        MTD device structure
1912  * @to:         offset to write to
1913  * @ops:        oob operations description structure
1914  *
1915  * NAND write with ECC
1916  */
1917 static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
1918                              struct mtd_oob_ops *ops)
1919 {
1920         int chipnr, realpage, page, blockmask, column;
1921         struct nand_chip *chip = mtd->priv;
1922         uint32_t writelen = ops->len;
1923
1924         uint32_t oobwritelen = ops->ooblen;
1925         uint32_t oobmaxlen = ops->mode == MTD_OOB_AUTO ?
1926                                 mtd->oobavail : mtd->oobsize;
1927
1928         uint8_t *oob = ops->oobbuf;
1929         uint8_t *buf = ops->datbuf;
1930         int ret, subpage;
1931
1932         ops->retlen = 0;
1933         if (!writelen)
1934                 return 0;
1935
1936         column = to & (mtd->writesize - 1);
1937         subpage = column || (writelen & (mtd->writesize - 1));
1938
1939         if (subpage && oob)
1940                 return -EINVAL;
1941
1942         chipnr = (int)(to >> chip->chip_shift);
1943         chip->select_chip(mtd, chipnr);
1944
1945         /* Check, if it is write protected */
1946         if (nand_check_wp(mtd)) {
1947                 printk (KERN_NOTICE "nand_do_write_ops: Device is write protected\n");
1948                 return -EIO;
1949         }
1950
1951         realpage = (int)(to >> chip->page_shift);
1952         page = realpage & chip->pagemask;
1953         blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
1954
1955         /* Invalidate the page cache, when we write to the cached page */
1956         if (to <= (chip->pagebuf << chip->page_shift) &&
1957             (chip->pagebuf << chip->page_shift) < (to + ops->len))
1958                 chip->pagebuf = -1;
1959
1960         /* If we're not given explicit OOB data, let it be 0xFF */
1961         if (likely(!oob))
1962                 memset(chip->oob_poi, 0xff, mtd->oobsize);
1963
1964         /* Don't allow multipage oob writes with offset */
1965         if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen))
1966                 return -EINVAL;
1967
1968         while (1) {
1969                 WATCHDOG_RESET();
1970
1971                 int bytes = mtd->writesize;
1972                 int cached = writelen > bytes && page != blockmask;
1973                 uint8_t *wbuf = buf;
1974
1975                 /* Partial page write ? */
1976                 if (unlikely(column || writelen < (mtd->writesize - 1))) {
1977                         cached = 0;
1978                         bytes = min_t(int, bytes - column, (int) writelen);
1979                         chip->pagebuf = -1;
1980                         memset(chip->buffers->databuf, 0xff, mtd->writesize);
1981                         memcpy(&chip->buffers->databuf[column], buf, bytes);
1982                         wbuf = chip->buffers->databuf;
1983                 }
1984
1985                 if (unlikely(oob)) {
1986                         size_t len = min(oobwritelen, oobmaxlen);
1987                         oob = nand_fill_oob(chip, oob, len, ops);
1988                         oobwritelen -= len;
1989                 }
1990
1991                 ret = chip->write_page(mtd, chip, wbuf, page, cached,
1992                                        (ops->mode == MTD_OOB_RAW));
1993                 if (ret)
1994                         break;
1995
1996                 writelen -= bytes;
1997                 if (!writelen)
1998                         break;
1999
2000                 column = 0;
2001                 buf += bytes;
2002                 realpage++;
2003
2004                 page = realpage & chip->pagemask;
2005                 /* Check, if we cross a chip boundary */
2006                 if (!page) {
2007                         chipnr++;
2008                         chip->select_chip(mtd, -1);
2009                         chip->select_chip(mtd, chipnr);
2010                 }
2011         }
2012
2013         ops->retlen = ops->len - writelen;
2014         if (unlikely(oob))
2015                 ops->oobretlen = ops->ooblen;
2016         return ret;
2017 }
2018
2019 /**
2020  * nand_write - [MTD Interface] NAND write with ECC
2021  * @mtd:        MTD device structure
2022  * @to:         offset to write to
2023  * @len:        number of bytes to write
2024  * @retlen:     pointer to variable to store the number of written bytes
2025  * @buf:        the data to write
2026  *
2027  * NAND write with ECC
2028  */
2029 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2030                           size_t *retlen, const uint8_t *buf)
2031 {
2032         struct nand_chip *chip = mtd->priv;
2033         int ret;
2034
2035         /* Do not allow writes past end of device */
2036         if ((to + len) > mtd->size)
2037                 return -EINVAL;
2038         if (!len)
2039                 return 0;
2040
2041         nand_get_device(chip, mtd, FL_WRITING);
2042
2043         chip->ops.len = len;
2044         chip->ops.datbuf = (uint8_t *)buf;
2045         chip->ops.oobbuf = NULL;
2046
2047         ret = nand_do_write_ops(mtd, to, &chip->ops);
2048
2049         *retlen = chip->ops.retlen;
2050
2051         nand_release_device(mtd);
2052
2053         return ret;
2054 }
2055
2056 /**
2057  * nand_do_write_oob - [MTD Interface] NAND write out-of-band
2058  * @mtd:        MTD device structure
2059  * @to:         offset to write to
2060  * @ops:        oob operation description structure
2061  *
2062  * NAND write out-of-band
2063  */
2064 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
2065                              struct mtd_oob_ops *ops)
2066 {
2067         int chipnr, page, status, len;
2068         struct nand_chip *chip = mtd->priv;
2069
2070         MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: to = 0x%08x, len = %i\n",
2071                          __func__, (unsigned int)to, (int)ops->ooblen);
2072
2073         if (ops->mode == MTD_OOB_AUTO)
2074                 len = chip->ecc.layout->oobavail;
2075         else
2076                 len = mtd->oobsize;
2077
2078         /* Do not allow write past end of page */
2079         if ((ops->ooboffs + ops->ooblen) > len) {
2080                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write "
2081                                 "past end of page\n", __func__);
2082                 return -EINVAL;
2083         }
2084
2085         if (unlikely(ops->ooboffs >= len)) {
2086                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to start "
2087                                 "write outside oob\n", __func__);
2088                 return -EINVAL;
2089         }
2090
2091         /* Do not allow write past end of device */
2092         if (unlikely(to >= mtd->size ||
2093                      ops->ooboffs + ops->ooblen >
2094                         ((mtd->size >> chip->page_shift) -
2095                          (to >> chip->page_shift)) * len)) {
2096                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
2097                                 "end of device\n", __func__);
2098                 return -EINVAL;
2099         }
2100
2101         chipnr = (int)(to >> chip->chip_shift);
2102         chip->select_chip(mtd, chipnr);
2103
2104         /* Shift to get page */
2105         page = (int)(to >> chip->page_shift);
2106
2107         /*
2108          * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
2109          * of my DiskOnChip 2000 test units) will clear the whole data page too
2110          * if we don't do this. I have no clue why, but I seem to have 'fixed'
2111          * it in the doc2000 driver in August 1999.  dwmw2.
2112          */
2113         chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2114
2115         /* Check, if it is write protected */
2116         if (nand_check_wp(mtd))
2117                 return -EROFS;
2118
2119         /* Invalidate the page cache, if we write to the cached page */
2120         if (page == chip->pagebuf)
2121                 chip->pagebuf = -1;
2122
2123         memset(chip->oob_poi, 0xff, mtd->oobsize);
2124         nand_fill_oob(chip, ops->oobbuf, ops->ooblen, ops);
2125         status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);
2126         memset(chip->oob_poi, 0xff, mtd->oobsize);
2127
2128         if (status)
2129                 return status;
2130
2131         ops->oobretlen = ops->ooblen;
2132
2133         return 0;
2134 }
2135
2136 /**
2137  * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
2138  * @mtd:        MTD device structure
2139  * @to:         offset to write to
2140  * @ops:        oob operation description structure
2141  */
2142 static int nand_write_oob(struct mtd_info *mtd, loff_t to,
2143                           struct mtd_oob_ops *ops)
2144 {
2145         struct nand_chip *chip = mtd->priv;
2146         int ret = -ENOTSUPP;
2147
2148         ops->retlen = 0;
2149
2150         /* Do not allow writes past end of device */
2151         if (ops->datbuf && (to + ops->len) > mtd->size) {
2152                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
2153                                 "end of device\n", __func__);
2154                 return -EINVAL;
2155         }
2156
2157         nand_get_device(chip, mtd, FL_WRITING);
2158
2159         switch (ops->mode) {
2160         case MTD_OOB_PLACE:
2161         case MTD_OOB_AUTO:
2162         case MTD_OOB_RAW:
2163                 break;
2164
2165         default:
2166                 goto out;
2167         }
2168
2169         if (!ops->datbuf)
2170                 ret = nand_do_write_oob(mtd, to, ops);
2171         else
2172                 ret = nand_do_write_ops(mtd, to, ops);
2173
2174 out:
2175         nand_release_device(mtd);
2176         return ret;
2177 }
2178
2179 /**
2180  * single_erease_cmd - [GENERIC] NAND standard block erase command function
2181  * @mtd:        MTD device structure
2182  * @page:       the page address of the block which will be erased
2183  *
2184  * Standard erase command for NAND chips
2185  */
2186 static void single_erase_cmd(struct mtd_info *mtd, int page)
2187 {
2188         struct nand_chip *chip = mtd->priv;
2189         /* Send commands to erase a block */
2190         chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2191         chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2192 }
2193
2194 /**
2195  * multi_erease_cmd - [GENERIC] AND specific block erase command function
2196  * @mtd:        MTD device structure
2197  * @page:       the page address of the block which will be erased
2198  *
2199  * AND multi block erase command function
2200  * Erase 4 consecutive blocks
2201  */
2202 static void multi_erase_cmd(struct mtd_info *mtd, int page)
2203 {
2204         struct nand_chip *chip = mtd->priv;
2205         /* Send commands to erase a block */
2206         chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
2207         chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
2208         chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
2209         chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2210         chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2211 }
2212
2213 /**
2214  * nand_erase - [MTD Interface] erase block(s)
2215  * @mtd:        MTD device structure
2216  * @instr:      erase instruction
2217  *
2218  * Erase one ore more blocks
2219  */
2220 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
2221 {
2222         return nand_erase_nand(mtd, instr, 0);
2223 }
2224
2225 #define BBT_PAGE_MASK   0xffffff3f
2226 /**
2227  * nand_erase_nand - [Internal] erase block(s)
2228  * @mtd:        MTD device structure
2229  * @instr:      erase instruction
2230  * @allowbbt:   allow erasing the bbt area
2231  *
2232  * Erase one ore more blocks
2233  */
2234 int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
2235                     int allowbbt)
2236 {
2237         int page, status, pages_per_block, ret, chipnr;
2238         struct nand_chip *chip = mtd->priv;
2239         loff_t rewrite_bbt[CONFIG_SYS_NAND_MAX_CHIPS] = {0};
2240         unsigned int bbt_masked_page = 0xffffffff;
2241         loff_t len;
2242
2243         MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: start = 0x%012llx, len = %llu\n",
2244                                 __func__, (unsigned long long)instr->addr,
2245                                 (unsigned long long)instr->len);
2246
2247         if (check_offs_len(mtd, instr->addr, instr->len))
2248                 return -EINVAL;
2249
2250         instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
2251
2252         /* Grab the lock and see if the device is available */
2253         nand_get_device(chip, mtd, FL_ERASING);
2254
2255         /* Shift to get first page */
2256         page = (int)(instr->addr >> chip->page_shift);
2257         chipnr = (int)(instr->addr >> chip->chip_shift);
2258
2259         /* Calculate pages in each block */
2260         pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
2261
2262         /* Select the NAND device */
2263         chip->select_chip(mtd, chipnr);
2264
2265         /* Check, if it is write protected */
2266         if (nand_check_wp(mtd)) {
2267                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Device is write protected!!!\n",
2268                                         __func__);
2269                 instr->state = MTD_ERASE_FAILED;
2270                 goto erase_exit;
2271         }
2272
2273         /*
2274          * If BBT requires refresh, set the BBT page mask to see if the BBT
2275          * should be rewritten. Otherwise the mask is set to 0xffffffff which
2276          * can not be matched. This is also done when the bbt is actually
2277          * erased to avoid recusrsive updates
2278          */
2279         if (chip->options & BBT_AUTO_REFRESH && !allowbbt)
2280                 bbt_masked_page = chip->bbt_td->pages[chipnr] & BBT_PAGE_MASK;
2281
2282         /* Loop through the pages */
2283         len = instr->len;
2284
2285         instr->state = MTD_ERASING;
2286
2287         while (len) {
2288                 WATCHDOG_RESET();
2289                 /*
2290                  * heck if we have a bad block, we do not erase bad blocks !
2291                  */
2292                 if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
2293                                         chip->page_shift, 0, allowbbt)) {
2294                         printk(KERN_WARNING "%s: attempt to erase a bad block "
2295                                         "at page 0x%08x\n", __func__, page);
2296                         instr->state = MTD_ERASE_FAILED;
2297                         goto erase_exit;
2298                 }
2299
2300                 /*
2301                  * Invalidate the page cache, if we erase the block which
2302                  * contains the current cached page
2303                  */
2304                 if (page <= chip->pagebuf && chip->pagebuf <
2305                     (page + pages_per_block))
2306                         chip->pagebuf = -1;
2307
2308                 chip->erase_cmd(mtd, page & chip->pagemask);
2309
2310                 status = chip->waitfunc(mtd, chip);
2311
2312                 /*
2313                  * See if operation failed and additional status checks are
2314                  * available
2315                  */
2316                 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2317                         status = chip->errstat(mtd, chip, FL_ERASING,
2318                                                status, page);
2319
2320                 /* See if block erase succeeded */
2321                 if (status & NAND_STATUS_FAIL) {
2322                         MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase, "
2323                                         "page 0x%08x\n", __func__, page);
2324                         instr->state = MTD_ERASE_FAILED;
2325                         instr->fail_addr =
2326                                 ((loff_t)page << chip->page_shift);
2327                         goto erase_exit;
2328                 }
2329
2330                 /*
2331                  * If BBT requires refresh, set the BBT rewrite flag to the
2332                  * page being erased
2333                  */
2334                 if (bbt_masked_page != 0xffffffff &&
2335                     (page & BBT_PAGE_MASK) == bbt_masked_page)
2336                         rewrite_bbt[chipnr] =
2337                                 ((loff_t)page << chip->page_shift);
2338
2339                 /* Increment page address and decrement length */
2340                 len -= (1 << chip->phys_erase_shift);
2341                 page += pages_per_block;
2342
2343                 /* Check, if we cross a chip boundary */
2344                 if (len && !(page & chip->pagemask)) {
2345                         chipnr++;
2346                         chip->select_chip(mtd, -1);
2347                         chip->select_chip(mtd, chipnr);
2348
2349                         /*
2350                          * If BBT requires refresh and BBT-PERCHIP, set the BBT
2351                          * page mask to see if this BBT should be rewritten
2352                          */
2353                         if (bbt_masked_page != 0xffffffff &&
2354                             (chip->bbt_td->options & NAND_BBT_PERCHIP))
2355                                 bbt_masked_page = chip->bbt_td->pages[chipnr] &
2356                                         BBT_PAGE_MASK;
2357                 }
2358         }
2359         instr->state = MTD_ERASE_DONE;
2360
2361 erase_exit:
2362
2363         ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
2364
2365         /* Deselect and wake up anyone waiting on the device */
2366         nand_release_device(mtd);
2367
2368         /* Do call back function */
2369         if (!ret)
2370                 mtd_erase_callback(instr);
2371
2372         /*
2373          * If BBT requires refresh and erase was successful, rewrite any
2374          * selected bad block tables
2375          */
2376         if (bbt_masked_page == 0xffffffff || ret)
2377                 return ret;
2378
2379         for (chipnr = 0; chipnr < chip->numchips; chipnr++) {
2380                 if (!rewrite_bbt[chipnr])
2381                         continue;
2382                 /* update the BBT for chip */
2383                 MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: nand_update_bbt "
2384                         "(%d:0x%0llx 0x%0x)\n", __func__, chipnr,
2385                         rewrite_bbt[chipnr], chip->bbt_td->pages[chipnr]);
2386                 nand_update_bbt(mtd, rewrite_bbt[chipnr]);
2387         }
2388
2389         /* Return more or less happy */
2390         return ret;
2391 }
2392
2393 /**
2394  * nand_sync - [MTD Interface] sync
2395  * @mtd:        MTD device structure
2396  *
2397  * Sync is actually a wait for chip ready function
2398  */
2399 static void nand_sync(struct mtd_info *mtd)
2400 {
2401         struct nand_chip *chip = mtd->priv;
2402
2403         MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: called\n", __func__);
2404
2405         /* Grab the lock and see if the device is available */
2406         nand_get_device(chip, mtd, FL_SYNCING);
2407         /* Release it and go back */
2408         nand_release_device(mtd);
2409 }
2410
2411 /**
2412  * nand_block_isbad - [MTD Interface] Check if block at offset is bad
2413  * @mtd:        MTD device structure
2414  * @offs:       offset relative to mtd start
2415  */
2416 static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
2417 {
2418         /* Check for invalid offset */
2419         if (offs > mtd->size)
2420                 return -EINVAL;
2421
2422         return nand_block_checkbad(mtd, offs, 1, 0);
2423 }
2424
2425 /**
2426  * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
2427  * @mtd:        MTD device structure
2428  * @ofs:        offset relative to mtd start
2429  */
2430 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
2431 {
2432         struct nand_chip *chip = mtd->priv;
2433         int ret;
2434
2435         ret = nand_block_isbad(mtd, ofs);
2436         if (ret) {
2437                 /* If it was bad already, return success and do nothing. */
2438                 if (ret > 0)
2439                         return 0;
2440                 return ret;
2441         }
2442
2443         return chip->block_markbad(mtd, ofs);
2444 }
2445
2446 /*
2447  * Set default functions
2448  */
2449 static void nand_set_defaults(struct nand_chip *chip, int busw)
2450 {
2451         /* check for proper chip_delay setup, set 20us if not */
2452         if (!chip->chip_delay)
2453                 chip->chip_delay = 20;
2454
2455         /* check, if a user supplied command function given */
2456         if (chip->cmdfunc == NULL)
2457                 chip->cmdfunc = nand_command;
2458
2459         /* check, if a user supplied wait function given */
2460         if (chip->waitfunc == NULL)
2461                 chip->waitfunc = nand_wait;
2462
2463         if (!chip->select_chip)
2464                 chip->select_chip = nand_select_chip;
2465         if (!chip->read_byte)
2466                 chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
2467         if (!chip->read_word)
2468                 chip->read_word = nand_read_word;
2469         if (!chip->block_bad)
2470                 chip->block_bad = nand_block_bad;
2471         if (!chip->block_markbad)
2472                 chip->block_markbad = nand_default_block_markbad;
2473         if (!chip->write_buf)
2474                 chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
2475         if (!chip->read_buf)
2476                 chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
2477         if (!chip->verify_buf)
2478                 chip->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
2479         if (!chip->scan_bbt)
2480                 chip->scan_bbt = nand_default_bbt;
2481         if (!chip->controller)
2482                 chip->controller = &chip->hwcontrol;
2483 }
2484
2485 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
2486 /*
2487  * sanitize ONFI strings so we can safely print them
2488  */
2489 static void sanitize_string(char *s, size_t len)
2490 {
2491         ssize_t i;
2492
2493         /* null terminate */
2494         s[len - 1] = 0;
2495
2496         /* remove non printable chars */
2497         for (i = 0; i < len - 1; i++) {
2498                 if (s[i] < ' ' || s[i] > 127)
2499                         s[i] = '?';
2500         }
2501
2502         /* remove trailing spaces */
2503         strim(s);
2504 }
2505
2506 static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
2507 {
2508         int i;
2509         while (len--) {
2510                 crc ^= *p++ << 8;
2511                 for (i = 0; i < 8; i++)
2512                         crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0);
2513         }
2514
2515         return crc;
2516 }
2517
2518 /*
2519  * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise
2520  */
2521 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
2522                                         int *busw)
2523 {
2524         struct nand_onfi_params *p = &chip->onfi_params;
2525         int i;
2526         int val;
2527
2528         /* try ONFI for unknow chip or LP */
2529         chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
2530         if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
2531                 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
2532                 return 0;
2533
2534         MTDDEBUG(MTD_DEBUG_LEVEL0, "ONFI flash detected\n");
2535         chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
2536         for (i = 0; i < 3; i++) {
2537                 chip->read_buf(mtd, (uint8_t *)p, sizeof(*p));
2538                 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
2539                                 le16_to_cpu(p->crc)) {
2540                         MTDDEBUG(MTD_DEBUG_LEVEL0,
2541                                  "ONFI param page %d valid\n", i);
2542                         break;
2543                 }
2544         }
2545
2546         if (i == 3)
2547                 return 0;
2548
2549         /* check version */
2550         val = le16_to_cpu(p->revision);
2551         if (val & (1 << 5))
2552                 chip->onfi_version = 23;
2553         else if (val & (1 << 4))
2554                 chip->onfi_version = 22;
2555         else if (val & (1 << 3))
2556                 chip->onfi_version = 21;
2557         else if (val & (1 << 2))
2558                 chip->onfi_version = 20;
2559         else if (val & (1 << 1))
2560                 chip->onfi_version = 10;
2561         else
2562                 chip->onfi_version = 0;
2563
2564         if (!chip->onfi_version) {
2565                 printk(KERN_INFO "%s: unsupported ONFI version: %d\n",
2566                                                                 __func__, val);
2567                 return 0;
2568         }
2569
2570         sanitize_string(p->manufacturer, sizeof(p->manufacturer));
2571         sanitize_string(p->model, sizeof(p->model));
2572         if (!mtd->name)
2573                 mtd->name = p->model;
2574         mtd->writesize = le32_to_cpu(p->byte_per_page);
2575         mtd->erasesize = le32_to_cpu(p->pages_per_block) * mtd->writesize;
2576         mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
2577         chip->chipsize = le32_to_cpu(p->blocks_per_lun);
2578         chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
2579         *busw = 0;
2580         if (le16_to_cpu(p->features) & 1)
2581                 *busw = NAND_BUSWIDTH_16;
2582
2583         chip->options |= NAND_NO_READRDY | NAND_NO_AUTOINCR;
2584
2585         return 1;
2586 }
2587 #else
2588 static inline int nand_flash_detect_onfi(struct mtd_info *mtd,
2589                                         struct nand_chip *chip,
2590                                         int *busw)
2591 {
2592         return 0;
2593 }
2594 #endif
2595
2596 /*
2597  * Get the flash and manufacturer id and lookup if the type is supported
2598  */
2599 static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
2600                                                   struct nand_chip *chip,
2601                                                   int busw,
2602                                                   int *maf_id, int *dev_id,
2603                                                   const struct nand_flash_dev *type)
2604 {
2605         const char *name;
2606         int i, maf_idx;
2607         u8 id_data[8];
2608         int ret;
2609
2610         /* Select the device */
2611         chip->select_chip(mtd, 0);
2612
2613         /*
2614          * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
2615          * after power-up
2616          */
2617         chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2618
2619         /* Send the command for reading device ID */
2620         chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2621
2622         /* Read manufacturer and device IDs */
2623         *maf_id = chip->read_byte(mtd);
2624         *dev_id = chip->read_byte(mtd);
2625
2626         /* Try again to make sure, as some systems the bus-hold or other
2627          * interface concerns can cause random data which looks like a
2628          * possibly credible NAND flash to appear. If the two results do
2629          * not match, ignore the device completely.
2630          */
2631
2632         chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2633
2634         for (i = 0; i < 2; i++)
2635                 id_data[i] = chip->read_byte(mtd);
2636
2637         if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
2638                 printk(KERN_INFO "%s: second ID read did not match "
2639                        "%02x,%02x against %02x,%02x\n", __func__,
2640                        *maf_id, *dev_id, id_data[0], id_data[1]);
2641                 return ERR_PTR(-ENODEV);
2642         }
2643
2644         if (!type)
2645                 type = nand_flash_ids;
2646
2647         for (; type->name != NULL; type++)
2648                 if (*dev_id == type->id)
2649                         break;
2650
2651         chip->onfi_version = 0;
2652         if (!type->name || !type->pagesize) {
2653                 /* Check is chip is ONFI compliant */
2654                 ret = nand_flash_detect_onfi(mtd, chip, &busw);
2655                 if (ret)
2656                         goto ident_done;
2657         }
2658
2659         chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2660
2661         /* Read entire ID string */
2662
2663         for (i = 0; i < 8; i++)
2664                 id_data[i] = chip->read_byte(mtd);
2665
2666         if (!type->name)
2667                 return ERR_PTR(-ENODEV);
2668
2669         if (!mtd->name)
2670                 mtd->name = type->name;
2671
2672         chip->chipsize = (uint64_t)type->chipsize << 20;
2673
2674         if (!type->pagesize && chip->init_size) {
2675                 /* set the pagesize, oobsize, erasesize by the driver*/
2676                 busw = chip->init_size(mtd, chip, id_data);
2677         } else if (!type->pagesize) {
2678                 int extid;
2679                 /* The 3rd id byte holds MLC / multichip data */
2680                 chip->cellinfo = id_data[2];
2681                 /* The 4th id byte is the important one */
2682                 extid = id_data[3];
2683
2684                 /*
2685                  * Field definitions are in the following datasheets:
2686                  * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
2687                  * New style   (6 byte ID): Samsung K9GBG08U0M (p.40)
2688                  *
2689                  * Check for wraparound + Samsung ID + nonzero 6th byte
2690                  * to decide what to do.
2691                  */
2692                 if (id_data[0] == id_data[6] && id_data[1] == id_data[7] &&
2693                                 id_data[0] == NAND_MFR_SAMSUNG &&
2694                                 (chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
2695                                 id_data[5] != 0x00) {
2696                         /* Calc pagesize */
2697                         mtd->writesize = 2048 << (extid & 0x03);
2698                         extid >>= 2;
2699                         /* Calc oobsize */
2700                         switch (extid & 0x03) {
2701                         case 1:
2702                                 mtd->oobsize = 128;
2703                                 break;
2704                         case 2:
2705                                 mtd->oobsize = 218;
2706                                 break;
2707                         case 3:
2708                                 mtd->oobsize = 400;
2709                                 break;
2710                         default:
2711                                 mtd->oobsize = 436;
2712                                 break;
2713                         }
2714                         extid >>= 2;
2715                         /* Calc blocksize */
2716                         mtd->erasesize = (128 * 1024) <<
2717                                 (((extid >> 1) & 0x04) | (extid & 0x03));
2718                         busw = 0;
2719                 } else {
2720                         /* Calc pagesize */
2721                         mtd->writesize = 1024 << (extid & 0x03);
2722                         extid >>= 2;
2723                         /* Calc oobsize */
2724                         mtd->oobsize = (8 << (extid & 0x01)) *
2725                                 (mtd->writesize >> 9);
2726                         extid >>= 2;
2727                         /* Calc blocksize. Blocksize is multiples of 64KiB */
2728                         mtd->erasesize = (64 * 1024) << (extid & 0x03);
2729                         extid >>= 2;
2730                         /* Get buswidth information */
2731                         busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
2732                 }
2733         } else {
2734                 /*
2735                  * Old devices have chip data hardcoded in the device id table
2736                  */
2737                 mtd->erasesize = type->erasesize;
2738                 mtd->writesize = type->pagesize;
2739                 mtd->oobsize = mtd->writesize / 32;
2740                 busw = type->options & NAND_BUSWIDTH_16;
2741
2742                 /*
2743                  * Check for Spansion/AMD ID + repeating 5th, 6th byte since
2744                  * some Spansion chips have erasesize that conflicts with size
2745                  * listed in nand_ids table
2746                  * Data sheet (5 byte ID): Spansion S30ML-P ORNAND (p.39)
2747                  */
2748                 if (*maf_id == NAND_MFR_AMD && id_data[4] != 0x00 &&
2749                                 id_data[5] == 0x00 && id_data[6] == 0x00 &&
2750                                 id_data[7] == 0x00 && mtd->writesize == 512) {
2751                         mtd->erasesize = 128 * 1024;
2752                         mtd->erasesize <<= ((id_data[3] & 0x03) << 1);
2753                 }
2754         }
2755         /* Get chip options, preserve non chip based options */
2756         chip->options |= type->options;
2757
2758         /* Check if chip is a not a samsung device. Do not clear the
2759          * options for chips which are not having an extended id.
2760          */
2761         if (*maf_id != NAND_MFR_SAMSUNG && !type->pagesize)
2762                 chip->options &= ~NAND_SAMSUNG_LP_OPTIONS;
2763 ident_done:
2764
2765         /*
2766          * Set chip as a default. Board drivers can override it, if necessary
2767          */
2768         chip->options |= NAND_NO_AUTOINCR;
2769
2770         /* Try to identify manufacturer */
2771         for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
2772                 if (nand_manuf_ids[maf_idx].id == *maf_id)
2773                         break;
2774         }
2775
2776         /*
2777          * Check, if buswidth is correct. Hardware drivers should set
2778          * chip correct !
2779          */
2780         if (busw != (chip->options & NAND_BUSWIDTH_16)) {
2781                 printk(KERN_INFO "NAND device: Manufacturer ID:"
2782                        " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id,
2783                        *dev_id, nand_manuf_ids[maf_idx].name, mtd->name);
2784                 printk(KERN_WARNING "NAND bus width %d instead %d bit\n",
2785                        (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
2786                        busw ? 16 : 8);
2787                 return ERR_PTR(-EINVAL);
2788         }
2789
2790         /* Calculate the address shift from the page size */
2791         chip->page_shift = ffs(mtd->writesize) - 1;
2792         /* Convert chipsize to number of pages per chip -1. */
2793         chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
2794
2795         chip->bbt_erase_shift = chip->phys_erase_shift =
2796                 ffs(mtd->erasesize) - 1;
2797         if (chip->chipsize & 0xffffffff)
2798                 chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
2799         else {
2800                 chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
2801                 chip->chip_shift += 32 - 1;
2802         }
2803
2804         chip->badblockbits = 8;
2805
2806         /* Set the bad block position */
2807         if (mtd->writesize > 512 || (busw & NAND_BUSWIDTH_16))
2808                 chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
2809         else
2810                 chip->badblockpos = NAND_SMALL_BADBLOCK_POS;
2811
2812         /*
2813          * Bad block marker is stored in the last page of each block
2814          * on Samsung and Hynix MLC devices; stored in first two pages
2815          * of each block on Micron devices with 2KiB pages and on
2816          * SLC Samsung, Hynix, Toshiba and AMD/Spansion. All others scan
2817          * only the first page.
2818          */
2819         if ((chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
2820                         (*maf_id == NAND_MFR_SAMSUNG ||
2821                          *maf_id == NAND_MFR_HYNIX))
2822                 chip->options |= NAND_BBT_SCANLASTPAGE;
2823         else if ((!(chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
2824                                 (*maf_id == NAND_MFR_SAMSUNG ||
2825                                  *maf_id == NAND_MFR_HYNIX ||
2826                                  *maf_id == NAND_MFR_TOSHIBA ||
2827                                  *maf_id == NAND_MFR_AMD)) ||
2828                         (mtd->writesize == 2048 &&
2829                          *maf_id == NAND_MFR_MICRON))
2830                 chip->options |= NAND_BBT_SCAN2NDPAGE;
2831
2832         /*
2833          * Numonyx/ST 2K pages, x8 bus use BOTH byte 1 and 6
2834          */
2835         if (!(busw & NAND_BUSWIDTH_16) &&
2836                         *maf_id == NAND_MFR_STMICRO &&
2837                         mtd->writesize == 2048) {
2838                 chip->options |= NAND_BBT_SCANBYTE1AND6;
2839                 chip->badblockpos = 0;
2840         }
2841
2842         /* Check for AND chips with 4 page planes */
2843         if (chip->options & NAND_4PAGE_ARRAY)
2844                 chip->erase_cmd = multi_erase_cmd;
2845         else
2846                 chip->erase_cmd = single_erase_cmd;
2847
2848         /* Do not replace user supplied command function ! */
2849         if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
2850                 chip->cmdfunc = nand_command_lp;
2851
2852         /* TODO onfi flash name */
2853         name = type->name;
2854 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
2855         if (chip->onfi_version)
2856                 name = chip->onfi_params.model;
2857 #endif
2858         MTDDEBUG(MTD_DEBUG_LEVEL0, "NAND device: Manufacturer ID:"
2859                  " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id, *dev_id,
2860                  nand_manuf_ids[maf_idx].name, name);
2861
2862         return type;
2863 }
2864
2865 /**
2866  * nand_scan_ident - [NAND Interface] Scan for the NAND device
2867  * @mtd:             MTD device structure
2868  * @maxchips:        Number of chips to scan for
2869  * @table:           Alternative NAND ID table
2870  *
2871  * This is the first phase of the normal nand_scan() function. It
2872  * reads the flash ID and sets up MTD fields accordingly.
2873  *
2874  * The mtd->owner field must be set to the module of the caller.
2875  */
2876 int nand_scan_ident(struct mtd_info *mtd, int maxchips,
2877                     const struct nand_flash_dev *table)
2878 {
2879         int i, busw, nand_maf_id, nand_dev_id;
2880         struct nand_chip *chip = mtd->priv;
2881         const struct nand_flash_dev *type;
2882
2883         /* Get buswidth to select the correct functions */
2884         busw = chip->options & NAND_BUSWIDTH_16;
2885         /* Set the default functions */
2886         nand_set_defaults(chip, busw);
2887
2888         /* Read the flash type */
2889         type = nand_get_flash_type(mtd, chip, busw,
2890                                 &nand_maf_id, &nand_dev_id, table);
2891
2892         if (IS_ERR(type)) {
2893 #ifndef CONFIG_SYS_NAND_QUIET_TEST
2894                 printk(KERN_WARNING "No NAND device found!!!\n");
2895 #endif
2896                 chip->select_chip(mtd, -1);
2897                 return PTR_ERR(type);
2898         }
2899
2900         /* Check for a chip array */
2901         for (i = 1; i < maxchips; i++) {
2902                 chip->select_chip(mtd, i);
2903                 /* See comment in nand_get_flash_type for reset */
2904                 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2905                 /* Send the command for reading device ID */
2906                 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
2907                 /* Read manufacturer and device IDs */
2908                 if (nand_maf_id != chip->read_byte(mtd) ||
2909                     nand_dev_id != chip->read_byte(mtd))
2910                         break;
2911         }
2912 #ifdef DEBUG
2913         if (i > 1)
2914                 printk(KERN_INFO "%d NAND chips detected\n", i);
2915 #endif
2916
2917         /* Store the number of chips and calc total size for mtd */
2918         chip->numchips = i;
2919         mtd->size = i * chip->chipsize;
2920
2921         return 0;
2922 }
2923
2924
2925 /**
2926  * nand_scan_tail - [NAND Interface] Scan for the NAND device
2927  * @mtd:            MTD device structure
2928  *
2929  * This is the second phase of the normal nand_scan() function. It
2930  * fills out all the uninitialized function pointers with the defaults
2931  * and scans for a bad block table if appropriate.
2932  */
2933 int nand_scan_tail(struct mtd_info *mtd)
2934 {
2935         int i;
2936         struct nand_chip *chip = mtd->priv;
2937
2938         if (!(chip->options & NAND_OWN_BUFFERS))
2939                 chip->buffers = memalign(ARCH_DMA_MINALIGN,
2940                                          sizeof(*chip->buffers));
2941         if (!chip->buffers)
2942                 return -ENOMEM;
2943
2944         /* Set the internal oob buffer location, just after the page data */
2945         chip->oob_poi = chip->buffers->databuf + mtd->writesize;
2946
2947         /*
2948          * If no default placement scheme is given, select an appropriate one
2949          */
2950         if (!chip->ecc.layout && (chip->ecc.mode != NAND_ECC_SOFT_BCH)) {
2951                 switch (mtd->oobsize) {
2952                 case 8:
2953                         chip->ecc.layout = &nand_oob_8;
2954                         break;
2955                 case 16:
2956                         chip->ecc.layout = &nand_oob_16;
2957                         break;
2958                 case 64:
2959                         chip->ecc.layout = &nand_oob_64;
2960                         break;
2961                 case 128:
2962                         chip->ecc.layout = &nand_oob_128;
2963                         break;
2964                 default:
2965                         printk(KERN_WARNING "No oob scheme defined for "
2966                                "oobsize %d\n", mtd->oobsize);
2967                 }
2968         }
2969
2970         if (!chip->write_page)
2971                 chip->write_page = nand_write_page;
2972
2973         /*
2974          * check ECC mode, default to software if 3byte/512byte hardware ECC is
2975          * selected and we have 256 byte pagesize fallback to software ECC
2976          */
2977
2978         switch (chip->ecc.mode) {
2979         case NAND_ECC_HW_OOB_FIRST:
2980                 /* Similar to NAND_ECC_HW, but a separate read_page handle */
2981                 if (!chip->ecc.calculate || !chip->ecc.correct ||
2982                      !chip->ecc.hwctl) {
2983                         printk(KERN_WARNING "No ECC functions supplied; "
2984                                "Hardware ECC not possible\n");
2985                         BUG();
2986                 }
2987                 if (!chip->ecc.read_page)
2988                         chip->ecc.read_page = nand_read_page_hwecc_oob_first;
2989
2990         case NAND_ECC_HW:
2991                 /* Use standard hwecc read page function ? */
2992                 if (!chip->ecc.read_page)
2993                         chip->ecc.read_page = nand_read_page_hwecc;
2994                 if (!chip->ecc.write_page)
2995                         chip->ecc.write_page = nand_write_page_hwecc;
2996                 if (!chip->ecc.read_page_raw)
2997                         chip->ecc.read_page_raw = nand_read_page_raw;
2998                 if (!chip->ecc.write_page_raw)
2999                         chip->ecc.write_page_raw = nand_write_page_raw;
3000                 if (!chip->ecc.read_oob)
3001                         chip->ecc.read_oob = nand_read_oob_std;
3002                 if (!chip->ecc.write_oob)
3003                         chip->ecc.write_oob = nand_write_oob_std;
3004
3005         case NAND_ECC_HW_SYNDROME:
3006                 if ((!chip->ecc.calculate || !chip->ecc.correct ||
3007                      !chip->ecc.hwctl) &&
3008                     (!chip->ecc.read_page ||
3009                      chip->ecc.read_page == nand_read_page_hwecc ||
3010                      !chip->ecc.write_page ||
3011                      chip->ecc.write_page == nand_write_page_hwecc)) {
3012                         printk(KERN_WARNING "No ECC functions supplied; "
3013                                "Hardware ECC not possible\n");
3014                         BUG();
3015                 }
3016                 /* Use standard syndrome read/write page function ? */
3017                 if (!chip->ecc.read_page)
3018                         chip->ecc.read_page = nand_read_page_syndrome;
3019                 if (!chip->ecc.write_page)
3020                         chip->ecc.write_page = nand_write_page_syndrome;
3021                 if (!chip->ecc.read_page_raw)
3022                         chip->ecc.read_page_raw = nand_read_page_raw_syndrome;
3023                 if (!chip->ecc.write_page_raw)
3024                         chip->ecc.write_page_raw = nand_write_page_raw_syndrome;
3025                 if (!chip->ecc.read_oob)
3026                         chip->ecc.read_oob = nand_read_oob_syndrome;
3027                 if (!chip->ecc.write_oob)
3028                         chip->ecc.write_oob = nand_write_oob_syndrome;
3029
3030                 if (mtd->writesize >= chip->ecc.size)
3031                         break;
3032                 printk(KERN_WARNING "%d byte HW ECC not possible on "
3033                        "%d byte page size, fallback to SW ECC\n",
3034                        chip->ecc.size, mtd->writesize);
3035                 chip->ecc.mode = NAND_ECC_SOFT;
3036
3037         case NAND_ECC_SOFT:
3038                 chip->ecc.calculate = nand_calculate_ecc;
3039                 chip->ecc.correct = nand_correct_data;
3040                 chip->ecc.read_page = nand_read_page_swecc;
3041                 chip->ecc.read_subpage = nand_read_subpage;
3042                 chip->ecc.write_page = nand_write_page_swecc;
3043                 chip->ecc.read_page_raw = nand_read_page_raw;
3044                 chip->ecc.write_page_raw = nand_write_page_raw;
3045                 chip->ecc.read_oob = nand_read_oob_std;
3046                 chip->ecc.write_oob = nand_write_oob_std;
3047                 if (!chip->ecc.size)
3048                         chip->ecc.size = 256;
3049                 chip->ecc.bytes = 3;
3050                 break;
3051
3052         case NAND_ECC_SOFT_BCH:
3053                 if (!mtd_nand_has_bch()) {
3054                         printk(KERN_WARNING "CONFIG_MTD_ECC_BCH not enabled\n");
3055                         return -EINVAL;
3056                 }
3057                 chip->ecc.calculate = nand_bch_calculate_ecc;
3058                 chip->ecc.correct = nand_bch_correct_data;
3059                 chip->ecc.read_page = nand_read_page_swecc;
3060                 chip->ecc.read_subpage = nand_read_subpage;
3061                 chip->ecc.write_page = nand_write_page_swecc;
3062                 chip->ecc.read_page_raw = nand_read_page_raw;
3063                 chip->ecc.write_page_raw = nand_write_page_raw;
3064                 chip->ecc.read_oob = nand_read_oob_std;
3065                 chip->ecc.write_oob = nand_write_oob_std;
3066                 /*
3067                  * Board driver should supply ecc.size and ecc.bytes values to
3068                  * select how many bits are correctable; see nand_bch_init()
3069                  * for details.
3070                  * Otherwise, default to 4 bits for large page devices
3071                  */
3072                 if (!chip->ecc.size && (mtd->oobsize >= 64)) {
3073                         chip->ecc.size = 512;
3074                         chip->ecc.bytes = 7;
3075                 }
3076                 chip->ecc.priv = nand_bch_init(mtd,
3077                                                chip->ecc.size,
3078                                                chip->ecc.bytes,
3079                                                &chip->ecc.layout);
3080                 if (!chip->ecc.priv)
3081                         printk(KERN_WARNING "BCH ECC initialization failed!\n");
3082
3083                 break;
3084
3085         case NAND_ECC_NONE:
3086                 printk(KERN_WARNING "NAND_ECC_NONE selected by board driver. "
3087                        "This is not recommended !!\n");
3088                 chip->ecc.read_page = nand_read_page_raw;
3089                 chip->ecc.write_page = nand_write_page_raw;
3090                 chip->ecc.read_oob = nand_read_oob_std;
3091                 chip->ecc.read_page_raw = nand_read_page_raw;
3092                 chip->ecc.write_page_raw = nand_write_page_raw;
3093                 chip->ecc.write_oob = nand_write_oob_std;
3094                 chip->ecc.size = mtd->writesize;
3095                 chip->ecc.bytes = 0;
3096                 break;
3097
3098         default:
3099                 printk(KERN_WARNING "Invalid NAND_ECC_MODE %d\n",
3100                        chip->ecc.mode);
3101                 BUG();
3102         }
3103
3104         /*
3105          * The number of bytes available for a client to place data into
3106          * the out of band area
3107          */
3108         chip->ecc.layout->oobavail = 0;
3109         for (i = 0; chip->ecc.layout->oobfree[i].length
3110                         && i < ARRAY_SIZE(chip->ecc.layout->oobfree); i++)
3111                 chip->ecc.layout->oobavail +=
3112                         chip->ecc.layout->oobfree[i].length;
3113         mtd->oobavail = chip->ecc.layout->oobavail;
3114
3115         /*
3116          * Set the number of read / write steps for one page depending on ECC
3117          * mode
3118          */
3119         chip->ecc.steps = mtd->writesize / chip->ecc.size;
3120         if (chip->ecc.steps * chip->ecc.size != mtd->writesize) {
3121                 printk(KERN_WARNING "Invalid ecc parameters\n");
3122                 BUG();
3123         }
3124         chip->ecc.total = chip->ecc.steps * chip->ecc.bytes;
3125
3126         /*
3127          * Allow subpage writes up to ecc.steps. Not possible for MLC
3128          * FLASH.
3129          */
3130         if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
3131             !(chip->cellinfo & NAND_CI_CELLTYPE_MSK)) {
3132                 switch (chip->ecc.steps) {
3133                 case 2:
3134                         mtd->subpage_sft = 1;
3135                         break;
3136                 case 4:
3137                 case 8:
3138                 case 16:
3139                         mtd->subpage_sft = 2;
3140                         break;
3141                 }
3142         }
3143         chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
3144
3145         /* Initialize state */
3146         chip->state = FL_READY;
3147
3148         /* De-select the device */
3149         chip->select_chip(mtd, -1);
3150
3151         /* Invalidate the pagebuffer reference */
3152         chip->pagebuf = -1;
3153
3154         /* Large page NAND with SOFT_ECC should support subpage reads */
3155         if ((chip->ecc.mode == NAND_ECC_SOFT) && (chip->page_shift > 9))
3156                 chip->options |= NAND_SUBPAGE_READ;
3157
3158         /* Fill in remaining MTD driver data */
3159         mtd->type = MTD_NANDFLASH;
3160         mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
3161                                                 MTD_CAP_NANDFLASH;
3162         mtd->erase = nand_erase;
3163         mtd->point = NULL;
3164         mtd->unpoint = NULL;
3165         mtd->read = nand_read;
3166         mtd->write = nand_write;
3167         mtd->read_oob = nand_read_oob;
3168         mtd->write_oob = nand_write_oob;
3169         mtd->sync = nand_sync;
3170         mtd->lock = NULL;
3171         mtd->unlock = NULL;
3172         mtd->block_isbad = nand_block_isbad;
3173         mtd->block_markbad = nand_block_markbad;
3174
3175         /* propagate ecc.layout to mtd_info */
3176         mtd->ecclayout = chip->ecc.layout;
3177
3178         /* Check, if we should skip the bad block table scan */
3179         if (chip->options & NAND_SKIP_BBTSCAN)
3180                 chip->options |= NAND_BBT_SCANNED;
3181
3182         return 0;
3183 }
3184
3185 /**
3186  * nand_scan - [NAND Interface] Scan for the NAND device
3187  * @mtd:        MTD device structure
3188  * @maxchips:   Number of chips to scan for
3189  *
3190  * This fills out all the uninitialized function pointers
3191  * with the defaults.
3192  * The flash ID is read and the mtd/chip structures are
3193  * filled with the appropriate values.
3194  * The mtd->owner field must be set to the module of the caller
3195  *
3196  */
3197 int nand_scan(struct mtd_info *mtd, int maxchips)
3198 {
3199         int ret;
3200
3201         ret = nand_scan_ident(mtd, maxchips, NULL);
3202         if (!ret)
3203                 ret = nand_scan_tail(mtd);
3204         return ret;
3205 }
3206
3207 /**
3208  * nand_release - [NAND Interface] Free resources held by the NAND device
3209  * @mtd:        MTD device structure
3210 */
3211 void nand_release(struct mtd_info *mtd)
3212 {
3213         struct nand_chip *chip = mtd->priv;
3214
3215         if (chip->ecc.mode == NAND_ECC_SOFT_BCH)
3216                 nand_bch_free((struct nand_bch_control *)chip->ecc.priv);
3217
3218 #ifdef CONFIG_MTD_PARTITIONS
3219         /* Deregister partitions */
3220         del_mtd_partitions(mtd);
3221 #endif
3222
3223         /* Free bad block table memory */
3224         kfree(chip->bbt);
3225         if (!(chip->options & NAND_OWN_BUFFERS))
3226                 kfree(chip->buffers);
3227
3228         /* Free bad block descriptor memory */
3229         if (chip->badblock_pattern && chip->badblock_pattern->options
3230                         & NAND_BBT_DYNAMICSTRUCT)
3231                 kfree(chip->badblock_pattern);
3232 }