]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - drivers/mtd/nand/nand_base.c
[MTD] NAND remove write_byte/word function from nand_chip
[mirror_ubuntu-zesty-kernel.git] / drivers / mtd / nand / nand_base.c
CommitLineData
1da177e4
LT
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.
61b03bd7 8 *
1da177e4
LT
9 * Additional technical information is available on
10 * http://www.linux-mtd.infradead.org/tech/nand.html
61b03bd7 11 *
1da177e4 12 * Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
2c0a2bed 13 * 2002 Thomas Gleixner (tglx@linutronix.de)
1da177e4 14 *
61b03bd7 15 * 02-08-2004 tglx: support for strange chips, which cannot auto increment
1da177e4
LT
16 * pages on read / read_oob
17 *
18 * 03-17-2004 tglx: Check ready before auto increment check. Simon Bayes
19 * pointed this out, as he marked an auto increment capable chip
20 * as NOAUTOINCR in the board driver.
21 * Make reads over block boundaries work too
22 *
23 * 04-14-2004 tglx: first working version for 2k page size chips
61b03bd7 24 *
1da177e4
LT
25 * 05-19-2004 tglx: Basic support for Renesas AG-AND chips
26 *
27 * 09-24-2004 tglx: add support for hardware controllers (e.g. ECC) shared
2c0a2bed
TG
28 * among multiple independend devices. Suggestions and initial
29 * patch from Ben Dooks <ben-mtd@fluff.org>
30 *
31 * 12-05-2004 dmarlin: add workaround for Renesas AG-AND chips "disturb"
32 * issue. Basically, any block not rewritten may lose data when
33 * surrounding blocks are rewritten many times. JFFS2 ensures
34 * this doesn't happen for blocks it uses, but the Bad Block
35 * Table(s) may not be rewritten. To ensure they do not lose
36 * data, force them to be rewritten when some of the surrounding
37 * blocks are erased. Rather than tracking a specific nearby
38 * block (which could itself go bad), use a page address 'mask' to
39 * select several blocks in the same area, and rewrite the BBT
40 * when any of them are erased.
41 *
42 * 01-03-2005 dmarlin: added support for the device recovery command sequence
43 * for Renesas AG-AND chips. If there was a sudden loss of power
44 * during an erase operation, a "device recovery" operation must
45 * be performed when power is restored to ensure correct
46 * operation.
47 *
48 * 01-20-2005 dmarlin: added support for optional hardware specific callback
49 * routine to perform extra error status checks on erase and write
50 * failures. This required adding a wrapper function for
51 * nand_read_ecc.
068e3c0a 52 *
962034f4
VW
53 * 08-20-2005 vwool: suspend/resume added
54 *
1da177e4 55 * Credits:
61b03bd7
TG
56 * David Woodhouse for adding multichip support
57 *
1da177e4
LT
58 * Aleph One Ltd. and Toby Churchill Ltd. for supporting the
59 * rework for 2K page size chips
60 *
61 * TODO:
62 * Enable cached programming for 2k page size chips
63 * Check, if mtd->ecctype should be set to MTD_ECC_HW
64 * if we have HW ecc support.
65 * The AG-AND chips have nice features for speed improvement,
66 * which are not supported yet. Read / program 4 pages in one go.
67 *
962034f4 68 * $Id: nand_base.c,v 1.150 2005/09/15 13:58:48 vwool Exp $
1da177e4
LT
69 *
70 * This program is free software; you can redistribute it and/or modify
71 * it under the terms of the GNU General Public License version 2 as
72 * published by the Free Software Foundation.
73 *
74 */
75
552d9205 76#include <linux/module.h>
1da177e4
LT
77#include <linux/delay.h>
78#include <linux/errno.h>
7aa65bfd 79#include <linux/err.h>
1da177e4
LT
80#include <linux/sched.h>
81#include <linux/slab.h>
82#include <linux/types.h>
83#include <linux/mtd/mtd.h>
84#include <linux/mtd/nand.h>
85#include <linux/mtd/nand_ecc.h>
86#include <linux/mtd/compatmac.h>
87#include <linux/interrupt.h>
88#include <linux/bitops.h>
8fe833c1 89#include <linux/leds.h>
1da177e4
LT
90#include <asm/io.h>
91
92#ifdef CONFIG_MTD_PARTITIONS
93#include <linux/mtd/partitions.h>
94#endif
95
96/* Define default oob placement schemes for large and small page devices */
97static struct nand_oobinfo nand_oob_8 = {
98 .useecc = MTD_NANDECC_AUTOPLACE,
99 .eccbytes = 3,
100 .eccpos = {0, 1, 2},
e0c7d767 101 .oobfree = {{3, 2}, {6, 2}}
1da177e4
LT
102};
103
104static struct nand_oobinfo nand_oob_16 = {
105 .useecc = MTD_NANDECC_AUTOPLACE,
106 .eccbytes = 6,
107 .eccpos = {0, 1, 2, 3, 6, 7},
e0c7d767 108 .oobfree = {{8, 8}}
1da177e4
LT
109};
110
111static struct nand_oobinfo nand_oob_64 = {
112 .useecc = MTD_NANDECC_AUTOPLACE,
113 .eccbytes = 24,
114 .eccpos = {
e0c7d767
DW
115 40, 41, 42, 43, 44, 45, 46, 47,
116 48, 49, 50, 51, 52, 53, 54, 55,
117 56, 57, 58, 59, 60, 61, 62, 63},
118 .oobfree = {{2, 38}}
1da177e4
LT
119};
120
121/* This is used for padding purposes in nand_write_oob */
58dd8f2b 122static uint8_t ffchars[] = {
1da177e4
LT
123 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
124 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
125 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
126 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
127 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
128 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
129 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
130 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
131};
132
133/*
134 * NAND low-level MTD interface functions
135 */
58dd8f2b
TG
136static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
137static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
138static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
1da177e4 139
2c0a2bed 140static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
58dd8f2b 141 size_t *retlen, uint8_t *buf);
2c0a2bed 142static int nand_read_oob(struct mtd_info *mtd, loff_t from, size_t len,
58dd8f2b 143 size_t *retlen, uint8_t *buf);
2c0a2bed 144static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
58dd8f2b 145 size_t *retlen, const uint8_t *buf);
2c0a2bed 146static int nand_write_oob(struct mtd_info *mtd, loff_t to, size_t len,
58dd8f2b 147 size_t *retlen, const uint8_t *buf);
e0c7d767
DW
148static int nand_erase(struct mtd_info *mtd, struct erase_info *instr);
149static void nand_sync(struct mtd_info *mtd);
1da177e4
LT
150
151/* Some internal functions */
2c0a2bed 152static int nand_write_page(struct mtd_info *mtd, struct nand_chip *this,
58dd8f2b 153 int page, uint8_t * oob_buf,
e0c7d767 154 struct nand_oobinfo *oobsel, int mode);
1da177e4 155#ifdef CONFIG_MTD_NAND_VERIFY_WRITE
2c0a2bed 156static int nand_verify_pages(struct mtd_info *mtd, struct nand_chip *this,
58dd8f2b 157 int page, int numpages, uint8_t *oob_buf,
2c0a2bed
TG
158 struct nand_oobinfo *oobsel, int chipnr,
159 int oobmode);
1da177e4
LT
160#else
161#define nand_verify_pages(...) (0)
162#endif
61b03bd7 163
2c0a2bed
TG
164static int nand_get_device(struct nand_chip *this, struct mtd_info *mtd,
165 int new_state);
1da177e4
LT
166
167/**
168 * nand_release_device - [GENERIC] release chip
169 * @mtd: MTD device structure
61b03bd7
TG
170 *
171 * Deselect, release chip lock and wake up anyone waiting on the device
1da177e4 172 */
e0c7d767 173static void nand_release_device(struct mtd_info *mtd)
1da177e4
LT
174{
175 struct nand_chip *this = mtd->priv;
176
177 /* De-select the NAND device */
178 this->select_chip(mtd, -1);
0dfc6246 179
a36ed299
TG
180 /* Release the controller and the chip */
181 spin_lock(&this->controller->lock);
182 this->controller->active = NULL;
183 this->state = FL_READY;
184 wake_up(&this->controller->wq);
185 spin_unlock(&this->controller->lock);
1da177e4
LT
186}
187
188/**
189 * nand_read_byte - [DEFAULT] read one byte from the chip
190 * @mtd: MTD device structure
191 *
192 * Default read function for 8bit buswith
193 */
58dd8f2b 194static uint8_t nand_read_byte(struct mtd_info *mtd)
1da177e4
LT
195{
196 struct nand_chip *this = mtd->priv;
197 return readb(this->IO_ADDR_R);
198}
199
1da177e4
LT
200/**
201 * nand_read_byte16 - [DEFAULT] read one byte endianess aware from the chip
202 * @mtd: MTD device structure
203 *
61b03bd7 204 * Default read function for 16bit buswith with
1da177e4
LT
205 * endianess conversion
206 */
58dd8f2b 207static uint8_t nand_read_byte16(struct mtd_info *mtd)
1da177e4
LT
208{
209 struct nand_chip *this = mtd->priv;
58dd8f2b 210 return (uint8_t) cpu_to_le16(readw(this->IO_ADDR_R));
1da177e4
LT
211}
212
1da177e4
LT
213/**
214 * nand_read_word - [DEFAULT] read one word from the chip
215 * @mtd: MTD device structure
216 *
61b03bd7 217 * Default read function for 16bit buswith without
1da177e4
LT
218 * endianess conversion
219 */
220static u16 nand_read_word(struct mtd_info *mtd)
221{
222 struct nand_chip *this = mtd->priv;
223 return readw(this->IO_ADDR_R);
224}
225
1da177e4
LT
226/**
227 * nand_select_chip - [DEFAULT] control CE line
228 * @mtd: MTD device structure
229 * @chip: chipnumber to select, -1 for deselect
230 *
231 * Default select function for 1 chip devices.
232 */
233static void nand_select_chip(struct mtd_info *mtd, int chip)
234{
235 struct nand_chip *this = mtd->priv;
e0c7d767 236 switch (chip) {
1da177e4 237 case -1:
7abd3ef9 238 this->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
1da177e4
LT
239 break;
240 case 0:
7abd3ef9 241 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
1da177e4
LT
242 break;
243
244 default:
245 BUG();
246 }
247}
248
249/**
250 * nand_write_buf - [DEFAULT] write buffer to chip
251 * @mtd: MTD device structure
252 * @buf: data buffer
253 * @len: number of bytes to write
254 *
255 * Default write function for 8bit buswith
256 */
58dd8f2b 257static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
1da177e4
LT
258{
259 int i;
260 struct nand_chip *this = mtd->priv;
261
e0c7d767 262 for (i = 0; i < len; i++)
1da177e4
LT
263 writeb(buf[i], this->IO_ADDR_W);
264}
265
266/**
61b03bd7 267 * nand_read_buf - [DEFAULT] read chip data into buffer
1da177e4
LT
268 * @mtd: MTD device structure
269 * @buf: buffer to store date
270 * @len: number of bytes to read
271 *
272 * Default read function for 8bit buswith
273 */
58dd8f2b 274static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
1da177e4
LT
275{
276 int i;
277 struct nand_chip *this = mtd->priv;
278
e0c7d767 279 for (i = 0; i < len; i++)
1da177e4
LT
280 buf[i] = readb(this->IO_ADDR_R);
281}
282
283/**
61b03bd7 284 * nand_verify_buf - [DEFAULT] Verify chip data against buffer
1da177e4
LT
285 * @mtd: MTD device structure
286 * @buf: buffer containing the data to compare
287 * @len: number of bytes to compare
288 *
289 * Default verify function for 8bit buswith
290 */
58dd8f2b 291static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
1da177e4
LT
292{
293 int i;
294 struct nand_chip *this = mtd->priv;
295
e0c7d767 296 for (i = 0; i < len; i++)
1da177e4
LT
297 if (buf[i] != readb(this->IO_ADDR_R))
298 return -EFAULT;
299
300 return 0;
301}
302
303/**
304 * nand_write_buf16 - [DEFAULT] write buffer to chip
305 * @mtd: MTD device structure
306 * @buf: data buffer
307 * @len: number of bytes to write
308 *
309 * Default write function for 16bit buswith
310 */
58dd8f2b 311static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
1da177e4
LT
312{
313 int i;
314 struct nand_chip *this = mtd->priv;
315 u16 *p = (u16 *) buf;
316 len >>= 1;
61b03bd7 317
e0c7d767 318 for (i = 0; i < len; i++)
1da177e4 319 writew(p[i], this->IO_ADDR_W);
61b03bd7 320
1da177e4
LT
321}
322
323/**
61b03bd7 324 * nand_read_buf16 - [DEFAULT] read chip data into buffer
1da177e4
LT
325 * @mtd: MTD device structure
326 * @buf: buffer to store date
327 * @len: number of bytes to read
328 *
329 * Default read function for 16bit buswith
330 */
58dd8f2b 331static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
1da177e4
LT
332{
333 int i;
334 struct nand_chip *this = mtd->priv;
335 u16 *p = (u16 *) buf;
336 len >>= 1;
337
e0c7d767 338 for (i = 0; i < len; i++)
1da177e4
LT
339 p[i] = readw(this->IO_ADDR_R);
340}
341
342/**
61b03bd7 343 * nand_verify_buf16 - [DEFAULT] Verify chip data against buffer
1da177e4
LT
344 * @mtd: MTD device structure
345 * @buf: buffer containing the data to compare
346 * @len: number of bytes to compare
347 *
348 * Default verify function for 16bit buswith
349 */
58dd8f2b 350static int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
1da177e4
LT
351{
352 int i;
353 struct nand_chip *this = mtd->priv;
354 u16 *p = (u16 *) buf;
355 len >>= 1;
356
e0c7d767 357 for (i = 0; i < len; i++)
1da177e4
LT
358 if (p[i] != readw(this->IO_ADDR_R))
359 return -EFAULT;
360
361 return 0;
362}
363
364/**
365 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
366 * @mtd: MTD device structure
367 * @ofs: offset from device start
368 * @getchip: 0, if the chip is already selected
369 *
61b03bd7 370 * Check, if the block is bad.
1da177e4
LT
371 */
372static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
373{
374 int page, chipnr, res = 0;
375 struct nand_chip *this = mtd->priv;
376 u16 bad;
377
378 if (getchip) {
379 page = (int)(ofs >> this->page_shift);
380 chipnr = (int)(ofs >> this->chip_shift);
381
382 /* Grab the lock and see if the device is available */
e0c7d767 383 nand_get_device(this, mtd, FL_READING);
1da177e4
LT
384
385 /* Select the NAND device */
386 this->select_chip(mtd, chipnr);
61b03bd7 387 } else
e0c7d767 388 page = (int)ofs;
1da177e4
LT
389
390 if (this->options & NAND_BUSWIDTH_16) {
2c0a2bed
TG
391 this->cmdfunc(mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE,
392 page & this->pagemask);
1da177e4
LT
393 bad = cpu_to_le16(this->read_word(mtd));
394 if (this->badblockpos & 0x1)
49196f33 395 bad >>= 8;
1da177e4
LT
396 if ((bad & 0xFF) != 0xff)
397 res = 1;
398 } else {
2c0a2bed
TG
399 this->cmdfunc(mtd, NAND_CMD_READOOB, this->badblockpos,
400 page & this->pagemask);
1da177e4
LT
401 if (this->read_byte(mtd) != 0xff)
402 res = 1;
403 }
61b03bd7 404
1da177e4
LT
405 if (getchip) {
406 /* Deselect and wake up anyone waiting on the device */
407 nand_release_device(mtd);
61b03bd7
TG
408 }
409
1da177e4
LT
410 return res;
411}
412
413/**
414 * nand_default_block_markbad - [DEFAULT] mark a block bad
415 * @mtd: MTD device structure
416 * @ofs: offset from device start
417 *
418 * This is the default implementation, which can be overridden by
419 * a hardware specific driver.
420*/
421static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
422{
423 struct nand_chip *this = mtd->priv;
58dd8f2b 424 uint8_t buf[2] = { 0, 0 };
e0c7d767 425 size_t retlen;
1da177e4 426 int block;
61b03bd7 427
1da177e4 428 /* Get block number */
e0c7d767 429 block = ((int)ofs) >> this->bbt_erase_shift;
41ce9214
AB
430 if (this->bbt)
431 this->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
1da177e4
LT
432
433 /* Do we have a flash based bad block table ? */
434 if (this->options & NAND_USE_FLASH_BBT)
e0c7d767 435 return nand_update_bbt(mtd, ofs);
61b03bd7 436
1da177e4
LT
437 /* We write two bytes, so we dont have to mess with 16 bit access */
438 ofs += mtd->oobsize + (this->badblockpos & ~0x01);
e0c7d767 439 return nand_write_oob(mtd, ofs, 2, &retlen, buf);
1da177e4
LT
440}
441
61b03bd7 442/**
1da177e4
LT
443 * nand_check_wp - [GENERIC] check if the chip is write protected
444 * @mtd: MTD device structure
61b03bd7 445 * Check, if the device is write protected
1da177e4 446 *
61b03bd7 447 * The function expects, that the device is already selected
1da177e4 448 */
e0c7d767 449static int nand_check_wp(struct mtd_info *mtd)
1da177e4
LT
450{
451 struct nand_chip *this = mtd->priv;
452 /* Check the WP bit */
e0c7d767 453 this->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
61b03bd7 454 return (this->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
1da177e4
LT
455}
456
457/**
458 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
459 * @mtd: MTD device structure
460 * @ofs: offset from device start
461 * @getchip: 0, if the chip is already selected
462 * @allowbbt: 1, if its allowed to access the bbt area
463 *
464 * Check, if the block is bad. Either by reading the bad block table or
465 * calling of the scan function.
466 */
2c0a2bed
TG
467static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
468 int allowbbt)
1da177e4
LT
469{
470 struct nand_chip *this = mtd->priv;
61b03bd7 471
1da177e4
LT
472 if (!this->bbt)
473 return this->block_bad(mtd, ofs, getchip);
61b03bd7 474
1da177e4 475 /* Return info from the table */
e0c7d767 476 return nand_isbad_bbt(mtd, ofs, allowbbt);
1da177e4
LT
477}
478
8fe833c1
RP
479DEFINE_LED_TRIGGER(nand_led_trigger);
480
61b03bd7 481/*
3b88775c
TG
482 * Wait for the ready pin, after a command
483 * The timeout is catched later.
484 */
485static void nand_wait_ready(struct mtd_info *mtd)
486{
487 struct nand_chip *this = mtd->priv;
e0c7d767 488 unsigned long timeo = jiffies + 2;
3b88775c 489
8fe833c1 490 led_trigger_event(nand_led_trigger, LED_FULL);
3b88775c
TG
491 /* wait until command is processed or timeout occures */
492 do {
493 if (this->dev_ready(mtd))
8fe833c1 494 break;
8446f1d3 495 touch_softlockup_watchdog();
61b03bd7 496 } while (time_before(jiffies, timeo));
8fe833c1 497 led_trigger_event(nand_led_trigger, LED_OFF);
3b88775c
TG
498}
499
1da177e4
LT
500/**
501 * nand_command - [DEFAULT] Send command to NAND device
502 * @mtd: MTD device structure
503 * @command: the command to be sent
504 * @column: the column address for this command, -1 if none
505 * @page_addr: the page address for this command, -1 if none
506 *
507 * Send command to NAND device. This function is used for small page
508 * devices (256/512 Bytes per page)
509 */
7abd3ef9
TG
510static void nand_command(struct mtd_info *mtd, unsigned int command,
511 int column, int page_addr)
1da177e4
LT
512{
513 register struct nand_chip *this = mtd->priv;
7abd3ef9 514 int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
1da177e4 515
1da177e4
LT
516 /*
517 * Write out the command to the device.
518 */
519 if (command == NAND_CMD_SEQIN) {
520 int readcmd;
521
28318776 522 if (column >= mtd->writesize) {
1da177e4 523 /* OOB area */
28318776 524 column -= mtd->writesize;
1da177e4
LT
525 readcmd = NAND_CMD_READOOB;
526 } else if (column < 256) {
527 /* First 256 bytes --> READ0 */
528 readcmd = NAND_CMD_READ0;
529 } else {
530 column -= 256;
531 readcmd = NAND_CMD_READ1;
532 }
7abd3ef9
TG
533 this->cmd_ctrl(mtd, readcmd, ctrl);
534 ctrl &= ~NAND_CTRL_CHANGE;
1da177e4 535 }
7abd3ef9 536 this->cmd_ctrl(mtd, command, ctrl);
1da177e4 537
7abd3ef9
TG
538 /*
539 * Address cycle, when necessary
540 */
541 ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
542 /* Serially input address */
543 if (column != -1) {
544 /* Adjust columns for 16 bit buswidth */
545 if (this->options & NAND_BUSWIDTH_16)
546 column >>= 1;
547 this->cmd_ctrl(mtd, column, ctrl);
548 ctrl &= ~NAND_CTRL_CHANGE;
549 }
550 if (page_addr != -1) {
551 this->cmd_ctrl(mtd, page_addr, ctrl);
552 ctrl &= ~NAND_CTRL_CHANGE;
553 this->cmd_ctrl(mtd, page_addr >> 8, ctrl);
554 /* One more address cycle for devices > 32MiB */
555 if (this->chipsize > (32 << 20))
556 this->cmd_ctrl(mtd, page_addr >> 16, ctrl);
1da177e4 557 }
7abd3ef9 558 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
61b03bd7
TG
559
560 /*
561 * program and erase have their own busy handlers
1da177e4 562 * status and sequential in needs no delay
e0c7d767 563 */
1da177e4 564 switch (command) {
61b03bd7 565
1da177e4
LT
566 case NAND_CMD_PAGEPROG:
567 case NAND_CMD_ERASE1:
568 case NAND_CMD_ERASE2:
569 case NAND_CMD_SEQIN:
570 case NAND_CMD_STATUS:
7abd3ef9 571 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE);
1da177e4
LT
572 return;
573
574 case NAND_CMD_RESET:
61b03bd7 575 if (this->dev_ready)
1da177e4
LT
576 break;
577 udelay(this->chip_delay);
7abd3ef9
TG
578 this->cmd_ctrl(mtd, NAND_CMD_STATUS,
579 NAND_CTRL_CLE | NAND_CTRL_CHANGE);
580 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE);
e0c7d767 581 while (!(this->read_byte(mtd) & NAND_STATUS_READY)) ;
1da177e4
LT
582 return;
583
e0c7d767 584 /* This applies to read commands */
1da177e4 585 default:
61b03bd7 586 /*
1da177e4
LT
587 * If we don't have access to the busy pin, we apply the given
588 * command delay
e0c7d767 589 */
1da177e4 590 if (!this->dev_ready) {
e0c7d767 591 udelay(this->chip_delay);
1da177e4 592 return;
61b03bd7 593 }
1da177e4 594 }
1da177e4
LT
595 /* Apply this short delay always to ensure that we do wait tWB in
596 * any case on any machine. */
e0c7d767 597 ndelay(100);
3b88775c
TG
598
599 nand_wait_ready(mtd);
1da177e4
LT
600}
601
602/**
603 * nand_command_lp - [DEFAULT] Send command to NAND large page device
604 * @mtd: MTD device structure
605 * @command: the command to be sent
606 * @column: the column address for this command, -1 if none
607 * @page_addr: the page address for this command, -1 if none
608 *
7abd3ef9
TG
609 * Send command to NAND device. This is the version for the new large page
610 * devices We dont have the separate regions as we have in the small page
611 * devices. We must emulate NAND_CMD_READOOB to keep the code compatible.
1da177e4
LT
612 *
613 */
7abd3ef9
TG
614static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
615 int column, int page_addr)
1da177e4
LT
616{
617 register struct nand_chip *this = mtd->priv;
618
619 /* Emulate NAND_CMD_READOOB */
620 if (command == NAND_CMD_READOOB) {
28318776 621 column += mtd->writesize;
1da177e4
LT
622 command = NAND_CMD_READ0;
623 }
61b03bd7 624
7abd3ef9
TG
625 /* Command latch cycle */
626 this->cmd_ctrl(mtd, command & 0xff,
627 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
1da177e4
LT
628
629 if (column != -1 || page_addr != -1) {
7abd3ef9 630 int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
1da177e4
LT
631
632 /* Serially input address */
633 if (column != -1) {
634 /* Adjust columns for 16 bit buswidth */
635 if (this->options & NAND_BUSWIDTH_16)
636 column >>= 1;
7abd3ef9
TG
637 this->cmd_ctrl(mtd, column, ctrl);
638 ctrl &= ~NAND_CTRL_CHANGE;
639 this->cmd_ctrl(mtd, column >> 8, ctrl);
61b03bd7 640 }
1da177e4 641 if (page_addr != -1) {
7abd3ef9
TG
642 this->cmd_ctrl(mtd, page_addr, ctrl);
643 this->cmd_ctrl(mtd, page_addr >> 8,
644 NAND_NCE | NAND_ALE);
1da177e4
LT
645 /* One more address cycle for devices > 128MiB */
646 if (this->chipsize > (128 << 20))
7abd3ef9
TG
647 this->cmd_ctrl(mtd, page_addr >> 16,
648 NAND_NCE | NAND_ALE);
1da177e4 649 }
1da177e4 650 }
7abd3ef9 651 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
61b03bd7
TG
652
653 /*
654 * program and erase have their own busy handlers
30f464b7
DM
655 * status, sequential in, and deplete1 need no delay
656 */
1da177e4 657 switch (command) {
61b03bd7 658
1da177e4
LT
659 case NAND_CMD_CACHEDPROG:
660 case NAND_CMD_PAGEPROG:
661 case NAND_CMD_ERASE1:
662 case NAND_CMD_ERASE2:
663 case NAND_CMD_SEQIN:
664 case NAND_CMD_STATUS:
30f464b7 665 case NAND_CMD_DEPLETE1:
1da177e4
LT
666 return;
667
e0c7d767
DW
668 /*
669 * read error status commands require only a short delay
670 */
30f464b7
DM
671 case NAND_CMD_STATUS_ERROR:
672 case NAND_CMD_STATUS_ERROR0:
673 case NAND_CMD_STATUS_ERROR1:
674 case NAND_CMD_STATUS_ERROR2:
675 case NAND_CMD_STATUS_ERROR3:
676 udelay(this->chip_delay);
677 return;
1da177e4
LT
678
679 case NAND_CMD_RESET:
61b03bd7 680 if (this->dev_ready)
1da177e4
LT
681 break;
682 udelay(this->chip_delay);
7abd3ef9
TG
683 this->cmd_ctrl(mtd, NAND_CMD_STATUS, NAND_NCE | NAND_CLE);
684 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE);
e0c7d767 685 while (!(this->read_byte(mtd) & NAND_STATUS_READY)) ;
1da177e4
LT
686 return;
687
688 case NAND_CMD_READ0:
7abd3ef9
TG
689 this->cmd_ctrl(mtd, NAND_CMD_READSTART, NAND_NCE | NAND_CLE);
690 this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE);
61b03bd7 691
e0c7d767 692 /* This applies to read commands */
1da177e4 693 default:
61b03bd7 694 /*
1da177e4
LT
695 * If we don't have access to the busy pin, we apply the given
696 * command delay
e0c7d767 697 */
1da177e4 698 if (!this->dev_ready) {
e0c7d767 699 udelay(this->chip_delay);
1da177e4 700 return;
61b03bd7 701 }
1da177e4 702 }
3b88775c 703
1da177e4
LT
704 /* Apply this short delay always to ensure that we do wait tWB in
705 * any case on any machine. */
e0c7d767 706 ndelay(100);
3b88775c
TG
707
708 nand_wait_ready(mtd);
1da177e4
LT
709}
710
711/**
712 * nand_get_device - [GENERIC] Get chip for selected access
713 * @this: the nand chip descriptor
714 * @mtd: MTD device structure
61b03bd7 715 * @new_state: the state which is requested
1da177e4
LT
716 *
717 * Get the device and lock it for exclusive access
718 */
2c0a2bed
TG
719static int
720nand_get_device(struct nand_chip *this, struct mtd_info *mtd, int new_state)
1da177e4 721{
a36ed299
TG
722 spinlock_t *lock = &this->controller->lock;
723 wait_queue_head_t *wq = &this->controller->wq;
e0c7d767 724 DECLARE_WAITQUEUE(wait, current);
e0c7d767 725 retry:
0dfc6246
TG
726 spin_lock(lock);
727
1da177e4 728 /* Hardware controller shared among independend devices */
a36ed299
TG
729 /* Hardware controller shared among independend devices */
730 if (!this->controller->active)
731 this->controller->active = this;
732
733 if (this->controller->active == this && this->state == FL_READY) {
0dfc6246
TG
734 this->state = new_state;
735 spin_unlock(lock);
962034f4
VW
736 return 0;
737 }
738 if (new_state == FL_PM_SUSPENDED) {
739 spin_unlock(lock);
740 return (this->state == FL_PM_SUSPENDED) ? 0 : -EAGAIN;
0dfc6246
TG
741 }
742 set_current_state(TASK_UNINTERRUPTIBLE);
743 add_wait_queue(wq, &wait);
744 spin_unlock(lock);
745 schedule();
746 remove_wait_queue(wq, &wait);
1da177e4
LT
747 goto retry;
748}
749
750/**
751 * nand_wait - [DEFAULT] wait until the command is done
752 * @mtd: MTD device structure
753 * @this: NAND chip structure
754 * @state: state to select the max. timeout value
755 *
756 * Wait for command done. This applies to erase and program only
61b03bd7 757 * Erase can take up to 400ms and program up to 20ms according to
1da177e4
LT
758 * general NAND and SmartMedia specs
759 *
760*/
761static int nand_wait(struct mtd_info *mtd, struct nand_chip *this, int state)
762{
763
e0c7d767
DW
764 unsigned long timeo = jiffies;
765 int status;
61b03bd7 766
1da177e4 767 if (state == FL_ERASING)
e0c7d767 768 timeo += (HZ * 400) / 1000;
1da177e4 769 else
e0c7d767 770 timeo += (HZ * 20) / 1000;
1da177e4 771
8fe833c1
RP
772 led_trigger_event(nand_led_trigger, LED_FULL);
773
1da177e4
LT
774 /* Apply this short delay always to ensure that we do wait tWB in
775 * any case on any machine. */
e0c7d767 776 ndelay(100);
1da177e4
LT
777
778 if ((state == FL_ERASING) && (this->options & NAND_IS_AND))
e0c7d767 779 this->cmdfunc(mtd, NAND_CMD_STATUS_MULTI, -1, -1);
61b03bd7 780 else
e0c7d767 781 this->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
1da177e4 782
61b03bd7 783 while (time_before(jiffies, timeo)) {
1da177e4
LT
784 /* Check, if we were interrupted */
785 if (this->state != state)
786 return 0;
787
788 if (this->dev_ready) {
789 if (this->dev_ready(mtd))
61b03bd7 790 break;
1da177e4
LT
791 } else {
792 if (this->read_byte(mtd) & NAND_STATUS_READY)
793 break;
794 }
20a6c211 795 cond_resched();
1da177e4 796 }
8fe833c1
RP
797 led_trigger_event(nand_led_trigger, LED_OFF);
798
e0c7d767 799 status = (int)this->read_byte(mtd);
1da177e4
LT
800 return status;
801}
802
803/**
804 * nand_write_page - [GENERIC] write one page
805 * @mtd: MTD device structure
806 * @this: NAND chip structure
807 * @page: startpage inside the chip, must be called with (page & this->pagemask)
808 * @oob_buf: out of band data buffer
809 * @oobsel: out of band selecttion structre
810 * @cached: 1 = enable cached programming if supported by chip
811 *
812 * Nand_page_program function is used for write and writev !
813 * This function will always program a full page of data
814 * If you call it with a non page aligned buffer, you're lost :)
815 *
816 * Cached programming is not supported yet.
817 */
e0c7d767 818static int nand_write_page(struct mtd_info *mtd, struct nand_chip *this, int page,
58dd8f2b 819 uint8_t *oob_buf, struct nand_oobinfo *oobsel, int cached)
1da177e4 820{
e0c7d767 821 int i, status;
58dd8f2b 822 uint8_t ecc_code[32];
6dfc6d25 823 int eccmode = oobsel->useecc ? this->ecc.mode : NAND_ECC_NONE;
e0c7d767 824 int *oob_config = oobsel->eccpos;
6dfc6d25 825 int datidx = 0, eccidx = 0, eccsteps = this->ecc.steps;
e0c7d767 826 int eccbytes = 0;
61b03bd7 827
1da177e4
LT
828 /* FIXME: Enable cached programming */
829 cached = 0;
61b03bd7 830
1da177e4 831 /* Send command to begin auto page programming */
e0c7d767 832 this->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
1da177e4
LT
833
834 /* Write out complete page of data, take care of eccmode */
835 switch (eccmode) {
e0c7d767 836 /* No ecc, write all */
1da177e4 837 case NAND_ECC_NONE:
e0c7d767 838 printk(KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");
28318776 839 this->write_buf(mtd, this->data_poi, mtd->writesize);
1da177e4 840 break;
61b03bd7 841
e0c7d767 842 /* Software ecc 3/256, write all */
1da177e4
LT
843 case NAND_ECC_SOFT:
844 for (; eccsteps; eccsteps--) {
6dfc6d25 845 this->ecc.calculate(mtd, &this->data_poi[datidx], ecc_code);
1da177e4
LT
846 for (i = 0; i < 3; i++, eccidx++)
847 oob_buf[oob_config[eccidx]] = ecc_code[i];
6dfc6d25 848 datidx += this->ecc.size;
1da177e4 849 }
28318776 850 this->write_buf(mtd, this->data_poi, mtd->writesize);
1da177e4
LT
851 break;
852 default:
6dfc6d25 853 eccbytes = this->ecc.bytes;
1da177e4
LT
854 for (; eccsteps; eccsteps--) {
855 /* enable hardware ecc logic for write */
6dfc6d25
TG
856 this->ecc.hwctl(mtd, NAND_ECC_WRITE);
857 this->write_buf(mtd, &this->data_poi[datidx], this->ecc.size);
858 this->ecc.calculate(mtd, &this->data_poi[datidx], ecc_code);
1da177e4
LT
859 for (i = 0; i < eccbytes; i++, eccidx++)
860 oob_buf[oob_config[eccidx]] = ecc_code[i];
861 /* If the hardware ecc provides syndromes then
862 * the ecc code must be written immidiately after
863 * the data bytes (words) */
864 if (this->options & NAND_HWECC_SYNDROME)
865 this->write_buf(mtd, ecc_code, eccbytes);
6dfc6d25 866 datidx += this->ecc.size;
1da177e4
LT
867 }
868 break;
869 }
61b03bd7 870
1da177e4
LT
871 /* Write out OOB data */
872 if (this->options & NAND_HWECC_SYNDROME)
873 this->write_buf(mtd, &oob_buf[oobsel->eccbytes], mtd->oobsize - oobsel->eccbytes);
61b03bd7 874 else
1da177e4
LT
875 this->write_buf(mtd, oob_buf, mtd->oobsize);
876
877 /* Send command to actually program the data */
e0c7d767 878 this->cmdfunc(mtd, cached ? NAND_CMD_CACHEDPROG : NAND_CMD_PAGEPROG, -1, -1);
1da177e4
LT
879
880 if (!cached) {
881 /* call wait ready function */
e0c7d767 882 status = this->waitfunc(mtd, this, FL_WRITING);
068e3c0a
DM
883
884 /* See if operation failed and additional status checks are available */
885 if ((status & NAND_STATUS_FAIL) && (this->errstat)) {
886 status = this->errstat(mtd, this, FL_WRITING, status, page);
887 }
888
1da177e4 889 /* See if device thinks it succeeded */
a4ab4c5d 890 if (status & NAND_STATUS_FAIL) {
e0c7d767 891 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write, page 0x%08x, ", __FUNCTION__, page);
1da177e4
LT
892 return -EIO;
893 }
894 } else {
895 /* FIXME: Implement cached programming ! */
e0c7d767 896 /* wait until cache is ready */
1da177e4
LT
897 // status = this->waitfunc (mtd, this, FL_CACHEDRPG);
898 }
61b03bd7 899 return 0;
1da177e4
LT
900}
901
902#ifdef CONFIG_MTD_NAND_VERIFY_WRITE
903/**
904 * nand_verify_pages - [GENERIC] verify the chip contents after a write
905 * @mtd: MTD device structure
906 * @this: NAND chip structure
2c0a2bed 907 * @page: startpage inside the chip, must be called with (page & this->pagemask)
1da177e4
LT
908 * @numpages: number of pages to verify
909 * @oob_buf: out of band data buffer
910 * @oobsel: out of band selecttion structre
911 * @chipnr: number of the current chip
912 * @oobmode: 1 = full buffer verify, 0 = ecc only
913 *
914 * The NAND device assumes that it is always writing to a cleanly erased page.
61b03bd7 915 * Hence, it performs its internal write verification only on bits that
1da177e4 916 * transitioned from 1 to 0. The device does NOT verify the whole page on a
61b03bd7
TG
917 * byte by byte basis. It is possible that the page was not completely erased
918 * or the page is becoming unusable due to wear. The read with ECC would catch
919 * the error later when the ECC page check fails, but we would rather catch
1da177e4
LT
920 * it early in the page write stage. Better to write no data than invalid data.
921 */
e0c7d767 922static int nand_verify_pages(struct mtd_info *mtd, struct nand_chip *this, int page, int numpages,
58dd8f2b 923 uint8_t *oob_buf, struct nand_oobinfo *oobsel, int chipnr, int oobmode)
1da177e4 924{
e0c7d767
DW
925 int i, j, datidx = 0, oobofs = 0, res = -EIO;
926 int eccsteps = this->eccsteps;
927 int hweccbytes;
58dd8f2b 928 uint8_t oobdata[64];
1da177e4
LT
929
930 hweccbytes = (this->options & NAND_HWECC_SYNDROME) ? (oobsel->eccbytes / eccsteps) : 0;
931
932 /* Send command to read back the first page */
e0c7d767 933 this->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
1da177e4 934
e0c7d767 935 for (;;) {
1da177e4
LT
936 for (j = 0; j < eccsteps; j++) {
937 /* Loop through and verify the data */
938 if (this->verify_buf(mtd, &this->data_poi[datidx], mtd->eccsize)) {
e0c7d767 939 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write verify, page 0x%08x ", __FUNCTION__, page);
1da177e4
LT
940 goto out;
941 }
942 datidx += mtd->eccsize;
943 /* Have we a hw generator layout ? */
944 if (!hweccbytes)
945 continue;
946 if (this->verify_buf(mtd, &this->oob_buf[oobofs], hweccbytes)) {
e0c7d767 947 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write verify, page 0x%08x ", __FUNCTION__, page);
1da177e4
LT
948 goto out;
949 }
950 oobofs += hweccbytes;
951 }
952
953 /* check, if we must compare all data or if we just have to
954 * compare the ecc bytes
955 */
956 if (oobmode) {
957 if (this->verify_buf(mtd, &oob_buf[oobofs], mtd->oobsize - hweccbytes * eccsteps)) {
e0c7d767 958 DEBUG(MTD_DEBUG_LEVEL0, "%s: " "Failed write verify, page 0x%08x ", __FUNCTION__, page);
1da177e4
LT
959 goto out;
960 }
961 } else {
962 /* Read always, else autoincrement fails */
963 this->read_buf(mtd, oobdata, mtd->oobsize - hweccbytes * eccsteps);
964
965 if (oobsel->useecc != MTD_NANDECC_OFF && !hweccbytes) {
966 int ecccnt = oobsel->eccbytes;
61b03bd7 967
1da177e4
LT
968 for (i = 0; i < ecccnt; i++) {
969 int idx = oobsel->eccpos[i];
e0c7d767
DW
970 if (oobdata[idx] != oob_buf[oobofs + idx]) {
971 DEBUG(MTD_DEBUG_LEVEL0, "%s: Failed ECC write verify, page 0x%08x, %6i bytes were succesful\n",
972 __FUNCTION__, page, i);
1da177e4
LT
973 goto out;
974 }
975 }
61b03bd7 976 }
1da177e4
LT
977 }
978 oobofs += mtd->oobsize - hweccbytes * eccsteps;
979 page++;
980 numpages--;
981
61b03bd7 982 /* Apply delay or wait for ready/busy pin
1da177e4
LT
983 * Do this before the AUTOINCR check, so no problems
984 * arise if a chip which does auto increment
985 * is marked as NOAUTOINCR by the board driver.
986 * Do this also before returning, so the chip is
987 * ready for the next command.
e0c7d767 988 */
61b03bd7 989 if (!this->dev_ready)
e0c7d767 990 udelay(this->chip_delay);
1da177e4 991 else
3b88775c 992 nand_wait_ready(mtd);
1da177e4
LT
993
994 /* All done, return happy */
995 if (!numpages)
996 return 0;
61b03bd7 997
61b03bd7 998 /* Check, if the chip supports auto page increment */
1da177e4 999 if (!NAND_CANAUTOINCR(this))
e0c7d767 1000 this->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1da177e4 1001 }
61b03bd7 1002 /*
1da177e4
LT
1003 * Terminate the read command. We come here in case of an error
1004 * So we must issue a reset command.
1005 */
e0c7d767
DW
1006 out:
1007 this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1da177e4
LT
1008 return res;
1009}
1010#endif
1011
1012/**
068e3c0a 1013 * nand_read - [MTD Interface] MTD compability function for nand_do_read_ecc
1da177e4
LT
1014 * @mtd: MTD device structure
1015 * @from: offset to read from
1016 * @len: number of bytes to read
1017 * @retlen: pointer to variable to store the number of read bytes
1018 * @buf: the databuffer to put data
1019 *
068e3c0a
DM
1020 * This function simply calls nand_do_read_ecc with oob buffer and oobsel = NULL
1021 * and flags = 0xff
1022 */
58dd8f2b 1023static int nand_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, uint8_t *buf)
1da177e4 1024{
e0c7d767 1025 return nand_do_read_ecc(mtd, from, len, retlen, buf, NULL, &mtd->oobinfo, 0xff);
22c60f5f 1026}
1da177e4 1027
068e3c0a
DM
1028/**
1029 * nand_do_read_ecc - [MTD Interface] Read data with ECC
1030 * @mtd: MTD device structure
1031 * @from: offset to read from
1032 * @len: number of bytes to read
1033 * @retlen: pointer to variable to store the number of read bytes
1034 * @buf: the databuffer to put data
bb75ba4c 1035 * @oob_buf: filesystem supplied oob data buffer (can be NULL)
22c60f5f 1036 * @oobsel: oob selection structure
068e3c0a
DM
1037 * @flags: flag to indicate if nand_get_device/nand_release_device should be preformed
1038 * and how many corrected error bits are acceptable:
1039 * bits 0..7 - number of tolerable errors
1040 * bit 8 - 0 == do not get/release chip, 1 == get/release chip
1041 *
1042 * NAND read with ECC
1043 */
e0c7d767 1044int nand_do_read_ecc(struct mtd_info *mtd, loff_t from, size_t len,
58dd8f2b 1045 size_t *retlen, uint8_t *buf, uint8_t *oob_buf, struct nand_oobinfo *oobsel, int flags)
1da177e4 1046{
22c60f5f 1047
1da177e4
LT
1048 int i, j, col, realpage, page, end, ecc, chipnr, sndcmd = 1;
1049 int read = 0, oob = 0, ecc_status = 0, ecc_failed = 0;
1050 struct nand_chip *this = mtd->priv;
58dd8f2b
TG
1051 uint8_t *data_poi, *oob_data = oob_buf;
1052 uint8_t ecc_calc[32];
1053 uint8_t ecc_code[32];
e0c7d767
DW
1054 int eccmode, eccsteps;
1055 int *oob_config, datidx;
1056 int blockcheck = (1 << (this->phys_erase_shift - this->page_shift)) - 1;
1057 int eccbytes;
1058 int compareecc = 1;
1059 int oobreadlen;
1da177e4 1060
e0c7d767 1061 DEBUG(MTD_DEBUG_LEVEL3, "nand_read_ecc: from = 0x%08x, len = %i\n", (unsigned int)from, (int)len);
1da177e4
LT
1062
1063 /* Do not allow reads past end of device */
1064 if ((from + len) > mtd->size) {
e0c7d767 1065 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_ecc: Attempt read beyond end of device\n");
1da177e4
LT
1066 *retlen = 0;
1067 return -EINVAL;
1068 }
1069
1070 /* Grab the lock and see if the device is available */
068e3c0a 1071 if (flags & NAND_GET_DEVICE)
e0c7d767 1072 nand_get_device(this, mtd, FL_READING);
1da177e4 1073
1da177e4
LT
1074 /* Autoplace of oob data ? Use the default placement scheme */
1075 if (oobsel->useecc == MTD_NANDECC_AUTOPLACE)
1076 oobsel = this->autooob;
61b03bd7 1077
6dfc6d25 1078 eccmode = oobsel->useecc ? this->ecc.mode : NAND_ECC_NONE;
1da177e4
LT
1079 oob_config = oobsel->eccpos;
1080
1081 /* Select the NAND device */
1082 chipnr = (int)(from >> this->chip_shift);
1083 this->select_chip(mtd, chipnr);
1084
1085 /* First we calculate the starting page */
e0c7d767 1086 realpage = (int)(from >> this->page_shift);
1da177e4
LT
1087 page = realpage & this->pagemask;
1088
1089 /* Get raw starting column */
28318776 1090 col = from & (mtd->writesize - 1);
1da177e4 1091
28318776 1092 end = mtd->writesize;
6dfc6d25
TG
1093 ecc = this->ecc.size;
1094 eccbytes = this->ecc.bytes;
61b03bd7 1095
1da177e4
LT
1096 if ((eccmode == NAND_ECC_NONE) || (this->options & NAND_HWECC_SYNDROME))
1097 compareecc = 0;
1098
1099 oobreadlen = mtd->oobsize;
61b03bd7 1100 if (this->options & NAND_HWECC_SYNDROME)
1da177e4
LT
1101 oobreadlen -= oobsel->eccbytes;
1102
1103 /* Loop until all data read */
1104 while (read < len) {
61b03bd7 1105
1da177e4 1106 int aligned = (!col && (len - read) >= end);
61b03bd7 1107 /*
1da177e4
LT
1108 * If the read is not page aligned, we have to read into data buffer
1109 * due to ecc, else we read into return buffer direct
1110 */
1111 if (aligned)
1112 data_poi = &buf[read];
61b03bd7 1113 else
1da177e4 1114 data_poi = this->data_buf;
61b03bd7
TG
1115
1116 /* Check, if we have this page in the buffer
1da177e4
LT
1117 *
1118 * FIXME: Make it work when we must provide oob data too,
1119 * check the usage of data_buf oob field
1120 */
1121 if (realpage == this->pagebuf && !oob_buf) {
1122 /* aligned read ? */
1123 if (aligned)
e0c7d767 1124 memcpy(data_poi, this->data_buf, end);
1da177e4
LT
1125 goto readdata;
1126 }
1127
1128 /* Check, if we must send the read command */
1129 if (sndcmd) {
e0c7d767 1130 this->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1da177e4 1131 sndcmd = 0;
61b03bd7 1132 }
1da177e4
LT
1133
1134 /* get oob area, if we have no oob buffer from fs-driver */
90e260c8
TG
1135 if (!oob_buf || oobsel->useecc == MTD_NANDECC_AUTOPLACE ||
1136 oobsel->useecc == MTD_NANDECC_AUTOPL_USR)
1da177e4
LT
1137 oob_data = &this->data_buf[end];
1138
6dfc6d25 1139 eccsteps = this->ecc.steps;
61b03bd7 1140
1da177e4 1141 switch (eccmode) {
e0c7d767
DW
1142 case NAND_ECC_NONE:{
1143 /* No ECC, Read in a page */
1144 static unsigned long lastwhinge = 0;
1145 if ((lastwhinge / HZ) != (jiffies / HZ)) {
1146 printk(KERN_WARNING
1147 "Reading data from NAND FLASH without ECC is not recommended\n");
1148 lastwhinge = jiffies;
1149 }
1150 this->read_buf(mtd, data_poi, end);
1151 break;
1da177e4 1152 }
61b03bd7 1153
1da177e4
LT
1154 case NAND_ECC_SOFT: /* Software ECC 3/256: Read in a page + oob data */
1155 this->read_buf(mtd, data_poi, end);
e0c7d767 1156 for (i = 0, datidx = 0; eccsteps; eccsteps--, i += 3, datidx += ecc)
6dfc6d25 1157 this->ecc.calculate(mtd, &data_poi[datidx], &ecc_calc[i]);
61b03bd7 1158 break;
1da177e4
LT
1159
1160 default:
e0c7d767 1161 for (i = 0, datidx = 0; eccsteps; eccsteps--, i += eccbytes, datidx += ecc) {
6dfc6d25 1162 this->ecc.hwctl(mtd, NAND_ECC_READ);
1da177e4
LT
1163 this->read_buf(mtd, &data_poi[datidx], ecc);
1164
1165 /* HW ecc with syndrome calculation must read the
1166 * syndrome from flash immidiately after the data */
1167 if (!compareecc) {
1168 /* Some hw ecc generators need to know when the
1169 * syndrome is read from flash */
6dfc6d25 1170 this->ecc.hwctl(mtd, NAND_ECC_READSYN);
1da177e4
LT
1171 this->read_buf(mtd, &oob_data[i], eccbytes);
1172 /* We calc error correction directly, it checks the hw
1173 * generator for an error, reads back the syndrome and
1174 * does the error correction on the fly */
6dfc6d25 1175 ecc_status = this->ecc.correct(mtd, &data_poi[datidx], &oob_data[i], &ecc_code[i]);
068e3c0a 1176 if ((ecc_status == -1) || (ecc_status > (flags && 0xff))) {
e0c7d767
DW
1177 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_ecc: "
1178 "Failed ECC read, page 0x%08x on chip %d\n", page, chipnr);
1da177e4
LT
1179 ecc_failed++;
1180 }
1181 } else {
6dfc6d25 1182 this->ecc.calculate(mtd, &data_poi[datidx], &ecc_calc[i]);
61b03bd7 1183 }
1da177e4 1184 }
61b03bd7 1185 break;
1da177e4
LT
1186 }
1187
1188 /* read oobdata */
1189 this->read_buf(mtd, &oob_data[mtd->oobsize - oobreadlen], oobreadlen);
1190
1191 /* Skip ECC check, if not requested (ECC_NONE or HW_ECC with syndromes) */
1192 if (!compareecc)
61b03bd7
TG
1193 goto readoob;
1194
1da177e4
LT
1195 /* Pick the ECC bytes out of the oob data */
1196 for (j = 0; j < oobsel->eccbytes; j++)
1197 ecc_code[j] = oob_data[oob_config[j]];
1198
e0c7d767 1199 /* correct data, if necessary */
6dfc6d25
TG
1200 for (i = 0, j = 0, datidx = 0; i < this->ecc.steps; i++, datidx += ecc) {
1201 ecc_status = this->ecc.correct(mtd, &data_poi[datidx], &ecc_code[j], &ecc_calc[j]);
61b03bd7 1202
1da177e4
LT
1203 /* Get next chunk of ecc bytes */
1204 j += eccbytes;
61b03bd7
TG
1205
1206 /* Check, if we have a fs supplied oob-buffer,
1da177e4
LT
1207 * This is the legacy mode. Used by YAFFS1
1208 * Should go away some day
1209 */
61b03bd7 1210 if (oob_buf && oobsel->useecc == MTD_NANDECC_PLACE) {
1da177e4
LT
1211 int *p = (int *)(&oob_data[mtd->oobsize]);
1212 p[i] = ecc_status;
1213 }
61b03bd7
TG
1214
1215 if ((ecc_status == -1) || (ecc_status > (flags && 0xff))) {
e0c7d767 1216 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_ecc: " "Failed ECC read, page 0x%08x\n", page);
1da177e4
LT
1217 ecc_failed++;
1218 }
61b03bd7 1219 }
1da177e4 1220
e0c7d767 1221 readoob:
1da177e4
LT
1222 /* check, if we have a fs supplied oob-buffer */
1223 if (oob_buf) {
1224 /* without autoplace. Legacy mode used by YAFFS1 */
e0c7d767 1225 switch (oobsel->useecc) {
1da177e4 1226 case MTD_NANDECC_AUTOPLACE:
90e260c8 1227 case MTD_NANDECC_AUTOPL_USR:
1da177e4 1228 /* Walk through the autoplace chunks */
82e1d19f 1229 for (i = 0; oobsel->oobfree[i][1]; i++) {
1da177e4
LT
1230 int from = oobsel->oobfree[i][0];
1231 int num = oobsel->oobfree[i][1];
1232 memcpy(&oob_buf[oob], &oob_data[from], num);
82e1d19f 1233 oob += num;
1da177e4 1234 }
1da177e4
LT
1235 break;
1236 case MTD_NANDECC_PLACE:
1237 /* YAFFS1 legacy mode */
6dfc6d25 1238 oob_data += this->ecc.steps * sizeof(int);
1da177e4
LT
1239 default:
1240 oob_data += mtd->oobsize;
1241 }
1242 }
1243 readdata:
1244 /* Partial page read, transfer data into fs buffer */
61b03bd7 1245 if (!aligned) {
1da177e4
LT
1246 for (j = col; j < end && read < len; j++)
1247 buf[read++] = data_poi[j];
61b03bd7
TG
1248 this->pagebuf = realpage;
1249 } else
28318776 1250 read += mtd->writesize;
1da177e4 1251
61b03bd7 1252 /* Apply delay or wait for ready/busy pin
1da177e4
LT
1253 * Do this before the AUTOINCR check, so no problems
1254 * arise if a chip which does auto increment
1255 * is marked as NOAUTOINCR by the board driver.
e0c7d767 1256 */
61b03bd7 1257 if (!this->dev_ready)
e0c7d767 1258 udelay(this->chip_delay);
1da177e4 1259 else
3b88775c 1260 nand_wait_ready(mtd);
61b03bd7 1261
1da177e4 1262 if (read == len)
61b03bd7 1263 break;
1da177e4
LT
1264
1265 /* For subsequent reads align to page boundary. */
1266 col = 0;
1267 /* Increment page address */
1268 realpage++;
1269
1270 page = realpage & this->pagemask;
1271 /* Check, if we cross a chip boundary */
1272 if (!page) {
1273 chipnr++;
1274 this->select_chip(mtd, -1);
1275 this->select_chip(mtd, chipnr);
1276 }
61b03bd7
TG
1277 /* Check, if the chip supports auto page increment
1278 * or if we have hit a block boundary.
e0c7d767 1279 */
1da177e4 1280 if (!NAND_CANAUTOINCR(this) || !(page & blockcheck))
61b03bd7 1281 sndcmd = 1;
1da177e4
LT
1282 }
1283
1284 /* Deselect and wake up anyone waiting on the device */
068e3c0a
DM
1285 if (flags & NAND_GET_DEVICE)
1286 nand_release_device(mtd);
1da177e4
LT
1287
1288 /*
1289 * Return success, if no ECC failures, else -EBADMSG
1290 * fs driver will take care of that, because
1291 * retlen == desired len and result == -EBADMSG
1292 */
1293 *retlen = read;
1294 return ecc_failed ? -EBADMSG : 0;
1295}
1296
1297/**
1298 * nand_read_oob - [MTD Interface] NAND read out-of-band
1299 * @mtd: MTD device structure
1300 * @from: offset to read from
1301 * @len: number of bytes to read
1302 * @retlen: pointer to variable to store the number of read bytes
1303 * @buf: the databuffer to put data
1304 *
1305 * NAND read out-of-band data from the spare area
1306 */
58dd8f2b 1307static int nand_read_oob(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, uint8_t *buf)
1da177e4
LT
1308{
1309 int i, col, page, chipnr;
1310 struct nand_chip *this = mtd->priv;
e0c7d767 1311 int blockcheck = (1 << (this->phys_erase_shift - this->page_shift)) - 1;
1da177e4 1312
e0c7d767 1313 DEBUG(MTD_DEBUG_LEVEL3, "nand_read_oob: from = 0x%08x, len = %i\n", (unsigned int)from, (int)len);
1da177e4
LT
1314
1315 /* Shift to get page */
1316 page = (int)(from >> this->page_shift);
1317 chipnr = (int)(from >> this->chip_shift);
61b03bd7 1318
1da177e4
LT
1319 /* Mask to get column */
1320 col = from & (mtd->oobsize - 1);
1321
1322 /* Initialize return length value */
1323 *retlen = 0;
1324
1325 /* Do not allow reads past end of device */
1326 if ((from + len) > mtd->size) {
e0c7d767 1327 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: Attempt read beyond end of device\n");
1da177e4
LT
1328 *retlen = 0;
1329 return -EINVAL;
1330 }
1331
1332 /* Grab the lock and see if the device is available */
e0c7d767 1333 nand_get_device(this, mtd, FL_READING);
1da177e4
LT
1334
1335 /* Select the NAND device */
1336 this->select_chip(mtd, chipnr);
1337
1338 /* Send the read command */
e0c7d767 1339 this->cmdfunc(mtd, NAND_CMD_READOOB, col, page & this->pagemask);
61b03bd7 1340 /*
1da177e4
LT
1341 * Read the data, if we read more than one page
1342 * oob data, let the device transfer the data !
1343 */
1344 i = 0;
1345 while (i < len) {
1346 int thislen = mtd->oobsize - col;
1347 thislen = min_t(int, thislen, len);
1348 this->read_buf(mtd, &buf[i], thislen);
1349 i += thislen;
1da177e4
LT
1350
1351 /* Read more ? */
1352 if (i < len) {
1353 page++;
1354 col = 0;
1355
1356 /* Check, if we cross a chip boundary */
1357 if (!(page & this->pagemask)) {
1358 chipnr++;
1359 this->select_chip(mtd, -1);
1360 this->select_chip(mtd, chipnr);
1361 }
61b03bd7
TG
1362
1363 /* Apply delay or wait for ready/busy pin
19870da7
TG
1364 * Do this before the AUTOINCR check, so no problems
1365 * arise if a chip which does auto increment
1366 * is marked as NOAUTOINCR by the board driver.
1367 */
61b03bd7 1368 if (!this->dev_ready)
e0c7d767 1369 udelay(this->chip_delay);
19870da7
TG
1370 else
1371 nand_wait_ready(mtd);
1372
61b03bd7
TG
1373 /* Check, if the chip supports auto page increment
1374 * or if we have hit a block boundary.
e0c7d767 1375 */
1da177e4
LT
1376 if (!NAND_CANAUTOINCR(this) || !(page & blockcheck)) {
1377 /* For subsequent page reads set offset to 0 */
e0c7d767 1378 this->cmdfunc(mtd, NAND_CMD_READOOB, 0x0, page & this->pagemask);
1da177e4
LT
1379 }
1380 }
1381 }
1382
1383 /* Deselect and wake up anyone waiting on the device */
1384 nand_release_device(mtd);
1385
1386 /* Return happy */
1387 *retlen = len;
1388 return 0;
1389}
1390
1391/**
1392 * nand_read_raw - [GENERIC] Read raw data including oob into buffer
1393 * @mtd: MTD device structure
1394 * @buf: temporary buffer
1395 * @from: offset to read from
1396 * @len: number of bytes to read
1397 * @ooblen: number of oob data bytes to read
1398 *
1399 * Read raw data including oob into buffer
1400 */
e0c7d767 1401int nand_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t from, size_t len, size_t ooblen)
1da177e4
LT
1402{
1403 struct nand_chip *this = mtd->priv;
e0c7d767
DW
1404 int page = (int)(from >> this->page_shift);
1405 int chip = (int)(from >> this->chip_shift);
1da177e4
LT
1406 int sndcmd = 1;
1407 int cnt = 0;
28318776 1408 int pagesize = mtd->writesize + mtd->oobsize;
e0c7d767 1409 int blockcheck = (1 << (this->phys_erase_shift - this->page_shift)) - 1;
1da177e4
LT
1410
1411 /* Do not allow reads past end of device */
1412 if ((from + len) > mtd->size) {
e0c7d767 1413 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_raw: Attempt read beyond end of device\n");
1da177e4
LT
1414 return -EINVAL;
1415 }
1416
1417 /* Grab the lock and see if the device is available */
e0c7d767 1418 nand_get_device(this, mtd, FL_READING);
1da177e4 1419
e0c7d767 1420 this->select_chip(mtd, chip);
61b03bd7 1421
1da177e4
LT
1422 /* Add requested oob length */
1423 len += ooblen;
61b03bd7 1424
1da177e4
LT
1425 while (len) {
1426 if (sndcmd)
e0c7d767 1427 this->cmdfunc(mtd, NAND_CMD_READ0, 0, page & this->pagemask);
61b03bd7 1428 sndcmd = 0;
1da177e4 1429
e0c7d767 1430 this->read_buf(mtd, &buf[cnt], pagesize);
1da177e4
LT
1431
1432 len -= pagesize;
1433 cnt += pagesize;
1434 page++;
61b03bd7
TG
1435
1436 if (!this->dev_ready)
e0c7d767 1437 udelay(this->chip_delay);
1da177e4 1438 else
3b88775c 1439 nand_wait_ready(mtd);
61b03bd7
TG
1440
1441 /* Check, if the chip supports auto page increment */
1da177e4
LT
1442 if (!NAND_CANAUTOINCR(this) || !(page & blockcheck))
1443 sndcmd = 1;
1444 }
1445
1446 /* Deselect and wake up anyone waiting on the device */
1447 nand_release_device(mtd);
1448 return 0;
1449}
1450
9223a456
TG
1451/**
1452 * nand_write_raw - [GENERIC] Write raw data including oob
1453 * @mtd: MTD device structure
1454 * @buf: source buffer
1455 * @to: offset to write to
1456 * @len: number of bytes to write
1457 * @buf: source buffer
1458 * @oob: oob buffer
1459 *
1460 * Write raw data including oob
1461 */
1462int nand_write_raw(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
1463 uint8_t *buf, uint8_t *oob)
1464{
1465 struct nand_chip *this = mtd->priv;
1466 int page = (int)(to >> this->page_shift);
1467 int chip = (int)(to >> this->chip_shift);
1468 int ret;
1469
1470 *retlen = 0;
1471
1472 /* Do not allow writes past end of device */
1473 if ((to + len) > mtd->size) {
1474 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_raw: Attempt write "
1475 "beyond end of device\n");
1476 return -EINVAL;
1477 }
1478
1479 /* Grab the lock and see if the device is available */
1480 nand_get_device(this, mtd, FL_WRITING);
1481
1482 this->select_chip(mtd, chip);
1483 this->data_poi = buf;
1484
1485 while (len != *retlen) {
1486 ret = nand_write_page(mtd, this, page, oob, &mtd->oobinfo, 0);
1487 if (ret)
1488 return ret;
1489 page++;
1490 *retlen += mtd->writesize;
1491 this->data_poi += mtd->writesize;
1492 oob += mtd->oobsize;
1493 }
1494
1495 /* Deselect and wake up anyone waiting on the device */
1496 nand_release_device(mtd);
1497 return 0;
1498}
3821720d 1499EXPORT_SYMBOL_GPL(nand_write_raw);
9223a456 1500
61b03bd7
TG
1501/**
1502 * nand_prepare_oobbuf - [GENERIC] Prepare the out of band buffer
1da177e4
LT
1503 * @mtd: MTD device structure
1504 * @fsbuf: buffer given by fs driver
1505 * @oobsel: out of band selection structre
1506 * @autoplace: 1 = place given buffer into the oob bytes
1507 * @numpages: number of pages to prepare
1508 *
1509 * Return:
1510 * 1. Filesystem buffer available and autoplacement is off,
1511 * return filesystem buffer
1512 * 2. No filesystem buffer or autoplace is off, return internal
1513 * buffer
1514 * 3. Filesystem buffer is given and autoplace selected
1515 * put data from fs buffer into internal buffer and
1516 * retrun internal buffer
1517 *
1518 * Note: The internal buffer is filled with 0xff. This must
1519 * be done only once, when no autoplacement happens
1520 * Autoplacement sets the buffer dirty flag, which
1521 * forces the 0xff fill before using the buffer again.
1522 *
1523*/
58dd8f2b 1524static uint8_t *nand_prepare_oobbuf(struct mtd_info *mtd, uint8_t *fsbuf, struct nand_oobinfo *oobsel,
e0c7d767 1525 int autoplace, int numpages)
1da177e4
LT
1526{
1527 struct nand_chip *this = mtd->priv;
1528 int i, len, ofs;
1529
1530 /* Zero copy fs supplied buffer */
61b03bd7 1531 if (fsbuf && !autoplace)
1da177e4
LT
1532 return fsbuf;
1533
1534 /* Check, if the buffer must be filled with ff again */
61b03bd7 1535 if (this->oobdirty) {
e0c7d767 1536 memset(this->oob_buf, 0xff, mtd->oobsize << (this->phys_erase_shift - this->page_shift));
1da177e4 1537 this->oobdirty = 0;
61b03bd7
TG
1538 }
1539
1da177e4
LT
1540 /* If we have no autoplacement or no fs buffer use the internal one */
1541 if (!autoplace || !fsbuf)
1542 return this->oob_buf;
61b03bd7 1543
1da177e4
LT
1544 /* Walk through the pages and place the data */
1545 this->oobdirty = 1;
1546 ofs = 0;
1547 while (numpages--) {
1548 for (i = 0, len = 0; len < mtd->oobavail; i++) {
1549 int to = ofs + oobsel->oobfree[i][0];
1550 int num = oobsel->oobfree[i][1];
e0c7d767 1551 memcpy(&this->oob_buf[to], fsbuf, num);
1da177e4
LT
1552 len += num;
1553 fsbuf += num;
1554 }
1555 ofs += mtd->oobavail;
1556 }
1557 return this->oob_buf;
1558}
1559
28318776 1560#define NOTALIGNED(x) (x & (mtd->writesize-1)) != 0
1da177e4
LT
1561
1562/**
9223a456 1563 * nand_write - [MTD Interface] NAND write with ECC
1da177e4
LT
1564 * @mtd: MTD device structure
1565 * @to: offset to write to
1566 * @len: number of bytes to write
1567 * @retlen: pointer to variable to store the number of written bytes
1568 * @buf: the data to write
1da177e4
LT
1569 *
1570 * NAND write with ECC
1571 */
9223a456
TG
1572static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
1573 size_t *retlen, const uint8_t *buf)
1da177e4
LT
1574{
1575 int startpage, page, ret = -EIO, oob = 0, written = 0, chipnr;
1576 int autoplace = 0, numpages, totalpages;
1577 struct nand_chip *this = mtd->priv;
9223a456 1578 uint8_t *oobbuf, *bufstart, *eccbuf = NULL;
e0c7d767 1579 int ppblock = (1 << (this->phys_erase_shift - this->page_shift));
9223a456 1580 struct nand_oobinfo *oobsel = &mtd->oobinfo;
1da177e4 1581
9223a456 1582 DEBUG(MTD_DEBUG_LEVEL3, "nand_write: to = 0x%08x, len = %i\n", (unsigned int)to, (int)len);
1da177e4
LT
1583
1584 /* Initialize retlen, in case of early exit */
1585 *retlen = 0;
1586
1587 /* Do not allow write past end of device */
1588 if ((to + len) > mtd->size) {
9223a456 1589 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: Attempt to write past end of page\n");
1da177e4
LT
1590 return -EINVAL;
1591 }
1592
61b03bd7 1593 /* reject writes, which are not page aligned */
e0c7d767 1594 if (NOTALIGNED(to) || NOTALIGNED(len)) {
9223a456 1595 printk(KERN_NOTICE "nand_write: Attempt to write not page aligned data\n");
1da177e4
LT
1596 return -EINVAL;
1597 }
1598
1599 /* Grab the lock and see if the device is available */
e0c7d767 1600 nand_get_device(this, mtd, FL_WRITING);
1da177e4
LT
1601
1602 /* Calculate chipnr */
1603 chipnr = (int)(to >> this->chip_shift);
1604 /* Select the NAND device */
1605 this->select_chip(mtd, chipnr);
1606
1607 /* Check, if it is write protected */
1608 if (nand_check_wp(mtd))
1609 goto out;
1610
1da177e4
LT
1611 /* Autoplace of oob data ? Use the default placement scheme */
1612 if (oobsel->useecc == MTD_NANDECC_AUTOPLACE) {
1613 oobsel = this->autooob;
1614 autoplace = 1;
61b03bd7 1615 }
90e260c8
TG
1616 if (oobsel->useecc == MTD_NANDECC_AUTOPL_USR)
1617 autoplace = 1;
1da177e4
LT
1618
1619 /* Setup variables and oob buffer */
1620 totalpages = len >> this->page_shift;
e0c7d767 1621 page = (int)(to >> this->page_shift);
1da177e4 1622 /* Invalidate the page cache, if we write to the cached page */
61b03bd7 1623 if (page <= this->pagebuf && this->pagebuf < (page + totalpages))
1da177e4 1624 this->pagebuf = -1;
61b03bd7 1625
1da177e4
LT
1626 /* Set it relative to chip */
1627 page &= this->pagemask;
1628 startpage = page;
1629 /* Calc number of pages we can write in one go */
e0c7d767
DW
1630 numpages = min(ppblock - (startpage & (ppblock - 1)), totalpages);
1631 oobbuf = nand_prepare_oobbuf(mtd, eccbuf, oobsel, autoplace, numpages);
58dd8f2b 1632 bufstart = (uint8_t *) buf;
1da177e4
LT
1633
1634 /* Loop until all data is written */
1635 while (written < len) {
1636
58dd8f2b 1637 this->data_poi = (uint8_t *) &buf[written];
1da177e4
LT
1638 /* Write one page. If this is the last page to write
1639 * or the last page in this block, then use the
1640 * real pageprogram command, else select cached programming
1641 * if supported by the chip.
1642 */
e0c7d767 1643 ret = nand_write_page(mtd, this, page, &oobbuf[oob], oobsel, (--numpages > 0));
1da177e4 1644 if (ret) {
9223a456 1645 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: write_page failed %d\n", ret);
1da177e4 1646 goto out;
61b03bd7 1647 }
1da177e4
LT
1648 /* Next oob page */
1649 oob += mtd->oobsize;
1650 /* Update written bytes count */
28318776 1651 written += mtd->writesize;
61b03bd7 1652 if (written == len)
1da177e4 1653 goto cmp;
61b03bd7 1654
1da177e4
LT
1655 /* Increment page address */
1656 page++;
1657
1658 /* Have we hit a block boundary ? Then we have to verify and
1659 * if verify is ok, we have to setup the oob buffer for
1660 * the next pages.
e0c7d767
DW
1661 */
1662 if (!(page & (ppblock - 1))) {
1da177e4
LT
1663 int ofs;
1664 this->data_poi = bufstart;
e0c7d767
DW
1665 ret = nand_verify_pages(mtd, this, startpage, page - startpage,
1666 oobbuf, oobsel, chipnr, (eccbuf != NULL));
1da177e4 1667 if (ret) {
9223a456 1668 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: verify_pages failed %d\n", ret);
1da177e4 1669 goto out;
61b03bd7 1670 }
1da177e4
LT
1671 *retlen = written;
1672
1673 ofs = autoplace ? mtd->oobavail : mtd->oobsize;
1674 if (eccbuf)
1675 eccbuf += (page - startpage) * ofs;
1676 totalpages -= page - startpage;
e0c7d767 1677 numpages = min(totalpages, ppblock);
1da177e4
LT
1678 page &= this->pagemask;
1679 startpage = page;
e0c7d767 1680 oobbuf = nand_prepare_oobbuf(mtd, eccbuf, oobsel, autoplace, numpages);
868801e5 1681 oob = 0;
1da177e4
LT
1682 /* Check, if we cross a chip boundary */
1683 if (!page) {
1684 chipnr++;
1685 this->select_chip(mtd, -1);
1686 this->select_chip(mtd, chipnr);
1687 }
1688 }
1689 }
1690 /* Verify the remaining pages */
e0c7d767 1691 cmp:
1da177e4 1692 this->data_poi = bufstart;
e0c7d767 1693 ret = nand_verify_pages(mtd, this, startpage, totalpages, oobbuf, oobsel, chipnr, (eccbuf != NULL));
1da177e4
LT
1694 if (!ret)
1695 *retlen = written;
61b03bd7 1696 else
9223a456 1697 DEBUG(MTD_DEBUG_LEVEL0, "nand_write: verify_pages failed %d\n", ret);
1da177e4 1698
e0c7d767 1699 out:
1da177e4
LT
1700 /* Deselect and wake up anyone waiting on the device */
1701 nand_release_device(mtd);
1702
1703 return ret;
1704}
1705
1da177e4
LT
1706/**
1707 * nand_write_oob - [MTD Interface] NAND write out-of-band
1708 * @mtd: MTD device structure
1709 * @to: offset to write to
1710 * @len: number of bytes to write
1711 * @retlen: pointer to variable to store the number of written bytes
1712 * @buf: the data to write
1713 *
1714 * NAND write out-of-band
1715 */
58dd8f2b 1716static int nand_write_oob(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const uint8_t *buf)
1da177e4
LT
1717{
1718 int column, page, status, ret = -EIO, chipnr;
1719 struct nand_chip *this = mtd->priv;
1720
e0c7d767 1721 DEBUG(MTD_DEBUG_LEVEL3, "nand_write_oob: to = 0x%08x, len = %i\n", (unsigned int)to, (int)len);
1da177e4
LT
1722
1723 /* Shift to get page */
e0c7d767
DW
1724 page = (int)(to >> this->page_shift);
1725 chipnr = (int)(to >> this->chip_shift);
1da177e4
LT
1726
1727 /* Mask to get column */
1728 column = to & (mtd->oobsize - 1);
1729
1730 /* Initialize return length value */
1731 *retlen = 0;
1732
1733 /* Do not allow write past end of page */
1734 if ((column + len) > mtd->oobsize) {
e0c7d767 1735 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: Attempt to write past end of page\n");
1da177e4
LT
1736 return -EINVAL;
1737 }
1738
1739 /* Grab the lock and see if the device is available */
e0c7d767 1740 nand_get_device(this, mtd, FL_WRITING);
1da177e4
LT
1741
1742 /* Select the NAND device */
1743 this->select_chip(mtd, chipnr);
1744
1745 /* Reset the chip. Some chips (like the Toshiba TC5832DC found
1746 in one of my DiskOnChip 2000 test units) will clear the whole
1747 data page too if we don't do this. I have no clue why, but
1748 I seem to have 'fixed' it in the doc2000 driver in
1749 August 1999. dwmw2. */
1750 this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1751
1752 /* Check, if it is write protected */
1753 if (nand_check_wp(mtd))
1754 goto out;
61b03bd7 1755
1da177e4
LT
1756 /* Invalidate the page cache, if we write to the cached page */
1757 if (page == this->pagebuf)
1758 this->pagebuf = -1;
1759
1760 if (NAND_MUST_PAD(this)) {
1761 /* Write out desired data */
28318776 1762 this->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page & this->pagemask);
1da177e4
LT
1763 /* prepad 0xff for partial programming */
1764 this->write_buf(mtd, ffchars, column);
1765 /* write data */
1766 this->write_buf(mtd, buf, len);
1767 /* postpad 0xff for partial programming */
e0c7d767 1768 this->write_buf(mtd, ffchars, mtd->oobsize - (len + column));
1da177e4
LT
1769 } else {
1770 /* Write out desired data */
28318776 1771 this->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize + column, page & this->pagemask);
1da177e4
LT
1772 /* write data */
1773 this->write_buf(mtd, buf, len);
1774 }
1775 /* Send command to program the OOB data */
e0c7d767 1776 this->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
1da177e4 1777
e0c7d767 1778 status = this->waitfunc(mtd, this, FL_WRITING);
1da177e4
LT
1779
1780 /* See if device thinks it succeeded */
a4ab4c5d 1781 if (status & NAND_STATUS_FAIL) {
e0c7d767 1782 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write, page 0x%08x\n", page);
1da177e4
LT
1783 ret = -EIO;
1784 goto out;
1785 }
1786 /* Return happy */
1787 *retlen = len;
1788
1789#ifdef CONFIG_MTD_NAND_VERIFY_WRITE
1790 /* Send command to read back the data */
e0c7d767 1791 this->cmdfunc(mtd, NAND_CMD_READOOB, column, page & this->pagemask);
1da177e4
LT
1792
1793 if (this->verify_buf(mtd, buf, len)) {
e0c7d767 1794 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write verify, page 0x%08x\n", page);
1da177e4
LT
1795 ret = -EIO;
1796 goto out;
1797 }
1798#endif
1799 ret = 0;
e0c7d767 1800 out:
1da177e4
LT
1801 /* Deselect and wake up anyone waiting on the device */
1802 nand_release_device(mtd);
1803
1804 return ret;
1805}
1806
1da177e4
LT
1807/**
1808 * single_erease_cmd - [GENERIC] NAND standard block erase command function
1809 * @mtd: MTD device structure
1810 * @page: the page address of the block which will be erased
1811 *
1812 * Standard erase command for NAND chips
1813 */
e0c7d767 1814static void single_erase_cmd(struct mtd_info *mtd, int page)
1da177e4
LT
1815{
1816 struct nand_chip *this = mtd->priv;
1817 /* Send commands to erase a block */
e0c7d767
DW
1818 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
1819 this->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
1da177e4
LT
1820}
1821
1822/**
1823 * multi_erease_cmd - [GENERIC] AND specific block erase command function
1824 * @mtd: MTD device structure
1825 * @page: the page address of the block which will be erased
1826 *
1827 * AND multi block erase command function
1828 * Erase 4 consecutive blocks
1829 */
e0c7d767 1830static void multi_erase_cmd(struct mtd_info *mtd, int page)
1da177e4
LT
1831{
1832 struct nand_chip *this = mtd->priv;
1833 /* Send commands to erase a block */
e0c7d767
DW
1834 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
1835 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
1836 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page++);
1837 this->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
1838 this->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
1da177e4
LT
1839}
1840
1841/**
1842 * nand_erase - [MTD Interface] erase block(s)
1843 * @mtd: MTD device structure
1844 * @instr: erase instruction
1845 *
1846 * Erase one ore more blocks
1847 */
e0c7d767 1848static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
1da177e4 1849{
e0c7d767 1850 return nand_erase_nand(mtd, instr, 0);
1da177e4 1851}
61b03bd7 1852
30f464b7 1853#define BBT_PAGE_MASK 0xffffff3f
1da177e4
LT
1854/**
1855 * nand_erase_intern - [NAND Interface] erase block(s)
1856 * @mtd: MTD device structure
1857 * @instr: erase instruction
1858 * @allowbbt: allow erasing the bbt area
1859 *
1860 * Erase one ore more blocks
1861 */
e0c7d767 1862int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, int allowbbt)
1da177e4
LT
1863{
1864 int page, len, status, pages_per_block, ret, chipnr;
1865 struct nand_chip *this = mtd->priv;
30f464b7
DM
1866 int rewrite_bbt[NAND_MAX_CHIPS]={0}; /* flags to indicate the page, if bbt needs to be rewritten. */
1867 unsigned int bbt_masked_page; /* bbt mask to compare to page being erased. */
1868 /* It is used to see if the current page is in the same */
1869 /* 256 block group and the same bank as the bbt. */
1da177e4 1870
e0c7d767 1871 DEBUG(MTD_DEBUG_LEVEL3, "nand_erase: start = 0x%08x, len = %i\n", (unsigned int)instr->addr, (unsigned int)instr->len);
1da177e4
LT
1872
1873 /* Start address must align on block boundary */
1874 if (instr->addr & ((1 << this->phys_erase_shift) - 1)) {
e0c7d767 1875 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Unaligned address\n");
1da177e4
LT
1876 return -EINVAL;
1877 }
1878
1879 /* Length must align on block boundary */
1880 if (instr->len & ((1 << this->phys_erase_shift) - 1)) {
e0c7d767 1881 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Length not block aligned\n");
1da177e4
LT
1882 return -EINVAL;
1883 }
1884
1885 /* Do not allow erase past end of device */
1886 if ((instr->len + instr->addr) > mtd->size) {
e0c7d767 1887 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Erase past end of device\n");
1da177e4
LT
1888 return -EINVAL;
1889 }
1890
1891 instr->fail_addr = 0xffffffff;
1892
1893 /* Grab the lock and see if the device is available */
e0c7d767 1894 nand_get_device(this, mtd, FL_ERASING);
1da177e4
LT
1895
1896 /* Shift to get first page */
e0c7d767
DW
1897 page = (int)(instr->addr >> this->page_shift);
1898 chipnr = (int)(instr->addr >> this->chip_shift);
1da177e4
LT
1899
1900 /* Calculate pages in each block */
1901 pages_per_block = 1 << (this->phys_erase_shift - this->page_shift);
1902
1903 /* Select the NAND device */
1904 this->select_chip(mtd, chipnr);
1905
1906 /* Check the WP bit */
1907 /* Check, if it is write protected */
1908 if (nand_check_wp(mtd)) {
e0c7d767 1909 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: Device is write protected!!!\n");
1da177e4
LT
1910 instr->state = MTD_ERASE_FAILED;
1911 goto erase_exit;
1912 }
1913
30f464b7
DM
1914 /* if BBT requires refresh, set the BBT page mask to see if the BBT should be rewritten */
1915 if (this->options & BBT_AUTO_REFRESH) {
1916 bbt_masked_page = this->bbt_td->pages[chipnr] & BBT_PAGE_MASK;
1917 } else {
1918 bbt_masked_page = 0xffffffff; /* should not match anything */
1919 }
1920
1da177e4
LT
1921 /* Loop through the pages */
1922 len = instr->len;
1923
1924 instr->state = MTD_ERASING;
1925
1926 while (len) {
1927 /* Check if we have a bad block, we do not erase bad blocks ! */
1928 if (nand_block_checkbad(mtd, ((loff_t) page) << this->page_shift, 0, allowbbt)) {
e0c7d767 1929 printk(KERN_WARNING "nand_erase: attempt to erase a bad block at page 0x%08x\n", page);
1da177e4
LT
1930 instr->state = MTD_ERASE_FAILED;
1931 goto erase_exit;
1932 }
61b03bd7
TG
1933
1934 /* Invalidate the page cache, if we erase the block which contains
1da177e4
LT
1935 the current cached page */
1936 if (page <= this->pagebuf && this->pagebuf < (page + pages_per_block))
1937 this->pagebuf = -1;
1938
e0c7d767 1939 this->erase_cmd(mtd, page & this->pagemask);
61b03bd7 1940
e0c7d767 1941 status = this->waitfunc(mtd, this, FL_ERASING);
1da177e4 1942
068e3c0a
DM
1943 /* See if operation failed and additional status checks are available */
1944 if ((status & NAND_STATUS_FAIL) && (this->errstat)) {
1945 status = this->errstat(mtd, this, FL_ERASING, status, page);
1946 }
1947
1da177e4 1948 /* See if block erase succeeded */
a4ab4c5d 1949 if (status & NAND_STATUS_FAIL) {
e0c7d767 1950 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase: " "Failed erase, page 0x%08x\n", page);
1da177e4
LT
1951 instr->state = MTD_ERASE_FAILED;
1952 instr->fail_addr = (page << this->page_shift);
1953 goto erase_exit;
1954 }
30f464b7
DM
1955
1956 /* if BBT requires refresh, set the BBT rewrite flag to the page being erased */
1957 if (this->options & BBT_AUTO_REFRESH) {
61b03bd7 1958 if (((page & BBT_PAGE_MASK) == bbt_masked_page) &&
30f464b7
DM
1959 (page != this->bbt_td->pages[chipnr])) {
1960 rewrite_bbt[chipnr] = (page << this->page_shift);
1961 }
1962 }
61b03bd7 1963
1da177e4
LT
1964 /* Increment page address and decrement length */
1965 len -= (1 << this->phys_erase_shift);
1966 page += pages_per_block;
1967
1968 /* Check, if we cross a chip boundary */
1969 if (len && !(page & this->pagemask)) {
1970 chipnr++;
1971 this->select_chip(mtd, -1);
1972 this->select_chip(mtd, chipnr);
30f464b7 1973
61b03bd7 1974 /* if BBT requires refresh and BBT-PERCHIP,
30f464b7
DM
1975 * set the BBT page mask to see if this BBT should be rewritten */
1976 if ((this->options & BBT_AUTO_REFRESH) && (this->bbt_td->options & NAND_BBT_PERCHIP)) {
1977 bbt_masked_page = this->bbt_td->pages[chipnr] & BBT_PAGE_MASK;
1978 }
1979
1da177e4
LT
1980 }
1981 }
1982 instr->state = MTD_ERASE_DONE;
1983
e0c7d767 1984 erase_exit:
1da177e4
LT
1985
1986 ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
1987 /* Do call back function */
1988 if (!ret)
1989 mtd_erase_callback(instr);
1990
1991 /* Deselect and wake up anyone waiting on the device */
1992 nand_release_device(mtd);
1993
30f464b7
DM
1994 /* if BBT requires refresh and erase was successful, rewrite any selected bad block tables */
1995 if ((this->options & BBT_AUTO_REFRESH) && (!ret)) {
1996 for (chipnr = 0; chipnr < this->numchips; chipnr++) {
1997 if (rewrite_bbt[chipnr]) {
1998 /* update the BBT for chip */
e0c7d767
DW
1999 DEBUG(MTD_DEBUG_LEVEL0, "nand_erase_nand: nand_update_bbt (%d:0x%0x 0x%0x)\n",
2000 chipnr, rewrite_bbt[chipnr], this->bbt_td->pages[chipnr]);
2001 nand_update_bbt(mtd, rewrite_bbt[chipnr]);
30f464b7
DM
2002 }
2003 }
2004 }
2005
1da177e4
LT
2006 /* Return more or less happy */
2007 return ret;
2008}
2009
2010/**
2011 * nand_sync - [MTD Interface] sync
2012 * @mtd: MTD device structure
2013 *
2014 * Sync is actually a wait for chip ready function
2015 */
e0c7d767 2016static void nand_sync(struct mtd_info *mtd)
1da177e4
LT
2017{
2018 struct nand_chip *this = mtd->priv;
2019
e0c7d767 2020 DEBUG(MTD_DEBUG_LEVEL3, "nand_sync: called\n");
1da177e4
LT
2021
2022 /* Grab the lock and see if the device is available */
e0c7d767 2023 nand_get_device(this, mtd, FL_SYNCING);
1da177e4 2024 /* Release it and go back */
e0c7d767 2025 nand_release_device(mtd);
1da177e4
LT
2026}
2027
1da177e4
LT
2028/**
2029 * nand_block_isbad - [MTD Interface] Check whether the block at the given offset is bad
2030 * @mtd: MTD device structure
2031 * @ofs: offset relative to mtd start
2032 */
e0c7d767 2033static int nand_block_isbad(struct mtd_info *mtd, loff_t ofs)
1da177e4
LT
2034{
2035 /* Check for invalid offset */
61b03bd7 2036 if (ofs > mtd->size)
1da177e4 2037 return -EINVAL;
61b03bd7 2038
e0c7d767 2039 return nand_block_checkbad(mtd, ofs, 1, 0);
1da177e4
LT
2040}
2041
2042/**
2043 * nand_block_markbad - [MTD Interface] Mark the block at the given offset as bad
2044 * @mtd: MTD device structure
2045 * @ofs: offset relative to mtd start
2046 */
e0c7d767 2047static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
1da177e4
LT
2048{
2049 struct nand_chip *this = mtd->priv;
2050 int ret;
2051
e0c7d767
DW
2052 if ((ret = nand_block_isbad(mtd, ofs))) {
2053 /* If it was bad already, return success and do nothing. */
1da177e4
LT
2054 if (ret > 0)
2055 return 0;
e0c7d767
DW
2056 return ret;
2057 }
1da177e4
LT
2058
2059 return this->block_markbad(mtd, ofs);
2060}
2061
962034f4
VW
2062/**
2063 * nand_suspend - [MTD Interface] Suspend the NAND flash
2064 * @mtd: MTD device structure
2065 */
2066static int nand_suspend(struct mtd_info *mtd)
2067{
2068 struct nand_chip *this = mtd->priv;
2069
e0c7d767 2070 return nand_get_device(this, mtd, FL_PM_SUSPENDED);
962034f4
VW
2071}
2072
2073/**
2074 * nand_resume - [MTD Interface] Resume the NAND flash
2075 * @mtd: MTD device structure
2076 */
2077static void nand_resume(struct mtd_info *mtd)
2078{
2079 struct nand_chip *this = mtd->priv;
2080
2081 if (this->state == FL_PM_SUSPENDED)
2082 nand_release_device(mtd);
2083 else
2c0a2bed
TG
2084 printk(KERN_ERR "nand_resume() called for a chip which is not "
2085 "in suspended state\n");
962034f4
VW
2086}
2087
a36ed299
TG
2088/*
2089 * Free allocated data structures
2090 */
2091static void nand_free_kmem(struct nand_chip *this)
2092{
2093 /* Buffer allocated by nand_scan ? */
2094 if (this->options & NAND_OOBBUF_ALLOC)
2095 kfree(this->oob_buf);
2096 /* Buffer allocated by nand_scan ? */
2097 if (this->options & NAND_DATABUF_ALLOC)
2098 kfree(this->data_buf);
2099 /* Controller allocated by nand_scan ? */
2100 if (this->options & NAND_CONTROLLER_ALLOC)
2101 kfree(this->controller);
2102}
2103
7aa65bfd
TG
2104/*
2105 * Allocate buffers and data structures
1da177e4 2106 */
7aa65bfd 2107static int nand_allocate_kmem(struct mtd_info *mtd, struct nand_chip *this)
1da177e4 2108{
7aa65bfd 2109 size_t len;
1da177e4 2110
7aa65bfd
TG
2111 if (!this->oob_buf) {
2112 len = mtd->oobsize <<
2113 (this->phys_erase_shift - this->page_shift);
2114 this->oob_buf = kmalloc(len, GFP_KERNEL);
2115 if (!this->oob_buf)
2116 goto outerr;
2117 this->options |= NAND_OOBBUF_ALLOC;
552d9205
DW
2118 }
2119
7aa65bfd 2120 if (!this->data_buf) {
4cbb9b80 2121 len = mtd->writesize + mtd->oobsize;
7aa65bfd
TG
2122 this->data_buf = kmalloc(len, GFP_KERNEL);
2123 if (!this->data_buf)
2124 goto outerr;
2125 this->options |= NAND_DATABUF_ALLOC;
2126 }
2127
2128 if (!this->controller) {
2129 this->controller = kzalloc(sizeof(struct nand_hw_control),
2130 GFP_KERNEL);
2131 if (!this->controller)
2132 goto outerr;
2133 this->options |= NAND_CONTROLLER_ALLOC;
2134 }
2135 return 0;
1da177e4 2136
7aa65bfd
TG
2137 outerr:
2138 printk(KERN_ERR "nand_scan(): Cannot allocate buffers\n");
2139 nand_free_kmem(this);
2140 return -ENOMEM;
2141}
2142
2143/*
2144 * Set default functions
2145 */
2146static void nand_set_defaults(struct nand_chip *this, int busw)
2147{
1da177e4
LT
2148 /* check for proper chip_delay setup, set 20us if not */
2149 if (!this->chip_delay)
2150 this->chip_delay = 20;
2151
2152 /* check, if a user supplied command function given */
2153 if (this->cmdfunc == NULL)
2154 this->cmdfunc = nand_command;
2155
2156 /* check, if a user supplied wait function given */
2157 if (this->waitfunc == NULL)
2158 this->waitfunc = nand_wait;
2159
2160 if (!this->select_chip)
2161 this->select_chip = nand_select_chip;
1da177e4
LT
2162 if (!this->read_byte)
2163 this->read_byte = busw ? nand_read_byte16 : nand_read_byte;
1da177e4
LT
2164 if (!this->read_word)
2165 this->read_word = nand_read_word;
2166 if (!this->block_bad)
2167 this->block_bad = nand_block_bad;
2168 if (!this->block_markbad)
2169 this->block_markbad = nand_default_block_markbad;
2170 if (!this->write_buf)
2171 this->write_buf = busw ? nand_write_buf16 : nand_write_buf;
2172 if (!this->read_buf)
2173 this->read_buf = busw ? nand_read_buf16 : nand_read_buf;
2174 if (!this->verify_buf)
2175 this->verify_buf = busw ? nand_verify_buf16 : nand_verify_buf;
2176 if (!this->scan_bbt)
2177 this->scan_bbt = nand_default_bbt;
7aa65bfd
TG
2178}
2179
2180/*
2181 * Get the flash and manufacturer id and lookup if the typ is supported
2182 */
2183static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
2184 struct nand_chip *this,
2185 int busw, int *maf_id)
2186{
2187 struct nand_flash_dev *type = NULL;
2188 int i, dev_id, maf_idx;
1da177e4
LT
2189
2190 /* Select the device */
2191 this->select_chip(mtd, 0);
2192
2193 /* Send the command for reading device ID */
e0c7d767 2194 this->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
1da177e4
LT
2195
2196 /* Read manufacturer and device IDs */
7aa65bfd
TG
2197 *maf_id = this->read_byte(mtd);
2198 dev_id = this->read_byte(mtd);
1da177e4 2199
7aa65bfd 2200 /* Lookup the flash id */
1da177e4 2201 for (i = 0; nand_flash_ids[i].name != NULL; i++) {
7aa65bfd
TG
2202 if (dev_id == nand_flash_ids[i].id) {
2203 type = &nand_flash_ids[i];
2204 break;
2205 }
2206 }
61b03bd7 2207
7aa65bfd
TG
2208 if (!type)
2209 return ERR_PTR(-ENODEV);
2210
2211 this->chipsize = nand_flash_ids[i].chipsize << 20;
2212
2213 /* Newer devices have all the information in additional id bytes */
2214 if (!nand_flash_ids[i].pagesize) {
2215 int extid;
2216 /* The 3rd id byte contains non relevant data ATM */
2217 extid = this->read_byte(mtd);
2218 /* The 4th id byte is the important one */
2219 extid = this->read_byte(mtd);
2220 /* Calc pagesize */
4cbb9b80 2221 mtd->writesize = 1024 << (extid & 0x3);
7aa65bfd
TG
2222 extid >>= 2;
2223 /* Calc oobsize */
4cbb9b80 2224 mtd->oobsize = (8 << (extid & 0x01)) * (mtd->writesize >> 9);
7aa65bfd
TG
2225 extid >>= 2;
2226 /* Calc blocksize. Blocksize is multiples of 64KiB */
2227 mtd->erasesize = (64 * 1024) << (extid & 0x03);
2228 extid >>= 2;
2229 /* Get buswidth information */
2230 busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
61b03bd7 2231
7aa65bfd
TG
2232 } else {
2233 /*
2234 * Old devices have this data hardcoded in the device id table
2235 */
2236 mtd->erasesize = nand_flash_ids[i].erasesize;
4cbb9b80
TG
2237 mtd->writesize = nand_flash_ids[i].pagesize;
2238 mtd->oobsize = mtd->writesize / 32;
7aa65bfd
TG
2239 busw = nand_flash_ids[i].options & NAND_BUSWIDTH_16;
2240 }
1da177e4 2241
7aa65bfd
TG
2242 /* Try to identify manufacturer */
2243 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_id++) {
2244 if (nand_manuf_ids[maf_idx].id == *maf_id)
2245 break;
2246 }
0ea4a755 2247
7aa65bfd
TG
2248 /*
2249 * Check, if buswidth is correct. Hardware drivers should set
2250 * this correct !
2251 */
2252 if (busw != (this->options & NAND_BUSWIDTH_16)) {
2253 printk(KERN_INFO "NAND device: Manufacturer ID:"
2254 " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id,
2255 dev_id, nand_manuf_ids[maf_idx].name, mtd->name);
2256 printk(KERN_WARNING "NAND bus width %d instead %d bit\n",
2257 (this->options & NAND_BUSWIDTH_16) ? 16 : 8,
2258 busw ? 16 : 8);
2259 return ERR_PTR(-EINVAL);
2260 }
61b03bd7 2261
7aa65bfd 2262 /* Calculate the address shift from the page size */
4cbb9b80 2263 this->page_shift = ffs(mtd->writesize) - 1;
7aa65bfd
TG
2264 /* Convert chipsize to number of pages per chip -1. */
2265 this->pagemask = (this->chipsize >> this->page_shift) - 1;
61b03bd7 2266
7aa65bfd
TG
2267 this->bbt_erase_shift = this->phys_erase_shift =
2268 ffs(mtd->erasesize) - 1;
2269 this->chip_shift = ffs(this->chipsize) - 1;
1da177e4 2270
7aa65bfd 2271 /* Set the bad block position */
4cbb9b80 2272 this->badblockpos = mtd->writesize > 512 ?
7aa65bfd 2273 NAND_LARGE_BADBLOCK_POS : NAND_SMALL_BADBLOCK_POS;
61b03bd7 2274
7aa65bfd
TG
2275 /* Get chip options, preserve non chip based options */
2276 this->options &= ~NAND_CHIPOPTIONS_MSK;
2277 this->options |= nand_flash_ids[i].options & NAND_CHIPOPTIONS_MSK;
2278
2279 /*
2280 * Set this as a default. Board drivers can override it, if necessary
2281 */
2282 this->options |= NAND_NO_AUTOINCR;
2283
2284 /* Check if this is a not a samsung device. Do not clear the
2285 * options for chips which are not having an extended id.
2286 */
2287 if (*maf_id != NAND_MFR_SAMSUNG && !nand_flash_ids[i].pagesize)
2288 this->options &= ~NAND_SAMSUNG_LP_OPTIONS;
2289
2290 /* Check for AND chips with 4 page planes */
2291 if (this->options & NAND_4PAGE_ARRAY)
2292 this->erase_cmd = multi_erase_cmd;
2293 else
2294 this->erase_cmd = single_erase_cmd;
2295
2296 /* Do not replace user supplied command function ! */
4cbb9b80 2297 if (mtd->writesize > 512 && this->cmdfunc == nand_command)
7aa65bfd
TG
2298 this->cmdfunc = nand_command_lp;
2299
2300 printk(KERN_INFO "NAND device: Manufacturer ID:"
2301 " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id, dev_id,
2302 nand_manuf_ids[maf_idx].name, type->name);
2303
2304 return type;
2305}
2306
2307/* module_text_address() isn't exported, and it's mostly a pointless
2308 test if this is a module _anyway_ -- they'd have to try _really_ hard
2309 to call us from in-kernel code if the core NAND support is modular. */
2310#ifdef MODULE
2311#define caller_is_module() (1)
2312#else
2313#define caller_is_module() \
2314 module_text_address((unsigned long)__builtin_return_address(0))
2315#endif
2316
2317/**
2318 * nand_scan - [NAND Interface] Scan for the NAND device
2319 * @mtd: MTD device structure
2320 * @maxchips: Number of chips to scan for
2321 *
2322 * This fills out all the uninitialized function pointers
2323 * with the defaults.
2324 * The flash ID is read and the mtd/chip structures are
2325 * filled with the appropriate values. Buffers are allocated if
2326 * they are not provided by the board driver
2327 * The mtd->owner field must be set to the module of the caller
2328 *
2329 */
2330int nand_scan(struct mtd_info *mtd, int maxchips)
2331{
2332 int i, busw, nand_maf_id;
2333 struct nand_chip *this = mtd->priv;
2334 struct nand_flash_dev *type;
2335
2336 /* Many callers got this wrong, so check for it for a while... */
2337 if (!mtd->owner && caller_is_module()) {
2338 printk(KERN_CRIT "nand_scan() called with NULL mtd->owner!\n");
2339 BUG();
1da177e4
LT
2340 }
2341
7aa65bfd
TG
2342 /* Get buswidth to select the correct functions */
2343 busw = this->options & NAND_BUSWIDTH_16;
2344 /* Set the default functions */
2345 nand_set_defaults(this, busw);
2346
2347 /* Read the flash type */
2348 type = nand_get_flash_type(mtd, this, busw, &nand_maf_id);
2349
2350 if (IS_ERR(type)) {
e0c7d767 2351 printk(KERN_WARNING "No NAND device found!!!\n");
1da177e4 2352 this->select_chip(mtd, -1);
7aa65bfd 2353 return PTR_ERR(type);
1da177e4
LT
2354 }
2355
7aa65bfd 2356 /* Check for a chip array */
e0c7d767 2357 for (i = 1; i < maxchips; i++) {
1da177e4 2358 this->select_chip(mtd, i);
1da177e4 2359 /* Send the command for reading device ID */
e0c7d767 2360 this->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
1da177e4
LT
2361 /* Read manufacturer and device IDs */
2362 if (nand_maf_id != this->read_byte(mtd) ||
7aa65bfd 2363 type->id != this->read_byte(mtd))
1da177e4
LT
2364 break;
2365 }
2366 if (i > 1)
2367 printk(KERN_INFO "%d NAND chips detected\n", i);
61b03bd7 2368
1da177e4
LT
2369 /* Store the number of chips and calc total size for mtd */
2370 this->numchips = i;
2371 mtd->size = i * this->chipsize;
7aa65bfd
TG
2372
2373 /* Allocate buffers and data structures */
2374 if (nand_allocate_kmem(mtd, this))
2375 return -ENOMEM;
2376
1da177e4 2377 /* Preset the internal oob buffer */
7aa65bfd
TG
2378 memset(this->oob_buf, 0xff,
2379 mtd->oobsize << (this->phys_erase_shift - this->page_shift));
1da177e4 2380
7aa65bfd
TG
2381 /*
2382 * If no default placement scheme is given, select an appropriate one
2383 */
1da177e4 2384 if (!this->autooob) {
61b03bd7 2385 switch (mtd->oobsize) {
1da177e4
LT
2386 case 8:
2387 this->autooob = &nand_oob_8;
2388 break;
2389 case 16:
2390 this->autooob = &nand_oob_16;
2391 break;
2392 case 64:
2393 this->autooob = &nand_oob_64;
2394 break;
2395 default:
7aa65bfd
TG
2396 printk(KERN_WARNING "No oob scheme defined for "
2397 "oobsize %d\n", mtd->oobsize);
1da177e4
LT
2398 BUG();
2399 }
2400 }
61b03bd7 2401
7aa65bfd
TG
2402 /*
2403 * The number of bytes available for the filesystem to place fs
2404 * dependend oob data
2405 */
998cf640
TG
2406 mtd->oobavail = 0;
2407 for (i = 0; this->autooob->oobfree[i][1]; i++)
2408 mtd->oobavail += this->autooob->oobfree[i][1];
1da177e4 2409
61b03bd7 2410 /*
7aa65bfd
TG
2411 * check ECC mode, default to software if 3byte/512byte hardware ECC is
2412 * selected and we have 256 byte pagesize fallback to software ECC
e0c7d767 2413 */
6dfc6d25
TG
2414 switch (this->ecc.mode) {
2415 case NAND_ECC_HW:
2416 case NAND_ECC_HW_SYNDROME:
2417 if (!this->ecc.calculate || !this->ecc.correct ||
2418 !this->ecc.hwctl) {
2419 printk(KERN_WARNING "No ECC functions supplied, "
2420 "Hardware ECC not possible\n");
2421 BUG();
2422 }
4cbb9b80 2423 if (mtd->writesize >= this->ecc.size)
6dfc6d25
TG
2424 break;
2425 printk(KERN_WARNING "%d byte HW ECC not possible on "
2426 "%d byte page size, fallback to SW ECC\n",
4cbb9b80 2427 this->ecc.size, mtd->writesize);
6dfc6d25 2428 this->ecc.mode = NAND_ECC_SOFT;
61b03bd7 2429
6dfc6d25
TG
2430 case NAND_ECC_SOFT:
2431 this->ecc.calculate = nand_calculate_ecc;
2432 this->ecc.correct = nand_correct_data;
2433 this->ecc.size = 256;
2434 this->ecc.bytes = 3;
1da177e4 2435 break;
61b03bd7
TG
2436
2437 case NAND_ECC_NONE:
7aa65bfd
TG
2438 printk(KERN_WARNING "NAND_ECC_NONE selected by board driver. "
2439 "This is not recommended !!\n");
4cbb9b80 2440 this->ecc.size = mtd->writesize;
6dfc6d25 2441 this->ecc.bytes = 0;
1da177e4 2442 break;
1da177e4 2443 default:
7aa65bfd 2444 printk(KERN_WARNING "Invalid NAND_ECC_MODE %d\n",
6dfc6d25 2445 this->ecc.mode);
61b03bd7 2446 BUG();
1da177e4 2447 }
61b03bd7 2448
7aa65bfd
TG
2449 /*
2450 * Set the number of read / write steps for one page depending on ECC
2451 * mode
2452 */
4cbb9b80
TG
2453 this->ecc.steps = mtd->writesize / this->ecc.size;
2454 if(this->ecc.steps * this->ecc.size != mtd->writesize) {
6dfc6d25
TG
2455 printk(KERN_WARNING "Invalid ecc parameters\n");
2456 BUG();
1da177e4 2457 }
61b03bd7 2458
1da177e4
LT
2459 /* Initialize state, waitqueue and spinlock */
2460 this->state = FL_READY;
a36ed299
TG
2461 init_waitqueue_head(&this->controller->wq);
2462 spin_lock_init(&this->controller->lock);
1da177e4
LT
2463
2464 /* De-select the device */
2465 this->select_chip(mtd, -1);
2466
2467 /* Invalidate the pagebuffer reference */
2468 this->pagebuf = -1;
2469
2470 /* Fill in remaining MTD driver data */
2471 mtd->type = MTD_NANDFLASH;
5fa43394 2472 mtd->flags = MTD_CAP_NANDFLASH;
1da177e4
LT
2473 mtd->ecctype = MTD_ECC_SW;
2474 mtd->erase = nand_erase;
2475 mtd->point = NULL;
2476 mtd->unpoint = NULL;
2477 mtd->read = nand_read;
2478 mtd->write = nand_write;
1da177e4
LT
2479 mtd->read_oob = nand_read_oob;
2480 mtd->write_oob = nand_write_oob;
1da177e4
LT
2481 mtd->sync = nand_sync;
2482 mtd->lock = NULL;
2483 mtd->unlock = NULL;
962034f4
VW
2484 mtd->suspend = nand_suspend;
2485 mtd->resume = nand_resume;
1da177e4
LT
2486 mtd->block_isbad = nand_block_isbad;
2487 mtd->block_markbad = nand_block_markbad;
2488
2489 /* and make the autooob the default one */
2490 memcpy(&mtd->oobinfo, this->autooob, sizeof(mtd->oobinfo));
2491
0040bf38
TG
2492 /* Check, if we should skip the bad block table scan */
2493 if (this->options & NAND_SKIP_BBTSCAN)
2494 return 0;
1da177e4
LT
2495
2496 /* Build bad block table */
e0c7d767 2497 return this->scan_bbt(mtd);
1da177e4
LT
2498}
2499
2500/**
61b03bd7 2501 * nand_release - [NAND Interface] Free resources held by the NAND device
1da177e4
LT
2502 * @mtd: MTD device structure
2503*/
e0c7d767 2504void nand_release(struct mtd_info *mtd)
1da177e4
LT
2505{
2506 struct nand_chip *this = mtd->priv;
2507
2508#ifdef CONFIG_MTD_PARTITIONS
2509 /* Deregister partitions */
e0c7d767 2510 del_mtd_partitions(mtd);
1da177e4
LT
2511#endif
2512 /* Deregister the device */
e0c7d767 2513 del_mtd_device(mtd);
1da177e4 2514
fa671646 2515 /* Free bad block table memory */
e0c7d767 2516 kfree(this->bbt);
a36ed299
TG
2517 /* Free buffers */
2518 nand_free_kmem(this);
1da177e4
LT
2519}
2520
e0c7d767
DW
2521EXPORT_SYMBOL_GPL(nand_scan);
2522EXPORT_SYMBOL_GPL(nand_release);
8fe833c1
RP
2523
2524static int __init nand_base_init(void)
2525{
2526 led_trigger_register_simple("nand-disk", &nand_led_trigger);
2527 return 0;
2528}
2529
2530static void __exit nand_base_exit(void)
2531{
2532 led_trigger_unregister_simple(nand_led_trigger);
2533}
2534
2535module_init(nand_base_init);
2536module_exit(nand_base_exit);
2537
e0c7d767
DW
2538MODULE_LICENSE("GPL");
2539MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>, Thomas Gleixner <tglx@linutronix.de>");
2540MODULE_DESCRIPTION("Generic NAND flash driver code");