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