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