]> git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/mtd/nand/nand_base.c
Merge branch 'master' of git://git.denx.de/u-boot-tegra
[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 * @page: page number to read
1350 */
1351 static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
1352 uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi,
1353 int page)
1354 {
1355 int start_step, end_step, num_steps;
1356 uint32_t *eccpos = chip->ecc.layout->eccpos;
1357 uint8_t *p;
1358 int data_col_addr, i, gaps = 0;
1359 int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
1360 int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
1361 int index;
1362 unsigned int max_bitflips = 0;
1363
1364 /* Column address within the page aligned to ECC size (256bytes) */
1365 start_step = data_offs / chip->ecc.size;
1366 end_step = (data_offs + readlen - 1) / chip->ecc.size;
1367 num_steps = end_step - start_step + 1;
1368 index = start_step * chip->ecc.bytes;
1369
1370 /* Data size aligned to ECC ecc.size */
1371 datafrag_len = num_steps * chip->ecc.size;
1372 eccfrag_len = num_steps * chip->ecc.bytes;
1373
1374 data_col_addr = start_step * chip->ecc.size;
1375 /* If we read not a page aligned data */
1376 if (data_col_addr != 0)
1377 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
1378
1379 p = bufpoi + data_col_addr;
1380 chip->read_buf(mtd, p, datafrag_len);
1381
1382 /* Calculate ECC */
1383 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
1384 chip->ecc.calculate(mtd, p, &chip->buffers->ecccalc[i]);
1385
1386 /*
1387 * The performance is faster if we position offsets according to
1388 * ecc.pos. Let's make sure that there are no gaps in ECC positions.
1389 */
1390 for (i = 0; i < eccfrag_len - 1; i++) {
1391 if (eccpos[i + start_step * chip->ecc.bytes] + 1 !=
1392 eccpos[i + start_step * chip->ecc.bytes + 1]) {
1393 gaps = 1;
1394 break;
1395 }
1396 }
1397 if (gaps) {
1398 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
1399 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1400 } else {
1401 /*
1402 * Send the command to read the particular ECC bytes take care
1403 * about buswidth alignment in read_buf.
1404 */
1405 aligned_pos = eccpos[index] & ~(busw - 1);
1406 aligned_len = eccfrag_len;
1407 if (eccpos[index] & (busw - 1))
1408 aligned_len++;
1409 if (eccpos[index + (num_steps * chip->ecc.bytes)] & (busw - 1))
1410 aligned_len++;
1411
1412 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
1413 mtd->writesize + aligned_pos, -1);
1414 chip->read_buf(mtd, &chip->oob_poi[aligned_pos], aligned_len);
1415 }
1416
1417 for (i = 0; i < eccfrag_len; i++)
1418 chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
1419
1420 p = bufpoi + data_col_addr;
1421 for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
1422 int stat;
1423
1424 stat = chip->ecc.correct(mtd, p,
1425 &chip->buffers->ecccode[i], &chip->buffers->ecccalc[i]);
1426 if (stat < 0) {
1427 mtd->ecc_stats.failed++;
1428 } else {
1429 mtd->ecc_stats.corrected += stat;
1430 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1431 }
1432 }
1433 return max_bitflips;
1434 }
1435
1436 /**
1437 * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
1438 * @mtd: mtd info structure
1439 * @chip: nand chip info structure
1440 * @buf: buffer to store read data
1441 * @oob_required: caller requires OOB data read to chip->oob_poi
1442 * @page: page number to read
1443 *
1444 * Not for syndrome calculating ECC controllers which need a special oob layout.
1445 */
1446 static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1447 uint8_t *buf, int oob_required, int page)
1448 {
1449 int i, eccsize = chip->ecc.size;
1450 int eccbytes = chip->ecc.bytes;
1451 int eccsteps = chip->ecc.steps;
1452 uint8_t *p = buf;
1453 uint8_t *ecc_calc = chip->buffers->ecccalc;
1454 uint8_t *ecc_code = chip->buffers->ecccode;
1455 uint32_t *eccpos = chip->ecc.layout->eccpos;
1456 unsigned int max_bitflips = 0;
1457
1458 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1459 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1460 chip->read_buf(mtd, p, eccsize);
1461 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1462 }
1463 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1464
1465 for (i = 0; i < chip->ecc.total; i++)
1466 ecc_code[i] = chip->oob_poi[eccpos[i]];
1467
1468 eccsteps = chip->ecc.steps;
1469 p = buf;
1470
1471 for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1472 int stat;
1473
1474 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1475 if (stat < 0) {
1476 mtd->ecc_stats.failed++;
1477 } else {
1478 mtd->ecc_stats.corrected += stat;
1479 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1480 }
1481 }
1482 return max_bitflips;
1483 }
1484
1485 /**
1486 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
1487 * @mtd: mtd info structure
1488 * @chip: nand chip info structure
1489 * @buf: buffer to store read data
1490 * @oob_required: caller requires OOB data read to chip->oob_poi
1491 * @page: page number to read
1492 *
1493 * Hardware ECC for large page chips, require OOB to be read first. For this
1494 * ECC mode, the write_page method is re-used from ECC_HW. These methods
1495 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
1496 * multiple ECC steps, follows the "infix ECC" scheme and reads/writes ECC from
1497 * the data area, by overwriting the NAND manufacturer bad block markings.
1498 */
1499 static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
1500 struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
1501 {
1502 int i, eccsize = chip->ecc.size;
1503 int eccbytes = chip->ecc.bytes;
1504 int eccsteps = chip->ecc.steps;
1505 uint8_t *p = buf;
1506 uint8_t *ecc_code = chip->buffers->ecccode;
1507 uint32_t *eccpos = chip->ecc.layout->eccpos;
1508 uint8_t *ecc_calc = chip->buffers->ecccalc;
1509 unsigned int max_bitflips = 0;
1510
1511 /* Read the OOB area first */
1512 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1513 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1514 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1515
1516 for (i = 0; i < chip->ecc.total; i++)
1517 ecc_code[i] = chip->oob_poi[eccpos[i]];
1518
1519 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1520 int stat;
1521
1522 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1523 chip->read_buf(mtd, p, eccsize);
1524 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
1525
1526 stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
1527 if (stat < 0) {
1528 mtd->ecc_stats.failed++;
1529 } else {
1530 mtd->ecc_stats.corrected += stat;
1531 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1532 }
1533 }
1534 return max_bitflips;
1535 }
1536
1537 /**
1538 * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
1539 * @mtd: mtd info structure
1540 * @chip: nand chip info structure
1541 * @buf: buffer to store read data
1542 * @oob_required: caller requires OOB data read to chip->oob_poi
1543 * @page: page number to read
1544 *
1545 * The hw generator calculates the error syndrome automatically. Therefore we
1546 * need a special oob layout and handling.
1547 */
1548 static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1549 uint8_t *buf, int oob_required, int page)
1550 {
1551 int i, eccsize = chip->ecc.size;
1552 int eccbytes = chip->ecc.bytes;
1553 int eccsteps = chip->ecc.steps;
1554 uint8_t *p = buf;
1555 uint8_t *oob = chip->oob_poi;
1556 unsigned int max_bitflips = 0;
1557
1558 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
1559 int stat;
1560
1561 chip->ecc.hwctl(mtd, NAND_ECC_READ);
1562 chip->read_buf(mtd, p, eccsize);
1563
1564 if (chip->ecc.prepad) {
1565 chip->read_buf(mtd, oob, chip->ecc.prepad);
1566 oob += chip->ecc.prepad;
1567 }
1568
1569 chip->ecc.hwctl(mtd, NAND_ECC_READSYN);
1570 chip->read_buf(mtd, oob, eccbytes);
1571 stat = chip->ecc.correct(mtd, p, oob, NULL);
1572
1573 if (stat < 0) {
1574 mtd->ecc_stats.failed++;
1575 } else {
1576 mtd->ecc_stats.corrected += stat;
1577 max_bitflips = max_t(unsigned int, max_bitflips, stat);
1578 }
1579
1580 oob += eccbytes;
1581
1582 if (chip->ecc.postpad) {
1583 chip->read_buf(mtd, oob, chip->ecc.postpad);
1584 oob += chip->ecc.postpad;
1585 }
1586 }
1587
1588 /* Calculate remaining oob bytes */
1589 i = mtd->oobsize - (oob - chip->oob_poi);
1590 if (i)
1591 chip->read_buf(mtd, oob, i);
1592
1593 return max_bitflips;
1594 }
1595
1596 /**
1597 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
1598 * @chip: nand chip structure
1599 * @oob: oob destination address
1600 * @ops: oob ops structure
1601 * @len: size of oob to transfer
1602 */
1603 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
1604 struct mtd_oob_ops *ops, size_t len)
1605 {
1606 switch (ops->mode) {
1607
1608 case MTD_OPS_PLACE_OOB:
1609 case MTD_OPS_RAW:
1610 memcpy(oob, chip->oob_poi + ops->ooboffs, len);
1611 return oob + len;
1612
1613 case MTD_OPS_AUTO_OOB: {
1614 struct nand_oobfree *free = chip->ecc.layout->oobfree;
1615 uint32_t boffs = 0, roffs = ops->ooboffs;
1616 size_t bytes = 0;
1617
1618 for (; free->length && len; free++, len -= bytes) {
1619 /* Read request not from offset 0? */
1620 if (unlikely(roffs)) {
1621 if (roffs >= free->length) {
1622 roffs -= free->length;
1623 continue;
1624 }
1625 boffs = free->offset + roffs;
1626 bytes = min_t(size_t, len,
1627 (free->length - roffs));
1628 roffs = 0;
1629 } else {
1630 bytes = min_t(size_t, len, free->length);
1631 boffs = free->offset;
1632 }
1633 memcpy(oob, chip->oob_poi + boffs, bytes);
1634 oob += bytes;
1635 }
1636 return oob;
1637 }
1638 default:
1639 BUG();
1640 }
1641 return NULL;
1642 }
1643
1644 /**
1645 * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
1646 * @mtd: MTD device structure
1647 * @retry_mode: the retry mode to use
1648 *
1649 * Some vendors supply a special command to shift the Vt threshold, to be used
1650 * when there are too many bitflips in a page (i.e., ECC error). After setting
1651 * a new threshold, the host should retry reading the page.
1652 */
1653 static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
1654 {
1655 struct nand_chip *chip = mtd->priv;
1656
1657 pr_debug("setting READ RETRY mode %d\n", retry_mode);
1658
1659 if (retry_mode >= chip->read_retries)
1660 return -EINVAL;
1661
1662 if (!chip->setup_read_retry)
1663 return -EOPNOTSUPP;
1664
1665 return chip->setup_read_retry(mtd, retry_mode);
1666 }
1667
1668 /**
1669 * nand_do_read_ops - [INTERN] Read data with ECC
1670 * @mtd: MTD device structure
1671 * @from: offset to read from
1672 * @ops: oob ops structure
1673 *
1674 * Internal function. Called with chip held.
1675 */
1676 static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
1677 struct mtd_oob_ops *ops)
1678 {
1679 int chipnr, page, realpage, col, bytes, aligned, oob_required;
1680 struct nand_chip *chip = mtd->priv;
1681 int ret = 0;
1682 uint32_t readlen = ops->len;
1683 uint32_t oobreadlen = ops->ooblen;
1684 uint32_t max_oobsize = ops->mode == MTD_OPS_AUTO_OOB ?
1685 mtd->oobavail : mtd->oobsize;
1686
1687 uint8_t *bufpoi, *oob, *buf;
1688 unsigned int max_bitflips = 0;
1689 int retry_mode = 0;
1690 bool ecc_fail = false;
1691
1692 chipnr = (int)(from >> chip->chip_shift);
1693 chip->select_chip(mtd, chipnr);
1694
1695 realpage = (int)(from >> chip->page_shift);
1696 page = realpage & chip->pagemask;
1697
1698 col = (int)(from & (mtd->writesize - 1));
1699
1700 buf = ops->datbuf;
1701 oob = ops->oobbuf;
1702 oob_required = oob ? 1 : 0;
1703
1704 while (1) {
1705 unsigned int ecc_failures = mtd->ecc_stats.failed;
1706
1707 WATCHDOG_RESET();
1708 bytes = min(mtd->writesize - col, readlen);
1709 aligned = (bytes == mtd->writesize);
1710
1711 /* Is the current page in the buffer? */
1712 if (realpage != chip->pagebuf || oob) {
1713 bufpoi = aligned ? buf : chip->buffers->databuf;
1714
1715 read_retry:
1716 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1717
1718 /*
1719 * Now read the page into the buffer. Absent an error,
1720 * the read methods return max bitflips per ecc step.
1721 */
1722 if (unlikely(ops->mode == MTD_OPS_RAW))
1723 ret = chip->ecc.read_page_raw(mtd, chip, bufpoi,
1724 oob_required,
1725 page);
1726 else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
1727 !oob)
1728 ret = chip->ecc.read_subpage(mtd, chip,
1729 col, bytes, bufpoi,
1730 page);
1731 else
1732 ret = chip->ecc.read_page(mtd, chip, bufpoi,
1733 oob_required, page);
1734 if (ret < 0) {
1735 if (!aligned)
1736 /* Invalidate page cache */
1737 chip->pagebuf = -1;
1738 break;
1739 }
1740
1741 max_bitflips = max_t(unsigned int, max_bitflips, ret);
1742
1743 /* Transfer not aligned data */
1744 if (!aligned) {
1745 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
1746 !(mtd->ecc_stats.failed - ecc_failures) &&
1747 (ops->mode != MTD_OPS_RAW)) {
1748 chip->pagebuf = realpage;
1749 chip->pagebuf_bitflips = ret;
1750 } else {
1751 /* Invalidate page cache */
1752 chip->pagebuf = -1;
1753 }
1754 memcpy(buf, chip->buffers->databuf + col, bytes);
1755 }
1756
1757 if (unlikely(oob)) {
1758 int toread = min(oobreadlen, max_oobsize);
1759
1760 if (toread) {
1761 oob = nand_transfer_oob(chip,
1762 oob, ops, toread);
1763 oobreadlen -= toread;
1764 }
1765 }
1766
1767 if (chip->options & NAND_NEED_READRDY) {
1768 /* Apply delay or wait for ready/busy pin */
1769 if (!chip->dev_ready)
1770 udelay(chip->chip_delay);
1771 else
1772 nand_wait_ready(mtd);
1773 }
1774
1775 if (mtd->ecc_stats.failed - ecc_failures) {
1776 if (retry_mode + 1 < chip->read_retries) {
1777 retry_mode++;
1778 ret = nand_setup_read_retry(mtd,
1779 retry_mode);
1780 if (ret < 0)
1781 break;
1782
1783 /* Reset failures; retry */
1784 mtd->ecc_stats.failed = ecc_failures;
1785 goto read_retry;
1786 } else {
1787 /* No more retry modes; real failure */
1788 ecc_fail = true;
1789 }
1790 }
1791
1792 buf += bytes;
1793 } else {
1794 memcpy(buf, chip->buffers->databuf + col, bytes);
1795 buf += bytes;
1796 max_bitflips = max_t(unsigned int, max_bitflips,
1797 chip->pagebuf_bitflips);
1798 }
1799
1800 readlen -= bytes;
1801
1802 /* Reset to retry mode 0 */
1803 if (retry_mode) {
1804 ret = nand_setup_read_retry(mtd, 0);
1805 if (ret < 0)
1806 break;
1807 retry_mode = 0;
1808 }
1809
1810 if (!readlen)
1811 break;
1812
1813 /* For subsequent reads align to page boundary */
1814 col = 0;
1815 /* Increment page address */
1816 realpage++;
1817
1818 page = realpage & chip->pagemask;
1819 /* Check, if we cross a chip boundary */
1820 if (!page) {
1821 chipnr++;
1822 chip->select_chip(mtd, -1);
1823 chip->select_chip(mtd, chipnr);
1824 }
1825 }
1826 chip->select_chip(mtd, -1);
1827
1828 ops->retlen = ops->len - (size_t) readlen;
1829 if (oob)
1830 ops->oobretlen = ops->ooblen - oobreadlen;
1831
1832 if (ret < 0)
1833 return ret;
1834
1835 if (ecc_fail)
1836 return -EBADMSG;
1837
1838 return max_bitflips;
1839 }
1840
1841 /**
1842 * nand_read - [MTD Interface] MTD compatibility function for nand_do_read_ecc
1843 * @mtd: MTD device structure
1844 * @from: offset to read from
1845 * @len: number of bytes to read
1846 * @retlen: pointer to variable to store the number of read bytes
1847 * @buf: the databuffer to put data
1848 *
1849 * Get hold of the chip and call nand_do_read.
1850 */
1851 static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
1852 size_t *retlen, uint8_t *buf)
1853 {
1854 struct mtd_oob_ops ops;
1855 int ret;
1856
1857 nand_get_device(mtd, FL_READING);
1858 ops.len = len;
1859 ops.datbuf = buf;
1860 ops.oobbuf = NULL;
1861 ops.mode = MTD_OPS_PLACE_OOB;
1862 ret = nand_do_read_ops(mtd, from, &ops);
1863 *retlen = ops.retlen;
1864 nand_release_device(mtd);
1865 return ret;
1866 }
1867
1868 /**
1869 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
1870 * @mtd: mtd info structure
1871 * @chip: nand chip info structure
1872 * @page: page number to read
1873 */
1874 static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1875 int page)
1876 {
1877 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1878 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1879 return 0;
1880 }
1881
1882 /**
1883 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
1884 * with syndromes
1885 * @mtd: mtd info structure
1886 * @chip: nand chip info structure
1887 * @page: page number to read
1888 */
1889 static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1890 int page)
1891 {
1892 uint8_t *buf = chip->oob_poi;
1893 int length = mtd->oobsize;
1894 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1895 int eccsize = chip->ecc.size;
1896 uint8_t *bufpoi = buf;
1897 int i, toread, sndrnd = 0, pos;
1898
1899 chip->cmdfunc(mtd, NAND_CMD_READ0, chip->ecc.size, page);
1900 for (i = 0; i < chip->ecc.steps; i++) {
1901 if (sndrnd) {
1902 pos = eccsize + i * (eccsize + chunk);
1903 if (mtd->writesize > 512)
1904 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, pos, -1);
1905 else
1906 chip->cmdfunc(mtd, NAND_CMD_READ0, pos, page);
1907 } else
1908 sndrnd = 1;
1909 toread = min_t(int, length, chunk);
1910 chip->read_buf(mtd, bufpoi, toread);
1911 bufpoi += toread;
1912 length -= toread;
1913 }
1914 if (length > 0)
1915 chip->read_buf(mtd, bufpoi, length);
1916
1917 return 0;
1918 }
1919
1920 /**
1921 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
1922 * @mtd: mtd info structure
1923 * @chip: nand chip info structure
1924 * @page: page number to write
1925 */
1926 static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1927 int page)
1928 {
1929 int status = 0;
1930 const uint8_t *buf = chip->oob_poi;
1931 int length = mtd->oobsize;
1932
1933 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
1934 chip->write_buf(mtd, buf, length);
1935 /* Send command to program the OOB data */
1936 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1937
1938 status = chip->waitfunc(mtd, chip);
1939
1940 return status & NAND_STATUS_FAIL ? -EIO : 0;
1941 }
1942
1943 /**
1944 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
1945 * with syndrome - only for large page flash
1946 * @mtd: mtd info structure
1947 * @chip: nand chip info structure
1948 * @page: page number to write
1949 */
1950 static int nand_write_oob_syndrome(struct mtd_info *mtd,
1951 struct nand_chip *chip, int page)
1952 {
1953 int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
1954 int eccsize = chip->ecc.size, length = mtd->oobsize;
1955 int i, len, pos, status = 0, sndcmd = 0, steps = chip->ecc.steps;
1956 const uint8_t *bufpoi = chip->oob_poi;
1957
1958 /*
1959 * data-ecc-data-ecc ... ecc-oob
1960 * or
1961 * data-pad-ecc-pad-data-pad .... ecc-pad-oob
1962 */
1963 if (!chip->ecc.prepad && !chip->ecc.postpad) {
1964 pos = steps * (eccsize + chunk);
1965 steps = 0;
1966 } else
1967 pos = eccsize;
1968
1969 chip->cmdfunc(mtd, NAND_CMD_SEQIN, pos, page);
1970 for (i = 0; i < steps; i++) {
1971 if (sndcmd) {
1972 if (mtd->writesize <= 512) {
1973 uint32_t fill = 0xFFFFFFFF;
1974
1975 len = eccsize;
1976 while (len > 0) {
1977 int num = min_t(int, len, 4);
1978 chip->write_buf(mtd, (uint8_t *)&fill,
1979 num);
1980 len -= num;
1981 }
1982 } else {
1983 pos = eccsize + i * (eccsize + chunk);
1984 chip->cmdfunc(mtd, NAND_CMD_RNDIN, pos, -1);
1985 }
1986 } else
1987 sndcmd = 1;
1988 len = min_t(int, length, chunk);
1989 chip->write_buf(mtd, bufpoi, len);
1990 bufpoi += len;
1991 length -= len;
1992 }
1993 if (length > 0)
1994 chip->write_buf(mtd, bufpoi, length);
1995
1996 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1997 status = chip->waitfunc(mtd, chip);
1998
1999 return status & NAND_STATUS_FAIL ? -EIO : 0;
2000 }
2001
2002 /**
2003 * nand_do_read_oob - [INTERN] NAND read out-of-band
2004 * @mtd: MTD device structure
2005 * @from: offset to read from
2006 * @ops: oob operations description structure
2007 *
2008 * NAND read out-of-band data from the spare area.
2009 */
2010 static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
2011 struct mtd_oob_ops *ops)
2012 {
2013 int page, realpage, chipnr;
2014 struct nand_chip *chip = mtd->priv;
2015 struct mtd_ecc_stats stats;
2016 int readlen = ops->ooblen;
2017 int len;
2018 uint8_t *buf = ops->oobbuf;
2019 int ret = 0;
2020
2021 pr_debug("%s: from = 0x%08Lx, len = %i\n",
2022 __func__, (unsigned long long)from, readlen);
2023
2024 stats = mtd->ecc_stats;
2025
2026 if (ops->mode == MTD_OPS_AUTO_OOB)
2027 len = chip->ecc.layout->oobavail;
2028 else
2029 len = mtd->oobsize;
2030
2031 if (unlikely(ops->ooboffs >= len)) {
2032 pr_debug("%s: attempt to start read outside oob\n",
2033 __func__);
2034 return -EINVAL;
2035 }
2036
2037 /* Do not allow reads past end of device */
2038 if (unlikely(from >= mtd->size ||
2039 ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
2040 (from >> chip->page_shift)) * len)) {
2041 pr_debug("%s: attempt to read beyond end of device\n",
2042 __func__);
2043 return -EINVAL;
2044 }
2045
2046 chipnr = (int)(from >> chip->chip_shift);
2047 chip->select_chip(mtd, chipnr);
2048
2049 /* Shift to get page */
2050 realpage = (int)(from >> chip->page_shift);
2051 page = realpage & chip->pagemask;
2052
2053 while (1) {
2054 WATCHDOG_RESET();
2055
2056 if (ops->mode == MTD_OPS_RAW)
2057 ret = chip->ecc.read_oob_raw(mtd, chip, page);
2058 else
2059 ret = chip->ecc.read_oob(mtd, chip, page);
2060
2061 if (ret < 0)
2062 break;
2063
2064 len = min(len, readlen);
2065 buf = nand_transfer_oob(chip, buf, ops, len);
2066
2067 if (chip->options & NAND_NEED_READRDY) {
2068 /* Apply delay or wait for ready/busy pin */
2069 if (!chip->dev_ready)
2070 udelay(chip->chip_delay);
2071 else
2072 nand_wait_ready(mtd);
2073 }
2074
2075 readlen -= len;
2076 if (!readlen)
2077 break;
2078
2079 /* Increment page address */
2080 realpage++;
2081
2082 page = realpage & chip->pagemask;
2083 /* Check, if we cross a chip boundary */
2084 if (!page) {
2085 chipnr++;
2086 chip->select_chip(mtd, -1);
2087 chip->select_chip(mtd, chipnr);
2088 }
2089 }
2090 chip->select_chip(mtd, -1);
2091
2092 ops->oobretlen = ops->ooblen - readlen;
2093
2094 if (ret < 0)
2095 return ret;
2096
2097 if (mtd->ecc_stats.failed - stats.failed)
2098 return -EBADMSG;
2099
2100 return mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
2101 }
2102
2103 /**
2104 * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
2105 * @mtd: MTD device structure
2106 * @from: offset to read from
2107 * @ops: oob operation description structure
2108 *
2109 * NAND read data and/or out-of-band data.
2110 */
2111 static int nand_read_oob(struct mtd_info *mtd, loff_t from,
2112 struct mtd_oob_ops *ops)
2113 {
2114 int ret = -ENOTSUPP;
2115
2116 ops->retlen = 0;
2117
2118 /* Do not allow reads past end of device */
2119 if (ops->datbuf && (from + ops->len) > mtd->size) {
2120 pr_debug("%s: attempt to read beyond end of device\n",
2121 __func__);
2122 return -EINVAL;
2123 }
2124
2125 nand_get_device(mtd, FL_READING);
2126
2127 switch (ops->mode) {
2128 case MTD_OPS_PLACE_OOB:
2129 case MTD_OPS_AUTO_OOB:
2130 case MTD_OPS_RAW:
2131 break;
2132
2133 default:
2134 goto out;
2135 }
2136
2137 if (!ops->datbuf)
2138 ret = nand_do_read_oob(mtd, from, ops);
2139 else
2140 ret = nand_do_read_ops(mtd, from, ops);
2141
2142 out:
2143 nand_release_device(mtd);
2144 return ret;
2145 }
2146
2147
2148 /**
2149 * nand_write_page_raw - [INTERN] raw page write function
2150 * @mtd: mtd info structure
2151 * @chip: nand chip info structure
2152 * @buf: data buffer
2153 * @oob_required: must write chip->oob_poi to OOB
2154 *
2155 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2156 */
2157 static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
2158 const uint8_t *buf, int oob_required)
2159 {
2160 chip->write_buf(mtd, buf, mtd->writesize);
2161 if (oob_required)
2162 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2163
2164 return 0;
2165 }
2166
2167 /**
2168 * nand_write_page_raw_syndrome - [INTERN] raw page write function
2169 * @mtd: mtd info structure
2170 * @chip: nand chip info structure
2171 * @buf: data buffer
2172 * @oob_required: must write chip->oob_poi to OOB
2173 *
2174 * We need a special oob layout and handling even when ECC isn't checked.
2175 */
2176 static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
2177 struct nand_chip *chip,
2178 const uint8_t *buf, int oob_required)
2179 {
2180 int eccsize = chip->ecc.size;
2181 int eccbytes = chip->ecc.bytes;
2182 uint8_t *oob = chip->oob_poi;
2183 int steps, size;
2184
2185 for (steps = chip->ecc.steps; steps > 0; steps--) {
2186 chip->write_buf(mtd, buf, eccsize);
2187 buf += eccsize;
2188
2189 if (chip->ecc.prepad) {
2190 chip->write_buf(mtd, oob, chip->ecc.prepad);
2191 oob += chip->ecc.prepad;
2192 }
2193
2194 chip->write_buf(mtd, oob, eccbytes);
2195 oob += eccbytes;
2196
2197 if (chip->ecc.postpad) {
2198 chip->write_buf(mtd, oob, chip->ecc.postpad);
2199 oob += chip->ecc.postpad;
2200 }
2201 }
2202
2203 size = mtd->oobsize - (oob - chip->oob_poi);
2204 if (size)
2205 chip->write_buf(mtd, oob, size);
2206
2207 return 0;
2208 }
2209 /**
2210 * nand_write_page_swecc - [REPLACEABLE] software ECC based page write function
2211 * @mtd: mtd info structure
2212 * @chip: nand chip info structure
2213 * @buf: data buffer
2214 * @oob_required: must write chip->oob_poi to OOB
2215 */
2216 static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
2217 const uint8_t *buf, int oob_required)
2218 {
2219 int i, eccsize = chip->ecc.size;
2220 int eccbytes = chip->ecc.bytes;
2221 int eccsteps = chip->ecc.steps;
2222 uint8_t *ecc_calc = chip->buffers->ecccalc;
2223 const uint8_t *p = buf;
2224 uint32_t *eccpos = chip->ecc.layout->eccpos;
2225
2226 /* Software ECC calculation */
2227 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
2228 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2229
2230 for (i = 0; i < chip->ecc.total; i++)
2231 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2232
2233 return chip->ecc.write_page_raw(mtd, chip, buf, 1);
2234 }
2235
2236 /**
2237 * nand_write_page_hwecc - [REPLACEABLE] hardware ECC based page write function
2238 * @mtd: mtd info structure
2239 * @chip: nand chip info structure
2240 * @buf: data buffer
2241 * @oob_required: must write chip->oob_poi to OOB
2242 */
2243 static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
2244 const uint8_t *buf, int oob_required)
2245 {
2246 int i, eccsize = chip->ecc.size;
2247 int eccbytes = chip->ecc.bytes;
2248 int eccsteps = chip->ecc.steps;
2249 uint8_t *ecc_calc = chip->buffers->ecccalc;
2250 const uint8_t *p = buf;
2251 uint32_t *eccpos = chip->ecc.layout->eccpos;
2252
2253 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2254 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2255 chip->write_buf(mtd, p, eccsize);
2256 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2257 }
2258
2259 for (i = 0; i < chip->ecc.total; i++)
2260 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2261
2262 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2263
2264 return 0;
2265 }
2266
2267
2268 /**
2269 * nand_write_subpage_hwecc - [REPLACABLE] hardware ECC based subpage write
2270 * @mtd: mtd info structure
2271 * @chip: nand chip info structure
2272 * @offset: column address of subpage within the page
2273 * @data_len: data length
2274 * @buf: data buffer
2275 * @oob_required: must write chip->oob_poi to OOB
2276 */
2277 static int nand_write_subpage_hwecc(struct mtd_info *mtd,
2278 struct nand_chip *chip, uint32_t offset,
2279 uint32_t data_len, const uint8_t *buf,
2280 int oob_required)
2281 {
2282 uint8_t *oob_buf = chip->oob_poi;
2283 uint8_t *ecc_calc = chip->buffers->ecccalc;
2284 int ecc_size = chip->ecc.size;
2285 int ecc_bytes = chip->ecc.bytes;
2286 int ecc_steps = chip->ecc.steps;
2287 uint32_t *eccpos = chip->ecc.layout->eccpos;
2288 uint32_t start_step = offset / ecc_size;
2289 uint32_t end_step = (offset + data_len - 1) / ecc_size;
2290 int oob_bytes = mtd->oobsize / ecc_steps;
2291 int step, i;
2292
2293 for (step = 0; step < ecc_steps; step++) {
2294 /* configure controller for WRITE access */
2295 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2296
2297 /* write data (untouched subpages already masked by 0xFF) */
2298 chip->write_buf(mtd, buf, ecc_size);
2299
2300 /* mask ECC of un-touched subpages by padding 0xFF */
2301 if ((step < start_step) || (step > end_step))
2302 memset(ecc_calc, 0xff, ecc_bytes);
2303 else
2304 chip->ecc.calculate(mtd, buf, ecc_calc);
2305
2306 /* mask OOB of un-touched subpages by padding 0xFF */
2307 /* if oob_required, preserve OOB metadata of written subpage */
2308 if (!oob_required || (step < start_step) || (step > end_step))
2309 memset(oob_buf, 0xff, oob_bytes);
2310
2311 buf += ecc_size;
2312 ecc_calc += ecc_bytes;
2313 oob_buf += oob_bytes;
2314 }
2315
2316 /* copy calculated ECC for whole page to chip->buffer->oob */
2317 /* this include masked-value(0xFF) for unwritten subpages */
2318 ecc_calc = chip->buffers->ecccalc;
2319 for (i = 0; i < chip->ecc.total; i++)
2320 chip->oob_poi[eccpos[i]] = ecc_calc[i];
2321
2322 /* write OOB buffer to NAND device */
2323 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2324
2325 return 0;
2326 }
2327
2328
2329 /**
2330 * nand_write_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page write
2331 * @mtd: mtd info structure
2332 * @chip: nand chip info structure
2333 * @buf: data buffer
2334 * @oob_required: must write chip->oob_poi to OOB
2335 *
2336 * The hw generator calculates the error syndrome automatically. Therefore we
2337 * need a special oob layout and handling.
2338 */
2339 static int nand_write_page_syndrome(struct mtd_info *mtd,
2340 struct nand_chip *chip,
2341 const uint8_t *buf, int oob_required)
2342 {
2343 int i, eccsize = chip->ecc.size;
2344 int eccbytes = chip->ecc.bytes;
2345 int eccsteps = chip->ecc.steps;
2346 const uint8_t *p = buf;
2347 uint8_t *oob = chip->oob_poi;
2348
2349 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2350
2351 chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2352 chip->write_buf(mtd, p, eccsize);
2353
2354 if (chip->ecc.prepad) {
2355 chip->write_buf(mtd, oob, chip->ecc.prepad);
2356 oob += chip->ecc.prepad;
2357 }
2358
2359 chip->ecc.calculate(mtd, p, oob);
2360 chip->write_buf(mtd, oob, eccbytes);
2361 oob += eccbytes;
2362
2363 if (chip->ecc.postpad) {
2364 chip->write_buf(mtd, oob, chip->ecc.postpad);
2365 oob += chip->ecc.postpad;
2366 }
2367 }
2368
2369 /* Calculate remaining oob bytes */
2370 i = mtd->oobsize - (oob - chip->oob_poi);
2371 if (i)
2372 chip->write_buf(mtd, oob, i);
2373
2374 return 0;
2375 }
2376
2377 /**
2378 * nand_write_page - [REPLACEABLE] write one page
2379 * @mtd: MTD device structure
2380 * @chip: NAND chip descriptor
2381 * @offset: address offset within the page
2382 * @data_len: length of actual data to be written
2383 * @buf: the data to write
2384 * @oob_required: must write chip->oob_poi to OOB
2385 * @page: page number to write
2386 * @cached: cached programming
2387 * @raw: use _raw version of write_page
2388 */
2389 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
2390 uint32_t offset, int data_len, const uint8_t *buf,
2391 int oob_required, int page, int cached, int raw)
2392 {
2393 int status, subpage;
2394
2395 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
2396 chip->ecc.write_subpage)
2397 subpage = offset || (data_len < mtd->writesize);
2398 else
2399 subpage = 0;
2400
2401 chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
2402
2403 if (unlikely(raw))
2404 status = chip->ecc.write_page_raw(mtd, chip, buf,
2405 oob_required);
2406 else if (subpage)
2407 status = chip->ecc.write_subpage(mtd, chip, offset, data_len,
2408 buf, oob_required);
2409 else
2410 status = chip->ecc.write_page(mtd, chip, buf, oob_required);
2411
2412 if (status < 0)
2413 return status;
2414
2415 /*
2416 * Cached progamming disabled for now. Not sure if it's worth the
2417 * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s).
2418 */
2419 cached = 0;
2420
2421 if (!cached || !NAND_HAS_CACHEPROG(chip)) {
2422
2423 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
2424 status = chip->waitfunc(mtd, chip);
2425 /*
2426 * See if operation failed and additional status checks are
2427 * available.
2428 */
2429 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2430 status = chip->errstat(mtd, chip, FL_WRITING, status,
2431 page);
2432
2433 if (status & NAND_STATUS_FAIL)
2434 return -EIO;
2435 } else {
2436 chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
2437 status = chip->waitfunc(mtd, chip);
2438 }
2439
2440
2441 #ifdef __UBOOT__
2442 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
2443 /* Send command to read back the data */
2444 chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
2445
2446 if (chip->verify_buf(mtd, buf, mtd->writesize))
2447 return -EIO;
2448
2449 /* Make sure the next page prog is preceded by a status read */
2450 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
2451 #endif
2452 #endif
2453
2454 return 0;
2455 }
2456
2457 /**
2458 * nand_fill_oob - [INTERN] Transfer client buffer to oob
2459 * @mtd: MTD device structure
2460 * @oob: oob data buffer
2461 * @len: oob data write length
2462 * @ops: oob ops structure
2463 */
2464 static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len,
2465 struct mtd_oob_ops *ops)
2466 {
2467 struct nand_chip *chip = mtd->priv;
2468
2469 /*
2470 * Initialise to all 0xFF, to avoid the possibility of left over OOB
2471 * data from a previous OOB read.
2472 */
2473 memset(chip->oob_poi, 0xff, mtd->oobsize);
2474
2475 switch (ops->mode) {
2476
2477 case MTD_OPS_PLACE_OOB:
2478 case MTD_OPS_RAW:
2479 memcpy(chip->oob_poi + ops->ooboffs, oob, len);
2480 return oob + len;
2481
2482 case MTD_OPS_AUTO_OOB: {
2483 struct nand_oobfree *free = chip->ecc.layout->oobfree;
2484 uint32_t boffs = 0, woffs = ops->ooboffs;
2485 size_t bytes = 0;
2486
2487 for (; free->length && len; free++, len -= bytes) {
2488 /* Write request not from offset 0? */
2489 if (unlikely(woffs)) {
2490 if (woffs >= free->length) {
2491 woffs -= free->length;
2492 continue;
2493 }
2494 boffs = free->offset + woffs;
2495 bytes = min_t(size_t, len,
2496 (free->length - woffs));
2497 woffs = 0;
2498 } else {
2499 bytes = min_t(size_t, len, free->length);
2500 boffs = free->offset;
2501 }
2502 memcpy(chip->oob_poi + boffs, oob, bytes);
2503 oob += bytes;
2504 }
2505 return oob;
2506 }
2507 default:
2508 BUG();
2509 }
2510 return NULL;
2511 }
2512
2513 #define NOTALIGNED(x) ((x & (chip->subpagesize - 1)) != 0)
2514
2515 /**
2516 * nand_do_write_ops - [INTERN] NAND write with ECC
2517 * @mtd: MTD device structure
2518 * @to: offset to write to
2519 * @ops: oob operations description structure
2520 *
2521 * NAND write with ECC.
2522 */
2523 static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
2524 struct mtd_oob_ops *ops)
2525 {
2526 int chipnr, realpage, page, blockmask, column;
2527 struct nand_chip *chip = mtd->priv;
2528 uint32_t writelen = ops->len;
2529
2530 uint32_t oobwritelen = ops->ooblen;
2531 uint32_t oobmaxlen = ops->mode == MTD_OPS_AUTO_OOB ?
2532 mtd->oobavail : mtd->oobsize;
2533
2534 uint8_t *oob = ops->oobbuf;
2535 uint8_t *buf = ops->datbuf;
2536 int ret;
2537 int oob_required = oob ? 1 : 0;
2538
2539 ops->retlen = 0;
2540 if (!writelen)
2541 return 0;
2542
2543 #ifndef __UBOOT__
2544 /* Reject writes, which are not page aligned */
2545 if (NOTALIGNED(to) || NOTALIGNED(ops->len)) {
2546 #else
2547 /* Reject writes, which are not page aligned */
2548 if (NOTALIGNED(to)) {
2549 #endif
2550 pr_notice("%s: attempt to write non page aligned data\n",
2551 __func__);
2552 return -EINVAL;
2553 }
2554
2555 column = to & (mtd->writesize - 1);
2556
2557 chipnr = (int)(to >> chip->chip_shift);
2558 chip->select_chip(mtd, chipnr);
2559
2560 /* Check, if it is write protected */
2561 if (nand_check_wp(mtd)) {
2562 ret = -EIO;
2563 goto err_out;
2564 }
2565
2566 realpage = (int)(to >> chip->page_shift);
2567 page = realpage & chip->pagemask;
2568 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
2569
2570 /* Invalidate the page cache, when we write to the cached page */
2571 if (to <= (chip->pagebuf << chip->page_shift) &&
2572 (chip->pagebuf << chip->page_shift) < (to + ops->len))
2573 chip->pagebuf = -1;
2574
2575 /* Don't allow multipage oob writes with offset */
2576 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
2577 ret = -EINVAL;
2578 goto err_out;
2579 }
2580
2581 while (1) {
2582 int bytes = mtd->writesize;
2583 int cached = writelen > bytes && page != blockmask;
2584 uint8_t *wbuf = buf;
2585
2586 WATCHDOG_RESET();
2587 /* Partial page write? */
2588 if (unlikely(column || writelen < (mtd->writesize - 1))) {
2589 cached = 0;
2590 bytes = min_t(int, bytes - column, (int) writelen);
2591 chip->pagebuf = -1;
2592 memset(chip->buffers->databuf, 0xff, mtd->writesize);
2593 memcpy(&chip->buffers->databuf[column], buf, bytes);
2594 wbuf = chip->buffers->databuf;
2595 }
2596
2597 if (unlikely(oob)) {
2598 size_t len = min(oobwritelen, oobmaxlen);
2599 oob = nand_fill_oob(mtd, oob, len, ops);
2600 oobwritelen -= len;
2601 } else {
2602 /* We still need to erase leftover OOB data */
2603 memset(chip->oob_poi, 0xff, mtd->oobsize);
2604 }
2605 ret = chip->write_page(mtd, chip, column, bytes, wbuf,
2606 oob_required, page, cached,
2607 (ops->mode == MTD_OPS_RAW));
2608 if (ret)
2609 break;
2610
2611 writelen -= bytes;
2612 if (!writelen)
2613 break;
2614
2615 column = 0;
2616 buf += bytes;
2617 realpage++;
2618
2619 page = realpage & chip->pagemask;
2620 /* Check, if we cross a chip boundary */
2621 if (!page) {
2622 chipnr++;
2623 chip->select_chip(mtd, -1);
2624 chip->select_chip(mtd, chipnr);
2625 }
2626 }
2627
2628 ops->retlen = ops->len - writelen;
2629 if (unlikely(oob))
2630 ops->oobretlen = ops->ooblen;
2631
2632 err_out:
2633 chip->select_chip(mtd, -1);
2634 return ret;
2635 }
2636
2637 /**
2638 * panic_nand_write - [MTD Interface] NAND write with ECC
2639 * @mtd: MTD device structure
2640 * @to: offset to write to
2641 * @len: number of bytes to write
2642 * @retlen: pointer to variable to store the number of written bytes
2643 * @buf: the data to write
2644 *
2645 * NAND write with ECC. Used when performing writes in interrupt context, this
2646 * may for example be called by mtdoops when writing an oops while in panic.
2647 */
2648 static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2649 size_t *retlen, const uint8_t *buf)
2650 {
2651 struct nand_chip *chip = mtd->priv;
2652 struct mtd_oob_ops ops;
2653 int ret;
2654
2655 /* Wait for the device to get ready */
2656 panic_nand_wait(mtd, chip, 400);
2657
2658 /* Grab the device */
2659 panic_nand_get_device(chip, mtd, FL_WRITING);
2660
2661 ops.len = len;
2662 ops.datbuf = (uint8_t *)buf;
2663 ops.oobbuf = NULL;
2664 ops.mode = MTD_OPS_PLACE_OOB;
2665
2666 ret = nand_do_write_ops(mtd, to, &ops);
2667
2668 *retlen = ops.retlen;
2669 return ret;
2670 }
2671
2672 /**
2673 * nand_write - [MTD Interface] NAND write with ECC
2674 * @mtd: MTD device structure
2675 * @to: offset to write to
2676 * @len: number of bytes to write
2677 * @retlen: pointer to variable to store the number of written bytes
2678 * @buf: the data to write
2679 *
2680 * NAND write with ECC.
2681 */
2682 static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
2683 size_t *retlen, const uint8_t *buf)
2684 {
2685 struct mtd_oob_ops ops;
2686 int ret;
2687
2688 nand_get_device(mtd, FL_WRITING);
2689 ops.len = len;
2690 ops.datbuf = (uint8_t *)buf;
2691 ops.oobbuf = NULL;
2692 ops.mode = MTD_OPS_PLACE_OOB;
2693 ret = nand_do_write_ops(mtd, to, &ops);
2694 *retlen = ops.retlen;
2695 nand_release_device(mtd);
2696 return ret;
2697 }
2698
2699 /**
2700 * nand_do_write_oob - [MTD Interface] NAND write out-of-band
2701 * @mtd: MTD device structure
2702 * @to: offset to write to
2703 * @ops: oob operation description structure
2704 *
2705 * NAND write out-of-band.
2706 */
2707 static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
2708 struct mtd_oob_ops *ops)
2709 {
2710 int chipnr, page, status, len;
2711 struct nand_chip *chip = mtd->priv;
2712
2713 pr_debug("%s: to = 0x%08x, len = %i\n",
2714 __func__, (unsigned int)to, (int)ops->ooblen);
2715
2716 if (ops->mode == MTD_OPS_AUTO_OOB)
2717 len = chip->ecc.layout->oobavail;
2718 else
2719 len = mtd->oobsize;
2720
2721 /* Do not allow write past end of page */
2722 if ((ops->ooboffs + ops->ooblen) > len) {
2723 pr_debug("%s: attempt to write past end of page\n",
2724 __func__);
2725 return -EINVAL;
2726 }
2727
2728 if (unlikely(ops->ooboffs >= len)) {
2729 pr_debug("%s: attempt to start write outside oob\n",
2730 __func__);
2731 return -EINVAL;
2732 }
2733
2734 /* Do not allow write past end of device */
2735 if (unlikely(to >= mtd->size ||
2736 ops->ooboffs + ops->ooblen >
2737 ((mtd->size >> chip->page_shift) -
2738 (to >> chip->page_shift)) * len)) {
2739 pr_debug("%s: attempt to write beyond end of device\n",
2740 __func__);
2741 return -EINVAL;
2742 }
2743
2744 chipnr = (int)(to >> chip->chip_shift);
2745 chip->select_chip(mtd, chipnr);
2746
2747 /* Shift to get page */
2748 page = (int)(to >> chip->page_shift);
2749
2750 /*
2751 * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
2752 * of my DiskOnChip 2000 test units) will clear the whole data page too
2753 * if we don't do this. I have no clue why, but I seem to have 'fixed'
2754 * it in the doc2000 driver in August 1999. dwmw2.
2755 */
2756 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
2757
2758 /* Check, if it is write protected */
2759 if (nand_check_wp(mtd)) {
2760 chip->select_chip(mtd, -1);
2761 return -EROFS;
2762 }
2763
2764 /* Invalidate the page cache, if we write to the cached page */
2765 if (page == chip->pagebuf)
2766 chip->pagebuf = -1;
2767
2768 nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops);
2769
2770 if (ops->mode == MTD_OPS_RAW)
2771 status = chip->ecc.write_oob_raw(mtd, chip, page & chip->pagemask);
2772 else
2773 status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);
2774
2775 chip->select_chip(mtd, -1);
2776
2777 if (status)
2778 return status;
2779
2780 ops->oobretlen = ops->ooblen;
2781
2782 return 0;
2783 }
2784
2785 /**
2786 * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
2787 * @mtd: MTD device structure
2788 * @to: offset to write to
2789 * @ops: oob operation description structure
2790 */
2791 static int nand_write_oob(struct mtd_info *mtd, loff_t to,
2792 struct mtd_oob_ops *ops)
2793 {
2794 int ret = -ENOTSUPP;
2795
2796 ops->retlen = 0;
2797
2798 /* Do not allow writes past end of device */
2799 if (ops->datbuf && (to + ops->len) > mtd->size) {
2800 pr_debug("%s: attempt to write beyond end of device\n",
2801 __func__);
2802 return -EINVAL;
2803 }
2804
2805 nand_get_device(mtd, FL_WRITING);
2806
2807 switch (ops->mode) {
2808 case MTD_OPS_PLACE_OOB:
2809 case MTD_OPS_AUTO_OOB:
2810 case MTD_OPS_RAW:
2811 break;
2812
2813 default:
2814 goto out;
2815 }
2816
2817 if (!ops->datbuf)
2818 ret = nand_do_write_oob(mtd, to, ops);
2819 else
2820 ret = nand_do_write_ops(mtd, to, ops);
2821
2822 out:
2823 nand_release_device(mtd);
2824 return ret;
2825 }
2826
2827 /**
2828 * single_erase_cmd - [GENERIC] NAND standard block erase command function
2829 * @mtd: MTD device structure
2830 * @page: the page address of the block which will be erased
2831 *
2832 * Standard erase command for NAND chips.
2833 */
2834 static void single_erase_cmd(struct mtd_info *mtd, int page)
2835 {
2836 struct nand_chip *chip = mtd->priv;
2837 /* Send commands to erase a block */
2838 chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
2839 chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2840 }
2841
2842 /**
2843 * nand_erase - [MTD Interface] erase block(s)
2844 * @mtd: MTD device structure
2845 * @instr: erase instruction
2846 *
2847 * Erase one ore more blocks.
2848 */
2849 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
2850 {
2851 return nand_erase_nand(mtd, instr, 0);
2852 }
2853
2854 /**
2855 * nand_erase_nand - [INTERN] erase block(s)
2856 * @mtd: MTD device structure
2857 * @instr: erase instruction
2858 * @allowbbt: allow erasing the bbt area
2859 *
2860 * Erase one ore more blocks.
2861 */
2862 int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
2863 int allowbbt)
2864 {
2865 int page, status, pages_per_block, ret, chipnr;
2866 struct nand_chip *chip = mtd->priv;
2867 loff_t len;
2868
2869 pr_debug("%s: start = 0x%012llx, len = %llu\n",
2870 __func__, (unsigned long long)instr->addr,
2871 (unsigned long long)instr->len);
2872
2873 if (check_offs_len(mtd, instr->addr, instr->len))
2874 return -EINVAL;
2875
2876 /* Grab the lock and see if the device is available */
2877 nand_get_device(mtd, FL_ERASING);
2878
2879 /* Shift to get first page */
2880 page = (int)(instr->addr >> chip->page_shift);
2881 chipnr = (int)(instr->addr >> chip->chip_shift);
2882
2883 /* Calculate pages in each block */
2884 pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
2885
2886 /* Select the NAND device */
2887 chip->select_chip(mtd, chipnr);
2888
2889 /* Check, if it is write protected */
2890 if (nand_check_wp(mtd)) {
2891 pr_debug("%s: device is write protected!\n",
2892 __func__);
2893 instr->state = MTD_ERASE_FAILED;
2894 goto erase_exit;
2895 }
2896
2897 /* Loop through the pages */
2898 len = instr->len;
2899
2900 instr->state = MTD_ERASING;
2901
2902 while (len) {
2903 WATCHDOG_RESET();
2904
2905 /* Check if we have a bad block, we do not erase bad blocks! */
2906 if (nand_block_checkbad(mtd, ((loff_t) page) <<
2907 chip->page_shift, 0, allowbbt)) {
2908 pr_warn("%s: attempt to erase a bad block at page 0x%08x\n",
2909 __func__, page);
2910 instr->state = MTD_ERASE_FAILED;
2911 goto erase_exit;
2912 }
2913
2914 /*
2915 * Invalidate the page cache, if we erase the block which
2916 * contains the current cached page.
2917 */
2918 if (page <= chip->pagebuf && chip->pagebuf <
2919 (page + pages_per_block))
2920 chip->pagebuf = -1;
2921
2922 chip->erase_cmd(mtd, page & chip->pagemask);
2923
2924 status = chip->waitfunc(mtd, chip);
2925
2926 /*
2927 * See if operation failed and additional status checks are
2928 * available
2929 */
2930 if ((status & NAND_STATUS_FAIL) && (chip->errstat))
2931 status = chip->errstat(mtd, chip, FL_ERASING,
2932 status, page);
2933
2934 /* See if block erase succeeded */
2935 if (status & NAND_STATUS_FAIL) {
2936 pr_debug("%s: failed erase, page 0x%08x\n",
2937 __func__, page);
2938 instr->state = MTD_ERASE_FAILED;
2939 instr->fail_addr =
2940 ((loff_t)page << chip->page_shift);
2941 goto erase_exit;
2942 }
2943
2944 /* Increment page address and decrement length */
2945 len -= (1ULL << chip->phys_erase_shift);
2946 page += pages_per_block;
2947
2948 /* Check, if we cross a chip boundary */
2949 if (len && !(page & chip->pagemask)) {
2950 chipnr++;
2951 chip->select_chip(mtd, -1);
2952 chip->select_chip(mtd, chipnr);
2953 }
2954 }
2955 instr->state = MTD_ERASE_DONE;
2956
2957 erase_exit:
2958
2959 ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
2960
2961 /* Deselect and wake up anyone waiting on the device */
2962 chip->select_chip(mtd, -1);
2963 nand_release_device(mtd);
2964
2965 /* Do call back function */
2966 if (!ret)
2967 mtd_erase_callback(instr);
2968
2969 /* Return more or less happy */
2970 return ret;
2971 }
2972
2973 /**
2974 * nand_sync - [MTD Interface] sync
2975 * @mtd: MTD device structure
2976 *
2977 * Sync is actually a wait for chip ready function.
2978 */
2979 static void nand_sync(struct mtd_info *mtd)
2980 {
2981 pr_debug("%s: called\n", __func__);
2982
2983 /* Grab the lock and see if the device is available */
2984 nand_get_device(mtd, FL_SYNCING);
2985 /* Release it and go back */
2986 nand_release_device(mtd);
2987 }
2988
2989 /**
2990 * nand_block_isbad - [MTD Interface] Check if block at offset is bad
2991 * @mtd: MTD device structure
2992 * @offs: offset relative to mtd start
2993 */
2994 static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
2995 {
2996 return nand_block_checkbad(mtd, offs, 1, 0);
2997 }
2998
2999 /**
3000 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
3001 * @mtd: MTD device structure
3002 * @ofs: offset relative to mtd start
3003 */
3004 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
3005 {
3006 int ret;
3007
3008 ret = nand_block_isbad(mtd, ofs);
3009 if (ret) {
3010 /* If it was bad already, return success and do nothing */
3011 if (ret > 0)
3012 return 0;
3013 return ret;
3014 }
3015
3016 return nand_block_markbad_lowlevel(mtd, ofs);
3017 }
3018
3019 /**
3020 * nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand
3021 * @mtd: MTD device structure
3022 * @chip: nand chip info structure
3023 * @addr: feature address.
3024 * @subfeature_param: the subfeature parameters, a four bytes array.
3025 */
3026 static int nand_onfi_set_features(struct mtd_info *mtd, struct nand_chip *chip,
3027 int addr, uint8_t *subfeature_param)
3028 {
3029 int status;
3030 int i;
3031
3032 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3033 if (!chip->onfi_version ||
3034 !(le16_to_cpu(chip->onfi_params.opt_cmd)
3035 & ONFI_OPT_CMD_SET_GET_FEATURES))
3036 return -EINVAL;
3037 #endif
3038
3039 chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, addr, -1);
3040 for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3041 chip->write_byte(mtd, subfeature_param[i]);
3042
3043 status = chip->waitfunc(mtd, chip);
3044 if (status & NAND_STATUS_FAIL)
3045 return -EIO;
3046 return 0;
3047 }
3048
3049 /**
3050 * nand_onfi_get_features- [REPLACEABLE] get features for ONFI nand
3051 * @mtd: MTD device structure
3052 * @chip: nand chip info structure
3053 * @addr: feature address.
3054 * @subfeature_param: the subfeature parameters, a four bytes array.
3055 */
3056 static int nand_onfi_get_features(struct mtd_info *mtd, struct nand_chip *chip,
3057 int addr, uint8_t *subfeature_param)
3058 {
3059 int i;
3060
3061 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3062 if (!chip->onfi_version ||
3063 !(le16_to_cpu(chip->onfi_params.opt_cmd)
3064 & ONFI_OPT_CMD_SET_GET_FEATURES))
3065 return -EINVAL;
3066 #endif
3067
3068 /* clear the sub feature parameters */
3069 memset(subfeature_param, 0, ONFI_SUBFEATURE_PARAM_LEN);
3070
3071 chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES, addr, -1);
3072 for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3073 *subfeature_param++ = chip->read_byte(mtd);
3074 return 0;
3075 }
3076
3077 #ifndef __UBOOT__
3078 /**
3079 * nand_suspend - [MTD Interface] Suspend the NAND flash
3080 * @mtd: MTD device structure
3081 */
3082 static int nand_suspend(struct mtd_info *mtd)
3083 {
3084 return nand_get_device(mtd, FL_PM_SUSPENDED);
3085 }
3086
3087 /**
3088 * nand_resume - [MTD Interface] Resume the NAND flash
3089 * @mtd: MTD device structure
3090 */
3091 static void nand_resume(struct mtd_info *mtd)
3092 {
3093 struct nand_chip *chip = mtd->priv;
3094
3095 if (chip->state == FL_PM_SUSPENDED)
3096 nand_release_device(mtd);
3097 else
3098 pr_err("%s called for a chip which is not in suspended state\n",
3099 __func__);
3100 }
3101 #endif
3102
3103 /* Set default functions */
3104 static void nand_set_defaults(struct nand_chip *chip, int busw)
3105 {
3106 /* check for proper chip_delay setup, set 20us if not */
3107 if (!chip->chip_delay)
3108 chip->chip_delay = 20;
3109
3110 /* check, if a user supplied command function given */
3111 if (chip->cmdfunc == NULL)
3112 chip->cmdfunc = nand_command;
3113
3114 /* check, if a user supplied wait function given */
3115 if (chip->waitfunc == NULL)
3116 chip->waitfunc = nand_wait;
3117
3118 if (!chip->select_chip)
3119 chip->select_chip = nand_select_chip;
3120
3121 /* set for ONFI nand */
3122 if (!chip->onfi_set_features)
3123 chip->onfi_set_features = nand_onfi_set_features;
3124 if (!chip->onfi_get_features)
3125 chip->onfi_get_features = nand_onfi_get_features;
3126
3127 /* If called twice, pointers that depend on busw may need to be reset */
3128 if (!chip->read_byte || chip->read_byte == nand_read_byte)
3129 chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
3130 if (!chip->read_word)
3131 chip->read_word = nand_read_word;
3132 if (!chip->block_bad)
3133 chip->block_bad = nand_block_bad;
3134 if (!chip->block_markbad)
3135 chip->block_markbad = nand_default_block_markbad;
3136 if (!chip->write_buf || chip->write_buf == nand_write_buf)
3137 chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
3138 if (!chip->write_byte || chip->write_byte == nand_write_byte)
3139 chip->write_byte = busw ? nand_write_byte16 : nand_write_byte;
3140 if (!chip->read_buf || chip->read_buf == nand_read_buf)
3141 chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
3142 if (!chip->scan_bbt)
3143 chip->scan_bbt = nand_default_bbt;
3144 #ifdef __UBOOT__
3145 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
3146 if (!chip->verify_buf)
3147 chip->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
3148 #endif
3149 #endif
3150
3151 if (!chip->controller) {
3152 chip->controller = &chip->hwcontrol;
3153 spin_lock_init(&chip->controller->lock);
3154 init_waitqueue_head(&chip->controller->wq);
3155 }
3156
3157 }
3158
3159 /* Sanitize ONFI strings so we can safely print them */
3160 #ifndef __UBOOT__
3161 static void sanitize_string(uint8_t *s, size_t len)
3162 #else
3163 static void sanitize_string(char *s, size_t len)
3164 #endif
3165 {
3166 ssize_t i;
3167
3168 /* Null terminate */
3169 s[len - 1] = 0;
3170
3171 /* Remove non printable chars */
3172 for (i = 0; i < len - 1; i++) {
3173 if (s[i] < ' ' || s[i] > 127)
3174 s[i] = '?';
3175 }
3176
3177 /* Remove trailing spaces */
3178 strim(s);
3179 }
3180
3181 static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
3182 {
3183 int i;
3184 while (len--) {
3185 crc ^= *p++ << 8;
3186 for (i = 0; i < 8; i++)
3187 crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0);
3188 }
3189
3190 return crc;
3191 }
3192
3193 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3194 /* Parse the Extended Parameter Page. */
3195 static int nand_flash_detect_ext_param_page(struct mtd_info *mtd,
3196 struct nand_chip *chip, struct nand_onfi_params *p)
3197 {
3198 struct onfi_ext_param_page *ep;
3199 struct onfi_ext_section *s;
3200 struct onfi_ext_ecc_info *ecc;
3201 uint8_t *cursor;
3202 int ret = -EINVAL;
3203 int len;
3204 int i;
3205
3206 len = le16_to_cpu(p->ext_param_page_length) * 16;
3207 ep = kmalloc(len, GFP_KERNEL);
3208 if (!ep)
3209 return -ENOMEM;
3210
3211 /* Send our own NAND_CMD_PARAM. */
3212 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3213
3214 /* Use the Change Read Column command to skip the ONFI param pages. */
3215 chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
3216 sizeof(*p) * p->num_of_param_pages , -1);
3217
3218 /* Read out the Extended Parameter Page. */
3219 chip->read_buf(mtd, (uint8_t *)ep, len);
3220 if ((onfi_crc16(ONFI_CRC_BASE, ((uint8_t *)ep) + 2, len - 2)
3221 != le16_to_cpu(ep->crc))) {
3222 pr_debug("fail in the CRC.\n");
3223 goto ext_out;
3224 }
3225
3226 /*
3227 * Check the signature.
3228 * Do not strictly follow the ONFI spec, maybe changed in future.
3229 */
3230 #ifndef __UBOOT__
3231 if (strncmp(ep->sig, "EPPS", 4)) {
3232 #else
3233 if (strncmp((char *)ep->sig, "EPPS", 4)) {
3234 #endif
3235 pr_debug("The signature is invalid.\n");
3236 goto ext_out;
3237 }
3238
3239 /* find the ECC section. */
3240 cursor = (uint8_t *)(ep + 1);
3241 for (i = 0; i < ONFI_EXT_SECTION_MAX; i++) {
3242 s = ep->sections + i;
3243 if (s->type == ONFI_SECTION_TYPE_2)
3244 break;
3245 cursor += s->length * 16;
3246 }
3247 if (i == ONFI_EXT_SECTION_MAX) {
3248 pr_debug("We can not find the ECC section.\n");
3249 goto ext_out;
3250 }
3251
3252 /* get the info we want. */
3253 ecc = (struct onfi_ext_ecc_info *)cursor;
3254
3255 if (!ecc->codeword_size) {
3256 pr_debug("Invalid codeword size\n");
3257 goto ext_out;
3258 }
3259
3260 chip->ecc_strength_ds = ecc->ecc_bits;
3261 chip->ecc_step_ds = 1 << ecc->codeword_size;
3262 ret = 0;
3263
3264 ext_out:
3265 kfree(ep);
3266 return ret;
3267 }
3268
3269 static int nand_setup_read_retry_micron(struct mtd_info *mtd, int retry_mode)
3270 {
3271 struct nand_chip *chip = mtd->priv;
3272 uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode};
3273
3274 return chip->onfi_set_features(mtd, chip, ONFI_FEATURE_ADDR_READ_RETRY,
3275 feature);
3276 }
3277
3278 /*
3279 * Configure chip properties from Micron vendor-specific ONFI table
3280 */
3281 static void nand_onfi_detect_micron(struct nand_chip *chip,
3282 struct nand_onfi_params *p)
3283 {
3284 struct nand_onfi_vendor_micron *micron = (void *)p->vendor;
3285
3286 if (le16_to_cpu(p->vendor_revision) < 1)
3287 return;
3288
3289 chip->read_retries = micron->read_retry_options;
3290 chip->setup_read_retry = nand_setup_read_retry_micron;
3291 }
3292
3293 /*
3294 * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise.
3295 */
3296 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3297 int *busw)
3298 {
3299 struct nand_onfi_params *p = &chip->onfi_params;
3300 int i, j;
3301 int val;
3302
3303 /* Try ONFI for unknown chip or LP */
3304 chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
3305 if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
3306 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
3307 return 0;
3308
3309 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3310 for (i = 0; i < 3; i++) {
3311 for (j = 0; j < sizeof(*p); j++)
3312 ((uint8_t *)p)[j] = chip->read_byte(mtd);
3313 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
3314 le16_to_cpu(p->crc)) {
3315 break;
3316 }
3317 }
3318
3319 if (i == 3) {
3320 pr_err("Could not find valid ONFI parameter page; aborting\n");
3321 return 0;
3322 }
3323
3324 /* Check version */
3325 val = le16_to_cpu(p->revision);
3326 if (val & (1 << 5))
3327 chip->onfi_version = 23;
3328 else if (val & (1 << 4))
3329 chip->onfi_version = 22;
3330 else if (val & (1 << 3))
3331 chip->onfi_version = 21;
3332 else if (val & (1 << 2))
3333 chip->onfi_version = 20;
3334 else if (val & (1 << 1))
3335 chip->onfi_version = 10;
3336
3337 if (!chip->onfi_version) {
3338 pr_info("unsupported ONFI version: %d\n", val);
3339 return 0;
3340 }
3341
3342 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
3343 sanitize_string(p->model, sizeof(p->model));
3344 if (!mtd->name)
3345 mtd->name = p->model;
3346
3347 mtd->writesize = le32_to_cpu(p->byte_per_page);
3348
3349 /*
3350 * pages_per_block and blocks_per_lun may not be a power-of-2 size
3351 * (don't ask me who thought of this...). MTD assumes that these
3352 * dimensions will be power-of-2, so just truncate the remaining area.
3353 */
3354 mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
3355 mtd->erasesize *= mtd->writesize;
3356
3357 mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
3358
3359 /* See erasesize comment */
3360 chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
3361 chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
3362 chip->bits_per_cell = p->bits_per_cell;
3363
3364 if (onfi_feature(chip) & ONFI_FEATURE_16_BIT_BUS)
3365 *busw = NAND_BUSWIDTH_16;
3366 else
3367 *busw = 0;
3368
3369 if (p->ecc_bits != 0xff) {
3370 chip->ecc_strength_ds = p->ecc_bits;
3371 chip->ecc_step_ds = 512;
3372 } else if (chip->onfi_version >= 21 &&
3373 (onfi_feature(chip) & ONFI_FEATURE_EXT_PARAM_PAGE)) {
3374
3375 /*
3376 * The nand_flash_detect_ext_param_page() uses the
3377 * Change Read Column command which maybe not supported
3378 * by the chip->cmdfunc. So try to update the chip->cmdfunc
3379 * now. We do not replace user supplied command function.
3380 */
3381 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
3382 chip->cmdfunc = nand_command_lp;
3383
3384 /* The Extended Parameter Page is supported since ONFI 2.1. */
3385 if (nand_flash_detect_ext_param_page(mtd, chip, p))
3386 pr_warn("Failed to detect ONFI extended param page\n");
3387 } else {
3388 pr_warn("Could not retrieve ONFI ECC requirements\n");
3389 }
3390
3391 if (p->jedec_id == NAND_MFR_MICRON)
3392 nand_onfi_detect_micron(chip, p);
3393
3394 return 1;
3395 }
3396 #else
3397 static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3398 int *busw)
3399 {
3400 return 0;
3401 }
3402 #endif
3403
3404 /*
3405 * Check if the NAND chip is JEDEC compliant, returns 1 if it is, 0 otherwise.
3406 */
3407 static int nand_flash_detect_jedec(struct mtd_info *mtd, struct nand_chip *chip,
3408 int *busw)
3409 {
3410 struct nand_jedec_params *p = &chip->jedec_params;
3411 struct jedec_ecc_info *ecc;
3412 int val;
3413 int i, j;
3414
3415 /* Try JEDEC for unknown chip or LP */
3416 chip->cmdfunc(mtd, NAND_CMD_READID, 0x40, -1);
3417 if (chip->read_byte(mtd) != 'J' || chip->read_byte(mtd) != 'E' ||
3418 chip->read_byte(mtd) != 'D' || chip->read_byte(mtd) != 'E' ||
3419 chip->read_byte(mtd) != 'C')
3420 return 0;
3421
3422 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0x40, -1);
3423 for (i = 0; i < 3; i++) {
3424 for (j = 0; j < sizeof(*p); j++)
3425 ((uint8_t *)p)[j] = chip->read_byte(mtd);
3426
3427 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 510) ==
3428 le16_to_cpu(p->crc))
3429 break;
3430 }
3431
3432 if (i == 3) {
3433 pr_err("Could not find valid JEDEC parameter page; aborting\n");
3434 return 0;
3435 }
3436
3437 /* Check version */
3438 val = le16_to_cpu(p->revision);
3439 if (val & (1 << 2))
3440 chip->jedec_version = 10;
3441 else if (val & (1 << 1))
3442 chip->jedec_version = 1; /* vendor specific version */
3443
3444 if (!chip->jedec_version) {
3445 pr_info("unsupported JEDEC version: %d\n", val);
3446 return 0;
3447 }
3448
3449 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
3450 sanitize_string(p->model, sizeof(p->model));
3451 if (!mtd->name)
3452 mtd->name = p->model;
3453
3454 mtd->writesize = le32_to_cpu(p->byte_per_page);
3455
3456 /* Please reference to the comment for nand_flash_detect_onfi. */
3457 mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
3458 mtd->erasesize *= mtd->writesize;
3459
3460 mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
3461
3462 /* Please reference to the comment for nand_flash_detect_onfi. */
3463 chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
3464 chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
3465 chip->bits_per_cell = p->bits_per_cell;
3466
3467 if (jedec_feature(chip) & JEDEC_FEATURE_16_BIT_BUS)
3468 *busw = NAND_BUSWIDTH_16;
3469 else
3470 *busw = 0;
3471
3472 /* ECC info */
3473 ecc = &p->ecc_info[0];
3474
3475 if (ecc->codeword_size >= 9) {
3476 chip->ecc_strength_ds = ecc->ecc_bits;
3477 chip->ecc_step_ds = 1 << ecc->codeword_size;
3478 } else {
3479 pr_warn("Invalid codeword size\n");
3480 }
3481
3482 return 1;
3483 }
3484
3485 /*
3486 * nand_id_has_period - Check if an ID string has a given wraparound period
3487 * @id_data: the ID string
3488 * @arrlen: the length of the @id_data array
3489 * @period: the period of repitition
3490 *
3491 * Check if an ID string is repeated within a given sequence of bytes at
3492 * specific repetition interval period (e.g., {0x20,0x01,0x7F,0x20} has a
3493 * period of 3). This is a helper function for nand_id_len(). Returns non-zero
3494 * if the repetition has a period of @period; otherwise, returns zero.
3495 */
3496 static int nand_id_has_period(u8 *id_data, int arrlen, int period)
3497 {
3498 int i, j;
3499 for (i = 0; i < period; i++)
3500 for (j = i + period; j < arrlen; j += period)
3501 if (id_data[i] != id_data[j])
3502 return 0;
3503 return 1;
3504 }
3505
3506 /*
3507 * nand_id_len - Get the length of an ID string returned by CMD_READID
3508 * @id_data: the ID string
3509 * @arrlen: the length of the @id_data array
3510
3511 * Returns the length of the ID string, according to known wraparound/trailing
3512 * zero patterns. If no pattern exists, returns the length of the array.
3513 */
3514 static int nand_id_len(u8 *id_data, int arrlen)
3515 {
3516 int last_nonzero, period;
3517
3518 /* Find last non-zero byte */
3519 for (last_nonzero = arrlen - 1; last_nonzero >= 0; last_nonzero--)
3520 if (id_data[last_nonzero])
3521 break;
3522
3523 /* All zeros */
3524 if (last_nonzero < 0)
3525 return 0;
3526
3527 /* Calculate wraparound period */
3528 for (period = 1; period < arrlen; period++)
3529 if (nand_id_has_period(id_data, arrlen, period))
3530 break;
3531
3532 /* There's a repeated pattern */
3533 if (period < arrlen)
3534 return period;
3535
3536 /* There are trailing zeros */
3537 if (last_nonzero < arrlen - 1)
3538 return last_nonzero + 1;
3539
3540 /* No pattern detected */
3541 return arrlen;
3542 }
3543
3544 /* Extract the bits of per cell from the 3rd byte of the extended ID */
3545 static int nand_get_bits_per_cell(u8 cellinfo)
3546 {
3547 int bits;
3548
3549 bits = cellinfo & NAND_CI_CELLTYPE_MSK;
3550 bits >>= NAND_CI_CELLTYPE_SHIFT;
3551 return bits + 1;
3552 }
3553
3554 /*
3555 * Many new NAND share similar device ID codes, which represent the size of the
3556 * chip. The rest of the parameters must be decoded according to generic or
3557 * manufacturer-specific "extended ID" decoding patterns.
3558 */
3559 static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
3560 u8 id_data[8], int *busw)
3561 {
3562 int extid, id_len;
3563 /* The 3rd id byte holds MLC / multichip data */
3564 chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3565 /* The 4th id byte is the important one */
3566 extid = id_data[3];
3567
3568 id_len = nand_id_len(id_data, 8);
3569
3570 /*
3571 * Field definitions are in the following datasheets:
3572 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
3573 * New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44)
3574 * Hynix MLC (6 byte ID): Hynix H27UBG8T2B (p.22)
3575 *
3576 * Check for ID length, non-zero 6th byte, cell type, and Hynix/Samsung
3577 * ID to decide what to do.
3578 */
3579 if (id_len == 6 && id_data[0] == NAND_MFR_SAMSUNG &&
3580 !nand_is_slc(chip) && id_data[5] != 0x00) {
3581 /* Calc pagesize */
3582 mtd->writesize = 2048 << (extid & 0x03);
3583 extid >>= 2;
3584 /* Calc oobsize */
3585 switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3586 case 1:
3587 mtd->oobsize = 128;
3588 break;
3589 case 2:
3590 mtd->oobsize = 218;
3591 break;
3592 case 3:
3593 mtd->oobsize = 400;
3594 break;
3595 case 4:
3596 mtd->oobsize = 436;
3597 break;
3598 case 5:
3599 mtd->oobsize = 512;
3600 break;
3601 case 6:
3602 mtd->oobsize = 640;
3603 break;
3604 case 7:
3605 default: /* Other cases are "reserved" (unknown) */
3606 mtd->oobsize = 1024;
3607 break;
3608 }
3609 extid >>= 2;
3610 /* Calc blocksize */
3611 mtd->erasesize = (128 * 1024) <<
3612 (((extid >> 1) & 0x04) | (extid & 0x03));
3613 *busw = 0;
3614 } else if (id_len == 6 && id_data[0] == NAND_MFR_HYNIX &&
3615 !nand_is_slc(chip)) {
3616 unsigned int tmp;
3617
3618 /* Calc pagesize */
3619 mtd->writesize = 2048 << (extid & 0x03);
3620 extid >>= 2;
3621 /* Calc oobsize */
3622 switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3623 case 0:
3624 mtd->oobsize = 128;
3625 break;
3626 case 1:
3627 mtd->oobsize = 224;
3628 break;
3629 case 2:
3630 mtd->oobsize = 448;
3631 break;
3632 case 3:
3633 mtd->oobsize = 64;
3634 break;
3635 case 4:
3636 mtd->oobsize = 32;
3637 break;
3638 case 5:
3639 mtd->oobsize = 16;
3640 break;
3641 default:
3642 mtd->oobsize = 640;
3643 break;
3644 }
3645 extid >>= 2;
3646 /* Calc blocksize */
3647 tmp = ((extid >> 1) & 0x04) | (extid & 0x03);
3648 if (tmp < 0x03)
3649 mtd->erasesize = (128 * 1024) << tmp;
3650 else if (tmp == 0x03)
3651 mtd->erasesize = 768 * 1024;
3652 else
3653 mtd->erasesize = (64 * 1024) << tmp;
3654 *busw = 0;
3655 } else {
3656 /* Calc pagesize */
3657 mtd->writesize = 1024 << (extid & 0x03);
3658 extid >>= 2;
3659 /* Calc oobsize */
3660 mtd->oobsize = (8 << (extid & 0x01)) *
3661 (mtd->writesize >> 9);
3662 extid >>= 2;
3663 /* Calc blocksize. Blocksize is multiples of 64KiB */
3664 mtd->erasesize = (64 * 1024) << (extid & 0x03);
3665 extid >>= 2;
3666 /* Get buswidth information */
3667 *busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
3668
3669 /*
3670 * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per
3671 * 512B page. For Toshiba SLC, we decode the 5th/6th byte as
3672 * follows:
3673 * - ID byte 6, bits[2:0]: 100b -> 43nm, 101b -> 32nm,
3674 * 110b -> 24nm
3675 * - ID byte 5, bit[7]: 1 -> BENAND, 0 -> raw SLC
3676 */
3677 if (id_len >= 6 && id_data[0] == NAND_MFR_TOSHIBA &&
3678 nand_is_slc(chip) &&
3679 (id_data[5] & 0x7) == 0x6 /* 24nm */ &&
3680 !(id_data[4] & 0x80) /* !BENAND */) {
3681 mtd->oobsize = 32 * mtd->writesize >> 9;
3682 }
3683
3684 }
3685 }
3686
3687 /*
3688 * Old devices have chip data hardcoded in the device ID table. nand_decode_id
3689 * decodes a matching ID table entry and assigns the MTD size parameters for
3690 * the chip.
3691 */
3692 static void nand_decode_id(struct mtd_info *mtd, struct nand_chip *chip,
3693 struct nand_flash_dev *type, u8 id_data[8],
3694 int *busw)
3695 {
3696 int maf_id = id_data[0];
3697
3698 mtd->erasesize = type->erasesize;
3699 mtd->writesize = type->pagesize;
3700 mtd->oobsize = mtd->writesize / 32;
3701 *busw = type->options & NAND_BUSWIDTH_16;
3702
3703 /* All legacy ID NAND are small-page, SLC */
3704 chip->bits_per_cell = 1;
3705
3706 /*
3707 * Check for Spansion/AMD ID + repeating 5th, 6th byte since
3708 * some Spansion chips have erasesize that conflicts with size
3709 * listed in nand_ids table.
3710 * Data sheet (5 byte ID): Spansion S30ML-P ORNAND (p.39)
3711 */
3712 if (maf_id == NAND_MFR_AMD && id_data[4] != 0x00 && id_data[5] == 0x00
3713 && id_data[6] == 0x00 && id_data[7] == 0x00
3714 && mtd->writesize == 512) {
3715 mtd->erasesize = 128 * 1024;
3716 mtd->erasesize <<= ((id_data[3] & 0x03) << 1);
3717 }
3718 }
3719
3720 /*
3721 * Set the bad block marker/indicator (BBM/BBI) patterns according to some
3722 * heuristic patterns using various detected parameters (e.g., manufacturer,
3723 * page size, cell-type information).
3724 */
3725 static void nand_decode_bbm_options(struct mtd_info *mtd,
3726 struct nand_chip *chip, u8 id_data[8])
3727 {
3728 int maf_id = id_data[0];
3729
3730 /* Set the bad block position */
3731 if (mtd->writesize > 512 || (chip->options & NAND_BUSWIDTH_16))
3732 chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
3733 else
3734 chip->badblockpos = NAND_SMALL_BADBLOCK_POS;
3735
3736 /*
3737 * Bad block marker is stored in the last page of each block on Samsung
3738 * and Hynix MLC devices; stored in first two pages of each block on
3739 * Micron devices with 2KiB pages and on SLC Samsung, Hynix, Toshiba,
3740 * AMD/Spansion, and Macronix. All others scan only the first page.
3741 */
3742 if (!nand_is_slc(chip) &&
3743 (maf_id == NAND_MFR_SAMSUNG ||
3744 maf_id == NAND_MFR_HYNIX))
3745 chip->bbt_options |= NAND_BBT_SCANLASTPAGE;
3746 else if ((nand_is_slc(chip) &&
3747 (maf_id == NAND_MFR_SAMSUNG ||
3748 maf_id == NAND_MFR_HYNIX ||
3749 maf_id == NAND_MFR_TOSHIBA ||
3750 maf_id == NAND_MFR_AMD ||
3751 maf_id == NAND_MFR_MACRONIX)) ||
3752 (mtd->writesize == 2048 &&
3753 maf_id == NAND_MFR_MICRON))
3754 chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
3755 }
3756
3757 static inline bool is_full_id_nand(struct nand_flash_dev *type)
3758 {
3759 return type->id_len;
3760 }
3761
3762 static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
3763 struct nand_flash_dev *type, u8 *id_data, int *busw)
3764 {
3765 #ifndef __UBOOT__
3766 if (!strncmp(type->id, id_data, type->id_len)) {
3767 #else
3768 if (!strncmp((char *)type->id, (char *)id_data, type->id_len)) {
3769 #endif
3770 mtd->writesize = type->pagesize;
3771 mtd->erasesize = type->erasesize;
3772 mtd->oobsize = type->oobsize;
3773
3774 chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3775 chip->chipsize = (uint64_t)type->chipsize << 20;
3776 chip->options |= type->options;
3777 chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
3778 chip->ecc_step_ds = NAND_ECC_STEP(type);
3779
3780 *busw = type->options & NAND_BUSWIDTH_16;
3781
3782 if (!mtd->name)
3783 mtd->name = type->name;
3784
3785 return true;
3786 }
3787 return false;
3788 }
3789
3790 /*
3791 * Get the flash and manufacturer id and lookup if the type is supported.
3792 */
3793 static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
3794 struct nand_chip *chip,
3795 int *maf_id, int *dev_id,
3796 struct nand_flash_dev *type)
3797 {
3798 int busw;
3799 int i, maf_idx;
3800 u8 id_data[8];
3801
3802 /* Select the device */
3803 chip->select_chip(mtd, 0);
3804
3805 /*
3806 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
3807 * after power-up.
3808 */
3809 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
3810
3811 /* Send the command for reading device ID */
3812 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3813
3814 /* Read manufacturer and device IDs */
3815 *maf_id = chip->read_byte(mtd);
3816 *dev_id = chip->read_byte(mtd);
3817
3818 /*
3819 * Try again to make sure, as some systems the bus-hold or other
3820 * interface concerns can cause random data which looks like a
3821 * possibly credible NAND flash to appear. If the two results do
3822 * not match, ignore the device completely.
3823 */
3824
3825 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
3826
3827 /* Read entire ID string */
3828 for (i = 0; i < 8; i++)
3829 id_data[i] = chip->read_byte(mtd);
3830
3831 if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
3832 pr_info("second ID read did not match %02x,%02x against %02x,%02x\n",
3833 *maf_id, *dev_id, id_data[0], id_data[1]);
3834 return ERR_PTR(-ENODEV);
3835 }
3836
3837 if (!type)
3838 type = nand_flash_ids;
3839
3840 for (; type->name != NULL; type++) {
3841 if (is_full_id_nand(type)) {
3842 if (find_full_id_nand(mtd, chip, type, id_data, &busw))
3843 goto ident_done;
3844 } else if (*dev_id == type->dev_id) {
3845 break;
3846 }
3847 }
3848
3849 chip->onfi_version = 0;
3850 if (!type->name || !type->pagesize) {
3851 /* Check is chip is ONFI compliant */
3852 if (nand_flash_detect_onfi(mtd, chip, &busw))
3853 goto ident_done;
3854
3855 /* Check if the chip is JEDEC compliant */
3856 if (nand_flash_detect_jedec(mtd, chip, &busw))
3857 goto ident_done;
3858 }
3859
3860 if (!type->name)
3861 return ERR_PTR(-ENODEV);
3862
3863 if (!mtd->name)
3864 mtd->name = type->name;
3865
3866 chip->chipsize = (uint64_t)type->chipsize << 20;
3867
3868 if (!type->pagesize && chip->init_size) {
3869 /* Set the pagesize, oobsize, erasesize by the driver */
3870 busw = chip->init_size(mtd, chip, id_data);
3871 } else if (!type->pagesize) {
3872 /* Decode parameters from extended ID */
3873 nand_decode_ext_id(mtd, chip, id_data, &busw);
3874 } else {
3875 nand_decode_id(mtd, chip, type, id_data, &busw);
3876 }
3877 /* Get chip options */
3878 chip->options |= type->options;
3879
3880 /*
3881 * Check if chip is not a Samsung device. Do not clear the
3882 * options for chips which do not have an extended id.
3883 */
3884 if (*maf_id != NAND_MFR_SAMSUNG && !type->pagesize)
3885 chip->options &= ~NAND_SAMSUNG_LP_OPTIONS;
3886 ident_done:
3887
3888 /* Try to identify manufacturer */
3889 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
3890 if (nand_manuf_ids[maf_idx].id == *maf_id)
3891 break;
3892 }
3893
3894 if (chip->options & NAND_BUSWIDTH_AUTO) {
3895 WARN_ON(chip->options & NAND_BUSWIDTH_16);
3896 chip->options |= busw;
3897 nand_set_defaults(chip, busw);
3898 } else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
3899 /*
3900 * Check, if buswidth is correct. Hardware drivers should set
3901 * chip correct!
3902 */
3903 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
3904 *maf_id, *dev_id);
3905 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
3906 pr_warn("bus width %d instead %d bit\n",
3907 (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
3908 busw ? 16 : 8);
3909 return ERR_PTR(-EINVAL);
3910 }
3911
3912 nand_decode_bbm_options(mtd, chip, id_data);
3913
3914 /* Calculate the address shift from the page size */
3915 chip->page_shift = ffs(mtd->writesize) - 1;
3916 /* Convert chipsize to number of pages per chip -1 */
3917 chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
3918
3919 chip->bbt_erase_shift = chip->phys_erase_shift =
3920 ffs(mtd->erasesize) - 1;
3921 if (chip->chipsize & 0xffffffff)
3922 chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
3923 else {
3924 chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
3925 chip->chip_shift += 32 - 1;
3926 }
3927
3928 chip->badblockbits = 8;
3929 chip->erase_cmd = single_erase_cmd;
3930
3931 /* Do not replace user supplied command function! */
3932 if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
3933 chip->cmdfunc = nand_command_lp;
3934
3935 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
3936 *maf_id, *dev_id);
3937
3938 #ifdef CONFIG_SYS_NAND_ONFI_DETECTION
3939 if (chip->onfi_version)
3940 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3941 chip->onfi_params.model);
3942 else if (chip->jedec_version)
3943 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3944 chip->jedec_params.model);
3945 else
3946 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3947 type->name);
3948 #else
3949 if (chip->jedec_version)
3950 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3951 chip->jedec_params.model);
3952 else
3953 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3954 type->name);
3955
3956 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
3957 type->name);
3958 #endif
3959
3960 pr_info("%dMiB, %s, page size: %d, OOB size: %d\n",
3961 (int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
3962 mtd->writesize, mtd->oobsize);
3963 return type;
3964 }
3965
3966 /**
3967 * nand_scan_ident - [NAND Interface] Scan for the NAND device
3968 * @mtd: MTD device structure
3969 * @maxchips: number of chips to scan for
3970 * @table: alternative NAND ID table
3971 *
3972 * This is the first phase of the normal nand_scan() function. It reads the
3973 * flash ID and sets up MTD fields accordingly.
3974 *
3975 * The mtd->owner field must be set to the module of the caller.
3976 */
3977 int nand_scan_ident(struct mtd_info *mtd, int maxchips,
3978 struct nand_flash_dev *table)
3979 {
3980 int i, nand_maf_id, nand_dev_id;
3981 struct nand_chip *chip = mtd->priv;
3982 struct nand_flash_dev *type;
3983
3984 /* Set the default functions */
3985 nand_set_defaults(chip, chip->options & NAND_BUSWIDTH_16);
3986
3987 /* Read the flash type */
3988 type = nand_get_flash_type(mtd, chip, &nand_maf_id,
3989 &nand_dev_id, table);
3990
3991 if (IS_ERR(type)) {
3992 if (!(chip->options & NAND_SCAN_SILENT_NODEV))
3993 pr_warn("No NAND device found\n");
3994 chip->select_chip(mtd, -1);
3995 return PTR_ERR(type);
3996 }
3997
3998 chip->select_chip(mtd, -1);
3999
4000 /* Check for a chip array */
4001 for (i = 1; i < maxchips; i++) {
4002 chip->select_chip(mtd, i);
4003 /* See comment in nand_get_flash_type for reset */
4004 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
4005 /* Send the command for reading device ID */
4006 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
4007 /* Read manufacturer and device IDs */
4008 if (nand_maf_id != chip->read_byte(mtd) ||
4009 nand_dev_id != chip->read_byte(mtd)) {
4010 chip->select_chip(mtd, -1);
4011 break;
4012 }
4013 chip->select_chip(mtd, -1);
4014 }
4015
4016 #ifdef DEBUG
4017 if (i > 1)
4018 pr_info("%d chips detected\n", i);
4019 #endif
4020
4021 /* Store the number of chips and calc total size for mtd */
4022 chip->numchips = i;
4023 mtd->size = i * chip->chipsize;
4024
4025 return 0;
4026 }
4027 EXPORT_SYMBOL(nand_scan_ident);
4028
4029
4030 /**
4031 * nand_scan_tail - [NAND Interface] Scan for the NAND device
4032 * @mtd: MTD device structure
4033 *
4034 * This is the second phase of the normal nand_scan() function. It fills out
4035 * all the uninitialized function pointers with the defaults and scans for a
4036 * bad block table if appropriate.
4037 */
4038 int nand_scan_tail(struct mtd_info *mtd)
4039 {
4040 int i;
4041 struct nand_chip *chip = mtd->priv;
4042 struct nand_ecc_ctrl *ecc = &chip->ecc;
4043 struct nand_buffers *nbuf;
4044
4045 /* New bad blocks should be marked in OOB, flash-based BBT, or both */
4046 BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
4047 !(chip->bbt_options & NAND_BBT_USE_FLASH));
4048
4049 if (!(chip->options & NAND_OWN_BUFFERS)) {
4050 #ifndef __UBOOT__
4051 nbuf = kzalloc(sizeof(*nbuf) + mtd->writesize
4052 + mtd->oobsize * 3, GFP_KERNEL);
4053 if (!nbuf)
4054 return -ENOMEM;
4055 nbuf->ecccalc = (uint8_t *)(nbuf + 1);
4056 nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
4057 nbuf->databuf = nbuf->ecccode + mtd->oobsize;
4058 #else
4059 nbuf = kzalloc(sizeof(struct nand_buffers), GFP_KERNEL);
4060 #endif
4061
4062 chip->buffers = nbuf;
4063 } else {
4064 if (!chip->buffers)
4065 return -ENOMEM;
4066 }
4067
4068 /* Set the internal oob buffer location, just after the page data */
4069 chip->oob_poi = chip->buffers->databuf + mtd->writesize;
4070
4071 /*
4072 * If no default placement scheme is given, select an appropriate one.
4073 */
4074 if (!ecc->layout && (ecc->mode != NAND_ECC_SOFT_BCH)) {
4075 switch (mtd->oobsize) {
4076 case 8:
4077 ecc->layout = &nand_oob_8;
4078 break;
4079 case 16:
4080 ecc->layout = &nand_oob_16;
4081 break;
4082 case 64:
4083 ecc->layout = &nand_oob_64;
4084 break;
4085 case 128:
4086 ecc->layout = &nand_oob_128;
4087 break;
4088 default:
4089 pr_warn("No oob scheme defined for oobsize %d\n",
4090 mtd->oobsize);
4091 BUG();
4092 }
4093 }
4094
4095 if (!chip->write_page)
4096 chip->write_page = nand_write_page;
4097
4098 /*
4099 * Check ECC mode, default to software if 3byte/512byte hardware ECC is
4100 * selected and we have 256 byte pagesize fallback to software ECC
4101 */
4102
4103 switch (ecc->mode) {
4104 case NAND_ECC_HW_OOB_FIRST:
4105 /* Similar to NAND_ECC_HW, but a separate read_page handle */
4106 if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
4107 pr_warn("No ECC functions supplied; "
4108 "hardware ECC not possible\n");
4109 BUG();
4110 }
4111 if (!ecc->read_page)
4112 ecc->read_page = nand_read_page_hwecc_oob_first;
4113
4114 case NAND_ECC_HW:
4115 /* Use standard hwecc read page function? */
4116 if (!ecc->read_page)
4117 ecc->read_page = nand_read_page_hwecc;
4118 if (!ecc->write_page)
4119 ecc->write_page = nand_write_page_hwecc;
4120 if (!ecc->read_page_raw)
4121 ecc->read_page_raw = nand_read_page_raw;
4122 if (!ecc->write_page_raw)
4123 ecc->write_page_raw = nand_write_page_raw;
4124 if (!ecc->read_oob)
4125 ecc->read_oob = nand_read_oob_std;
4126 if (!ecc->write_oob)
4127 ecc->write_oob = nand_write_oob_std;
4128 if (!ecc->read_subpage)
4129 ecc->read_subpage = nand_read_subpage;
4130 if (!ecc->write_subpage)
4131 ecc->write_subpage = nand_write_subpage_hwecc;
4132
4133 case NAND_ECC_HW_SYNDROME:
4134 if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) &&
4135 (!ecc->read_page ||
4136 ecc->read_page == nand_read_page_hwecc ||
4137 !ecc->write_page ||
4138 ecc->write_page == nand_write_page_hwecc)) {
4139 pr_warn("No ECC functions supplied; "
4140 "hardware ECC not possible\n");
4141 BUG();
4142 }
4143 /* Use standard syndrome read/write page function? */
4144 if (!ecc->read_page)
4145 ecc->read_page = nand_read_page_syndrome;
4146 if (!ecc->write_page)
4147 ecc->write_page = nand_write_page_syndrome;
4148 if (!ecc->read_page_raw)
4149 ecc->read_page_raw = nand_read_page_raw_syndrome;
4150 if (!ecc->write_page_raw)
4151 ecc->write_page_raw = nand_write_page_raw_syndrome;
4152 if (!ecc->read_oob)
4153 ecc->read_oob = nand_read_oob_syndrome;
4154 if (!ecc->write_oob)
4155 ecc->write_oob = nand_write_oob_syndrome;
4156
4157 if (mtd->writesize >= ecc->size) {
4158 if (!ecc->strength) {
4159 pr_warn("Driver must set ecc.strength when using hardware ECC\n");
4160 BUG();
4161 }
4162 break;
4163 }
4164 pr_warn("%d byte HW ECC not possible on "
4165 "%d byte page size, fallback to SW ECC\n",
4166 ecc->size, mtd->writesize);
4167 ecc->mode = NAND_ECC_SOFT;
4168
4169 case NAND_ECC_SOFT:
4170 ecc->calculate = nand_calculate_ecc;
4171 ecc->correct = nand_correct_data;
4172 ecc->read_page = nand_read_page_swecc;
4173 ecc->read_subpage = nand_read_subpage;
4174 ecc->write_page = nand_write_page_swecc;
4175 ecc->read_page_raw = nand_read_page_raw;
4176 ecc->write_page_raw = nand_write_page_raw;
4177 ecc->read_oob = nand_read_oob_std;
4178 ecc->write_oob = nand_write_oob_std;
4179 if (!ecc->size)
4180 ecc->size = 256;
4181 ecc->bytes = 3;
4182 ecc->strength = 1;
4183 break;
4184
4185 case NAND_ECC_SOFT_BCH:
4186 if (!mtd_nand_has_bch()) {
4187 pr_warn("CONFIG_MTD_NAND_ECC_BCH not enabled\n");
4188 BUG();
4189 }
4190 ecc->calculate = nand_bch_calculate_ecc;
4191 ecc->correct = nand_bch_correct_data;
4192 ecc->read_page = nand_read_page_swecc;
4193 ecc->read_subpage = nand_read_subpage;
4194 ecc->write_page = nand_write_page_swecc;
4195 ecc->read_page_raw = nand_read_page_raw;
4196 ecc->write_page_raw = nand_write_page_raw;
4197 ecc->read_oob = nand_read_oob_std;
4198 ecc->write_oob = nand_write_oob_std;
4199 /*
4200 * Board driver should supply ecc.size and ecc.bytes values to
4201 * select how many bits are correctable; see nand_bch_init()
4202 * for details. Otherwise, default to 4 bits for large page
4203 * devices.
4204 */
4205 if (!ecc->size && (mtd->oobsize >= 64)) {
4206 ecc->size = 512;
4207 ecc->bytes = 7;
4208 }
4209 ecc->priv = nand_bch_init(mtd, ecc->size, ecc->bytes,
4210 &ecc->layout);
4211 if (!ecc->priv) {
4212 pr_warn("BCH ECC initialization failed!\n");
4213 BUG();
4214 }
4215 ecc->strength = ecc->bytes * 8 / fls(8 * ecc->size);
4216 break;
4217
4218 case NAND_ECC_NONE:
4219 pr_warn("NAND_ECC_NONE selected by board driver. "
4220 "This is not recommended!\n");
4221 ecc->read_page = nand_read_page_raw;
4222 ecc->write_page = nand_write_page_raw;
4223 ecc->read_oob = nand_read_oob_std;
4224 ecc->read_page_raw = nand_read_page_raw;
4225 ecc->write_page_raw = nand_write_page_raw;
4226 ecc->write_oob = nand_write_oob_std;
4227 ecc->size = mtd->writesize;
4228 ecc->bytes = 0;
4229 ecc->strength = 0;
4230 break;
4231
4232 default:
4233 pr_warn("Invalid NAND_ECC_MODE %d\n", ecc->mode);
4234 BUG();
4235 }
4236
4237 /* For many systems, the standard OOB write also works for raw */
4238 if (!ecc->read_oob_raw)
4239 ecc->read_oob_raw = ecc->read_oob;
4240 if (!ecc->write_oob_raw)
4241 ecc->write_oob_raw = ecc->write_oob;
4242
4243 /*
4244 * The number of bytes available for a client to place data into
4245 * the out of band area.
4246 */
4247 ecc->layout->oobavail = 0;
4248 for (i = 0; ecc->layout->oobfree[i].length
4249 && i < ARRAY_SIZE(ecc->layout->oobfree); i++)
4250 ecc->layout->oobavail += ecc->layout->oobfree[i].length;
4251 mtd->oobavail = ecc->layout->oobavail;
4252
4253 /*
4254 * Set the number of read / write steps for one page depending on ECC
4255 * mode.
4256 */
4257 ecc->steps = mtd->writesize / ecc->size;
4258 if (ecc->steps * ecc->size != mtd->writesize) {
4259 pr_warn("Invalid ECC parameters\n");
4260 BUG();
4261 }
4262 ecc->total = ecc->steps * ecc->bytes;
4263
4264 /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
4265 if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
4266 switch (ecc->steps) {
4267 case 2:
4268 mtd->subpage_sft = 1;
4269 break;
4270 case 4:
4271 case 8:
4272 case 16:
4273 mtd->subpage_sft = 2;
4274 break;
4275 }
4276 }
4277 chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
4278
4279 /* Initialize state */
4280 chip->state = FL_READY;
4281
4282 /* Invalidate the pagebuffer reference */
4283 chip->pagebuf = -1;
4284
4285 /* Large page NAND with SOFT_ECC should support subpage reads */
4286 if ((ecc->mode == NAND_ECC_SOFT) && (chip->page_shift > 9))
4287 chip->options |= NAND_SUBPAGE_READ;
4288
4289 /* Fill in remaining MTD driver data */
4290 mtd->type = nand_is_slc(chip) ? MTD_NANDFLASH : MTD_MLCNANDFLASH;
4291 mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
4292 MTD_CAP_NANDFLASH;
4293 mtd->_erase = nand_erase;
4294 #ifndef __UBOOT__
4295 mtd->_point = NULL;
4296 mtd->_unpoint = NULL;
4297 #endif
4298 mtd->_read = nand_read;
4299 mtd->_write = nand_write;
4300 mtd->_panic_write = panic_nand_write;
4301 mtd->_read_oob = nand_read_oob;
4302 mtd->_write_oob = nand_write_oob;
4303 mtd->_sync = nand_sync;
4304 mtd->_lock = NULL;
4305 mtd->_unlock = NULL;
4306 #ifndef __UBOOT__
4307 mtd->_suspend = nand_suspend;
4308 mtd->_resume = nand_resume;
4309 #endif
4310 mtd->_block_isbad = nand_block_isbad;
4311 mtd->_block_markbad = nand_block_markbad;
4312 mtd->writebufsize = mtd->writesize;
4313
4314 /* propagate ecc info to mtd_info */
4315 mtd->ecclayout = ecc->layout;
4316 mtd->ecc_strength = ecc->strength;
4317 mtd->ecc_step_size = ecc->size;
4318 /*
4319 * Initialize bitflip_threshold to its default prior scan_bbt() call.
4320 * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
4321 * properly set.
4322 */
4323 if (!mtd->bitflip_threshold)
4324 mtd->bitflip_threshold = mtd->ecc_strength;
4325
4326 /* Check, if we should skip the bad block table scan */
4327 if (chip->options & NAND_SKIP_BBTSCAN)
4328 return 0;
4329
4330 /* Build bad block table */
4331 return chip->scan_bbt(mtd);
4332 }
4333 EXPORT_SYMBOL(nand_scan_tail);
4334
4335 /*
4336 * is_module_text_address() isn't exported, and it's mostly a pointless
4337 * test if this is a module _anyway_ -- they'd have to try _really_ hard
4338 * to call us from in-kernel code if the core NAND support is modular.
4339 */
4340 #ifdef MODULE
4341 #define caller_is_module() (1)
4342 #else
4343 #define caller_is_module() \
4344 is_module_text_address((unsigned long)__builtin_return_address(0))
4345 #endif
4346
4347 /**
4348 * nand_scan - [NAND Interface] Scan for the NAND device
4349 * @mtd: MTD device structure
4350 * @maxchips: number of chips to scan for
4351 *
4352 * This fills out all the uninitialized function pointers with the defaults.
4353 * The flash ID is read and the mtd/chip structures are filled with the
4354 * appropriate values. The mtd->owner field must be set to the module of the
4355 * caller.
4356 */
4357 int nand_scan(struct mtd_info *mtd, int maxchips)
4358 {
4359 int ret;
4360
4361 /* Many callers got this wrong, so check for it for a while... */
4362 if (!mtd->owner && caller_is_module()) {
4363 pr_crit("%s called with NULL mtd->owner!\n", __func__);
4364 BUG();
4365 }
4366
4367 ret = nand_scan_ident(mtd, maxchips, NULL);
4368 if (!ret)
4369 ret = nand_scan_tail(mtd);
4370 return ret;
4371 }
4372 EXPORT_SYMBOL(nand_scan);
4373
4374 #ifndef __UBOOT__
4375 /**
4376 * nand_release - [NAND Interface] Free resources held by the NAND device
4377 * @mtd: MTD device structure
4378 */
4379 void nand_release(struct mtd_info *mtd)
4380 {
4381 struct nand_chip *chip = mtd->priv;
4382
4383 if (chip->ecc.mode == NAND_ECC_SOFT_BCH)
4384 nand_bch_free((struct nand_bch_control *)chip->ecc.priv);
4385
4386 mtd_device_unregister(mtd);
4387
4388 /* Free bad block table memory */
4389 kfree(chip->bbt);
4390 if (!(chip->options & NAND_OWN_BUFFERS))
4391 kfree(chip->buffers);
4392
4393 /* Free bad block descriptor memory */
4394 if (chip->badblock_pattern && chip->badblock_pattern->options
4395 & NAND_BBT_DYNAMICSTRUCT)
4396 kfree(chip->badblock_pattern);
4397 }
4398 EXPORT_SYMBOL_GPL(nand_release);
4399
4400 static int __init nand_base_init(void)
4401 {
4402 led_trigger_register_simple("nand-disk", &nand_led_trigger);
4403 return 0;
4404 }
4405
4406 static void __exit nand_base_exit(void)
4407 {
4408 led_trigger_unregister_simple(nand_led_trigger);
4409 }
4410 #endif
4411
4412 module_init(nand_base_init);
4413 module_exit(nand_base_exit);
4414
4415 MODULE_LICENSE("GPL");
4416 MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>");
4417 MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
4418 MODULE_DESCRIPTION("Generic NAND flash driver code");