]> git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/mtd/nand/nand_base.c
mtd, ubi, ubifs: resync with Linux-3.14
[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 *
8 * Additional technical information is available on
9 * http://www.linux-mtd.infradead.org/doc/nand.html
10 *
11 * Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
12 * 2002-2006 Thomas Gleixner (tglx@linutronix.de)
13 *
14 * Credits:
15 * David Woodhouse for adding multichip support
16 *
17 * Aleph One Ltd. and Toby Churchill Ltd. for supporting the
18 * rework for 2K page size chips
19 *
20 * TODO:
21 * Enable cached programming for 2k page size chips
22 * Check, if mtd->ecctype should be set to MTD_ECC_HW
23 * if we have HW ECC support.
24 * BBT table is not serialized, has to be fixed
25 *
26 * This program is free software; you can redistribute it and/or modify
27 * it under the terms of the GNU General Public License version 2 as
28 * published by the Free Software Foundation.
29 *
30 */
31
32 #define __UBOOT__
33 #ifndef __UBOOT__
34 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
35
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/nand_bch.h>
47 #include <linux/interrupt.h>
48 #include <linux/bitops.h>
49 #include <linux/leds.h>
50 #include <linux/io.h>
51 #include <linux/mtd/partitions.h>
52 #else
53 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
54 #include <common.h>
55 #include <malloc.h>
56 #include <watchdog.h>
57 #include <linux/err.h>
58 #include <linux/compat.h>
59 #include <linux/mtd/mtd.h>
60 #include <linux/mtd/nand.h>
61 #include <linux/mtd/nand_ecc.h>
62 #include <linux/mtd/nand_bch.h>
63 #ifdef CONFIG_MTD_PARTITIONS
64 #include <linux/mtd/partitions.h>
65 #endif
66 #include <asm/io.h>
67 #include <asm/errno.h>
68
69 /*
70 * CONFIG_SYS_NAND_RESET_CNT is used as a timeout mechanism when resetting
71 * a flash. NAND flash is initialized prior to interrupts so standard timers
72 * can't be used. CONFIG_SYS_NAND_RESET_CNT should be set to a value
73 * which is greater than (max NAND reset time / NAND status read time).
74 * A conservative default of 200000 (500 us / 25 ns) is used as a default.
75 */
76 #ifndef CONFIG_SYS_NAND_RESET_CNT
77 #define CONFIG_SYS_NAND_RESET_CNT 200000
78 #endif
79
80 static bool is_module_text_address(unsigned long addr) {return 0;}
81 #endif
82
83 /* Define default oob placement schemes for large and small page devices */
84 static struct nand_ecclayout nand_oob_8 = {
85 .eccbytes = 3,
86 .eccpos = {0, 1, 2},
87 .oobfree = {
88 {.offset = 3,
89 .length = 2},
90 {.offset = 6,
91 .length = 2} }
92 };
93
94 static struct nand_ecclayout nand_oob_16 = {
95 .eccbytes = 6,
96 .eccpos = {0, 1, 2, 3, 6, 7},
97 .oobfree = {
98 {.offset = 8,
99 . length = 8} }
100 };
101
102 static struct nand_ecclayout nand_oob_64 = {
103 .eccbytes = 24,
104 .eccpos = {
105 40, 41, 42, 43, 44, 45, 46, 47,
106 48, 49, 50, 51, 52, 53, 54, 55,
107 56, 57, 58, 59, 60, 61, 62, 63},
108 .oobfree = {
109 {.offset = 2,
110 .length = 38} }
111 };
112
113 static struct nand_ecclayout nand_oob_128 = {
114 .eccbytes = 48,
115 .eccpos = {
116 80, 81, 82, 83, 84, 85, 86, 87,
117 88, 89, 90, 91, 92, 93, 94, 95,
118 96, 97, 98, 99, 100, 101, 102, 103,
119 104, 105, 106, 107, 108, 109, 110, 111,
120 112, 113, 114, 115, 116, 117, 118, 119,
121 120, 121, 122, 123, 124, 125, 126, 127},
122 .oobfree = {
123 {.offset = 2,
124 .length = 78} }
125 };
126
127 static int nand_get_device(struct mtd_info *mtd, int new_state);
128
129 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
130 struct mtd_oob_ops *ops);
131
132 /*
133 * For devices which display every fart in the system on a separate LED. Is
134 * compiled away when LED support is disabled.
135 */
136 DEFINE_LED_TRIGGER(nand_led_trigger);
137
138 static int check_offs_len(struct mtd_info *mtd,
139 loff_t ofs, uint64_t len)
140 {
141 struct nand_chip *chip = mtd->priv;
142 int ret = 0;
143
144 /* Start address must align on block boundary */
145 if (ofs & ((1ULL << chip->phys_erase_shift) - 1)) {
146 pr_debug("%s: unaligned address\n", __func__);
147 ret = -EINVAL;
148 }
149
150 /* Length must align on block boundary */
151 if (len & ((1ULL << chip->phys_erase_shift) - 1)) {
152 pr_debug("%s: length not block aligned\n", __func__);
153 ret = -EINVAL;
154 }
155
156 return ret;
157 }
158
159 /**
160 * nand_release_device - [GENERIC] release chip
161 * @mtd: MTD device structure
162 *
163 * Release chip lock and wake up anyone waiting on the device.
164 */
165 static void nand_release_device(struct mtd_info *mtd)
166 {
167 struct nand_chip *chip = mtd->priv;
168
169 #ifndef __UBOOT__
170 /* Release the controller and the chip */
171 spin_lock(&chip->controller->lock);
172 chip->controller->active = NULL;
173 chip->state = FL_READY;
174 wake_up(&chip->controller->wq);
175 spin_unlock(&chip->controller->lock);
176 #else
177 /* De-select the NAND device */
178 chip->select_chip(mtd, -1);
179 #endif
180 }
181
182 /**
183 * nand_read_byte - [DEFAULT] read one byte from the chip
184 * @mtd: MTD device structure
185 *
186 * Default read function for 8bit buswidth
187 */
188 #ifndef __UBOOT__
189 static uint8_t nand_read_byte(struct mtd_info *mtd)
190 #else
191 uint8_t nand_read_byte(struct mtd_info *mtd)
192 #endif
193 {
194 struct nand_chip *chip = mtd->priv;
195 return readb(chip->IO_ADDR_R);
196 }
197
198 /**
199 * nand_read_byte16 - [DEFAULT] read one byte endianness aware from the chip
200 * nand_read_byte16 - [DEFAULT] read one byte endianness aware from the chip
201 * @mtd: MTD device structure
202 *
203 * Default read function for 16bit buswidth with endianness conversion.
204 *
205 */
206 static uint8_t nand_read_byte16(struct mtd_info *mtd)
207 {
208 struct nand_chip *chip = mtd->priv;
209 return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R));
210 }
211
212 /**
213 * nand_read_word - [DEFAULT] read one word from the chip
214 * @mtd: MTD device structure
215 *
216 * Default read function for 16bit buswidth without endianness conversion.
217 */
218 static u16 nand_read_word(struct mtd_info *mtd)
219 {
220 struct nand_chip *chip = mtd->priv;
221 return readw(chip->IO_ADDR_R);
222 }
223
224 /**
225 * nand_select_chip - [DEFAULT] control CE line
226 * @mtd: MTD device structure
227 * @chipnr: chipnumber to select, -1 for deselect
228 *
229 * Default select function for 1 chip devices.
230 */
231 static void nand_select_chip(struct mtd_info *mtd, int chipnr)
232 {
233 struct nand_chip *chip = mtd->priv;
234
235 switch (chipnr) {
236 case -1:
237 chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
238 break;
239 case 0:
240 break;
241
242 default:
243 BUG();
244 }
245 }
246
247 /**
248 * nand_write_byte - [DEFAULT] write single byte to chip
249 * @mtd: MTD device structure
250 * @byte: value to write
251 *
252 * Default function to write a byte to I/O[7:0]
253 */
254 static void nand_write_byte(struct mtd_info *mtd, uint8_t byte)
255 {
256 struct nand_chip *chip = mtd->priv;
257
258 chip->write_buf(mtd, &byte, 1);
259 }
260
261 /**
262 * nand_write_byte16 - [DEFAULT] write single byte to a chip with width 16
263 * @mtd: MTD device structure
264 * @byte: value to write
265 *
266 * Default function to write a byte to I/O[7:0] on a 16-bit wide chip.
267 */
268 static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte)
269 {
270 struct nand_chip *chip = mtd->priv;
271 uint16_t word = byte;
272
273 /*
274 * It's not entirely clear what should happen to I/O[15:8] when writing
275 * a byte. The ONFi spec (Revision 3.1; 2012-09-19, Section 2.16) reads:
276 *
277 * When the host supports a 16-bit bus width, only data is
278 * transferred at the 16-bit width. All address and command line
279 * transfers shall use only the lower 8-bits of the data bus. During
280 * command transfers, the host may place any value on the upper
281 * 8-bits of the data bus. During address transfers, the host shall
282 * set the upper 8-bits of the data bus to 00h.
283 *
284 * One user of the write_byte callback is nand_onfi_set_features. The
285 * four parameters are specified to be written to I/O[7:0], but this is
286 * neither an address nor a command transfer. Let's assume a 0 on the
287 * upper I/O lines is OK.
288 */
289 chip->write_buf(mtd, (uint8_t *)&word, 2);
290 }
291
292 #if defined(__UBOOT__) && !defined(CONFIG_BLACKFIN)
293 static void iowrite8_rep(void *addr, const uint8_t *buf, int len)
294 {
295 int i;
296
297 for (i = 0; i < len; i++)
298 writeb(buf[i], addr);
299 }
300 static void ioread8_rep(void *addr, uint8_t *buf, int len)
301 {
302 int i;
303
304 for (i = 0; i < len; i++)
305 buf[i] = readb(addr);
306 }
307
308 static void ioread16_rep(void *addr, void *buf, int len)
309 {
310 int i;
311 u16 *p = (u16 *) buf;
312 len >>= 1;
313
314 for (i = 0; i < len; i++)
315 p[i] = readw(addr);
316 }
317
318 static void iowrite16_rep(void *addr, void *buf, int len)
319 {
320 int i;
321 u16 *p = (u16 *) buf;
322 len >>= 1;
323
324 for (i = 0; i < len; i++)
325 writew(p[i], addr);
326 }
327 #endif
328
329 /**
330 * nand_write_buf - [DEFAULT] write buffer to chip
331 * @mtd: MTD device structure
332 * @buf: data buffer
333 * @len: number of bytes to write
334 *
335 * Default write function for 8bit buswidth.
336 */
337 #ifndef __UBOOT__
338 static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
339 #else
340 void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
341 #endif
342 {
343 struct nand_chip *chip = mtd->priv;
344
345 iowrite8_rep(chip->IO_ADDR_W, buf, len);
346 }
347
348 /**
349 * nand_read_buf - [DEFAULT] read chip data into buffer
350 * @mtd: MTD device structure
351 * @buf: buffer to store date
352 * @len: number of bytes to read
353 *
354 * Default read function for 8bit buswidth.
355 */
356 #ifndef __UBOOT__
357 static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
358 #else
359 void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
360 #endif
361 {
362 struct nand_chip *chip = mtd->priv;
363
364 ioread8_rep(chip->IO_ADDR_R, buf, len);
365 }
366
367 #ifdef __UBOOT__
368 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
369 /**
370 * nand_verify_buf - [DEFAULT] Verify chip data against buffer
371 * @mtd: MTD device structure
372 * @buf: buffer containing the data to compare
373 * @len: number of bytes to compare
374 *
375 * Default verify function for 8bit buswidth.
376 */
377 static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
378 {
379 int i;
380 struct nand_chip *chip = mtd->priv;
381
382 for (i = 0; i < len; i++)
383 if (buf[i] != readb(chip->IO_ADDR_R))
384 return -EFAULT;
385 return 0;
386 }
387
388 /**
389 * nand_verify_buf16 - [DEFAULT] Verify chip data against buffer
390 * @mtd: MTD device structure
391 * @buf: buffer containing the data to compare
392 * @len: number of bytes to compare
393 *
394 * Default verify function for 16bit buswidth.
395 */
396 static int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
397 {
398 int i;
399 struct nand_chip *chip = mtd->priv;
400 u16 *p = (u16 *) buf;
401 len >>= 1;
402
403 for (i = 0; i < len; i++)
404 if (p[i] != readw(chip->IO_ADDR_R))
405 return -EFAULT;
406
407 return 0;
408 }
409 #endif
410 #endif
411
412 /**
413 * nand_write_buf16 - [DEFAULT] write buffer to chip
414 * @mtd: MTD device structure
415 * @buf: data buffer
416 * @len: number of bytes to write
417 *
418 * Default write function for 16bit buswidth.
419 */
420 #ifndef __UBOOT__
421 static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
422 #else
423 void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
424 #endif
425 {
426 struct nand_chip *chip = mtd->priv;
427 u16 *p = (u16 *) buf;
428
429 iowrite16_rep(chip->IO_ADDR_W, p, len >> 1);
430 }
431
432 /**
433 * nand_read_buf16 - [DEFAULT] read chip data into buffer
434 * @mtd: MTD device structure
435 * @buf: buffer to store date
436 * @len: number of bytes to read
437 *
438 * Default read function for 16bit buswidth.
439 */
440 #ifndef __UBOOT__
441 static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
442 #else
443 void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
444 #endif
445 {
446 struct nand_chip *chip = mtd->priv;
447 u16 *p = (u16 *) buf;
448
449 ioread16_rep(chip->IO_ADDR_R, p, len >> 1);
450 }
451
452 /**
453 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
454 * @mtd: MTD device structure
455 * @ofs: offset from device start
456 * @getchip: 0, if the chip is already selected
457 *
458 * Check, if the block is bad.
459 */
460 static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
461 {
462 int page, chipnr, res = 0, i = 0;
463 struct nand_chip *chip = mtd->priv;
464 u16 bad;
465
466 if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
467 ofs += mtd->erasesize - mtd->writesize;
468
469 page = (int)(ofs >> chip->page_shift) & chip->pagemask;
470
471 if (getchip) {
472 chipnr = (int)(ofs >> chip->chip_shift);
473
474 nand_get_device(mtd, FL_READING);
475
476 /* Select the NAND device */
477 chip->select_chip(mtd, chipnr);
478 }
479
480 do {
481 if (chip->options & NAND_BUSWIDTH_16) {
482 chip->cmdfunc(mtd, NAND_CMD_READOOB,
483 chip->badblockpos & 0xFE, page);
484 bad = cpu_to_le16(chip->read_word(mtd));
485 if (chip->badblockpos & 0x1)
486 bad >>= 8;
487 else
488 bad &= 0xFF;
489 } else {
490 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos,
491 page);
492 bad = chip->read_byte(mtd);
493 }
494
495 if (likely(chip->badblockbits == 8))
496 res = bad != 0xFF;
497 else
498 res = hweight8(bad) < chip->badblockbits;
499 ofs += mtd->writesize;
500 page = (int)(ofs >> chip->page_shift) & chip->pagemask;
501 i++;
502 } while (!res && i < 2 && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE));
503
504 if (getchip) {
505 chip->select_chip(mtd, -1);
506 nand_release_device(mtd);
507 }
508
509 return res;
510 }
511
512 /**
513 * nand_default_block_markbad - [DEFAULT] mark a block bad via bad block marker
514 * @mtd: MTD device structure
515 * @ofs: offset from device start
516 *
517 * This is the default implementation, which can be overridden by a hardware
518 * specific driver. It provides the details for writing a bad block marker to a
519 * block.
520 */
521 static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
522 {
523 struct nand_chip *chip = mtd->priv;
524 struct mtd_oob_ops ops;
525 uint8_t buf[2] = { 0, 0 };
526 int ret = 0, res, i = 0;
527
528 ops.datbuf = NULL;
529 ops.oobbuf = buf;
530 ops.ooboffs = chip->badblockpos;
531 if (chip->options & NAND_BUSWIDTH_16) {
532 ops.ooboffs &= ~0x01;
533 ops.len = ops.ooblen = 2;
534 } else {
535 ops.len = ops.ooblen = 1;
536 }
537 ops.mode = MTD_OPS_PLACE_OOB;
538
539 /* Write to first/last page(s) if necessary */
540 if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
541 ofs += mtd->erasesize - mtd->writesize;
542 do {
543 res = nand_do_write_oob(mtd, ofs, &ops);
544 if (!ret)
545 ret = res;
546
547 i++;
548 ofs += mtd->writesize;
549 } while ((chip->bbt_options & NAND_BBT_SCAN2NDPAGE) && i < 2);
550
551 return ret;
552 }
553
554 /**
555 * nand_block_markbad_lowlevel - mark a block bad
556 * @mtd: MTD device structure
557 * @ofs: offset from device start
558 *
559 * This function performs the generic NAND bad block marking steps (i.e., bad
560 * block table(s) and/or marker(s)). We only allow the hardware driver to
561 * specify how to write bad block markers to OOB (chip->block_markbad).
562 *
563 * We try operations in the following order:
564 * (1) erase the affected block, to allow OOB marker to be written cleanly
565 * (2) write bad block marker to OOB area of affected block (unless flag
566 * NAND_BBT_NO_OOB_BBM is present)
567 * (3) update the BBT
568 * Note that we retain the first error encountered in (2) or (3), finish the
569 * procedures, and dump the error in the end.
570 */
571 static int nand_block_markbad_lowlevel(struct mtd_info *mtd, loff_t ofs)
572 {
573 struct nand_chip *chip = mtd->priv;
574 int res, ret = 0;
575
576 if (!(chip->bbt_options & NAND_BBT_NO_OOB_BBM)) {
577 struct erase_info einfo;
578
579 /* Attempt erase before marking OOB */
580 memset(&einfo, 0, sizeof(einfo));
581 einfo.mtd = mtd;
582 einfo.addr = ofs;
583 einfo.len = 1ULL << chip->phys_erase_shift;
584 nand_erase_nand(mtd, &einfo, 0);
585
586 /* Write bad block marker to OOB */
587 nand_get_device(mtd, FL_WRITING);
588 ret = chip->block_markbad(mtd, ofs);
589 nand_release_device(mtd);
590 }
591
592 /* Mark block bad in BBT */
593 if (chip->bbt) {
594 res = nand_markbad_bbt(mtd, ofs);
595 if (!ret)
596 ret = res;
597 }
598
599 if (!ret)
600 mtd->ecc_stats.badblocks++;
601
602 return ret;
603 }
604
605 /**
606 * nand_check_wp - [GENERIC] check if the chip is write protected
607 * @mtd: MTD device structure
608 *
609 * Check, if the device is write protected. The function expects, that the
610 * device is already selected.
611 */
612 static int nand_check_wp(struct mtd_info *mtd)
613 {
614 struct nand_chip *chip = mtd->priv;
615
616 /* Broken xD cards report WP despite being writable */
617 if (chip->options & NAND_BROKEN_XD)
618 return 0;
619
620 /* Check the WP bit */
621 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
622 return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
623 }
624
625 /**
626 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
627 * @mtd: MTD device structure
628 * @ofs: offset from device start
629 * @getchip: 0, if the chip is already selected
630 * @allowbbt: 1, if its allowed to access the bbt area
631 *
632 * Check, if the block is bad. Either by reading the bad block table or
633 * calling of the scan function.
634 */
635 static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
636 int allowbbt)
637 {
638 struct nand_chip *chip = mtd->priv;
639
640 if (!chip->bbt)
641 return chip->block_bad(mtd, ofs, getchip);
642
643 /* Return info from the table */
644 return nand_isbad_bbt(mtd, ofs, allowbbt);
645 }
646
647 #ifndef __UBOOT__
648 /**
649 * panic_nand_wait_ready - [GENERIC] Wait for the ready pin after commands.
650 * @mtd: MTD device structure
651 * @timeo: Timeout
652 *
653 * Helper function for nand_wait_ready used when needing to wait in interrupt
654 * context.
655 */
656 static void panic_nand_wait_ready(struct mtd_info *mtd, unsigned long timeo)
657 {
658 struct nand_chip *chip = mtd->priv;
659 int i;
660
661 /* Wait for the device to get ready */
662 for (i = 0; i < timeo; i++) {
663 if (chip->dev_ready(mtd))
664 break;
665 touch_softlockup_watchdog();
666 mdelay(1);
667 }
668 }
669 #endif
670
671 /* Wait for the ready pin, after a command. The timeout is caught later. */
672 void nand_wait_ready(struct mtd_info *mtd)
673 {
674 struct nand_chip *chip = mtd->priv;
675 #ifndef __UBOOT__
676 unsigned long timeo = jiffies + msecs_to_jiffies(20);
677
678 /* 400ms timeout */
679 if (in_interrupt() || oops_in_progress)
680 return panic_nand_wait_ready(mtd, 400);
681
682 led_trigger_event(nand_led_trigger, LED_FULL);
683 /* Wait until command is processed or timeout occurs */
684 do {
685 if (chip->dev_ready(mtd))
686 break;
687 touch_softlockup_watchdog();
688 } while (time_before(jiffies, timeo));
689 led_trigger_event(nand_led_trigger, LED_OFF);
690 #else
691 u32 timeo = (CONFIG_SYS_HZ * 20) / 1000;
692 u32 time_start;
693
694 time_start = get_timer(0);
695 /* Wait until command is processed or timeout occurs */
696 while (get_timer(time_start) < timeo) {
697 if (chip->dev_ready)
698 if (chip->dev_ready(mtd))
699 break;
700 }
701 #endif
702 }
703 EXPORT_SYMBOL_GPL(nand_wait_ready);
704
705 /**
706 * nand_command - [DEFAULT] Send command to NAND device
707 * @mtd: MTD device structure
708 * @command: the command to be sent
709 * @column: the column address for this command, -1 if none
710 * @page_addr: the page address for this command, -1 if none
711 *
712 * Send command to NAND device. This function is used for small page devices
713 * (512 Bytes per page).
714 */
715 static void nand_command(struct mtd_info *mtd, unsigned int command,
716 int column, int page_addr)
717 {
718 register struct nand_chip *chip = mtd->priv;
719 int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
720 uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
721
722 /* Write out the command to the device */
723 if (command == NAND_CMD_SEQIN) {
724 int readcmd;
725
726 if (column >= mtd->writesize) {
727 /* OOB area */
728 column -= mtd->writesize;
729 readcmd = NAND_CMD_READOOB;
730 } else if (column < 256) {
731 /* First 256 bytes --> READ0 */
732 readcmd = NAND_CMD_READ0;
733 } else {
734 column -= 256;
735 readcmd = NAND_CMD_READ1;
736 }
737 chip->cmd_ctrl(mtd, readcmd, ctrl);
738 ctrl &= ~NAND_CTRL_CHANGE;
739 }
740 chip->cmd_ctrl(mtd, command, ctrl);
741
742 /* Address cycle, when necessary */
743 ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
744 /* Serially input address */
745 if (column != -1) {
746 /* Adjust columns for 16 bit buswidth */
747 if ((chip->options & NAND_BUSWIDTH_16) &&
748 !nand_opcode_8bits(command))
749 column >>= 1;
750 chip->cmd_ctrl(mtd, column, ctrl);
751 ctrl &= ~NAND_CTRL_CHANGE;
752 }
753 if (page_addr != -1) {
754 chip->cmd_ctrl(mtd, page_addr, ctrl);
755 ctrl &= ~NAND_CTRL_CHANGE;
756 chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
757 /* One more address cycle for devices > 32MiB */
758 if (chip->chipsize > (32 << 20))
759 chip->cmd_ctrl(mtd, page_addr >> 16, ctrl);
760 }
761 chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
762
763 /*
764 * Program and erase have their own busy handlers status and sequential
765 * in needs no delay
766 */
767 switch (command) {
768
769 case NAND_CMD_PAGEPROG:
770 case NAND_CMD_ERASE1:
771 case NAND_CMD_ERASE2:
772 case NAND_CMD_SEQIN:
773 case NAND_CMD_STATUS:
774 return;
775
776 case NAND_CMD_RESET:
777 if (chip->dev_ready)
778 break;
779 udelay(chip->chip_delay);
780 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
781 NAND_CTRL_CLE | NAND_CTRL_CHANGE);
782 chip->cmd_ctrl(mtd,
783 NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
784 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
785 (rst_sts_cnt--));
786 return;
787
788 /* This applies to read commands */
789 default:
790 /*
791 * If we don't have access to the busy pin, we apply the given
792 * command delay
793 */
794 if (!chip->dev_ready) {
795 udelay(chip->chip_delay);
796 return;
797 }
798 }
799 /*
800 * Apply this short delay always to ensure that we do wait tWB in
801 * any case on any machine.
802 */
803 ndelay(100);
804
805 nand_wait_ready(mtd);
806 }
807
808 /**
809 * nand_command_lp - [DEFAULT] Send command to NAND large page device
810 * @mtd: MTD device structure
811 * @command: the command to be sent
812 * @column: the column address for this command, -1 if none
813 * @page_addr: the page address for this command, -1 if none
814 *
815 * Send command to NAND device. This is the version for the new large page
816 * devices. We don't have the separate regions as we have in the small page
817 * devices. We must emulate NAND_CMD_READOOB to keep the code compatible.
818 */
819 static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
820 int column, int page_addr)
821 {
822 register struct nand_chip *chip = mtd->priv;
823 uint32_t rst_sts_cnt = CONFIG_SYS_NAND_RESET_CNT;
824
825 /* Emulate NAND_CMD_READOOB */
826 if (command == NAND_CMD_READOOB) {
827 column += mtd->writesize;
828 command = NAND_CMD_READ0;
829 }
830
831 /* Command latch cycle */
832 chip->cmd_ctrl(mtd, command, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
833
834 if (column != -1 || page_addr != -1) {
835 int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
836
837 /* Serially input address */
838 if (column != -1) {
839 /* Adjust columns for 16 bit buswidth */
840 if ((chip->options & NAND_BUSWIDTH_16) &&
841 !nand_opcode_8bits(command))
842 column >>= 1;
843 chip->cmd_ctrl(mtd, column, ctrl);
844 ctrl &= ~NAND_CTRL_CHANGE;
845 chip->cmd_ctrl(mtd, column >> 8, ctrl);
846 }
847 if (page_addr != -1) {
848 chip->cmd_ctrl(mtd, page_addr, ctrl);
849 chip->cmd_ctrl(mtd, page_addr >> 8,
850 NAND_NCE | NAND_ALE);
851 /* One more address cycle for devices > 128MiB */
852 if (chip->chipsize > (128 << 20))
853 chip->cmd_ctrl(mtd, page_addr >> 16,
854 NAND_NCE | NAND_ALE);
855 }
856 }
857 chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
858
859 /*
860 * Program and erase have their own busy handlers status, sequential
861 * in, and deplete1 need no delay.
862 */
863 switch (command) {
864
865 case NAND_CMD_CACHEDPROG:
866 case NAND_CMD_PAGEPROG:
867 case NAND_CMD_ERASE1:
868 case NAND_CMD_ERASE2:
869 case NAND_CMD_SEQIN:
870 case NAND_CMD_RNDIN:
871 case NAND_CMD_STATUS:
872 return;
873
874 case NAND_CMD_RESET:
875 if (chip->dev_ready)
876 break;
877 udelay(chip->chip_delay);
878 chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
879 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
880 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
881 NAND_NCE | NAND_CTRL_CHANGE);
882 while (!(chip->read_byte(mtd) & NAND_STATUS_READY) &&
883 (rst_sts_cnt--));
884 return;
885
886 case NAND_CMD_RNDOUT:
887 /* No ready / busy check necessary */
888 chip->cmd_ctrl(mtd, NAND_CMD_RNDOUTSTART,
889 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
890 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
891 NAND_NCE | NAND_CTRL_CHANGE);
892 return;
893
894 case NAND_CMD_READ0:
895 chip->cmd_ctrl(mtd, NAND_CMD_READSTART,
896 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
897 chip->cmd_ctrl(mtd, NAND_CMD_NONE,
898 NAND_NCE | NAND_CTRL_CHANGE);
899
900 /* This applies to read commands */
901 default:
902 /*
903 * If we don't have access to the busy pin, we apply the given
904 * command delay.
905 */
906 if (!chip->dev_ready) {
907 udelay(chip->chip_delay);
908 return;
909 }
910 }
911
912 /*
913 * Apply this short delay always to ensure that we do wait tWB in
914 * any case on any machine.
915 */
916 ndelay(100);
917
918 nand_wait_ready(mtd);
919 }
920
921 /**
922 * panic_nand_get_device - [GENERIC] Get chip for selected access
923 * @chip: the nand chip descriptor
924 * @mtd: MTD device structure
925 * @new_state: the state which is requested
926 *
927 * Used when in panic, no locks are taken.
928 */
929 static void panic_nand_get_device(struct nand_chip *chip,
930 struct mtd_info *mtd, int new_state)
931 {
932 /* Hardware controller shared among independent devices */
933 chip->controller->active = chip;
934 chip->state = new_state;
935 }
936
937 /**
938 * nand_get_device - [GENERIC] Get chip for selected access
939 * @mtd: MTD device structure
940 * @new_state: the state which is requested
941 *
942 * Get the device and lock it for exclusive access
943 */
944 static int
945 nand_get_device(struct mtd_info *mtd, int new_state)
946 {
947 struct nand_chip *chip = mtd->priv;
948 #ifndef __UBOOT__
949 spinlock_t *lock = &chip->controller->lock;
950 wait_queue_head_t *wq = &chip->controller->wq;
951 DECLARE_WAITQUEUE(wait, current);
952 retry:
953 spin_lock(lock);
954
955 /* Hardware controller shared among independent devices */
956 if (!chip->controller->active)
957 chip->controller->active = chip;
958
959 if (chip->controller->active == chip && chip->state == FL_READY) {
960 chip->state = new_state;
961 spin_unlock(lock);
962 return 0;
963 }
964 if (new_state == FL_PM_SUSPENDED) {
965 if (chip->controller->active->state == FL_PM_SUSPENDED) {
966 chip->state = FL_PM_SUSPENDED;
967 spin_unlock(lock);
968 return 0;
969 }
970 }
971 set_current_state(TASK_UNINTERRUPTIBLE);
972 add_wait_queue(wq, &wait);
973 spin_unlock(lock);
974 schedule();
975 remove_wait_queue(wq, &wait);
976 goto retry;
977 #else
978 chip->state = new_state;
979 return 0;
980 #endif
981 }
982
983 /**
984 * panic_nand_wait - [GENERIC] wait until the command is done
985 * @mtd: MTD device structure
986 * @chip: NAND chip structure
987 * @timeo: timeout
988 *
989 * Wait for command done. This is a helper function for nand_wait used when
990 * we are in interrupt context. May happen when in panic and trying to write
991 * an oops through mtdoops.
992 */
993 static void panic_nand_wait(struct mtd_info *mtd, struct nand_chip *chip,
994 unsigned long timeo)
995 {
996 int i;
997 for (i = 0; i < timeo; i++) {
998 if (chip->dev_ready) {
999 if (chip->dev_ready(mtd))
1000 break;
1001 } else {
1002 if (chip->read_byte(mtd) & NAND_STATUS_READY)
1003 break;
1004 }
1005 mdelay(1);
1006 }
1007 }
1008
1009 /**
1010 * nand_wait - [DEFAULT] wait until the command is done
1011 * @mtd: MTD device structure
1012 * @chip: NAND chip structure
1013 *
1014 * Wait for command done. This applies to erase and program only. Erase can
1015 * take up to 400ms and program up to 20ms according to general NAND and
1016 * SmartMedia specs.
1017 */
1018 static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
1019 {
1020
1021 int status, state = chip->state;
1022 unsigned long timeo = (state == FL_ERASING ? 400 : 20);
1023
1024 led_trigger_event(nand_led_trigger, LED_FULL);
1025
1026 /*
1027 * Apply this short delay always to ensure that we do wait tWB in any
1028 * case on any machine.
1029 */
1030 ndelay(100);
1031
1032 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
1033
1034 #ifndef __UBOOT__
1035 if (in_interrupt() || oops_in_progress)
1036 panic_nand_wait(mtd, chip, timeo);
1037 else {
1038 timeo = jiffies + msecs_to_jiffies(timeo);
1039 while (time_before(jiffies, timeo)) {
1040 if (chip->dev_ready) {
1041 if (chip->dev_ready(mtd))
1042 break;
1043 } else {
1044 if (chip->read_byte(mtd) & NAND_STATUS_READY)
1045 break;
1046 }
1047 cond_resched();
1048 }
1049 }
1050 #else
1051 u32 timer = (CONFIG_SYS_HZ * timeo) / 1000;
1052 u32 time_start;
1053
1054 time_start = get_timer(0);
1055 while (get_timer(time_start) < timer) {
1056 if (chip->dev_ready) {
1057 if (chip->dev_ready(mtd))
1058 break;
1059 } else {
1060 if (chip->read_byte(mtd) & NAND_STATUS_READY)
1061 break;
1062 }
1063 }
1064 #endif
1065 #ifdef PPCHAMELON_NAND_TIMER_HACK
1066 time_start = get_timer(0);
1067 while (get_timer(time_start) < 10)
1068 ;
1069 #endif /* PPCHAMELON_NAND_TIMER_HACK */
1070 led_trigger_event(nand_led_trigger, LED_OFF);
1071
1072 status = (int)chip->read_byte(mtd);
1073 /* This can happen if in case of timeout or buggy dev_ready */
1074 WARN_ON(!(status & NAND_STATUS_READY));
1075 return status;
1076 }
1077
1078 #ifndef __UBOOT__
1079 /**
1080 * __nand_unlock - [REPLACEABLE] unlocks specified locked blocks
1081 * @mtd: mtd info
1082 * @ofs: offset to start unlock from
1083 * @len: length to unlock
1084 * @invert: when = 0, unlock the range of blocks within the lower and
1085 * upper boundary address
1086 * when = 1, unlock the range of blocks outside the boundaries
1087 * of the lower and upper boundary address
1088 *
1089 * Returs unlock status.
1090 */
1091 static int __nand_unlock(struct mtd_info *mtd, loff_t ofs,
1092 uint64_t len, int invert)
1093 {
1094 int ret = 0;
1095 int status, page;
1096 struct nand_chip *chip = mtd->priv;
1097
1098 /* Submit address of first page to unlock */
1099 page = ofs >> chip->page_shift;
1100 chip->cmdfunc(mtd, NAND_CMD_UNLOCK1, -1, page & chip->pagemask);
1101
1102 /* Submit address of last page to unlock */
1103 page = (ofs + len) >> chip->page_shift;
1104 chip->cmdfunc(mtd, NAND_CMD_UNLOCK2, -1,
1105 (page | invert) & chip->pagemask);
1106
1107 /* Call wait ready function */
1108 status = chip->waitfunc(mtd, chip);
1109 /* See if device thinks it succeeded */
1110 if (status & NAND_STATUS_FAIL) {
1111 pr_debug("%s: error status = 0x%08x\n",
1112 __func__, status);
1113 ret = -EIO;
1114 }
1115
1116 return ret;
1117 }
1118
1119 /**
1120 * nand_unlock - [REPLACEABLE] unlocks specified locked blocks
1121 * @mtd: mtd info
1122 * @ofs: offset to start unlock from
1123 * @len: length to unlock
1124 *
1125 * Returns unlock status.
1126 */
1127 int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1128 {
1129 int ret = 0;
1130 int chipnr;
1131 struct nand_chip *chip = mtd->priv;
1132
1133 pr_debug("%s: start = 0x%012llx, len = %llu\n",
1134 __func__, (unsigned long long)ofs, len);
1135
1136 if (check_offs_len(mtd, ofs, len))
1137 ret = -EINVAL;
1138
1139 /* Align to last block address if size addresses end of the device */
1140 if (ofs + len == mtd->size)
1141 len -= mtd->erasesize;
1142
1143 nand_get_device(mtd, FL_UNLOCKING);
1144
1145 /* Shift to get chip number */
1146 chipnr = ofs >> chip->chip_shift;
1147
1148 chip->select_chip(mtd, chipnr);
1149
1150 /* Check, if it is write protected */
1151 if (nand_check_wp(mtd)) {
1152 pr_debug("%s: device is write protected!\n",
1153 __func__);
1154 ret = -EIO;
1155 goto out;
1156 }
1157
1158 ret = __nand_unlock(mtd, ofs, len, 0);
1159
1160 out:
1161 chip->select_chip(mtd, -1);
1162 nand_release_device(mtd);
1163
1164 return ret;
1165 }
1166 EXPORT_SYMBOL(nand_unlock);
1167
1168 /**
1169 * nand_lock - [REPLACEABLE] locks all blocks present in the device
1170 * @mtd: mtd info
1171 * @ofs: offset to start unlock from
1172 * @len: length to unlock
1173 *
1174 * This feature is not supported in many NAND parts. 'Micron' NAND parts do
1175 * have this feature, but it allows only to lock all blocks, not for specified
1176 * range for block. Implementing 'lock' feature by making use of 'unlock', for
1177 * now.
1178 *
1179 * Returns lock status.
1180 */
1181 int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1182 {
1183 int ret = 0;
1184 int chipnr, status, page;
1185 struct nand_chip *chip = mtd->priv;
1186
1187 pr_debug("%s: start = 0x%012llx, len = %llu\n",
1188 __func__, (unsigned long long)ofs, len);
1189
1190 if (check_offs_len(mtd, ofs, len))
1191 ret = -EINVAL;
1192
1193 nand_get_device(mtd, FL_LOCKING);
1194
1195 /* Shift to get chip number */
1196 chipnr = ofs >> chip->chip_shift;
1197
1198 chip->select_chip(mtd, chipnr);
1199
1200 /* Check, if it is write protected */
1201 if (nand_check_wp(mtd)) {
1202 pr_debug("%s: device is write protected!\n",
1203 __func__);
1204 status = MTD_ERASE_FAILED;
1205 ret = -EIO;
1206 goto out;
1207 }
1208
1209 /* Submit address of first page to lock */
1210 page = ofs >> chip->page_shift;
1211 chip->cmdfunc(mtd, NAND_CMD_LOCK, -1, page & chip->pagemask);
1212
1213 /* Call wait ready function */
1214 status = chip->waitfunc(mtd, chip);
1215 /* See if device thinks it succeeded */
1216 if (status & NAND_STATUS_FAIL) {
1217 pr_debug("%s: error status = 0x%08x\n",
1218 __func__, status);
1219 ret = -EIO;
1220 goto out;
1221 }
1222
1223 ret = __nand_unlock(mtd, ofs, len, 0x1);
1224
1225 out:
1226 chip->select_chip(mtd, -1);
1227 nand_release_device(mtd);
1228
1229 return ret;
1230 }
1231 EXPORT_SYMBOL(nand_lock);
1232 #endif
1233
1234 /**
1235 * nand_read_page_raw - [INTERN] read raw page data without ecc
1236 * @mtd: mtd info structure
1237 * @chip: nand chip info structure
1238 * @buf: buffer to store read data
1239 * @oob_required: caller requires OOB data read to chip->oob_poi
1240 * @page: page number to read
1241 *
1242 * Not for syndrome calculating ECC controllers, which use a special oob layout.
1243 */
1244 static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1245 uint8_t *buf, int oob_required, int page)
1246 {
1247 chip->read_buf(mtd, buf, mtd->writesize);
1248 if (oob_required)
1249 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1250 return 0;
1251 }
1252
1253 /**
1254 * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
1255 * @mtd: mtd info structure
1256 * @chip: nand chip info structure
1257 * @buf: buffer to store read data
1258 * @oob_required: caller requires OOB data read to chip->oob_poi
1259 * @page: page number to read
1260 *
1261 * We need a special oob layout and handling even when OOB isn't used.
1262 */
1263 static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
1264 struct nand_chip *chip, uint8_t *buf,
1265 int oob_required, int page)
1266 {
1267 int eccsize = chip->ecc.size;
1268 int eccbytes = chip->ecc.bytes;
1269 uint8_t *oob = chip->oob_poi;
1270 int steps, size;
1271
1272 for (steps = chip->ecc.steps; steps > 0; steps--) {
1273 chip->read_buf(mtd, buf, eccsize);
1274 buf += eccsize;
1275
1276 if (chip->ecc.prepad) {
1277 chip->read_buf(mtd, oob, chip->ecc.prepad);
1278 oob += chip->ecc.prepad;
1279 }
1280
1281 chip->read_buf(mtd, oob, eccbytes);
1282 oob += eccbytes;
1283
1284 if (chip->ecc.postpad) {
1285 chip->read_buf(mtd, oob, chip->ecc.postpad);
1286 oob += chip->ecc.postpad;
1287 }
1288 }
1289
1290 size = mtd->oobsize - (oob - chip->oob_poi);
1291 if (size)
1292 chip->read_buf(mtd, oob, size);
1293
1294 return 0;
1295 }
1296
1297 /**
1298 * nand_read_page_swecc - [REPLACEABLE] software ECC based page read function
1299 * @mtd: mtd info structure
1300 * @chip: nand chip info structure
1301 * @buf: buffer to store read data
1302 * @oob_required: caller requires OOB data read to chip->oob_poi
1303 * @page: page number to read
1304 */
1305 static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
1306 uint8_t *buf, int oob_required, int page)
1307 {
1308 int i, eccsize = chip->ecc.size;
1309 int eccbytes = chip->ecc.bytes;
1310 int eccsteps = chip->ecc.steps;
1311 uint8_t *p = buf;
1312 uint8_t *ecc_calc = chip->buffers->ecccalc;
1313 uint8_t *ecc_code = chip->buffers->ecccode;
1314 uint32_t *eccpos = chip->ecc.layout->eccpos;
1315 unsigned int max_bitflips = 0;
1316
1317 chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
1318
1319 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
1320 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1321
1322 for (i = 0; i < chip->ecc.total; i++)
1323 ecc_code[i] = chip->oob_poi[eccpos[i]];
1324
1325 eccsteps = chip->ecc.steps;
1326 p = buf;
1327
1328 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1329 int stat;
1330
1331 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1332 if (stat < 0) {
1333 mtd->ecc_stats.failed++;
1334 } else {
1335 mtd->ecc_stats.corrected += stat;
1336 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1337 }
1338 }
1339 return max_bitflips;
1340 }
1341
1342 /**
1343 * nand_read_subpage - [REPLACEABLE] ECC based sub-page read function
1344 * @mtd: mtd info structure
1345 * @chip: nand chip info structure
1346 * @data_offs: offset of requested data within the page
1347 * @readlen: data length
1348 * @bufpoi: buffer to store read data
1349 */
1350 static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
1351 uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi)
1352 {
1353 int start_step, end_step, num_steps;
1354 uint32_t *eccpos = chip->ecc.layout->eccpos;
1355 uint8_t *p;
1356 int data_col_addr, i, gaps = 0;
1357 int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
1358 int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
1359 int index = 0;
1360 unsigned int max_bitflips = 0;
1361
1362 /* Column address within the page aligned to ECC size (256bytes) */
1363 start_step = data_offs / chip->ecc.size;
1364 end_step = (data_offs + readlen - 1) / chip->ecc.size;
1365 num_steps = end_step - start_step + 1;
1366
1367 /* Data size aligned to ECC ecc.size */
1368 datafrag_len = num_steps * chip->ecc.size;
1369 eccfrag_len = num_steps * chip->ecc.bytes;
1370
1371 data_col_addr = start_step * chip->ecc.size;
1372 /* If we read not a page aligned data */
1373 if (data_col_addr != 0)
1374 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
1375
1376 p = bufpoi + data_col_addr;
1377 chip->read_buf(mtd, p, datafrag_len);
1378
1379 /* Calculate ECC */
1380 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
1381 chip->ecc.calculate(mtd, p, &chip->buffers->ecccalc[i]);
1382
1383 /*
1384 * The performance is faster if we position offsets according to
1385 * ecc.pos. Let's make sure that there are no gaps in ECC positions.
1386 */
1387 for (i = 0; i < eccfrag_len - 1; i++) {
1388 if (eccpos[i + start_step * chip->ecc.bytes] + 1 !=
1389 eccpos[i + start_step * chip->ecc.bytes + 1]) {
1390 gaps = 1;
1391 break;
1392 }
1393 }
1394 if (gaps) {
1395 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
1396 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1397 } else {
1398 /*
1399 * Send the command to read the particular ECC bytes take care
1400 * about buswidth alignment in read_buf.
1401 */
1402 index = start_step * chip->ecc.bytes;
1403
1404 aligned_pos = eccpos[index] & ~(busw - 1);
1405 aligned_len = eccfrag_len;
1406 if (eccpos[index] & (busw - 1))
1407 aligned_len++;
1408 if (eccpos[index + (num_steps * chip->ecc.bytes)] & (busw - 1))
1409 aligned_len++;
1410
1411 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
1412 mtd->writesize + aligned_pos, -1);
1413 chip->read_buf(mtd, &chip->oob_poi[aligned_pos], aligned_len);
1414 }
1415
1416 for (i = 0; i < eccfrag_len; i++)
1417 chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
1418
1419 p = bufpoi + data_col_addr;
1420 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
1421 int stat;
1422
1423 stat = chip->ecc.correct(mtd, p,
1424 &chip->buffers->ecccode[i], &chip->buffers->ecccalc[i]);
1425 if (stat < 0) {
1426 mtd->ecc_stats.failed++;
1427 } else {
1428 mtd->ecc_stats.corrected += stat;
1429 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1430 }
1431 }
1432 return max_bitflips;
1433 }
1434
1435 /**
1436 * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
1437 * @mtd: mtd info structure
1438 * @chip: nand chip info structure
1439 * @buf: buffer to store read data
1440 * @oob_required: caller requires OOB data read to chip->oob_poi
1441 * @page: page number to read
1442 *
1443 * Not for syndrome calculating ECC controllers which need a special oob layout.
1444 */
1445 static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1446 uint8_t *buf, int oob_required, int page)
1447 {
1448 int i, eccsize = chip->ecc.size;
1449 int eccbytes = chip->ecc.bytes;
1450 int eccsteps = chip->ecc.steps;
1451 uint8_t *p = buf;
1452 uint8_t *ecc_calc = chip->buffers->ecccalc;
1453 uint8_t *ecc_code = chip->buffers->ecccode;
1454 uint32_t *eccpos = chip->ecc.layout->eccpos;
1455 unsigned int max_bitflips = 0;
1456
1457 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1458 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1459 chip->read_buf(mtd, p, eccsize);
1460 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1461 }
1462 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1463
1464 for (i = 0; i < chip->ecc.total; i++)
1465 ecc_code[i] = chip->oob_poi[eccpos[i]];
1466
1467 eccsteps = chip->ecc.steps;
1468 p = buf;
1469
1470 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1471 int stat;
1472
1473 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1474 if (stat < 0) {
1475 mtd->ecc_stats.failed++;
1476 } else {
1477 mtd->ecc_stats.corrected += stat;
1478 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1479 }
1480 }
1481 return max_bitflips;
1482 }
1483
1484 /**
1485 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
1486 * @mtd: mtd info structure
1487 * @chip: nand chip info structure
1488 * @buf: buffer to store read data
1489 * @oob_required: caller requires OOB data read to chip->oob_poi
1490 * @page: page number to read
1491 *
1492 * Hardware ECC for large page chips, require OOB to be read first. For this
1493 * ECC mode, the write_page method is re-used from ECC_HW. These methods
1494 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
1495 * multiple ECC steps, follows the "infix ECC" scheme and reads/writes ECC from
1496 * the data area, by overwriting the NAND manufacturer bad block markings.
1497 */
1498 static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
1499 struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
1500 {
1501 int i, eccsize = chip->ecc.size;
1502 int eccbytes = chip->ecc.bytes;
1503 int eccsteps = chip->ecc.steps;
1504 uint8_t *p = buf;
1505 uint8_t *ecc_code = chip->buffers->ecccode;
1506 uint32_t *eccpos = chip->ecc.layout->eccpos;
1507 uint8_t *ecc_calc = chip->buffers->ecccalc;
1508 unsigned int max_bitflips = 0;
1509
1510 /* Read the OOB area first */
1511 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1512 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1513 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1514
1515 for (i = 0; i < chip->ecc.total; i++)
1516 ecc_code[i] = chip->oob_poi[eccpos[i]];
1517
1518 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1519 int stat;
1520
1521 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1522 chip->read_buf(mtd, p, eccsize);
1523 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1524
1525 stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
1526 if (stat < 0) {
1527 mtd->ecc_stats.failed++;
1528 } else {
1529 mtd->ecc_stats.corrected += stat;
1530 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1531 }
1532 }
1533 return max_bitflips;
1534 }
1535
1536 /**
1537 * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
1538 * @mtd: mtd info structure
1539 * @chip: nand chip info structure
1540 * @buf: buffer to store read data
1541 * @oob_required: caller requires OOB data read to chip->oob_poi
1542 * @page: page number to read
1543 *
1544 * The hw generator calculates the error syndrome automatically. Therefore we
1545 * need a special oob layout and handling.
1546 */
1547 static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1548 uint8_t *buf, int oob_required, int page)
1549 {
1550 int i, eccsize = chip->ecc.size;
1551 int eccbytes = chip->ecc.bytes;
1552 int eccsteps = chip->ecc.steps;
1553 uint8_t *p = buf;
1554 uint8_t *oob = chip->oob_poi;
1555 unsigned int max_bitflips = 0;
1556
1557 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1558 int stat;
1559
1560 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1561 chip->read_buf(mtd, p, eccsize);
1562
1563 if (chip->ecc.prepad) {
1564 chip->read_buf(mtd, oob, chip->ecc.prepad);
1565 oob += chip->ecc.prepad;
1566 }
1567
1568 chip->ecc.hwctl(mtd, NAND_ECC_READSYN);
1569 chip->read_buf(mtd, oob, eccbytes);
1570 stat = chip->ecc.correct(mtd, p, oob, NULL);
1571
1572 if (stat < 0) {
1573 mtd->ecc_stats.failed++;
1574 } else {
1575 mtd->ecc_stats.corrected += stat;
1576 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1577 }
1578
1579 oob += eccbytes;
1580
1581 if (chip->ecc.postpad) {
1582 chip->read_buf(mtd, oob, chip->ecc.postpad);
1583 oob += chip->ecc.postpad;
1584 }
1585 }
1586
1587 /* Calculate remaining oob bytes */
1588 i = mtd->oobsize - (oob - chip->oob_poi);
1589 if (i)
1590 chip->read_buf(mtd, oob, i);
1591
1592 return max_bitflips;
1593 }
1594
1595 /**
1596 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
1597 * @chip: nand chip structure
1598 * @oob: oob destination address
1599 * @ops: oob ops structure
1600 * @len: size of oob to transfer
1601 */
1602 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
1603 struct mtd_oob_ops *ops, size_t len)
1604 {
1605 switch (ops->mode) {
1606
1607 case MTD_OPS_PLACE_OOB:
1608 case MTD_OPS_RAW:
1609 memcpy(oob, chip->oob_poi + ops->ooboffs, len);
1610 return oob + len;
1611
1612 case MTD_OPS_AUTO_OOB: {
1613 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1614 uint32_t boffs = 0, roffs = ops->ooboffs;
1615 size_t bytes = 0;
1616
1617 for (; free->length && len; free++, len -= bytes) {
1618 /* Read request not from offset 0? */
1619 if (unlikely(roffs)) {
1620 if (roffs >= free->length) {
1621 roffs -= free->length;
1622 continue;
1623 }
1624 boffs = free->offset + roffs;
1625 bytes = min_t(size_t, len,
1626 (free->length - roffs));
1627 roffs = 0;
1628 } else {
1629 bytes = min_t(size_t, len, free->length);
1630 boffs = free->offset;
1631 }
1632 memcpy(oob, chip->oob_poi + boffs, bytes);
1633 oob += bytes;
1634 }
1635 return oob;
1636 }
1637 default:
1638 BUG();
1639 }
1640 return NULL;
1641 }
1642
1643 /**
1644 * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
1645 * @mtd: MTD device structure
1646 * @retry_mode: the retry mode to use
1647 *
1648 * Some vendors supply a special command to shift the Vt threshold, to be used
1649 * when there are too many bitflips in a page (i.e., ECC error). After setting
1650 * a new threshold, the host should retry reading the page.
1651 */
1652 static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
1653 {
1654 struct nand_chip *chip = mtd->priv;
1655
1656 pr_debug("setting READ RETRY mode %d\n", retry_mode);
1657
1658 if (retry_mode >= chip->read_retries)
1659 return -EINVAL;
1660
1661 if (!chip->setup_read_retry)
1662 return -EOPNOTSUPP;
1663
1664 return chip->setup_read_retry(mtd, retry_mode);
1665 }
1666
1667 /**
1668 * nand_do_read_ops - [INTERN] Read data with ECC
1669 * @mtd: MTD device structure
1670 * @from: offset to read from
1671 * @ops: oob ops structure
1672 *
1673 * Internal function. Called with chip held.
1674 */
1675 static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
1676 struct mtd_oob_ops *ops)
1677 {
1678 int chipnr, page, realpage, col, bytes, aligned, oob_required;
1679 struct nand_chip *chip = mtd->priv;
1680 int ret = 0;
1681 uint32_t readlen = ops->len;
1682 uint32_t oobreadlen = ops->ooblen;
1683 uint32_t max_oobsize = ops->mode == MTD_OPS_AUTO_OOB ?
1684 mtd->oobavail : mtd->oobsize;
1685
1686 uint8_t *bufpoi, *oob, *buf;
1687 unsigned int max_bitflips = 0;
1688 int retry_mode = 0;
1689 bool ecc_fail = false;
1690
1691 chipnr = (int)(from >> chip->chip_shift);
1692 chip->select_chip(mtd, chipnr);
1693
1694 realpage = (int)(from >> chip->page_shift);
1695 page = realpage & chip->pagemask;
1696
1697 col = (int)(from & (mtd->writesize - 1));
1698
1699 buf = ops->datbuf;
1700 oob = ops->oobbuf;
1701 oob_required = oob ? 1 : 0;
1702
1703 while (1) {
1704 unsigned int ecc_failures = mtd->ecc_stats.failed;
1705
1706 WATCHDOG_RESET();
1707 bytes = min(mtd->writesize - col, readlen);
1708 aligned = (bytes == mtd->writesize);
1709
1710 /* Is the current page in the buffer? */
1711 if (realpage != chip->pagebuf || oob) {
1712 bufpoi = aligned ? buf : chip->buffers->databuf;
1713
1714 read_retry:
1715 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1716
1717 /*
1718 * Now read the page into the buffer. Absent an error,
1719 * the read methods return max bitflips per ecc step.
1720 */
1721 if (unlikely(ops->mode == MTD_OPS_RAW))
1722 ret = chip->ecc.read_page_raw(mtd, chip, bufpoi,
1723 oob_required,
1724 page);
1725 else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
1726 !oob)
1727 ret = chip->ecc.read_subpage(mtd, chip,
1728 col, bytes, bufpoi);
1729 else
1730 ret = chip->ecc.read_page(mtd, chip, bufpoi,
1731 oob_required, page);
1732 if (ret < 0) {
1733 if (!aligned)
1734 /* Invalidate page cache */
1735 chip->pagebuf = -1;
1736 break;
1737 }
1738
1739 max_bitflips = max_t(unsigned int, max_bitflips, ret);
1740
1741 /* Transfer not aligned data */
1742 if (!aligned) {
1743 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
1744 !(mtd->ecc_stats.failed - ecc_failures) &&
1745 (ops->mode != MTD_OPS_RAW)) {
1746 chip->pagebuf = realpage;
1747 chip->pagebuf_bitflips = ret;
1748 } else {
1749 /* Invalidate page cache */
1750 chip->pagebuf = -1;
1751 }
1752 memcpy(buf, chip->buffers->databuf + col, bytes);
1753 }
1754
1755 if (unlikely(oob)) {
1756 int toread = min(oobreadlen, max_oobsize);
1757
1758 if (toread) {
1759 oob = nand_transfer_oob(chip,
1760 oob, ops, toread);
1761 oobreadlen -= toread;
1762 }
1763 }
1764
1765 if (chip->options & NAND_NEED_READRDY) {
1766 /* Apply delay or wait for ready/busy pin */
1767 if (!chip->dev_ready)
1768 udelay(chip->chip_delay);
1769 else
1770 nand_wait_ready(mtd);
1771 }
1772
1773 if (mtd->ecc_stats.failed - ecc_failures) {
1774 if (retry_mode + 1 < chip->read_retries) {
1775 retry_mode++;
1776 ret = nand_setup_read_retry(mtd,
1777 retry_mode);
1778 if (ret < 0)
1779 break;
1780
1781 /* Reset failures; retry */
1782 mtd->ecc_stats.failed = ecc_failures;
1783 goto read_retry;
1784 } else {
1785 /* No more retry modes; real failure */
1786 ecc_fail = true;
1787 }
1788 }
1789
1790 buf += bytes;
1791 } else {
1792 memcpy(buf, chip->buffers->databuf + col, bytes);
1793 buf += bytes;
1794 max_bitflips = max_t(unsigned int, max_bitflips,
1795 chip->pagebuf_bitflips);
1796 }
1797
1798 readlen -= bytes;
1799
1800 /* Reset to retry mode 0 */
1801 if (retry_mode) {
1802 ret = nand_setup_read_retry(mtd, 0);
1803 if (ret < 0)
1804 break;
1805 retry_mode = 0;
1806 }
1807
1808 if (!readlen)
1809 break;
1810
1811 /* For subsequent reads align to page boundary */
1812 col = 0;
1813 /* Increment page address */
1814 realpage++;
1815
1816 page = realpage & chip->pagemask;
1817 /* Check, if we cross a chip boundary */
1818 if (!page) {
1819 chipnr++;
1820 chip->select_chip(mtd, -1);
1821 chip->select_chip(mtd, chipnr);
1822 }
1823 }
1824 chip->select_chip(mtd, -1);
1825
1826 ops->retlen = ops->len - (size_t) readlen;
1827 if (oob)
1828 ops->oobretlen = ops->ooblen - oobreadlen;
1829
1830 if (ret < 0)
1831 return ret;
1832
1833 if (ecc_fail)
1834 return -EBADMSG;
1835
1836 return max_bitflips;
1837 }
1838
1839 /**
1840 * nand_read - [MTD Interface] MTD compatibility function for nand_do_read_ecc
1841 * @mtd: MTD device structure
1842 * @from: offset to read from
1843 * @len: number of bytes to read
1844 * @retlen: pointer to variable to store the number of read bytes
1845 * @buf: the databuffer to put data
1846 *
1847 * Get hold of the chip and call nand_do_read.
1848 */
1849 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
1850 size_t *retlen, uint8_t *buf)
1851 {
1852 struct mtd_oob_ops ops;
1853 int ret;
1854
1855 nand_get_device(mtd, FL_READING);
1856 ops.len = len;
1857 ops.datbuf = buf;
1858 ops.oobbuf = NULL;
1859 ops.mode = MTD_OPS_PLACE_OOB;
1860 ret = nand_do_read_ops(mtd, from, &ops);
1861 *retlen = ops.retlen;
1862 nand_release_device(mtd);
1863 return ret;
1864 }
1865
1866 /**
1867 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
1868 * @mtd: mtd info structure
1869 * @chip: nand chip info structure
1870 * @page: page number to read
1871 */
1872 static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1873 int page)
1874 {
1875 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1876 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1877 return 0;
1878 }
1879
1880 /**
1881 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
1882 * with syndromes
1883 * @mtd: mtd info structure
1884 * @chip: nand chip info structure
1885 * @page: page number to read
1886 */
1887 static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1888 int page)
1889 {
1890 uint8_t *buf = chip->oob_poi;
1891 int length = mtd->oobsize;
1892 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1893 int eccsize = chip->ecc.size;
1894 uint8_t *bufpoi = buf;
1895 int i, toread, sndrnd = 0, pos;
1896
1897 chip->cmdfunc(mtd, NAND_CMD_READ0, chip->ecc.size, page);
1898 for (i = 0; i < chip->ecc.steps; i++) {
1899 if (sndrnd) {
1900 pos = eccsize + i * (eccsize + chunk);
1901 if (mtd->writesize > 512)
1902 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, pos, -1);
1903 else
1904 chip->cmdfunc(mtd, NAND_CMD_READ0, pos, page);
1905 } else
1906 sndrnd = 1;
1907 toread = min_t(int, length, chunk);
1908 chip->read_buf(mtd, bufpoi, toread);
1909 bufpoi += toread;
1910 length -= toread;
1911 }
1912 if (length > 0)
1913 chip->read_buf(mtd, bufpoi, length);
1914
1915 return 0;
1916 }
1917
1918 /**
1919 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
1920 * @mtd: mtd info structure
1921 * @chip: nand chip info structure
1922 * @page: page number to write
1923 */
1924 static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1925 int page)
1926 {
1927 int status = 0;
1928 const uint8_t *buf = chip->oob_poi;
1929 int length = mtd->oobsize;
1930
1931 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
1932 chip->write_buf(mtd, buf, length);
1933 /* Send command to program the OOB data */
1934 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1935
1936 status = chip->waitfunc(mtd, chip);
1937
1938 return status & NAND_STATUS_FAIL ? -EIO : 0;
1939 }
1940
1941 /**
1942 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
1943 * with syndrome - only for large page flash
1944 * @mtd: mtd info structure
1945 * @chip: nand chip info structure
1946 * @page: page number to write
1947 */
1948 static int nand_write_oob_syndrome(struct mtd_info *mtd,
1949 struct nand_chip *chip, int page)
1950 {
1951 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1952 int eccsize = chip->ecc.size, length = mtd->oobsize;
1953 int i, len, pos, status = 0, sndcmd = 0, steps = chip->ecc.steps;
1954 const uint8_t *bufpoi = chip->oob_poi;
1955
1956 /*
1957 * data-ecc-data-ecc ... ecc-oob
1958 * or
1959 * data-pad-ecc-pad-data-pad .... ecc-pad-oob
1960 */
1961 if (!chip->ecc.prepad && !chip->ecc.postpad) {
1962 pos = steps * (eccsize + chunk);
1963 steps = 0;
1964 } else
1965 pos = eccsize;
1966
1967 chip->cmdfunc(mtd, NAND_CMD_SEQIN, pos, page);
1968 for (i = 0; i < steps; i++) {
1969 if (sndcmd) {
1970 if (mtd->writesize <= 512) {
1971 uint32_t fill = 0xFFFFFFFF;
1972
1973 len = eccsize;
1974 while (len > 0) {
1975 int num = min_t(int, len, 4);
1976 chip->write_buf(mtd, (uint8_t *)&fill,
1977 num);
1978 len -= num;
1979 }
1980 } else {
1981 pos = eccsize + i * (eccsize + chunk);
1982 chip->cmdfunc(mtd, NAND_CMD_RNDIN, pos, -1);
1983 }
1984 } else
1985 sndcmd = 1;
1986 len = min_t(int, length, chunk);
1987 chip->write_buf(mtd, bufpoi, len);
1988 bufpoi += len;
1989 length -= len;
1990 }
1991 if (length > 0)
1992 chip->write_buf(mtd, bufpoi, length);
1993
1994 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1995 status = chip->waitfunc(mtd, chip);
1996
1997 return status & NAND_STATUS_FAIL ? -EIO : 0;
1998 }
1999
2000 /**
2001 * nand_do_read_oob - [INTERN] NAND read out-of-band
2002 * @mtd: MTD device structure
2003 * @from: offset to read from
2004 * @ops: oob operations description structure
2005 *
2006 * NAND read out-of-band data from the spare area.
2007 */
2008 static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
2009 struct mtd_oob_ops *ops)
2010 {
2011 int page, realpage, chipnr;
2012 struct nand_chip *chip = mtd->priv;
2013 struct mtd_ecc_stats stats;
2014 int readlen = ops->ooblen;
2015 int len;
2016 uint8_t *buf = ops->oobbuf;
2017 int ret = 0;
2018
2019 pr_debug("%s: from = 0x%08Lx, len = %i\n",
2020 __func__, (unsigned long long)from, readlen);
2021
2022 stats = mtd->ecc_stats;
2023
2024 if (ops->mode == MTD_OPS_AUTO_OOB)
2025 len = chip->ecc.layout->oobavail;
2026 else
2027 len = mtd->oobsize;
2028
2029 if (unlikely(ops->ooboffs >= len)) {
2030 pr_debug("%s: attempt to start read outside oob\n",
2031 __func__);
2032 return -EINVAL;
2033 }
2034
2035 /* Do not allow reads past end of device */
2036 if (unlikely(from >= mtd->size ||
2037 ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
2038 (from >> chip->page_shift)) * len)) {
2039 pr_debug("%s: attempt to read beyond end of device\n",
2040 __func__);
2041 return -EINVAL;
2042 }
2043
2044 chipnr = (int)(from >> chip->chip_shift);
2045 chip->select_chip(mtd, chipnr);
2046
2047 /* Shift to get page */
2048 realpage = (int)(from >> chip->page_shift);
2049 page = realpage & chip->pagemask;
2050
2051 while (1) {
2052 WATCHDOG_RESET();
2053
2054 if (ops->mode == MTD_OPS_RAW)
2055 ret = chip->ecc.read_oob_raw(mtd, chip, page);
2056 else
2057 ret = chip->ecc.read_oob(mtd, chip, page);
2058
2059 if (ret < 0)
2060 break;
2061
2062 len = min(len, readlen);
2063 buf = nand_transfer_oob(chip, buf, ops, len);
2064
2065 if (chip->options & NAND_NEED_READRDY) {
2066 /* Apply delay or wait for ready/busy pin */
2067 if (!chip->dev_ready)
2068 udelay(chip->chip_delay);
2069 else
2070 nand_wait_ready(mtd);
2071 }
2072
2073 readlen -= len;
2074 if (!readlen)
2075 break;
2076
2077 /* Increment page address */
2078 realpage++;
2079
2080 page = realpage & chip->pagemask;
2081 /* Check, if we cross a chip boundary */
2082 if (!page) {
2083 chipnr++;
2084 chip->select_chip(mtd, -1);
2085 chip->select_chip(mtd, chipnr);
2086 }
2087 }
2088 chip->select_chip(mtd, -1);
2089
2090 ops->oobretlen = ops->ooblen - readlen;
2091
2092 if (ret < 0)
2093 return ret;
2094
2095 if (mtd->ecc_stats.failed - stats.failed)
2096 return -EBADMSG;
2097
2098 return mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
2099 }
2100
2101 /**
2102 * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
2103 * @mtd: MTD device structure
2104 * @from: offset to read from
2105 * @ops: oob operation description structure
2106 *
2107 * NAND read data and/or out-of-band data.
2108 */
2109 static int nand_read_oob(struct mtd_info *mtd, loff_t from,
2110 struct mtd_oob_ops *ops)
2111 {
2112 int ret = -ENOTSUPP;
2113
2114 ops->retlen = 0;
2115
2116 /* Do not allow reads past end of device */
2117 if (ops->datbuf && (from + ops->len) > mtd->size) {
2118 pr_debug("%s: attempt to read beyond end of device\n",
2119 __func__);
2120 return -EINVAL;
2121 }
2122
2123 nand_get_device(mtd, FL_READING);
2124
2125 switch (ops->mode) {
2126 case MTD_OPS_PLACE_OOB:
2127 case MTD_OPS_AUTO_OOB:
2128 case MTD_OPS_RAW:
2129 break;
2130
2131 default:
2132 goto out;
2133 }
2134
2135 if (!ops->datbuf)
2136 ret = nand_do_read_oob(mtd, from, ops);
2137 else
2138 ret = nand_do_read_ops(mtd, from, ops);
2139
2140 out:
2141 nand_release_device(mtd);
2142 return ret;
2143 }
2144
2145
2146 /**
2147 * nand_write_page_raw - [INTERN] raw page write function
2148 * @mtd: mtd info structure
2149 * @chip: nand chip info structure
2150 * @buf: data buffer
2151 * @oob_required: must write chip->oob_poi to OOB
2152 *
2153 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2154 */
2155 static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
2156 const uint8_t *buf, int oob_required)
2157 {
2158 chip->write_buf(mtd, buf, mtd->writesize);
2159 if (oob_required)
2160 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2161
2162 return 0;
2163 }
2164
2165 /**
2166 * nand_write_page_raw_syndrome - [INTERN] raw page write function
2167 * @mtd: mtd info structure
2168 * @chip: nand chip info structure
2169 * @buf: data buffer
2170 * @oob_required: must write chip->oob_poi to OOB
2171 *
2172 * We need a special oob layout and handling even when ECC isn't checked.
2173 */
2174 static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
2175 struct nand_chip *chip,
2176 const uint8_t *buf, int oob_required)
2177 {
2178 int eccsize = chip->ecc.size;
2179 int eccbytes = chip->ecc.bytes;
2180 uint8_t *oob = chip->oob_poi;
2181 int steps, size;
2182
2183 for (steps = chip->ecc.steps; steps > 0; steps--) {
2184 chip->write_buf(mtd, buf, eccsize);
2185 buf += eccsize;
2186
2187 if (chip->ecc.prepad) {
2188 chip->write_buf(mtd, oob, chip->ecc.prepad);
2189 oob += chip->ecc.prepad;
2190 }
2191
2192 chip->read_buf(mtd, oob, eccbytes);
2193 oob += eccbytes;
2194
2195 if (chip->ecc.postpad) {
2196 chip->write_buf(mtd, oob, chip->ecc.postpad);
2197 oob += chip->ecc.postpad;
2198 }
2199 }
2200
2201 size = mtd->oobsize - (oob - chip->oob_poi);
2202 if (size)
2203 chip->write_buf(mtd, oob, size);
2204
2205 return 0;
2206 }
2207 /**
2208 * nand_write_page_swecc - [REPLACEABLE] software ECC based page write function
2209 * @mtd: mtd info structure
2210 * @chip: nand chip info structure
2211 * @buf: data buffer
2212 * @oob_required: must write chip->oob_poi to OOB
2213 */
2214 static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
2215 const uint8_t *buf, int oob_required)
2216 {
2217 int i, eccsize = chip->ecc.size;
2218 int eccbytes = chip->ecc.bytes;
2219 int eccsteps = chip->ecc.steps;
2220 uint8_t *ecc_calc = chip->buffers->ecccalc;
2221 const uint8_t *p = buf;
2222 uint32_t *eccpos = chip->ecc.layout->eccpos;
2223
2224 /* Software ECC calculation */
2225 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
2226 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2227
2228 for (i = 0; i < chip->ecc.total; i++)
2229 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2230
2231 return chip->ecc.write_page_raw(mtd, chip, buf, 1);
2232 }
2233
2234 /**
2235 * nand_write_page_hwecc - [REPLACEABLE] hardware ECC based page write function
2236 * @mtd: mtd info structure
2237 * @chip: nand chip info structure
2238 * @buf: data buffer
2239 * @oob_required: must write chip->oob_poi to OOB
2240 */
2241 static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
2242 const uint8_t *buf, int oob_required)
2243 {
2244 int i, eccsize = chip->ecc.size;
2245 int eccbytes = chip->ecc.bytes;
2246 int eccsteps = chip->ecc.steps;
2247 uint8_t *ecc_calc = chip->buffers->ecccalc;
2248 const uint8_t *p = buf;
2249 uint32_t *eccpos = chip->ecc.layout->eccpos;
2250
2251 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2252 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2253 chip->write_buf(mtd, p, eccsize);
2254 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2255 }
2256
2257 for (i = 0; i < chip->ecc.total; i++)
2258 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2259
2260 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2261
2262 return 0;
2263 }
2264
2265
2266 /**
2267 * nand_write_subpage_hwecc - [REPLACABLE] hardware ECC based subpage write
2268 * @mtd: mtd info structure
2269 * @chip: nand chip info structure
2270 * @offset: column address of subpage within the page
2271 * @data_len: data length
2272 * @buf: data buffer
2273 * @oob_required: must write chip->oob_poi to OOB
2274 */
2275 static int nand_write_subpage_hwecc(struct mtd_info *mtd,
2276 struct nand_chip *chip, uint32_t offset,
2277 uint32_t data_len, const uint8_t *buf,
2278 int oob_required)
2279 {
2280 uint8_t *oob_buf = chip->oob_poi;
2281 uint8_t *ecc_calc = chip->buffers->ecccalc;
2282 int ecc_size = chip->ecc.size;
2283 int ecc_bytes = chip->ecc.bytes;
2284 int ecc_steps = chip->ecc.steps;
2285 uint32_t *eccpos = chip->ecc.layout->eccpos;
2286 uint32_t start_step = offset / ecc_size;
2287 uint32_t end_step = (offset + data_len - 1) / ecc_size;
2288 int oob_bytes = mtd->oobsize / ecc_steps;
2289 int step, i;
2290
2291 for (step = 0; step < ecc_steps; step++) {
2292 /* configure controller for WRITE access */
2293 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2294
2295 /* write data (untouched subpages already masked by 0xFF) */
2296 chip->write_buf(mtd, buf, ecc_size);
2297
2298 /* mask ECC of un-touched subpages by padding 0xFF */
2299 if ((step < start_step) || (step > end_step))
2300 memset(ecc_calc, 0xff, ecc_bytes);
2301 else
2302 chip->ecc.calculate(mtd, buf, ecc_calc);
2303
2304 /* mask OOB of un-touched subpages by padding 0xFF */
2305 /* if oob_required, preserve OOB metadata of written subpage */
2306 if (!oob_required || (step < start_step) || (step > end_step))
2307 memset(oob_buf, 0xff, oob_bytes);
2308
2309 buf += ecc_size;
2310 ecc_calc += ecc_bytes;
2311 oob_buf += oob_bytes;
2312 }
2313
2314 /* copy calculated ECC for whole page to chip->buffer->oob */
2315 /* this include masked-value(0xFF) for unwritten subpages */
2316 ecc_calc = chip->buffers->ecccalc;
2317 for (i = 0; i < chip->ecc.total; i++)
2318 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2319
2320 /* write OOB buffer to NAND device */
2321 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2322
2323 return 0;
2324 }
2325
2326
2327 /**
2328 * nand_write_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page write
2329 * @mtd: mtd info structure
2330 * @chip: nand chip info structure
2331 * @buf: data buffer
2332 * @oob_required: must write chip->oob_poi to OOB
2333 *
2334 * The hw generator calculates the error syndrome automatically. Therefore we
2335 * need a special oob layout and handling.
2336 */
2337 static int nand_write_page_syndrome(struct mtd_info *mtd,
2338 struct nand_chip *chip,
2339 const uint8_t *buf, int oob_required)
2340 {
2341 int i, eccsize = chip->ecc.size;
2342 int eccbytes = chip->ecc.bytes;
2343 int eccsteps = chip->ecc.steps;
2344 const uint8_t *p = buf;
2345 uint8_t *oob = chip->oob_poi;
2346
2347 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2348
2349 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2350 chip->write_buf(mtd, p, eccsize);
2351
2352 if (chip->ecc.prepad) {
2353 chip->write_buf(mtd, oob, chip->ecc.prepad);
2354 oob += chip->ecc.prepad;
2355 }
2356
2357 chip->ecc.calculate(mtd, p, oob);
2358 chip->write_buf(mtd, oob, eccbytes);
2359 oob += eccbytes;
2360
2361 if (chip->ecc.postpad) {
2362 chip->write_buf(mtd, oob, chip->ecc.postpad);
2363 oob += chip->ecc.postpad;
2364 }
2365 }
2366
2367 /* Calculate remaining oob bytes */
2368 i = mtd->oobsize - (oob - chip->oob_poi);
2369 if (i)
2370 chip->write_buf(mtd, oob, i);
2371
2372 return 0;
2373 }
2374
2375 /**
2376 * nand_write_page - [REPLACEABLE] write one page
2377 * @mtd: MTD device structure
2378 * @chip: NAND chip descriptor
2379 * @offset: address offset within the page
2380 * @data_len: length of actual data to be written
2381 * @buf: the data to write
2382 * @oob_required: must write chip->oob_poi to OOB
2383 * @page: page number to write
2384 * @cached: cached programming
2385 * @raw: use _raw version of write_page
2386 */
2387 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
2388 uint32_t offset, int data_len, const uint8_t *buf,
2389 int oob_required, int page, int cached, int raw)
2390 {
2391 int status, subpage;
2392
2393 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
2394 chip->ecc.write_subpage)
2395 subpage = offset || (data_len < mtd->writesize);
2396 else
2397 subpage = 0;
2398
2399 chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
2400
2401 if (unlikely(raw))
2402 status = chip->ecc.write_page_raw(mtd, chip, buf,
2403 oob_required);
2404 else if (subpage)
2405 status = chip->ecc.write_subpage(mtd, chip, offset, data_len,
2406 buf, oob_required);
2407 else
2408 status = chip->ecc.write_page(mtd, chip, buf, oob_required);
2409
2410 if (status < 0)
2411 return status;
2412
2413 /*
2414 * Cached progamming disabled for now. Not sure if it's worth the
2415 * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s).
2416 */
2417 cached = 0;
2418
2419 if (!cached || !NAND_HAS_CACHEPROG(chip)) {
2420
2421 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
2422 status = chip->waitfunc(mtd, chip);
2423 /*
2424 * See if operation failed and additional status checks are
2425 * available.
2426 */
2427 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2428 status = chip->errstat(mtd, chip, FL_WRITING, status,
2429 page);
2430
2431 if (status & NAND_STATUS_FAIL)
2432 return -EIO;
2433 } else {
2434 chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
2435 status = chip->waitfunc(mtd, chip);
2436 }
2437
2438
2439 #ifdef __UBOOT__
2440 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
2441 /* Send command to read back the data */
2442 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
2443
2444 if (chip->verify_buf(mtd, buf, mtd->writesize))
2445 return -EIO;
2446
2447 /* Make sure the next page prog is preceded by a status read */
2448 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
2449 #endif
2450 #endif
2451
2452 return 0;
2453 }
2454
2455 /**
2456 * nand_fill_oob - [INTERN] Transfer client buffer to oob
2457 * @mtd: MTD device structure
2458 * @oob: oob data buffer
2459 * @len: oob data write length
2460 * @ops: oob ops structure
2461 */
2462 static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len,
2463 struct mtd_oob_ops *ops)
2464 {
2465 struct nand_chip *chip = mtd->priv;
2466
2467 /*
2468 * Initialise to all 0xFF, to avoid the possibility of left over OOB
2469 * data from a previous OOB read.
2470 */
2471 memset(chip->oob_poi, 0xff, mtd->oobsize);
2472
2473 switch (ops->mode) {
2474
2475 case MTD_OPS_PLACE_OOB:
2476 case MTD_OPS_RAW:
2477 memcpy(chip->oob_poi + ops->ooboffs, oob, len);
2478 return oob + len;
2479
2480 case MTD_OPS_AUTO_OOB: {
2481 struct nand_oobfree *free = chip->ecc.layout->oobfree;
2482 uint32_t boffs = 0, woffs = ops->ooboffs;
2483 size_t bytes = 0;
2484
2485 for (; free->length && len; free++, len -= bytes) {
2486 /* Write request not from offset 0? */
2487 if (unlikely(woffs)) {
2488 if (woffs >= free->length) {
2489 woffs -= free->length;
2490 continue;
2491 }
2492 boffs = free->offset + woffs;
2493 bytes = min_t(size_t, len,
2494 (free->length - woffs));
2495 woffs = 0;
2496 } else {
2497 bytes = min_t(size_t, len, free->length);
2498 boffs = free->offset;
2499 }
2500 memcpy(chip->oob_poi + boffs, oob, bytes);
2501 oob += bytes;
2502 }
2503 return oob;
2504 }
2505 default:
2506 BUG();
2507 }
2508 return NULL;
2509 }
2510
2511 #define NOTALIGNED(x) ((x & (chip->subpagesize - 1)) != 0)
2512
2513 /**
2514 * nand_do_write_ops - [INTERN] NAND write with ECC
2515 * @mtd: MTD device structure
2516 * @to: offset to write to
2517 * @ops: oob operations description structure
2518 *
2519 * NAND write with ECC.
2520 */
2521 static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
2522 struct mtd_oob_ops *ops)
2523 {
2524 int chipnr, realpage, page, blockmask, column;
2525 struct nand_chip *chip = mtd->priv;
2526 uint32_t writelen = ops->len;
2527
2528 uint32_t oobwritelen = ops->ooblen;
2529 uint32_t oobmaxlen = ops->mode == MTD_OPS_AUTO_OOB ?
2530 mtd->oobavail : mtd->oobsize;
2531
2532 uint8_t *oob = ops->oobbuf;
2533 uint8_t *buf = ops->datbuf;
2534 int ret;
2535 int oob_required = oob ? 1 : 0;
2536
2537 ops->retlen = 0;
2538 if (!writelen)
2539 return 0;
2540
2541 #ifndef __UBOOT__
2542 /* Reject writes, which are not page aligned */
2543 if (NOTALIGNED(to) || NOTALIGNED(ops->len)) {
2544 #else
2545 /* Reject writes, which are not page aligned */
2546 if (NOTALIGNED(to)) {
2547 #endif
2548 pr_notice("%s: attempt to write non page aligned data\n",
2549 __func__);
2550 return -EINVAL;
2551 }
2552
2553 column = to & (mtd->writesize - 1);
2554
2555 chipnr = (int)(to >> chip->chip_shift);
2556 chip->select_chip(mtd, chipnr);
2557
2558 /* Check, if it is write protected */
2559 if (nand_check_wp(mtd)) {
2560 ret = -EIO;
2561 goto err_out;
2562 }
2563
2564 realpage = (int)(to >> chip->page_shift);
2565 page = realpage & chip->pagemask;
2566 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
2567
2568 /* Invalidate the page cache, when we write to the cached page */
2569 if (to <= (chip->pagebuf << chip->page_shift) &&
2570 (chip->pagebuf << chip->page_shift) < (to + ops->len))
2571 chip->pagebuf = -1;
2572
2573 /* Don't allow multipage oob writes with offset */
2574 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
2575 ret = -EINVAL;
2576 goto err_out;
2577 }
2578
2579 while (1) {
2580 int bytes = mtd->writesize;
2581 int cached = writelen > bytes && page != blockmask;
2582 uint8_t *wbuf = buf;
2583
2584 WATCHDOG_RESET();
2585 /* Partial page write? */
2586 if (unlikely(column || writelen < (mtd->writesize - 1))) {
2587 cached = 0;
2588 bytes = min_t(int, bytes - column, (int) writelen);
2589 chip->pagebuf = -1;
2590 memset(chip->buffers->databuf, 0xff, mtd->writesize);
2591 memcpy(&chip->buffers->databuf[column], buf, bytes);
2592 wbuf = chip->buffers->databuf;
2593 }
2594
2595 if (unlikely(oob)) {
2596 size_t len = min(oobwritelen, oobmaxlen);
2597 oob = nand_fill_oob(mtd, oob, len, ops);
2598 oobwritelen -= len;
2599 } else {
2600 /* We still need to erase leftover OOB data */
2601 memset(chip->oob_poi, 0xff, mtd->oobsize);
2602 }
2603 ret = chip->write_page(mtd, chip, column, bytes, wbuf,
2604 oob_required, page, cached,
2605 (ops->mode == MTD_OPS_RAW));
2606 if (ret)
2607 break;
2608
2609 writelen -= bytes;
2610 if (!writelen)
2611 break;
2612
2613 column = 0;
2614 buf += bytes;
2615 realpage++;
2616
2617 page = realpage & chip->pagemask;
2618 /* Check, if we cross a chip boundary */
2619 if (!page) {
2620 chipnr++;
2621 chip->select_chip(mtd, -1);
2622 chip->select_chip(mtd, chipnr);
2623 }
2624 }
2625
2626 ops->retlen = ops->len - writelen;
2627 if (unlikely(oob))
2628 ops->oobretlen = ops->ooblen;
2629
2630 err_out:
2631 chip->select_chip(mtd, -1);
2632 return ret;
2633 }
2634
2635 /**
2636 * panic_nand_write - [MTD Interface] NAND write with ECC
2637 * @mtd: MTD device structure
2638 * @to: offset to write to
2639 * @len: number of bytes to write
2640 * @retlen: pointer to variable to store the number of written bytes
2641 * @buf: the data to write
2642 *
2643 * NAND write with ECC. Used when performing writes in interrupt context, this
2644 * may for example be called by mtdoops when writing an oops while in panic.
2645 */
2646 static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2647 size_t *retlen, const uint8_t *buf)
2648 {
2649 struct nand_chip *chip = mtd->priv;
2650 struct mtd_oob_ops ops;
2651 int ret;
2652
2653 /* Wait for the device to get ready */
2654 panic_nand_wait(mtd, chip, 400);
2655
2656 /* Grab the device */
2657 panic_nand_get_device(chip, mtd, FL_WRITING);
2658
2659 ops.len = len;
2660 ops.datbuf = (uint8_t *)buf;
2661 ops.oobbuf = NULL;
2662 ops.mode = MTD_OPS_PLACE_OOB;
2663
2664 ret = nand_do_write_ops(mtd, to, &ops);
2665
2666 *retlen = ops.retlen;
2667 return ret;
2668 }
2669
2670 /**
2671 * nand_write - [MTD Interface] NAND write with ECC
2672 * @mtd: MTD device structure
2673 * @to: offset to write to
2674 * @len: number of bytes to write
2675 * @retlen: pointer to variable to store the number of written bytes
2676 * @buf: the data to write
2677 *
2678 * NAND write with ECC.
2679 */
2680 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2681 size_t *retlen, const uint8_t *buf)
2682 {
2683 struct mtd_oob_ops ops;
2684 int ret;
2685
2686 nand_get_device(mtd, FL_WRITING);
2687 ops.len = len;
2688 ops.datbuf = (uint8_t *)buf;
2689 ops.oobbuf = NULL;
2690 ops.mode = MTD_OPS_PLACE_OOB;
2691 ret = nand_do_write_ops(mtd, to, &ops);
2692 *retlen = ops.retlen;
2693 nand_release_device(mtd);
2694 return ret;
2695 }
2696
2697 /**
2698 * nand_do_write_oob - [MTD Interface] NAND write out-of-band
2699 * @mtd: MTD device structure
2700 * @to: offset to write to
2701 * @ops: oob operation description structure
2702 *
2703 * NAND write out-of-band.
2704 */
2705 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
2706 struct mtd_oob_ops *ops)
2707 {
2708 int chipnr, page, status, len;
2709 struct nand_chip *chip = mtd->priv;
2710
2711 pr_debug("%s: to = 0x%08x, len = %i\n",
2712 __func__, (unsigned int)to, (int)ops->ooblen);
2713
2714 if (ops->mode == MTD_OPS_AUTO_OOB)
2715 len = chip->ecc.layout->oobavail;
2716 else
2717 len = mtd->oobsize;
2718
2719 /* Do not allow write past end of page */
2720 if ((ops->ooboffs + ops->ooblen) > len) {
2721 pr_debug("%s: attempt to write past end of page\n",
2722 __func__);
2723 return -EINVAL;
2724 }
2725
2726 if (unlikely(ops->ooboffs >= len)) {
2727 pr_debug("%s: attempt to start write outside oob\n",
2728 __func__);
2729 return -EINVAL;
2730 }
2731
2732 /* Do not allow write past end of device */
2733 if (unlikely(to >= mtd->size ||
2734 ops->ooboffs + ops->ooblen >
2735 ((mtd->size >> chip->page_shift) -
2736 (to >> chip->page_shift)) * len)) {
2737 pr_debug("%s: attempt to write beyond end of device\n",
2738 __func__);
2739 return -EINVAL;
2740 }
2741
2742 chipnr = (int)(to >> chip->chip_shift);
2743 chip->select_chip(mtd, chipnr);
2744
2745 /* Shift to get page */
2746 page = (int)(to >> chip->page_shift);
2747
2748 /*
2749 * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
2750 * of my DiskOnChip 2000 test units) will clear the whole data page too
2751 * if we don't do this. I have no clue why, but I seem to have 'fixed'
2752 * it in the doc2000 driver in August 1999. dwmw2.
2753 */
2754 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2755
2756 /* Check, if it is write protected */
2757 if (nand_check_wp(mtd)) {
2758 chip->select_chip(mtd, -1);
2759 return -EROFS;
2760 }
2761
2762 /* Invalidate the page cache, if we write to the cached page */
2763 if (page == chip->pagebuf)
2764 chip->pagebuf = -1;
2765
2766 nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops);
2767
2768 if (ops->mode == MTD_OPS_RAW)
2769 status = chip->ecc.write_oob_raw(mtd, chip, page & chip->pagemask);
2770 else
2771 status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);
2772
2773 chip->select_chip(mtd, -1);
2774
2775 if (status)
2776 return status;
2777
2778 ops->oobretlen = ops->ooblen;
2779
2780 return 0;
2781 }
2782
2783 /**
2784 * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
2785 * @mtd: MTD device structure
2786 * @to: offset to write to
2787 * @ops: oob operation description structure
2788 */
2789 static int nand_write_oob(struct mtd_info *mtd, loff_t to,
2790 struct mtd_oob_ops *ops)
2791 {
2792 int ret = -ENOTSUPP;
2793
2794 ops->retlen = 0;
2795
2796 /* Do not allow writes past end of device */
2797 if (ops->datbuf && (to + ops->len) > mtd->size) {
2798 pr_debug("%s: attempt to write beyond end of device\n",
2799 __func__);
2800 return -EINVAL;
2801 }
2802
2803 nand_get_device(mtd, FL_WRITING);
2804
2805 switch (ops->mode) {
2806 case MTD_OPS_PLACE_OOB:
2807 case MTD_OPS_AUTO_OOB:
2808 case MTD_OPS_RAW:
2809 break;
2810
2811 default:
2812 goto out;
2813 }
2814
2815 if (!ops->datbuf)
2816 ret = nand_do_write_oob(mtd, to, ops);
2817 else
2818 ret = nand_do_write_ops(mtd, to, ops);
2819
2820 out:
2821 nand_release_device(mtd);
2822 return ret;
2823 }
2824
2825 /**
2826 * single_erase_cmd - [GENERIC] NAND standard block erase command function
2827 * @mtd: MTD device structure
2828 * @page: the page address of the block which will be erased
2829 *
2830 * Standard erase command for NAND chips.
2831 */
2832 static void single_erase_cmd(struct mtd_info *mtd, int page)
2833 {
2834 struct nand_chip *chip = mtd->priv;
2835 /* Send commands to erase a block */
2836 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2837 chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2838 }
2839
2840 /**
2841 * nand_erase - [MTD Interface] erase block(s)
2842 * @mtd: MTD device structure
2843 * @instr: erase instruction
2844 *
2845 * Erase one ore more blocks.
2846 */
2847 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
2848 {
2849 return nand_erase_nand(mtd, instr, 0);
2850 }
2851
2852 /**
2853 * nand_erase_nand - [INTERN] erase block(s)
2854 * @mtd: MTD device structure
2855 * @instr: erase instruction
2856 * @allowbbt: allow erasing the bbt area
2857 *
2858 * Erase one ore more blocks.
2859 */
2860 int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
2861 int allowbbt)
2862 {
2863 int page, status, pages_per_block, ret, chipnr;
2864 struct nand_chip *chip = mtd->priv;
2865 loff_t len;
2866
2867 pr_debug("%s: start = 0x%012llx, len = %llu\n",
2868 __func__, (unsigned long long)instr->addr,
2869 (unsigned long long)instr->len);
2870
2871 if (check_offs_len(mtd, instr->addr, instr->len))
2872 return -EINVAL;
2873
2874 /* Grab the lock and see if the device is available */
2875 nand_get_device(mtd, FL_ERASING);
2876
2877 /* Shift to get first page */
2878 page = (int)(instr->addr >> chip->page_shift);
2879 chipnr = (int)(instr->addr >> chip->chip_shift);
2880
2881 /* Calculate pages in each block */
2882 pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
2883
2884 /* Select the NAND device */
2885 chip->select_chip(mtd, chipnr);
2886
2887 /* Check, if it is write protected */
2888 if (nand_check_wp(mtd)) {
2889 pr_debug("%s: device is write protected!\n",
2890 __func__);
2891 instr->state = MTD_ERASE_FAILED;
2892 goto erase_exit;
2893 }
2894
2895 /* Loop through the pages */
2896 len = instr->len;
2897
2898 instr->state = MTD_ERASING;
2899
2900 while (len) {
2901 WATCHDOG_RESET();
2902
2903 /* Check if we have a bad block, we do not erase bad blocks! */
2904 if (nand_block_checkbad(mtd, ((loff_t) page) <<
2905 chip->page_shift, 0, allowbbt)) {
2906 pr_warn("%s: attempt to erase a bad block at page 0x%08x\n",
2907 __func__, page);
2908 instr->state = MTD_ERASE_FAILED;
2909 goto erase_exit;
2910 }
2911
2912 /*
2913 * Invalidate the page cache, if we erase the block which
2914 * contains the current cached page.
2915 */
2916 if (page <= chip->pagebuf && chip->pagebuf <
2917 (page + pages_per_block))
2918 chip->pagebuf = -1;
2919
2920 chip->erase_cmd(mtd, page & chip->pagemask);
2921
2922 status = chip->waitfunc(mtd, chip);
2923
2924 /*
2925 * See if operation failed and additional status checks are
2926 * available
2927 */
2928 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2929 status = chip->errstat(mtd, chip, FL_ERASING,
2930 status, page);
2931
2932 /* See if block erase succeeded */
2933 if (status & NAND_STATUS_FAIL) {
2934 pr_debug("%s: failed erase, page 0x%08x\n",
2935 __func__, page);
2936 instr->state = MTD_ERASE_FAILED;
2937 instr->fail_addr =
2938 ((loff_t)page << chip->page_shift);
2939 goto erase_exit;
2940 }
2941
2942 /* Increment page address and decrement length */
2943 len -= (1ULL << chip->phys_erase_shift);
2944 page += pages_per_block;
2945
2946 /* Check, if we cross a chip boundary */
2947 if (len && !(page & chip->pagemask)) {
2948 chipnr++;
2949 chip->select_chip(mtd, -1);
2950 chip->select_chip(mtd, chipnr);
2951 }
2952 }
2953 instr->state = MTD_ERASE_DONE;
2954
2955 erase_exit:
2956
2957 ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
2958
2959 /* Deselect and wake up anyone waiting on the device */
2960 chip->select_chip(mtd, -1);
2961 nand_release_device(mtd);
2962
2963 /* Do call back function */
2964 if (!ret)
2965 mtd_erase_callback(instr);
2966
2967 /* Return more or less happy */
2968 return ret;
2969 }
2970
2971 /**
2972 * nand_sync - [MTD Interface] sync
2973 * @mtd: MTD device structure
2974 *
2975 * Sync is actually a wait for chip ready function.
2976 */
2977 static void nand_sync(struct mtd_info *mtd)
2978 {
2979 pr_debug("%s: called\n", __func__);
2980
2981 /* Grab the lock and see if the device is available */
2982 nand_get_device(mtd, FL_SYNCING);
2983 /* Release it and go back */
2984 nand_release_device(mtd);
2985 }
2986
2987 /**
2988 * nand_block_isbad - [MTD Interface] Check if block at offset is bad
2989 * @mtd: MTD device structure
2990 * @offs: offset relative to mtd start
2991 */
2992 static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
2993 {
2994 return nand_block_checkbad(mtd, offs, 1, 0);
2995 }
2996
2997 /**
2998 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
2999 * @mtd: MTD device structure
3000 * @ofs: offset relative to mtd start
3001 */
3002 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
3003 {
3004 int ret;
3005
3006 ret = nand_block_isbad(mtd, ofs);
3007 if (ret) {
3008 /* If it was bad already, return success and do nothing */
3009 if (ret > 0)
3010 return 0;
3011 return ret;
3012 }
3013
3014 return nand_block_markbad_lowlevel(mtd, ofs);
3015 }
3016
3017 /**
3018 * nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand
3019 * @mtd: MTD device structure
3020 * @chip: nand chip info structure
3021 * @addr: feature address.
3022 * @subfeature_param: the subfeature parameters, a four bytes array.
3023 */
3024 static int nand_onfi_set_features(struct mtd_info *mtd, struct nand_chip *chip,
3025 int addr, uint8_t *subfeature_param)
3026 {
3027 int status;
3028 int i;
3029
3030 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3031 if (!chip->onfi_version ||
3032 !(le16_to_cpu(chip->onfi_params.opt_cmd)
3033 & ONFI_OPT_CMD_SET_GET_FEATURES))
3034 return -EINVAL;
3035 #endif
3036
3037 chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, addr, -1);
3038 for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3039 chip->write_byte(mtd, subfeature_param[i]);
3040
3041 status = chip->waitfunc(mtd, chip);
3042 if (status & NAND_STATUS_FAIL)
3043 return -EIO;
3044 return 0;
3045 }
3046
3047 /**
3048 * nand_onfi_get_features- [REPLACEABLE] get features for ONFI nand
3049 * @mtd: MTD device structure
3050 * @chip: nand chip info structure
3051 * @addr: feature address.
3052 * @subfeature_param: the subfeature parameters, a four bytes array.
3053 */
3054 static int nand_onfi_get_features(struct mtd_info *mtd, struct nand_chip *chip,
3055 int addr, uint8_t *subfeature_param)
3056 {
3057 int i;
3058
3059 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3060 if (!chip->onfi_version ||
3061 !(le16_to_cpu(chip->onfi_params.opt_cmd)
3062 & ONFI_OPT_CMD_SET_GET_FEATURES))
3063 return -EINVAL;
3064 #endif
3065
3066 /* clear the sub feature parameters */
3067 memset(subfeature_param, 0, ONFI_SUBFEATURE_PARAM_LEN);
3068
3069 chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES, addr, -1);
3070 for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3071 *subfeature_param++ = chip->read_byte(mtd);
3072 return 0;
3073 }
3074
3075 #ifndef __UBOOT__
3076 /**
3077 * nand_suspend - [MTD Interface] Suspend the NAND flash
3078 * @mtd: MTD device structure
3079 */
3080 static int nand_suspend(struct mtd_info *mtd)
3081 {
3082 return nand_get_device(mtd, FL_PM_SUSPENDED);
3083 }
3084
3085 /**
3086 * nand_resume - [MTD Interface] Resume the NAND flash
3087 * @mtd: MTD device structure
3088 */
3089 static void nand_resume(struct mtd_info *mtd)
3090 {
3091 struct nand_chip *chip = mtd->priv;
3092
3093 if (chip->state == FL_PM_SUSPENDED)
3094 nand_release_device(mtd);
3095 else
3096 pr_err("%s called for a chip which is not in suspended state\n",
3097 __func__);
3098 }
3099 #endif
3100
3101 /* Set default functions */
3102 static void nand_set_defaults(struct nand_chip *chip, int busw)
3103 {
3104 /* check for proper chip_delay setup, set 20us if not */
3105 if (!chip->chip_delay)
3106 chip->chip_delay = 20;
3107
3108 /* check, if a user supplied command function given */
3109 if (chip->cmdfunc == NULL)
3110 chip->cmdfunc = nand_command;
3111
3112 /* check, if a user supplied wait function given */
3113 if (chip->waitfunc == NULL)
3114 chip->waitfunc = nand_wait;
3115
3116 if (!chip->select_chip)
3117 chip->select_chip = nand_select_chip;
3118
3119 /* set for ONFI nand */
3120 if (!chip->onfi_set_features)
3121 chip->onfi_set_features = nand_onfi_set_features;
3122 if (!chip->onfi_get_features)
3123 chip->onfi_get_features = nand_onfi_get_features;
3124
3125 /* If called twice, pointers that depend on busw may need to be reset */
3126 if (!chip->read_byte || chip->read_byte == nand_read_byte)
3127 chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
3128 if (!chip->read_word)
3129 chip->read_word = nand_read_word;
3130 if (!chip->block_bad)
3131 chip->block_bad = nand_block_bad;
3132 if (!chip->block_markbad)
3133 chip->block_markbad = nand_default_block_markbad;
3134 if (!chip->write_buf || chip->write_buf == nand_write_buf)
3135 chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
3136 if (!chip->write_byte || chip->write_byte == nand_write_byte)
3137 chip->write_byte = busw ? nand_write_byte16 : nand_write_byte;
3138 if (!chip->read_buf || chip->read_buf == nand_read_buf)
3139 chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
3140 if (!chip->scan_bbt)
3141 chip->scan_bbt = nand_default_bbt;
3142 #ifdef __UBOOT__
3143 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
3144 if (!chip->verify_buf)
3145 chip->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
3146 #endif
3147 #endif
3148
3149 if (!chip->controller) {
3150 chip->controller = &chip->hwcontrol;
3151 spin_lock_init(&chip->controller->lock);
3152 init_waitqueue_head(&chip->controller->wq);
3153 }
3154
3155 }
3156
3157 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3158 /* Sanitize ONFI strings so we can safely print them */
3159 #ifndef __UBOOT__
3160 static void sanitize_string(uint8_t *s, size_t len)
3161 #else
3162 static void sanitize_string(char *s, size_t len)
3163 #endif
3164 {
3165 ssize_t i;
3166
3167 /* Null terminate */
3168 s[len - 1] = 0;
3169
3170 /* Remove non printable chars */
3171 for (i = 0; i < len - 1; i++) {
3172 if (s[i] < ' ' || s[i] > 127)
3173 s[i] = '?';
3174 }
3175
3176 /* Remove trailing spaces */
3177 strim(s);
3178 }
3179
3180 static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
3181 {
3182 int i;
3183 while (len--) {
3184 crc ^= *p++ << 8;
3185 for (i = 0; i < 8; i++)
3186 crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0);
3187 }
3188
3189 return crc;
3190 }
3191
3192 /* Parse the Extended Parameter Page. */
3193 static int nand_flash_detect_ext_param_page(struct mtd_info *mtd,
3194 struct nand_chip *chip, struct nand_onfi_params *p)
3195 {
3196 struct onfi_ext_param_page *ep;
3197 struct onfi_ext_section *s;
3198 struct onfi_ext_ecc_info *ecc;
3199 uint8_t *cursor;
3200 int ret = -EINVAL;
3201 int len;
3202 int i;
3203
3204 len = le16_to_cpu(p->ext_param_page_length) * 16;
3205 ep = kmalloc(len, GFP_KERNEL);
3206 if (!ep)
3207 return -ENOMEM;
3208
3209 /* Send our own NAND_CMD_PARAM. */
3210 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3211
3212 /* Use the Change Read Column command to skip the ONFI param pages. */
3213 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
3214 sizeof(*p) * p->num_of_param_pages , -1);
3215
3216 /* Read out the Extended Parameter Page. */
3217 chip->read_buf(mtd, (uint8_t *)ep, len);
3218 if ((onfi_crc16(ONFI_CRC_BASE, ((uint8_t *)ep) + 2, len - 2)
3219 != le16_to_cpu(ep->crc))) {
3220 pr_debug("fail in the CRC.\n");
3221 goto ext_out;
3222 }
3223
3224 /*
3225 * Check the signature.
3226 * Do not strictly follow the ONFI spec, maybe changed in future.
3227 */
3228 #ifndef __UBOOT__
3229 if (strncmp(ep->sig, "EPPS", 4)) {
3230 #else
3231 if (strncmp((char *)ep->sig, "EPPS", 4)) {
3232 #endif
3233 pr_debug("The signature is invalid.\n");
3234 goto ext_out;
3235 }
3236
3237 /* find the ECC section. */
3238 cursor = (uint8_t *)(ep + 1);
3239 for (i = 0; i < ONFI_EXT_SECTION_MAX; i++) {
3240 s = ep->sections + i;
3241 if (s->type == ONFI_SECTION_TYPE_2)
3242 break;
3243 cursor += s->length * 16;
3244 }
3245 if (i == ONFI_EXT_SECTION_MAX) {
3246 pr_debug("We can not find the ECC section.\n");
3247 goto ext_out;
3248 }
3249
3250 /* get the info we want. */
3251 ecc = (struct onfi_ext_ecc_info *)cursor;
3252
3253 if (!ecc->codeword_size) {
3254 pr_debug("Invalid codeword size\n");
3255 goto ext_out;
3256 }
3257
3258 chip->ecc_strength_ds = ecc->ecc_bits;
3259 chip->ecc_step_ds = 1 << ecc->codeword_size;
3260 ret = 0;
3261
3262 ext_out:
3263 kfree(ep);
3264 return ret;
3265 }
3266
3267 static int nand_setup_read_retry_micron(struct mtd_info *mtd, int retry_mode)
3268 {
3269 struct nand_chip *chip = mtd->priv;
3270 uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode};
3271
3272 return chip->onfi_set_features(mtd, chip, ONFI_FEATURE_ADDR_READ_RETRY,
3273 feature);
3274 }
3275
3276 /*
3277 * Configure chip properties from Micron vendor-specific ONFI table
3278 */
3279 static void nand_onfi_detect_micron(struct nand_chip *chip,
3280 struct nand_onfi_params *p)
3281 {
3282 struct nand_onfi_vendor_micron *micron = (void *)p->vendor;
3283
3284 if (le16_to_cpu(p->vendor_revision) < 1)
3285 return;
3286
3287 chip->read_retries = micron->read_retry_options;
3288 chip->setup_read_retry = nand_setup_read_retry_micron;
3289 }
3290
3291 /*
3292 * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise.
3293 */
3294 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3295 int *busw)
3296 {
3297 struct nand_onfi_params *p = &chip->onfi_params;
3298 int i, j;
3299 int val;
3300
3301 /* Try ONFI for unknown chip or LP */
3302 chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
3303 if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
3304 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
3305 return 0;
3306
3307 /*
3308 * ONFI must be probed in 8-bit mode or with NAND_BUSWIDTH_AUTO, not
3309 * with NAND_BUSWIDTH_16
3310 */
3311 if (chip->options & NAND_BUSWIDTH_16) {
3312 pr_err("ONFI cannot be probed in 16-bit mode; aborting\n");
3313 return 0;
3314 }
3315
3316 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3317 for (i = 0; i < 3; i++) {
3318 for (j = 0; j < sizeof(*p); j++)
3319 ((uint8_t *)p)[j] = chip->read_byte(mtd);
3320 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
3321 le16_to_cpu(p->crc)) {
3322 break;
3323 }
3324 }
3325
3326 if (i == 3) {
3327 pr_err("Could not find valid ONFI parameter page; aborting\n");
3328 return 0;
3329 }
3330
3331 /* Check version */
3332 val = le16_to_cpu(p->revision);
3333 if (val & (1 << 5))
3334 chip->onfi_version = 23;
3335 else if (val & (1 << 4))
3336 chip->onfi_version = 22;
3337 else if (val & (1 << 3))
3338 chip->onfi_version = 21;
3339 else if (val & (1 << 2))
3340 chip->onfi_version = 20;
3341 else if (val & (1 << 1))
3342 chip->onfi_version = 10;
3343
3344 if (!chip->onfi_version) {
3345 pr_info("unsupported ONFI version: %d\n", val);
3346 return 0;
3347 }
3348
3349 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
3350 sanitize_string(p->model, sizeof(p->model));
3351 if (!mtd->name)
3352 mtd->name = p->model;
3353
3354 mtd->writesize = le32_to_cpu(p->byte_per_page);
3355
3356 /*
3357 * pages_per_block and blocks_per_lun may not be a power-of-2 size
3358 * (don't ask me who thought of this...). MTD assumes that these
3359 * dimensions will be power-of-2, so just truncate the remaining area.
3360 */
3361 mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
3362 mtd->erasesize *= mtd->writesize;
3363
3364 mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
3365
3366 /* See erasesize comment */
3367 chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
3368 chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
3369 chip->bits_per_cell = p->bits_per_cell;
3370
3371 if (onfi_feature(chip) & ONFI_FEATURE_16_BIT_BUS)
3372 *busw = NAND_BUSWIDTH_16;
3373 else
3374 *busw = 0;
3375
3376 if (p->ecc_bits != 0xff) {
3377 chip->ecc_strength_ds = p->ecc_bits;
3378 chip->ecc_step_ds = 512;
3379 } else if (chip->onfi_version >= 21 &&
3380 (onfi_feature(chip) & ONFI_FEATURE_EXT_PARAM_PAGE)) {
3381
3382 /*
3383 * The nand_flash_detect_ext_param_page() uses the
3384 * Change Read Column command which maybe not supported
3385 * by the chip->cmdfunc. So try to update the chip->cmdfunc
3386 * now. We do not replace user supplied command function.
3387 */
3388 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
3389 chip->cmdfunc = nand_command_lp;
3390
3391 /* The Extended Parameter Page is supported since ONFI 2.1. */
3392 if (nand_flash_detect_ext_param_page(mtd, chip, p))
3393 pr_warn("Failed to detect ONFI extended param page\n");
3394 } else {
3395 pr_warn("Could not retrieve ONFI ECC requirements\n");
3396 }
3397
3398 if (p->jedec_id == NAND_MFR_MICRON)
3399 nand_onfi_detect_micron(chip, p);
3400
3401 return 1;
3402 }
3403 #else
3404 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3405 int *busw)
3406 {
3407 return 0;
3408 }
3409 #endif
3410
3411 /*
3412 * nand_id_has_period - Check if an ID string has a given wraparound period
3413 * @id_data: the ID string
3414 * @arrlen: the length of the @id_data array
3415 * @period: the period of repitition
3416 *
3417 * Check if an ID string is repeated within a given sequence of bytes at
3418 * specific repetition interval period (e.g., {0x20,0x01,0x7F,0x20} has a
3419 * period of 3). This is a helper function for nand_id_len(). Returns non-zero
3420 * if the repetition has a period of @period; otherwise, returns zero.
3421 */
3422 static int nand_id_has_period(u8 *id_data, int arrlen, int period)
3423 {
3424 int i, j;
3425 for (i = 0; i < period; i++)
3426 for (j = i + period; j < arrlen; j += period)
3427 if (id_data[i] != id_data[j])
3428 return 0;
3429 return 1;
3430 }
3431
3432 /*
3433 * nand_id_len - Get the length of an ID string returned by CMD_READID
3434 * @id_data: the ID string
3435 * @arrlen: the length of the @id_data array
3436
3437 * Returns the length of the ID string, according to known wraparound/trailing
3438 * zero patterns. If no pattern exists, returns the length of the array.
3439 */
3440 static int nand_id_len(u8 *id_data, int arrlen)
3441 {
3442 int last_nonzero, period;
3443
3444 /* Find last non-zero byte */
3445 for (last_nonzero = arrlen - 1; last_nonzero >= 0; last_nonzero--)
3446 if (id_data[last_nonzero])
3447 break;
3448
3449 /* All zeros */
3450 if (last_nonzero < 0)
3451 return 0;
3452
3453 /* Calculate wraparound period */
3454 for (period = 1; period < arrlen; period++)
3455 if (nand_id_has_period(id_data, arrlen, period))
3456 break;
3457
3458 /* There's a repeated pattern */
3459 if (period < arrlen)
3460 return period;
3461
3462 /* There are trailing zeros */
3463 if (last_nonzero < arrlen - 1)
3464 return last_nonzero + 1;
3465
3466 /* No pattern detected */
3467 return arrlen;
3468 }
3469
3470 /* Extract the bits of per cell from the 3rd byte of the extended ID */
3471 static int nand_get_bits_per_cell(u8 cellinfo)
3472 {
3473 int bits;
3474
3475 bits = cellinfo & NAND_CI_CELLTYPE_MSK;
3476 bits >>= NAND_CI_CELLTYPE_SHIFT;
3477 return bits + 1;
3478 }
3479
3480 /*
3481 * Many new NAND share similar device ID codes, which represent the size of the
3482 * chip. The rest of the parameters must be decoded according to generic or
3483 * manufacturer-specific "extended ID" decoding patterns.
3484 */
3485 static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
3486 u8 id_data[8], int *busw)
3487 {
3488 int extid, id_len;
3489 /* The 3rd id byte holds MLC / multichip data */
3490 chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3491 /* The 4th id byte is the important one */
3492 extid = id_data[3];
3493
3494 id_len = nand_id_len(id_data, 8);
3495
3496 /*
3497 * Field definitions are in the following datasheets:
3498 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
3499 * New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44)
3500 * Hynix MLC (6 byte ID): Hynix H27UBG8T2B (p.22)
3501 *
3502 * Check for ID length, non-zero 6th byte, cell type, and Hynix/Samsung
3503 * ID to decide what to do.
3504 */
3505 if (id_len == 6 && id_data[0] == NAND_MFR_SAMSUNG &&
3506 !nand_is_slc(chip) && id_data[5] != 0x00) {
3507 /* Calc pagesize */
3508 mtd->writesize = 2048 << (extid & 0x03);
3509 extid >>= 2;
3510 /* Calc oobsize */
3511 switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3512 case 1:
3513 mtd->oobsize = 128;
3514 break;
3515 case 2:
3516 mtd->oobsize = 218;
3517 break;
3518 case 3:
3519 mtd->oobsize = 400;
3520 break;
3521 case 4:
3522 mtd->oobsize = 436;
3523 break;
3524 case 5:
3525 mtd->oobsize = 512;
3526 break;
3527 case 6:
3528 mtd->oobsize = 640;
3529 break;
3530 case 7:
3531 default: /* Other cases are "reserved" (unknown) */
3532 mtd->oobsize = 1024;
3533 break;
3534 }
3535 extid >>= 2;
3536 /* Calc blocksize */
3537 mtd->erasesize = (128 * 1024) <<
3538 (((extid >> 1) & 0x04) | (extid & 0x03));
3539 *busw = 0;
3540 } else if (id_len == 6 && id_data[0] == NAND_MFR_HYNIX &&
3541 !nand_is_slc(chip)) {
3542 unsigned int tmp;
3543
3544 /* Calc pagesize */
3545 mtd->writesize = 2048 << (extid & 0x03);
3546 extid >>= 2;
3547 /* Calc oobsize */
3548 switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3549 case 0:
3550 mtd->oobsize = 128;
3551 break;
3552 case 1:
3553 mtd->oobsize = 224;
3554 break;
3555 case 2:
3556 mtd->oobsize = 448;
3557 break;
3558 case 3:
3559 mtd->oobsize = 64;
3560 break;
3561 case 4:
3562 mtd->oobsize = 32;
3563 break;
3564 case 5:
3565 mtd->oobsize = 16;
3566 break;
3567 default:
3568 mtd->oobsize = 640;
3569 break;
3570 }
3571 extid >>= 2;
3572 /* Calc blocksize */
3573 tmp = ((extid >> 1) & 0x04) | (extid & 0x03);
3574 if (tmp < 0x03)
3575 mtd->erasesize = (128 * 1024) << tmp;
3576 else if (tmp == 0x03)
3577 mtd->erasesize = 768 * 1024;
3578 else
3579 mtd->erasesize = (64 * 1024) << tmp;
3580 *busw = 0;
3581 } else {
3582 /* Calc pagesize */
3583 mtd->writesize = 1024 << (extid & 0x03);
3584 extid >>= 2;
3585 /* Calc oobsize */
3586 mtd->oobsize = (8 << (extid & 0x01)) *
3587 (mtd->writesize >> 9);
3588 extid >>= 2;
3589 /* Calc blocksize. Blocksize is multiples of 64KiB */
3590 mtd->erasesize = (64 * 1024) << (extid & 0x03);
3591 extid >>= 2;
3592 /* Get buswidth information */
3593 *busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
3594
3595 /*
3596 * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per
3597 * 512B page. For Toshiba SLC, we decode the 5th/6th byte as
3598 * follows:
3599 * - ID byte 6, bits[2:0]: 100b -> 43nm, 101b -> 32nm,
3600 * 110b -> 24nm
3601 * - ID byte 5, bit[7]: 1 -> BENAND, 0 -> raw SLC
3602 */
3603 if (id_len >= 6 && id_data[0] == NAND_MFR_TOSHIBA &&
3604 nand_is_slc(chip) &&
3605 (id_data[5] & 0x7) == 0x6 /* 24nm */ &&
3606 !(id_data[4] & 0x80) /* !BENAND */) {
3607 mtd->oobsize = 32 * mtd->writesize >> 9;
3608 }
3609
3610 }
3611 }
3612
3613 /*
3614 * Old devices have chip data hardcoded in the device ID table. nand_decode_id
3615 * decodes a matching ID table entry and assigns the MTD size parameters for
3616 * the chip.
3617 */
3618 static void nand_decode_id(struct mtd_info *mtd, struct nand_chip *chip,
3619 struct nand_flash_dev *type, u8 id_data[8],
3620 int *busw)
3621 {
3622 int maf_id = id_data[0];
3623
3624 mtd->erasesize = type->erasesize;
3625 mtd->writesize = type->pagesize;
3626 mtd->oobsize = mtd->writesize / 32;
3627 *busw = type->options & NAND_BUSWIDTH_16;
3628
3629 /* All legacy ID NAND are small-page, SLC */
3630 chip->bits_per_cell = 1;
3631
3632 /*
3633 * Check for Spansion/AMD ID + repeating 5th, 6th byte since
3634 * some Spansion chips have erasesize that conflicts with size
3635 * listed in nand_ids table.
3636 * Data sheet (5 byte ID): Spansion S30ML-P ORNAND (p.39)
3637 */
3638 if (maf_id == NAND_MFR_AMD && id_data[4] != 0x00 && id_data[5] == 0x00
3639 && id_data[6] == 0x00 && id_data[7] == 0x00
3640 && mtd->writesize == 512) {
3641 mtd->erasesize = 128 * 1024;
3642 mtd->erasesize <<= ((id_data[3] & 0x03) << 1);
3643 }
3644 }
3645
3646 /*
3647 * Set the bad block marker/indicator (BBM/BBI) patterns according to some
3648 * heuristic patterns using various detected parameters (e.g., manufacturer,
3649 * page size, cell-type information).
3650 */
3651 static void nand_decode_bbm_options(struct mtd_info *mtd,
3652 struct nand_chip *chip, u8 id_data[8])
3653 {
3654 int maf_id = id_data[0];
3655
3656 /* Set the bad block position */
3657 if (mtd->writesize > 512 || (chip->options & NAND_BUSWIDTH_16))
3658 chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
3659 else
3660 chip->badblockpos = NAND_SMALL_BADBLOCK_POS;
3661
3662 /*
3663 * Bad block marker is stored in the last page of each block on Samsung
3664 * and Hynix MLC devices; stored in first two pages of each block on
3665 * Micron devices with 2KiB pages and on SLC Samsung, Hynix, Toshiba,
3666 * AMD/Spansion, and Macronix. All others scan only the first page.
3667 */
3668 if (!nand_is_slc(chip) &&
3669 (maf_id == NAND_MFR_SAMSUNG ||
3670 maf_id == NAND_MFR_HYNIX))
3671 chip->bbt_options |= NAND_BBT_SCANLASTPAGE;
3672 else if ((nand_is_slc(chip) &&
3673 (maf_id == NAND_MFR_SAMSUNG ||
3674 maf_id == NAND_MFR_HYNIX ||
3675 maf_id == NAND_MFR_TOSHIBA ||
3676 maf_id == NAND_MFR_AMD ||
3677 maf_id == NAND_MFR_MACRONIX)) ||
3678 (mtd->writesize == 2048 &&
3679 maf_id == NAND_MFR_MICRON))
3680 chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
3681 }
3682
3683 static inline bool is_full_id_nand(struct nand_flash_dev *type)
3684 {
3685 return type->id_len;
3686 }
3687
3688 static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
3689 struct nand_flash_dev *type, u8 *id_data, int *busw)
3690 {
3691 #ifndef __UBOOT__
3692 if (!strncmp(type->id, id_data, type->id_len)) {
3693 #else
3694 if (!strncmp((char *)type->id, (char *)id_data, type->id_len)) {
3695 #endif
3696 mtd->writesize = type->pagesize;
3697 mtd->erasesize = type->erasesize;
3698 mtd->oobsize = type->oobsize;
3699
3700 chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3701 chip->chipsize = (uint64_t)type->chipsize << 20;
3702 chip->options |= type->options;
3703 chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
3704 chip->ecc_step_ds = NAND_ECC_STEP(type);
3705
3706 *busw = type->options & NAND_BUSWIDTH_16;
3707
3708 if (!mtd->name)
3709 mtd->name = type->name;
3710
3711 return true;
3712 }
3713 return false;
3714 }
3715
3716 /*
3717 * Get the flash and manufacturer id and lookup if the type is supported.
3718 */
3719 static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
3720 struct nand_chip *chip,
3721 int busw,
3722 int *maf_id, int *dev_id,
3723 struct nand_flash_dev *type)
3724 {
3725 int i, maf_idx;
3726 u8 id_data[8];
3727
3728 /* Select the device */
3729 chip->select_chip(mtd, 0);
3730
3731 /*
3732 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
3733 * after power-up.
3734 */
3735 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
3736
3737 /* Send the command for reading device ID */
3738 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3739
3740 /* Read manufacturer and device IDs */
3741 *maf_id = chip->read_byte(mtd);
3742 *dev_id = chip->read_byte(mtd);
3743
3744 /*
3745 * Try again to make sure, as some systems the bus-hold or other
3746 * interface concerns can cause random data which looks like a
3747 * possibly credible NAND flash to appear. If the two results do
3748 * not match, ignore the device completely.
3749 */
3750
3751 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3752
3753 /* Read entire ID string */
3754 for (i = 0; i < 8; i++)
3755 id_data[i] = chip->read_byte(mtd);
3756
3757 if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
3758 pr_info("second ID read did not match %02x,%02x against %02x,%02x\n",
3759 *maf_id, *dev_id, id_data[0], id_data[1]);
3760 return ERR_PTR(-ENODEV);
3761 }
3762
3763 if (!type)
3764 type = nand_flash_ids;
3765
3766 for (; type->name != NULL; type++) {
3767 if (is_full_id_nand(type)) {
3768 if (find_full_id_nand(mtd, chip, type, id_data, &busw))
3769 goto ident_done;
3770 } else if (*dev_id == type->dev_id) {
3771 break;
3772 }
3773 }
3774
3775 chip->onfi_version = 0;
3776 if (!type->name || !type->pagesize) {
3777 /* Check is chip is ONFI compliant */
3778 if (nand_flash_detect_onfi(mtd, chip, &busw))
3779 goto ident_done;
3780 }
3781
3782 if (!type->name)
3783 return ERR_PTR(-ENODEV);
3784
3785 if (!mtd->name)
3786 mtd->name = type->name;
3787
3788 chip->chipsize = (uint64_t)type->chipsize << 20;
3789
3790 if (!type->pagesize && chip->init_size) {
3791 /* Set the pagesize, oobsize, erasesize by the driver */
3792 busw = chip->init_size(mtd, chip, id_data);
3793 } else if (!type->pagesize) {
3794 /* Decode parameters from extended ID */
3795 nand_decode_ext_id(mtd, chip, id_data, &busw);
3796 } else {
3797 nand_decode_id(mtd, chip, type, id_data, &busw);
3798 }
3799 /* Get chip options */
3800 chip->options |= type->options;
3801
3802 /*
3803 * Check if chip is not a Samsung device. Do not clear the
3804 * options for chips which do not have an extended id.
3805 */
3806 if (*maf_id != NAND_MFR_SAMSUNG && !type->pagesize)
3807 chip->options &= ~NAND_SAMSUNG_LP_OPTIONS;
3808 ident_done:
3809
3810 /* Try to identify manufacturer */
3811 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
3812 if (nand_manuf_ids[maf_idx].id == *maf_id)
3813 break;
3814 }
3815
3816 if (chip->options & NAND_BUSWIDTH_AUTO) {
3817 WARN_ON(chip->options & NAND_BUSWIDTH_16);
3818 chip->options |= busw;
3819 nand_set_defaults(chip, busw);
3820 } else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
3821 /*
3822 * Check, if buswidth is correct. Hardware drivers should set
3823 * chip correct!
3824 */
3825 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
3826 *maf_id, *dev_id);
3827 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
3828 pr_warn("bus width %d instead %d bit\n",
3829 (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
3830 busw ? 16 : 8);
3831 return ERR_PTR(-EINVAL);
3832 }
3833
3834 nand_decode_bbm_options(mtd, chip, id_data);
3835
3836 /* Calculate the address shift from the page size */
3837 chip->page_shift = ffs(mtd->writesize) - 1;
3838 /* Convert chipsize to number of pages per chip -1 */
3839 chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
3840
3841 chip->bbt_erase_shift = chip->phys_erase_shift =
3842 ffs(mtd->erasesize) - 1;
3843 if (chip->chipsize & 0xffffffff)
3844 chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
3845 else {
3846 chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
3847 chip->chip_shift += 32 - 1;
3848 }
3849
3850 chip->badblockbits = 8;
3851 chip->erase_cmd = single_erase_cmd;
3852
3853 /* Do not replace user supplied command function! */
3854 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
3855 chip->cmdfunc = nand_command_lp;
3856
3857 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
3858 *maf_id, *dev_id);
3859 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3860 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3861 chip->onfi_version ? chip->onfi_params.model : type->name);
3862 #else
3863 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, type->name);
3864 #endif
3865 pr_info("%dMiB, %s, page size: %d, OOB size: %d\n",
3866 (int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
3867 mtd->writesize, mtd->oobsize);
3868 return type;
3869 }
3870
3871 /**
3872 * nand_scan_ident - [NAND Interface] Scan for the NAND device
3873 * @mtd: MTD device structure
3874 * @maxchips: number of chips to scan for
3875 * @table: alternative NAND ID table
3876 *
3877 * This is the first phase of the normal nand_scan() function. It reads the
3878 * flash ID and sets up MTD fields accordingly.
3879 *
3880 * The mtd->owner field must be set to the module of the caller.
3881 */
3882 int nand_scan_ident(struct mtd_info *mtd, int maxchips,
3883 struct nand_flash_dev *table)
3884 {
3885 int i, busw, nand_maf_id, nand_dev_id;
3886 struct nand_chip *chip = mtd->priv;
3887 struct nand_flash_dev *type;
3888
3889 /* Get buswidth to select the correct functions */
3890 busw = chip->options & NAND_BUSWIDTH_16;
3891 /* Set the default functions */
3892 nand_set_defaults(chip, busw);
3893
3894 /* Read the flash type */
3895 type = nand_get_flash_type(mtd, chip, busw,
3896 &nand_maf_id, &nand_dev_id, table);
3897
3898 if (IS_ERR(type)) {
3899 if (!(chip->options & NAND_SCAN_SILENT_NODEV))
3900 pr_warn("No NAND device found\n");
3901 chip->select_chip(mtd, -1);
3902 return PTR_ERR(type);
3903 }
3904
3905 chip->select_chip(mtd, -1);
3906
3907 /* Check for a chip array */
3908 for (i = 1; i < maxchips; i++) {
3909 chip->select_chip(mtd, i);
3910 /* See comment in nand_get_flash_type for reset */
3911 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
3912 /* Send the command for reading device ID */
3913 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3914 /* Read manufacturer and device IDs */
3915 if (nand_maf_id != chip->read_byte(mtd) ||
3916 nand_dev_id != chip->read_byte(mtd)) {
3917 chip->select_chip(mtd, -1);
3918 break;
3919 }
3920 chip->select_chip(mtd, -1);
3921 }
3922
3923 #ifdef DEBUG
3924 if (i > 1)
3925 pr_info("%d chips detected\n", i);
3926 #endif
3927
3928 /* Store the number of chips and calc total size for mtd */
3929 chip->numchips = i;
3930 mtd->size = i * chip->chipsize;
3931
3932 return 0;
3933 }
3934 EXPORT_SYMBOL(nand_scan_ident);
3935
3936
3937 /**
3938 * nand_scan_tail - [NAND Interface] Scan for the NAND device
3939 * @mtd: MTD device structure
3940 *
3941 * This is the second phase of the normal nand_scan() function. It fills out
3942 * all the uninitialized function pointers with the defaults and scans for a
3943 * bad block table if appropriate.
3944 */
3945 int nand_scan_tail(struct mtd_info *mtd)
3946 {
3947 int i;
3948 struct nand_chip *chip = mtd->priv;
3949 struct nand_ecc_ctrl *ecc = &chip->ecc;
3950
3951 /* New bad blocks should be marked in OOB, flash-based BBT, or both */
3952 BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
3953 !(chip->bbt_options & NAND_BBT_USE_FLASH));
3954
3955 if (!(chip->options & NAND_OWN_BUFFERS))
3956 chip->buffers = kmalloc(sizeof(*chip->buffers), GFP_KERNEL);
3957 if (!chip->buffers)
3958 return -ENOMEM;
3959
3960 /* Set the internal oob buffer location, just after the page data */
3961 chip->oob_poi = chip->buffers->databuf + mtd->writesize;
3962
3963 /*
3964 * If no default placement scheme is given, select an appropriate one.
3965 */
3966 if (!ecc->layout && (ecc->mode != NAND_ECC_SOFT_BCH)) {
3967 switch (mtd->oobsize) {
3968 case 8:
3969 ecc->layout = &nand_oob_8;
3970 break;
3971 case 16:
3972 ecc->layout = &nand_oob_16;
3973 break;
3974 case 64:
3975 ecc->layout = &nand_oob_64;
3976 break;
3977 case 128:
3978 ecc->layout = &nand_oob_128;
3979 break;
3980 default:
3981 pr_warn("No oob scheme defined for oobsize %d\n",
3982 mtd->oobsize);
3983 BUG();
3984 }
3985 }
3986
3987 if (!chip->write_page)
3988 chip->write_page = nand_write_page;
3989
3990 /*
3991 * Check ECC mode, default to software if 3byte/512byte hardware ECC is
3992 * selected and we have 256 byte pagesize fallback to software ECC
3993 */
3994
3995 switch (ecc->mode) {
3996 case NAND_ECC_HW_OOB_FIRST:
3997 /* Similar to NAND_ECC_HW, but a separate read_page handle */
3998 if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
3999 pr_warn("No ECC functions supplied; "
4000 "hardware ECC not possible\n");
4001 BUG();
4002 }
4003 if (!ecc->read_page)
4004 ecc->read_page = nand_read_page_hwecc_oob_first;
4005
4006 case NAND_ECC_HW:
4007 /* Use standard hwecc read page function? */
4008 if (!ecc->read_page)
4009 ecc->read_page = nand_read_page_hwecc;
4010 if (!ecc->write_page)
4011 ecc->write_page = nand_write_page_hwecc;
4012 if (!ecc->read_page_raw)
4013 ecc->read_page_raw = nand_read_page_raw;
4014 if (!ecc->write_page_raw)
4015 ecc->write_page_raw = nand_write_page_raw;
4016 if (!ecc->read_oob)
4017 ecc->read_oob = nand_read_oob_std;
4018 if (!ecc->write_oob)
4019 ecc->write_oob = nand_write_oob_std;
4020 if (!ecc->read_subpage)
4021 ecc->read_subpage = nand_read_subpage;
4022 if (!ecc->write_subpage)
4023 ecc->write_subpage = nand_write_subpage_hwecc;
4024
4025 case NAND_ECC_HW_SYNDROME:
4026 if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) &&
4027 (!ecc->read_page ||
4028 ecc->read_page == nand_read_page_hwecc ||
4029 !ecc->write_page ||
4030 ecc->write_page == nand_write_page_hwecc)) {
4031 pr_warn("No ECC functions supplied; "
4032 "hardware ECC not possible\n");
4033 BUG();
4034 }
4035 /* Use standard syndrome read/write page function? */
4036 if (!ecc->read_page)
4037 ecc->read_page = nand_read_page_syndrome;
4038 if (!ecc->write_page)
4039 ecc->write_page = nand_write_page_syndrome;
4040 if (!ecc->read_page_raw)
4041 ecc->read_page_raw = nand_read_page_raw_syndrome;
4042 if (!ecc->write_page_raw)
4043 ecc->write_page_raw = nand_write_page_raw_syndrome;
4044 if (!ecc->read_oob)
4045 ecc->read_oob = nand_read_oob_syndrome;
4046 if (!ecc->write_oob)
4047 ecc->write_oob = nand_write_oob_syndrome;
4048
4049 if (mtd->writesize >= ecc->size) {
4050 if (!ecc->strength) {
4051 pr_warn("Driver must set ecc.strength when using hardware ECC\n");
4052 BUG();
4053 }
4054 break;
4055 }
4056 pr_warn("%d byte HW ECC not possible on "
4057 "%d byte page size, fallback to SW ECC\n",
4058 ecc->size, mtd->writesize);
4059 ecc->mode = NAND_ECC_SOFT;
4060
4061 case NAND_ECC_SOFT:
4062 ecc->calculate = nand_calculate_ecc;
4063 ecc->correct = nand_correct_data;
4064 ecc->read_page = nand_read_page_swecc;
4065 ecc->read_subpage = nand_read_subpage;
4066 ecc->write_page = nand_write_page_swecc;
4067 ecc->read_page_raw = nand_read_page_raw;
4068 ecc->write_page_raw = nand_write_page_raw;
4069 ecc->read_oob = nand_read_oob_std;
4070 ecc->write_oob = nand_write_oob_std;
4071 if (!ecc->size)
4072 ecc->size = 256;
4073 ecc->bytes = 3;
4074 ecc->strength = 1;
4075 break;
4076
4077 case NAND_ECC_SOFT_BCH:
4078 if (!mtd_nand_has_bch()) {
4079 pr_warn("CONFIG_MTD_ECC_BCH not enabled\n");
4080 BUG();
4081 }
4082 ecc->calculate = nand_bch_calculate_ecc;
4083 ecc->correct = nand_bch_correct_data;
4084 ecc->read_page = nand_read_page_swecc;
4085 ecc->read_subpage = nand_read_subpage;
4086 ecc->write_page = nand_write_page_swecc;
4087 ecc->read_page_raw = nand_read_page_raw;
4088 ecc->write_page_raw = nand_write_page_raw;
4089 ecc->read_oob = nand_read_oob_std;
4090 ecc->write_oob = nand_write_oob_std;
4091 /*
4092 * Board driver should supply ecc.size and ecc.bytes values to
4093 * select how many bits are correctable; see nand_bch_init()
4094 * for details. Otherwise, default to 4 bits for large page
4095 * devices.
4096 */
4097 if (!ecc->size && (mtd->oobsize >= 64)) {
4098 ecc->size = 512;
4099 ecc->bytes = 7;
4100 }
4101 ecc->priv = nand_bch_init(mtd, ecc->size, ecc->bytes,
4102 &ecc->layout);
4103 if (!ecc->priv) {
4104 pr_warn("BCH ECC initialization failed!\n");
4105 BUG();
4106 }
4107 ecc->strength = ecc->bytes * 8 / fls(8 * ecc->size);
4108 break;
4109
4110 case NAND_ECC_NONE:
4111 pr_warn("NAND_ECC_NONE selected by board driver. "
4112 "This is not recommended!\n");
4113 ecc->read_page = nand_read_page_raw;
4114 ecc->write_page = nand_write_page_raw;
4115 ecc->read_oob = nand_read_oob_std;
4116 ecc->read_page_raw = nand_read_page_raw;
4117 ecc->write_page_raw = nand_write_page_raw;
4118 ecc->write_oob = nand_write_oob_std;
4119 ecc->size = mtd->writesize;
4120 ecc->bytes = 0;
4121 ecc->strength = 0;
4122 break;
4123
4124 default:
4125 pr_warn("Invalid NAND_ECC_MODE %d\n", ecc->mode);
4126 BUG();
4127 }
4128
4129 /* For many systems, the standard OOB write also works for raw */
4130 if (!ecc->read_oob_raw)
4131 ecc->read_oob_raw = ecc->read_oob;
4132 if (!ecc->write_oob_raw)
4133 ecc->write_oob_raw = ecc->write_oob;
4134
4135 /*
4136 * The number of bytes available for a client to place data into
4137 * the out of band area.
4138 */
4139 ecc->layout->oobavail = 0;
4140 for (i = 0; ecc->layout->oobfree[i].length
4141 && i < ARRAY_SIZE(ecc->layout->oobfree); i++)
4142 ecc->layout->oobavail += ecc->layout->oobfree[i].length;
4143 mtd->oobavail = ecc->layout->oobavail;
4144
4145 /*
4146 * Set the number of read / write steps for one page depending on ECC
4147 * mode.
4148 */
4149 ecc->steps = mtd->writesize / ecc->size;
4150 if (ecc->steps * ecc->size != mtd->writesize) {
4151 pr_warn("Invalid ECC parameters\n");
4152 BUG();
4153 }
4154 ecc->total = ecc->steps * ecc->bytes;
4155
4156 /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
4157 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
4158 switch (ecc->steps) {
4159 case 2:
4160 mtd->subpage_sft = 1;
4161 break;
4162 case 4:
4163 case 8:
4164 case 16:
4165 mtd->subpage_sft = 2;
4166 break;
4167 }
4168 }
4169 chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
4170
4171 /* Initialize state */
4172 chip->state = FL_READY;
4173
4174 /* Invalidate the pagebuffer reference */
4175 chip->pagebuf = -1;
4176
4177 /* Large page NAND with SOFT_ECC should support subpage reads */
4178 if ((ecc->mode == NAND_ECC_SOFT) && (chip->page_shift > 9))
4179 chip->options |= NAND_SUBPAGE_READ;
4180
4181 /* Fill in remaining MTD driver data */
4182 mtd->type = nand_is_slc(chip) ? MTD_NANDFLASH : MTD_MLCNANDFLASH;
4183 mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
4184 MTD_CAP_NANDFLASH;
4185 mtd->_erase = nand_erase;
4186 #ifndef __UBOOT__
4187 mtd->_point = NULL;
4188 mtd->_unpoint = NULL;
4189 #endif
4190 mtd->_read = nand_read;
4191 mtd->_write = nand_write;
4192 mtd->_panic_write = panic_nand_write;
4193 mtd->_read_oob = nand_read_oob;
4194 mtd->_write_oob = nand_write_oob;
4195 mtd->_sync = nand_sync;
4196 mtd->_lock = NULL;
4197 mtd->_unlock = NULL;
4198 #ifndef __UBOOT__
4199 mtd->_suspend = nand_suspend;
4200 mtd->_resume = nand_resume;
4201 #endif
4202 mtd->_block_isbad = nand_block_isbad;
4203 mtd->_block_markbad = nand_block_markbad;
4204 mtd->writebufsize = mtd->writesize;
4205
4206 /* propagate ecc info to mtd_info */
4207 mtd->ecclayout = ecc->layout;
4208 mtd->ecc_strength = ecc->strength;
4209 mtd->ecc_step_size = ecc->size;
4210 /*
4211 * Initialize bitflip_threshold to its default prior scan_bbt() call.
4212 * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
4213 * properly set.
4214 */
4215 if (!mtd->bitflip_threshold)
4216 mtd->bitflip_threshold = mtd->ecc_strength;
4217
4218 /* Check, if we should skip the bad block table scan */
4219 if (chip->options & NAND_SKIP_BBTSCAN)
4220 return 0;
4221
4222 /* Build bad block table */
4223 return chip->scan_bbt(mtd);
4224 }
4225 EXPORT_SYMBOL(nand_scan_tail);
4226
4227 /*
4228 * is_module_text_address() isn't exported, and it's mostly a pointless
4229 * test if this is a module _anyway_ -- they'd have to try _really_ hard
4230 * to call us from in-kernel code if the core NAND support is modular.
4231 */
4232 #ifdef MODULE
4233 #define caller_is_module() (1)
4234 #else
4235 #define caller_is_module() \
4236 is_module_text_address((unsigned long)__builtin_return_address(0))
4237 #endif
4238
4239 /**
4240 * nand_scan - [NAND Interface] Scan for the NAND device
4241 * @mtd: MTD device structure
4242 * @maxchips: number of chips to scan for
4243 *
4244 * This fills out all the uninitialized function pointers with the defaults.
4245 * The flash ID is read and the mtd/chip structures are filled with the
4246 * appropriate values. The mtd->owner field must be set to the module of the
4247 * caller.
4248 */
4249 int nand_scan(struct mtd_info *mtd, int maxchips)
4250 {
4251 int ret;
4252
4253 /* Many callers got this wrong, so check for it for a while... */
4254 if (!mtd->owner && caller_is_module()) {
4255 pr_crit("%s called with NULL mtd->owner!\n", __func__);
4256 BUG();
4257 }
4258
4259 ret = nand_scan_ident(mtd, maxchips, NULL);
4260 if (!ret)
4261 ret = nand_scan_tail(mtd);
4262 return ret;
4263 }
4264 EXPORT_SYMBOL(nand_scan);
4265
4266 #ifndef __UBOOT__
4267 /**
4268 * nand_release - [NAND Interface] Free resources held by the NAND device
4269 * @mtd: MTD device structure
4270 */
4271 void nand_release(struct mtd_info *mtd)
4272 {
4273 struct nand_chip *chip = mtd->priv;
4274
4275 if (chip->ecc.mode == NAND_ECC_SOFT_BCH)
4276 nand_bch_free((struct nand_bch_control *)chip->ecc.priv);
4277
4278 mtd_device_unregister(mtd);
4279
4280 /* Free bad block table memory */
4281 kfree(chip->bbt);
4282 if (!(chip->options & NAND_OWN_BUFFERS))
4283 kfree(chip->buffers);
4284
4285 /* Free bad block descriptor memory */
4286 if (chip->badblock_pattern && chip->badblock_pattern->options
4287 & NAND_BBT_DYNAMICSTRUCT)
4288 kfree(chip->badblock_pattern);
4289 }
4290 EXPORT_SYMBOL_GPL(nand_release);
4291
4292 static int __init nand_base_init(void)
4293 {
4294 led_trigger_register_simple("nand-disk", &nand_led_trigger);
4295 return 0;
4296 }
4297
4298 static void __exit nand_base_exit(void)
4299 {
4300 led_trigger_unregister_simple(nand_led_trigger);
4301 }
4302 #endif
4303
4304 module_init(nand_base_init);
4305 module_exit(nand_base_exit);
4306
4307 MODULE_LICENSE("GPL");
4308 MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>");
4309 MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
4310 MODULE_DESCRIPTION("Generic NAND flash driver code");