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