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