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