nand_base.c 117.9 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4
/*
 *  Overview:
 *   This is the generic MTD driver for NAND flash devices. It should be
 *   capable of working with almost all NAND chips currently available.
5
 *
L
Linus Torvalds 已提交
6
 *	Additional technical information is available on
7
 *	http://www.linux-mtd.infradead.org/doc/nand.html
8
 *
L
Linus Torvalds 已提交
9
 *  Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
10
 *		  2002-2006 Thomas Gleixner (tglx@linutronix.de)
L
Linus Torvalds 已提交
11
 *
12
 *  Credits:
13 14
 *	David Woodhouse for adding multichip support
 *
L
Linus Torvalds 已提交
15 16 17
 *	Aleph One Ltd. and Toby Churchill Ltd. for supporting the
 *	rework for 2K page size chips
 *
18
 *  TODO:
L
Linus Torvalds 已提交
19 20
 *	Enable cached programming for 2k page size chips
 *	Check, if mtd->ecctype should be set to MTD_ECC_HW
21
 *	if we have HW ECC support.
22
 *	BBT table is not serialized, has to be fixed
L
Linus Torvalds 已提交
23 24 25 26 27 28 29
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 */

30 31
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

32
#include <linux/module.h>
L
Linus Torvalds 已提交
33 34
#include <linux/delay.h>
#include <linux/errno.h>
T
Thomas Gleixner 已提交
35
#include <linux/err.h>
L
Linus Torvalds 已提交
36 37
#include <linux/sched.h>
#include <linux/slab.h>
38
#include <linux/mm.h>
L
Linus Torvalds 已提交
39 40 41 42
#include <linux/types.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
43
#include <linux/mtd/nand_bch.h>
L
Linus Torvalds 已提交
44 45
#include <linux/interrupt.h>
#include <linux/bitops.h>
46
#include <linux/leds.h>
47
#include <linux/io.h>
L
Linus Torvalds 已提交
48
#include <linux/mtd/partitions.h>
49
#include <linux/of_mtd.h>
L
Linus Torvalds 已提交
50 51

/* Define default oob placement schemes for large and small page devices */
52
static struct nand_ecclayout nand_oob_8 = {
L
Linus Torvalds 已提交
53 54
	.eccbytes = 3,
	.eccpos = {0, 1, 2},
55 56 57 58
	.oobfree = {
		{.offset = 3,
		 .length = 2},
		{.offset = 6,
59
		 .length = 2} }
L
Linus Torvalds 已提交
60 61
};

62
static struct nand_ecclayout nand_oob_16 = {
L
Linus Torvalds 已提交
63 64
	.eccbytes = 6,
	.eccpos = {0, 1, 2, 3, 6, 7},
65 66
	.oobfree = {
		{.offset = 8,
67
		 . length = 8} }
L
Linus Torvalds 已提交
68 69
};

70
static struct nand_ecclayout nand_oob_64 = {
L
Linus Torvalds 已提交
71 72
	.eccbytes = 24,
	.eccpos = {
73 74 75
		   40, 41, 42, 43, 44, 45, 46, 47,
		   48, 49, 50, 51, 52, 53, 54, 55,
		   56, 57, 58, 59, 60, 61, 62, 63},
76 77
	.oobfree = {
		{.offset = 2,
78
		 .length = 38} }
L
Linus Torvalds 已提交
79 80
};

81 82 83 84 85 86 87 88 89 90 91
static struct nand_ecclayout nand_oob_128 = {
	.eccbytes = 48,
	.eccpos = {
		   80, 81, 82, 83, 84, 85, 86, 87,
		   88, 89, 90, 91, 92, 93, 94, 95,
		   96, 97, 98, 99, 100, 101, 102, 103,
		   104, 105, 106, 107, 108, 109, 110, 111,
		   112, 113, 114, 115, 116, 117, 118, 119,
		   120, 121, 122, 123, 124, 125, 126, 127},
	.oobfree = {
		{.offset = 2,
92
		 .length = 78} }
93 94
};

95
static int nand_get_device(struct mtd_info *mtd, int new_state);
L
Linus Torvalds 已提交
96

97 98 99
static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
			     struct mtd_oob_ops *ops);

T
Thomas Gleixner 已提交
100
/*
J
Joe Perches 已提交
101
 * For devices which display every fart in the system on a separate LED. Is
T
Thomas Gleixner 已提交
102 103 104 105
 * compiled away when LED support is disabled.
 */
DEFINE_LED_TRIGGER(nand_led_trigger);

106 107 108
static int check_offs_len(struct mtd_info *mtd,
					loff_t ofs, uint64_t len)
{
109
	struct nand_chip *chip = mtd_to_nand(mtd);
110 111 112
	int ret = 0;

	/* Start address must align on block boundary */
113
	if (ofs & ((1ULL << chip->phys_erase_shift) - 1)) {
114
		pr_debug("%s: unaligned address\n", __func__);
115 116 117 118
		ret = -EINVAL;
	}

	/* Length must align on block boundary */
119
	if (len & ((1ULL << chip->phys_erase_shift) - 1)) {
120
		pr_debug("%s: length not block aligned\n", __func__);
121 122 123 124 125 126
		ret = -EINVAL;
	}

	return ret;
}

L
Linus Torvalds 已提交
127 128
/**
 * nand_release_device - [GENERIC] release chip
129
 * @mtd: MTD device structure
130
 *
131
 * Release chip lock and wake up anyone waiting on the device.
L
Linus Torvalds 已提交
132
 */
133
static void nand_release_device(struct mtd_info *mtd)
L
Linus Torvalds 已提交
134
{
135
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
136

T
Thomas Gleixner 已提交
137
	/* Release the controller and the chip */
138 139 140 141 142
	spin_lock(&chip->controller->lock);
	chip->controller->active = NULL;
	chip->state = FL_READY;
	wake_up(&chip->controller->wq);
	spin_unlock(&chip->controller->lock);
L
Linus Torvalds 已提交
143 144 145 146
}

/**
 * nand_read_byte - [DEFAULT] read one byte from the chip
147
 * @mtd: MTD device structure
L
Linus Torvalds 已提交
148
 *
149
 * Default read function for 8bit buswidth
L
Linus Torvalds 已提交
150
 */
151
static uint8_t nand_read_byte(struct mtd_info *mtd)
L
Linus Torvalds 已提交
152
{
153
	struct nand_chip *chip = mtd_to_nand(mtd);
154
	return readb(chip->IO_ADDR_R);
L
Linus Torvalds 已提交
155 156 157
}

/**
158
 * nand_read_byte16 - [DEFAULT] read one byte endianness aware from the chip
159
 * @mtd: MTD device structure
L
Linus Torvalds 已提交
160
 *
161 162
 * Default read function for 16bit buswidth with endianness conversion.
 *
L
Linus Torvalds 已提交
163
 */
164
static uint8_t nand_read_byte16(struct mtd_info *mtd)
L
Linus Torvalds 已提交
165
{
166
	struct nand_chip *chip = mtd_to_nand(mtd);
167
	return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R));
L
Linus Torvalds 已提交
168 169 170 171
}

/**
 * nand_read_word - [DEFAULT] read one word from the chip
172
 * @mtd: MTD device structure
L
Linus Torvalds 已提交
173
 *
174
 * Default read function for 16bit buswidth without endianness conversion.
L
Linus Torvalds 已提交
175 176 177
 */
static u16 nand_read_word(struct mtd_info *mtd)
{
178
	struct nand_chip *chip = mtd_to_nand(mtd);
179
	return readw(chip->IO_ADDR_R);
L
Linus Torvalds 已提交
180 181 182 183
}

/**
 * nand_select_chip - [DEFAULT] control CE line
184 185
 * @mtd: MTD device structure
 * @chipnr: chipnumber to select, -1 for deselect
L
Linus Torvalds 已提交
186 187 188
 *
 * Default select function for 1 chip devices.
 */
189
static void nand_select_chip(struct mtd_info *mtd, int chipnr)
L
Linus Torvalds 已提交
190
{
191
	struct nand_chip *chip = mtd_to_nand(mtd);
192 193

	switch (chipnr) {
L
Linus Torvalds 已提交
194
	case -1:
195
		chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
L
Linus Torvalds 已提交
196 197 198 199 200 201 202 203 204
		break;
	case 0:
		break;

	default:
		BUG();
	}
}

205 206 207 208 209 210 211 212 213
/**
 * nand_write_byte - [DEFAULT] write single byte to chip
 * @mtd: MTD device structure
 * @byte: value to write
 *
 * Default function to write a byte to I/O[7:0]
 */
static void nand_write_byte(struct mtd_info *mtd, uint8_t byte)
{
214
	struct nand_chip *chip = mtd_to_nand(mtd);
215 216 217 218 219 220 221 222 223 224 225 226 227

	chip->write_buf(mtd, &byte, 1);
}

/**
 * nand_write_byte16 - [DEFAULT] write single byte to a chip with width 16
 * @mtd: MTD device structure
 * @byte: value to write
 *
 * Default function to write a byte to I/O[7:0] on a 16-bit wide chip.
 */
static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte)
{
228
	struct nand_chip *chip = mtd_to_nand(mtd);
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
	uint16_t word = byte;

	/*
	 * It's not entirely clear what should happen to I/O[15:8] when writing
	 * a byte. The ONFi spec (Revision 3.1; 2012-09-19, Section 2.16) reads:
	 *
	 *    When the host supports a 16-bit bus width, only data is
	 *    transferred at the 16-bit width. All address and command line
	 *    transfers shall use only the lower 8-bits of the data bus. During
	 *    command transfers, the host may place any value on the upper
	 *    8-bits of the data bus. During address transfers, the host shall
	 *    set the upper 8-bits of the data bus to 00h.
	 *
	 * One user of the write_byte callback is nand_onfi_set_features. The
	 * four parameters are specified to be written to I/O[7:0], but this is
	 * neither an address nor a command transfer. Let's assume a 0 on the
	 * upper I/O lines is OK.
	 */
	chip->write_buf(mtd, (uint8_t *)&word, 2);
}

L
Linus Torvalds 已提交
250 251
/**
 * nand_write_buf - [DEFAULT] write buffer to chip
252 253 254
 * @mtd: MTD device structure
 * @buf: data buffer
 * @len: number of bytes to write
L
Linus Torvalds 已提交
255
 *
256
 * Default write function for 8bit buswidth.
L
Linus Torvalds 已提交
257
 */
258
static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
L
Linus Torvalds 已提交
259
{
260
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
261

262
	iowrite8_rep(chip->IO_ADDR_W, buf, len);
L
Linus Torvalds 已提交
263 264 265
}

/**
266
 * nand_read_buf - [DEFAULT] read chip data into buffer
267 268 269
 * @mtd: MTD device structure
 * @buf: buffer to store date
 * @len: number of bytes to read
L
Linus Torvalds 已提交
270
 *
271
 * Default read function for 8bit buswidth.
L
Linus Torvalds 已提交
272
 */
273
static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
L
Linus Torvalds 已提交
274
{
275
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
276

277
	ioread8_rep(chip->IO_ADDR_R, buf, len);
L
Linus Torvalds 已提交
278 279 280 281
}

/**
 * nand_write_buf16 - [DEFAULT] write buffer to chip
282 283 284
 * @mtd: MTD device structure
 * @buf: data buffer
 * @len: number of bytes to write
L
Linus Torvalds 已提交
285
 *
286
 * Default write function for 16bit buswidth.
L
Linus Torvalds 已提交
287
 */
288
static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
L
Linus Torvalds 已提交
289
{
290
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
291
	u16 *p = (u16 *) buf;
292

293
	iowrite16_rep(chip->IO_ADDR_W, p, len >> 1);
L
Linus Torvalds 已提交
294 295 296
}

/**
297
 * nand_read_buf16 - [DEFAULT] read chip data into buffer
298 299 300
 * @mtd: MTD device structure
 * @buf: buffer to store date
 * @len: number of bytes to read
L
Linus Torvalds 已提交
301
 *
302
 * Default read function for 16bit buswidth.
L
Linus Torvalds 已提交
303
 */
304
static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len)
L
Linus Torvalds 已提交
305
{
306
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
307 308
	u16 *p = (u16 *) buf;

309
	ioread16_rep(chip->IO_ADDR_R, p, len >> 1);
L
Linus Torvalds 已提交
310 311 312 313
}

/**
 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
314 315 316
 * @mtd: MTD device structure
 * @ofs: offset from device start
 * @getchip: 0, if the chip is already selected
L
Linus Torvalds 已提交
317
 *
318
 * Check, if the block is bad.
L
Linus Torvalds 已提交
319 320 321
 */
static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
{
322
	int page, chipnr, res = 0, i = 0;
323
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
324 325
	u16 bad;

326
	if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
327 328
		ofs += mtd->erasesize - mtd->writesize;

329 330
	page = (int)(ofs >> chip->page_shift) & chip->pagemask;

L
Linus Torvalds 已提交
331
	if (getchip) {
332
		chipnr = (int)(ofs >> chip->chip_shift);
L
Linus Torvalds 已提交
333

334
		nand_get_device(mtd, FL_READING);
L
Linus Torvalds 已提交
335 336

		/* Select the NAND device */
337
		chip->select_chip(mtd, chipnr);
338
	}
L
Linus Torvalds 已提交
339

340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
	do {
		if (chip->options & NAND_BUSWIDTH_16) {
			chip->cmdfunc(mtd, NAND_CMD_READOOB,
					chip->badblockpos & 0xFE, page);
			bad = cpu_to_le16(chip->read_word(mtd));
			if (chip->badblockpos & 0x1)
				bad >>= 8;
			else
				bad &= 0xFF;
		} else {
			chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos,
					page);
			bad = chip->read_byte(mtd);
		}

		if (likely(chip->badblockbits == 8))
			res = bad != 0xFF;
357
		else
358 359 360 361 362
			res = hweight8(bad) < chip->badblockbits;
		ofs += mtd->writesize;
		page = (int)(ofs >> chip->page_shift) & chip->pagemask;
		i++;
	} while (!res && i < 2 && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE));
363

364 365
	if (getchip) {
		chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
366
		nand_release_device(mtd);
367
	}
368

L
Linus Torvalds 已提交
369 370 371 372
	return res;
}

/**
373
 * nand_default_block_markbad - [DEFAULT] mark a block bad via bad block marker
374 375
 * @mtd: MTD device structure
 * @ofs: offset from device start
L
Linus Torvalds 已提交
376
 *
377
 * This is the default implementation, which can be overridden by a hardware
378 379 380 381 382
 * specific driver. It provides the details for writing a bad block marker to a
 * block.
 */
static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
{
383
	struct nand_chip *chip = mtd_to_nand(mtd);
384 385 386 387
	struct mtd_oob_ops ops;
	uint8_t buf[2] = { 0, 0 };
	int ret = 0, res, i = 0;

388
	memset(&ops, 0, sizeof(ops));
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422
	ops.oobbuf = buf;
	ops.ooboffs = chip->badblockpos;
	if (chip->options & NAND_BUSWIDTH_16) {
		ops.ooboffs &= ~0x01;
		ops.len = ops.ooblen = 2;
	} else {
		ops.len = ops.ooblen = 1;
	}
	ops.mode = MTD_OPS_PLACE_OOB;

	/* Write to first/last page(s) if necessary */
	if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
		ofs += mtd->erasesize - mtd->writesize;
	do {
		res = nand_do_write_oob(mtd, ofs, &ops);
		if (!ret)
			ret = res;

		i++;
		ofs += mtd->writesize;
	} while ((chip->bbt_options & NAND_BBT_SCAN2NDPAGE) && i < 2);

	return ret;
}

/**
 * nand_block_markbad_lowlevel - mark a block bad
 * @mtd: MTD device structure
 * @ofs: offset from device start
 *
 * This function performs the generic NAND bad block marking steps (i.e., bad
 * block table(s) and/or marker(s)). We only allow the hardware driver to
 * specify how to write bad block markers to OOB (chip->block_markbad).
 *
423
 * We try operations in the following order:
424
 *  (1) erase the affected block, to allow OOB marker to be written cleanly
425 426 427 428
 *  (2) write bad block marker to OOB area of affected block (unless flag
 *      NAND_BBT_NO_OOB_BBM is present)
 *  (3) update the BBT
 * Note that we retain the first error encountered in (2) or (3), finish the
429
 * procedures, and dump the error in the end.
L
Linus Torvalds 已提交
430
*/
431
static int nand_block_markbad_lowlevel(struct mtd_info *mtd, loff_t ofs)
L
Linus Torvalds 已提交
432
{
433
	struct nand_chip *chip = mtd_to_nand(mtd);
434
	int res, ret = 0;
435

436
	if (!(chip->bbt_options & NAND_BBT_NO_OOB_BBM)) {
437 438 439 440 441 442
		struct erase_info einfo;

		/* Attempt erase before marking OOB */
		memset(&einfo, 0, sizeof(einfo));
		einfo.mtd = mtd;
		einfo.addr = ofs;
443
		einfo.len = 1ULL << chip->phys_erase_shift;
444
		nand_erase_nand(mtd, &einfo, 0);
L
Linus Torvalds 已提交
445

446
		/* Write bad block marker to OOB */
447
		nand_get_device(mtd, FL_WRITING);
448
		ret = chip->block_markbad(mtd, ofs);
449
		nand_release_device(mtd);
450
	}
451

452 453 454
	/* Mark block bad in BBT */
	if (chip->bbt) {
		res = nand_markbad_bbt(mtd, ofs);
455 456 457 458
		if (!ret)
			ret = res;
	}

459 460
	if (!ret)
		mtd->ecc_stats.badblocks++;
461

462
	return ret;
L
Linus Torvalds 已提交
463 464
}

465
/**
L
Linus Torvalds 已提交
466
 * nand_check_wp - [GENERIC] check if the chip is write protected
467
 * @mtd: MTD device structure
L
Linus Torvalds 已提交
468
 *
469 470
 * Check, if the device is write protected. The function expects, that the
 * device is already selected.
L
Linus Torvalds 已提交
471
 */
472
static int nand_check_wp(struct mtd_info *mtd)
L
Linus Torvalds 已提交
473
{
474
	struct nand_chip *chip = mtd_to_nand(mtd);
475

476
	/* Broken xD cards report WP despite being writable */
477 478 479
	if (chip->options & NAND_BROKEN_XD)
		return 0;

L
Linus Torvalds 已提交
480
	/* Check the WP bit */
481 482
	chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
	return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
L
Linus Torvalds 已提交
483 484
}

485
/**
486
 * nand_block_isreserved - [GENERIC] Check if a block is marked reserved.
487 488 489
 * @mtd: MTD device structure
 * @ofs: offset from device start
 *
490
 * Check if the block is marked as reserved.
491 492 493
 */
static int nand_block_isreserved(struct mtd_info *mtd, loff_t ofs)
{
494
	struct nand_chip *chip = mtd_to_nand(mtd);
495 496 497 498 499 500 501

	if (!chip->bbt)
		return 0;
	/* Return info from the table */
	return nand_isreserved_bbt(mtd, ofs);
}

L
Linus Torvalds 已提交
502 503
/**
 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
504 505 506 507
 * @mtd: MTD device structure
 * @ofs: offset from device start
 * @getchip: 0, if the chip is already selected
 * @allowbbt: 1, if its allowed to access the bbt area
L
Linus Torvalds 已提交
508 509 510 511
 *
 * Check, if the block is bad. Either by reading the bad block table or
 * calling of the scan function.
 */
512 513
static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
			       int allowbbt)
L
Linus Torvalds 已提交
514
{
515
	struct nand_chip *chip = mtd_to_nand(mtd);
516

517 518
	if (!chip->bbt)
		return chip->block_bad(mtd, ofs, getchip);
519

L
Linus Torvalds 已提交
520
	/* Return info from the table */
521
	return nand_isbad_bbt(mtd, ofs, allowbbt);
L
Linus Torvalds 已提交
522 523
}

524 525
/**
 * panic_nand_wait_ready - [GENERIC] Wait for the ready pin after commands.
526 527
 * @mtd: MTD device structure
 * @timeo: Timeout
528 529 530 531 532 533
 *
 * Helper function for nand_wait_ready used when needing to wait in interrupt
 * context.
 */
static void panic_nand_wait_ready(struct mtd_info *mtd, unsigned long timeo)
{
534
	struct nand_chip *chip = mtd_to_nand(mtd);
535 536 537 538 539 540 541 542 543 544 545
	int i;

	/* Wait for the device to get ready */
	for (i = 0; i < timeo; i++) {
		if (chip->dev_ready(mtd))
			break;
		touch_softlockup_watchdog();
		mdelay(1);
	}
}

546 547 548 549 550 551
/**
 * nand_wait_ready - [GENERIC] Wait for the ready pin after commands.
 * @mtd: MTD device structure
 *
 * Wait for the ready pin after a command, and warn if a timeout occurs.
 */
552
void nand_wait_ready(struct mtd_info *mtd)
553
{
554
	struct nand_chip *chip = mtd_to_nand(mtd);
555
	unsigned long timeo = 400;
556

557
	if (in_interrupt() || oops_in_progress)
558
		return panic_nand_wait_ready(mtd, timeo);
559

560
	led_trigger_event(nand_led_trigger, LED_FULL);
561
	/* Wait until command is processed or timeout occurs */
562
	timeo = jiffies + msecs_to_jiffies(timeo);
563
	do {
564
		if (chip->dev_ready(mtd))
565 566
			goto out;
		cond_resched();
567
	} while (time_before(jiffies, timeo));
568

569 570
	if (!chip->dev_ready(mtd))
		pr_warn_ratelimited("timeout while waiting for chip to become ready\n");
571
out:
572
	led_trigger_event(nand_led_trigger, LED_OFF);
573
}
574
EXPORT_SYMBOL_GPL(nand_wait_ready);
575

576 577 578 579 580 581 582 583 584
/**
 * nand_wait_status_ready - [GENERIC] Wait for the ready status after commands.
 * @mtd: MTD device structure
 * @timeo: Timeout in ms
 *
 * Wait for status ready (i.e. command done) or timeout.
 */
static void nand_wait_status_ready(struct mtd_info *mtd, unsigned long timeo)
{
585
	register struct nand_chip *chip = mtd_to_nand(mtd);
586 587 588 589 590 591 592 593 594

	timeo = jiffies + msecs_to_jiffies(timeo);
	do {
		if ((chip->read_byte(mtd) & NAND_STATUS_READY))
			break;
		touch_softlockup_watchdog();
	} while (time_before(jiffies, timeo));
};

L
Linus Torvalds 已提交
595 596
/**
 * nand_command - [DEFAULT] Send command to NAND device
597 598 599 600
 * @mtd: MTD device structure
 * @command: the command to be sent
 * @column: the column address for this command, -1 if none
 * @page_addr: the page address for this command, -1 if none
L
Linus Torvalds 已提交
601
 *
602
 * Send command to NAND device. This function is used for small page devices
603
 * (512 Bytes per page).
L
Linus Torvalds 已提交
604
 */
605 606
static void nand_command(struct mtd_info *mtd, unsigned int command,
			 int column, int page_addr)
L
Linus Torvalds 已提交
607
{
608
	register struct nand_chip *chip = mtd_to_nand(mtd);
609
	int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
L
Linus Torvalds 已提交
610

611
	/* Write out the command to the device */
L
Linus Torvalds 已提交
612 613 614
	if (command == NAND_CMD_SEQIN) {
		int readcmd;

J
Joern Engel 已提交
615
		if (column >= mtd->writesize) {
L
Linus Torvalds 已提交
616
			/* OOB area */
J
Joern Engel 已提交
617
			column -= mtd->writesize;
L
Linus Torvalds 已提交
618 619 620 621 622 623 624 625
			readcmd = NAND_CMD_READOOB;
		} else if (column < 256) {
			/* First 256 bytes --> READ0 */
			readcmd = NAND_CMD_READ0;
		} else {
			column -= 256;
			readcmd = NAND_CMD_READ1;
		}
626
		chip->cmd_ctrl(mtd, readcmd, ctrl);
627
		ctrl &= ~NAND_CTRL_CHANGE;
L
Linus Torvalds 已提交
628
	}
629
	chip->cmd_ctrl(mtd, command, ctrl);
L
Linus Torvalds 已提交
630

631
	/* Address cycle, when necessary */
632 633 634 635
	ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
	/* Serially input address */
	if (column != -1) {
		/* Adjust columns for 16 bit buswidth */
636 637
		if (chip->options & NAND_BUSWIDTH_16 &&
				!nand_opcode_8bits(command))
638
			column >>= 1;
639
		chip->cmd_ctrl(mtd, column, ctrl);
640 641 642
		ctrl &= ~NAND_CTRL_CHANGE;
	}
	if (page_addr != -1) {
643
		chip->cmd_ctrl(mtd, page_addr, ctrl);
644
		ctrl &= ~NAND_CTRL_CHANGE;
645
		chip->cmd_ctrl(mtd, page_addr >> 8, ctrl);
646
		/* One more address cycle for devices > 32MiB */
647 648
		if (chip->chipsize > (32 << 20))
			chip->cmd_ctrl(mtd, page_addr >> 16, ctrl);
L
Linus Torvalds 已提交
649
	}
650
	chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
651 652

	/*
653 654
	 * Program and erase have their own busy handlers status and sequential
	 * in needs no delay
655
	 */
L
Linus Torvalds 已提交
656
	switch (command) {
657

L
Linus Torvalds 已提交
658 659 660 661 662 663 664 665
	case NAND_CMD_PAGEPROG:
	case NAND_CMD_ERASE1:
	case NAND_CMD_ERASE2:
	case NAND_CMD_SEQIN:
	case NAND_CMD_STATUS:
		return;

	case NAND_CMD_RESET:
666
		if (chip->dev_ready)
L
Linus Torvalds 已提交
667
			break;
668 669
		udelay(chip->chip_delay);
		chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
670
			       NAND_CTRL_CLE | NAND_CTRL_CHANGE);
671 672
		chip->cmd_ctrl(mtd,
			       NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
673 674
		/* EZ-NAND can take upto 250ms as per ONFi v4.0 */
		nand_wait_status_ready(mtd, 250);
L
Linus Torvalds 已提交
675 676
		return;

677
		/* This applies to read commands */
L
Linus Torvalds 已提交
678
	default:
679
		/*
L
Linus Torvalds 已提交
680 681
		 * If we don't have access to the busy pin, we apply the given
		 * command delay
682
		 */
683 684
		if (!chip->dev_ready) {
			udelay(chip->chip_delay);
L
Linus Torvalds 已提交
685
			return;
686
		}
L
Linus Torvalds 已提交
687
	}
688 689 690 691
	/*
	 * Apply this short delay always to ensure that we do wait tWB in
	 * any case on any machine.
	 */
692
	ndelay(100);
693 694

	nand_wait_ready(mtd);
L
Linus Torvalds 已提交
695 696 697 698
}

/**
 * nand_command_lp - [DEFAULT] Send command to NAND large page device
699 700 701 702
 * @mtd: MTD device structure
 * @command: the command to be sent
 * @column: the column address for this command, -1 if none
 * @page_addr: the page address for this command, -1 if none
L
Linus Torvalds 已提交
703
 *
704
 * Send command to NAND device. This is the version for the new large page
705 706
 * devices. We don't have the separate regions as we have in the small page
 * devices. We must emulate NAND_CMD_READOOB to keep the code compatible.
L
Linus Torvalds 已提交
707
 */
708 709
static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
			    int column, int page_addr)
L
Linus Torvalds 已提交
710
{
711
	register struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
712 713 714

	/* Emulate NAND_CMD_READOOB */
	if (command == NAND_CMD_READOOB) {
J
Joern Engel 已提交
715
		column += mtd->writesize;
L
Linus Torvalds 已提交
716 717
		command = NAND_CMD_READ0;
	}
718

719
	/* Command latch cycle */
720
	chip->cmd_ctrl(mtd, command, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
L
Linus Torvalds 已提交
721 722

	if (column != -1 || page_addr != -1) {
723
		int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
L
Linus Torvalds 已提交
724 725 726 727

		/* Serially input address */
		if (column != -1) {
			/* Adjust columns for 16 bit buswidth */
728 729
			if (chip->options & NAND_BUSWIDTH_16 &&
					!nand_opcode_8bits(command))
L
Linus Torvalds 已提交
730
				column >>= 1;
731
			chip->cmd_ctrl(mtd, column, ctrl);
732
			ctrl &= ~NAND_CTRL_CHANGE;
733
			chip->cmd_ctrl(mtd, column >> 8, ctrl);
734
		}
L
Linus Torvalds 已提交
735
		if (page_addr != -1) {
736 737
			chip->cmd_ctrl(mtd, page_addr, ctrl);
			chip->cmd_ctrl(mtd, page_addr >> 8,
738
				       NAND_NCE | NAND_ALE);
L
Linus Torvalds 已提交
739
			/* One more address cycle for devices > 128MiB */
740 741
			if (chip->chipsize > (128 << 20))
				chip->cmd_ctrl(mtd, page_addr >> 16,
742
					       NAND_NCE | NAND_ALE);
L
Linus Torvalds 已提交
743 744
		}
	}
745
	chip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
746 747

	/*
748
	 * Program and erase have their own busy handlers status, sequential
749
	 * in and status need no delay.
750
	 */
L
Linus Torvalds 已提交
751
	switch (command) {
752

L
Linus Torvalds 已提交
753 754 755 756 757
	case NAND_CMD_CACHEDPROG:
	case NAND_CMD_PAGEPROG:
	case NAND_CMD_ERASE1:
	case NAND_CMD_ERASE2:
	case NAND_CMD_SEQIN:
758
	case NAND_CMD_RNDIN:
L
Linus Torvalds 已提交
759
	case NAND_CMD_STATUS:
760
		return;
L
Linus Torvalds 已提交
761 762

	case NAND_CMD_RESET:
763
		if (chip->dev_ready)
L
Linus Torvalds 已提交
764
			break;
765
		udelay(chip->chip_delay);
766 767 768 769
		chip->cmd_ctrl(mtd, NAND_CMD_STATUS,
			       NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
		chip->cmd_ctrl(mtd, NAND_CMD_NONE,
			       NAND_NCE | NAND_CTRL_CHANGE);
770 771
		/* EZ-NAND can take upto 250ms as per ONFi v4.0 */
		nand_wait_status_ready(mtd, 250);
L
Linus Torvalds 已提交
772 773
		return;

774 775 776 777 778 779 780 781
	case NAND_CMD_RNDOUT:
		/* No ready / busy check necessary */
		chip->cmd_ctrl(mtd, NAND_CMD_RNDOUTSTART,
			       NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
		chip->cmd_ctrl(mtd, NAND_CMD_NONE,
			       NAND_NCE | NAND_CTRL_CHANGE);
		return;

L
Linus Torvalds 已提交
782
	case NAND_CMD_READ0:
783 784 785 786
		chip->cmd_ctrl(mtd, NAND_CMD_READSTART,
			       NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
		chip->cmd_ctrl(mtd, NAND_CMD_NONE,
			       NAND_NCE | NAND_CTRL_CHANGE);
787

788
		/* This applies to read commands */
L
Linus Torvalds 已提交
789
	default:
790
		/*
L
Linus Torvalds 已提交
791
		 * If we don't have access to the busy pin, we apply the given
792
		 * command delay.
793
		 */
794 795
		if (!chip->dev_ready) {
			udelay(chip->chip_delay);
L
Linus Torvalds 已提交
796
			return;
797
		}
L
Linus Torvalds 已提交
798
	}
799

800 801 802 803
	/*
	 * Apply this short delay always to ensure that we do wait tWB in
	 * any case on any machine.
	 */
804
	ndelay(100);
805 806

	nand_wait_ready(mtd);
L
Linus Torvalds 已提交
807 808
}

809 810
/**
 * panic_nand_get_device - [GENERIC] Get chip for selected access
811 812 813
 * @chip: the nand chip descriptor
 * @mtd: MTD device structure
 * @new_state: the state which is requested
814 815 816 817 818 819
 *
 * Used when in panic, no locks are taken.
 */
static void panic_nand_get_device(struct nand_chip *chip,
		      struct mtd_info *mtd, int new_state)
{
820
	/* Hardware controller shared among independent devices */
821 822 823 824
	chip->controller->active = chip;
	chip->state = new_state;
}

L
Linus Torvalds 已提交
825 826
/**
 * nand_get_device - [GENERIC] Get chip for selected access
827 828
 * @mtd: MTD device structure
 * @new_state: the state which is requested
L
Linus Torvalds 已提交
829 830 831
 *
 * Get the device and lock it for exclusive access
 */
832
static int
833
nand_get_device(struct mtd_info *mtd, int new_state)
L
Linus Torvalds 已提交
834
{
835
	struct nand_chip *chip = mtd_to_nand(mtd);
836 837
	spinlock_t *lock = &chip->controller->lock;
	wait_queue_head_t *wq = &chip->controller->wq;
838
	DECLARE_WAITQUEUE(wait, current);
839
retry:
840 841
	spin_lock(lock);

842
	/* Hardware controller shared among independent devices */
843 844
	if (!chip->controller->active)
		chip->controller->active = chip;
T
Thomas Gleixner 已提交
845

846 847
	if (chip->controller->active == chip && chip->state == FL_READY) {
		chip->state = new_state;
848
		spin_unlock(lock);
849 850 851
		return 0;
	}
	if (new_state == FL_PM_SUSPENDED) {
852 853 854 855 856
		if (chip->controller->active->state == FL_PM_SUSPENDED) {
			chip->state = FL_PM_SUSPENDED;
			spin_unlock(lock);
			return 0;
		}
857 858 859 860 861 862
	}
	set_current_state(TASK_UNINTERRUPTIBLE);
	add_wait_queue(wq, &wait);
	spin_unlock(lock);
	schedule();
	remove_wait_queue(wq, &wait);
L
Linus Torvalds 已提交
863 864 865
	goto retry;
}

866
/**
867 868 869 870
 * panic_nand_wait - [GENERIC] wait until the command is done
 * @mtd: MTD device structure
 * @chip: NAND chip structure
 * @timeo: timeout
871 872 873
 *
 * Wait for command done. This is a helper function for nand_wait used when
 * we are in interrupt context. May happen when in panic and trying to write
874
 * an oops through mtdoops.
875 876 877 878 879 880 881 882 883 884 885 886 887 888
 */
static void panic_nand_wait(struct mtd_info *mtd, struct nand_chip *chip,
			    unsigned long timeo)
{
	int i;
	for (i = 0; i < timeo; i++) {
		if (chip->dev_ready) {
			if (chip->dev_ready(mtd))
				break;
		} else {
			if (chip->read_byte(mtd) & NAND_STATUS_READY)
				break;
		}
		mdelay(1);
889
	}
890 891
}

L
Linus Torvalds 已提交
892
/**
893 894 895
 * nand_wait - [DEFAULT] wait until the command is done
 * @mtd: MTD device structure
 * @chip: NAND chip structure
L
Linus Torvalds 已提交
896
 *
897
 * Wait for command done. This applies to erase and program only.
R
Randy Dunlap 已提交
898
 */
899
static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
L
Linus Torvalds 已提交
900 901
{

902 903
	int status;
	unsigned long timeo = 400;
L
Linus Torvalds 已提交
904

905 906
	led_trigger_event(nand_led_trigger, LED_FULL);

907 908 909 910
	/*
	 * Apply this short delay always to ensure that we do wait tWB in any
	 * case on any machine.
	 */
911
	ndelay(100);
L
Linus Torvalds 已提交
912

913
	chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
L
Linus Torvalds 已提交
914

915 916 917
	if (in_interrupt() || oops_in_progress)
		panic_nand_wait(mtd, chip, timeo);
	else {
918
		timeo = jiffies + msecs_to_jiffies(timeo);
919
		do {
920 921 922 923 924 925 926 927
			if (chip->dev_ready) {
				if (chip->dev_ready(mtd))
					break;
			} else {
				if (chip->read_byte(mtd) & NAND_STATUS_READY)
					break;
			}
			cond_resched();
928
		} while (time_before(jiffies, timeo));
L
Linus Torvalds 已提交
929
	}
930 931
	led_trigger_event(nand_led_trigger, LED_OFF);

932
	status = (int)chip->read_byte(mtd);
933 934
	/* This can happen if in case of timeout or buggy dev_ready */
	WARN_ON(!(status & NAND_STATUS_READY));
L
Linus Torvalds 已提交
935 936 937
	return status;
}

938
/**
939 940 941 942
 * __nand_unlock - [REPLACEABLE] unlocks specified locked blocks
 * @mtd: mtd info
 * @ofs: offset to start unlock from
 * @len: length to unlock
943 944 945 946
 * @invert: when = 0, unlock the range of blocks within the lower and
 *                    upper boundary address
 *          when = 1, unlock the range of blocks outside the boundaries
 *                    of the lower and upper boundary address
947
 *
948
 * Returs unlock status.
949 950 951 952 953 954
 */
static int __nand_unlock(struct mtd_info *mtd, loff_t ofs,
					uint64_t len, int invert)
{
	int ret = 0;
	int status, page;
955
	struct nand_chip *chip = mtd_to_nand(mtd);
956 957 958 959 960 961 962 963 964 965 966 967 968

	/* Submit address of first page to unlock */
	page = ofs >> chip->page_shift;
	chip->cmdfunc(mtd, NAND_CMD_UNLOCK1, -1, page & chip->pagemask);

	/* Submit address of last page to unlock */
	page = (ofs + len) >> chip->page_shift;
	chip->cmdfunc(mtd, NAND_CMD_UNLOCK2, -1,
				(page | invert) & chip->pagemask);

	/* Call wait ready function */
	status = chip->waitfunc(mtd, chip);
	/* See if device thinks it succeeded */
969
	if (status & NAND_STATUS_FAIL) {
970
		pr_debug("%s: error status = 0x%08x\n",
971 972 973 974 975 976 977 978
					__func__, status);
		ret = -EIO;
	}

	return ret;
}

/**
979 980 981 982
 * nand_unlock - [REPLACEABLE] unlocks specified locked blocks
 * @mtd: mtd info
 * @ofs: offset to start unlock from
 * @len: length to unlock
983
 *
984
 * Returns unlock status.
985 986 987 988 989
 */
int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
{
	int ret = 0;
	int chipnr;
990
	struct nand_chip *chip = mtd_to_nand(mtd);
991

992
	pr_debug("%s: start = 0x%012llx, len = %llu\n",
993 994 995
			__func__, (unsigned long long)ofs, len);

	if (check_offs_len(mtd, ofs, len))
996
		return -EINVAL;
997 998 999 1000 1001

	/* Align to last block address if size addresses end of the device */
	if (ofs + len == mtd->size)
		len -= mtd->erasesize;

1002
	nand_get_device(mtd, FL_UNLOCKING);
1003 1004 1005 1006 1007 1008

	/* Shift to get chip number */
	chipnr = ofs >> chip->chip_shift;

	chip->select_chip(mtd, chipnr);

1009 1010 1011 1012 1013 1014 1015 1016 1017
	/*
	 * Reset the chip.
	 * If we want to check the WP through READ STATUS and check the bit 7
	 * we must reset the chip
	 * some operation can also clear the bit 7 of status register
	 * eg. erase/program a locked block
	 */
	chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);

1018 1019
	/* Check, if it is write protected */
	if (nand_check_wp(mtd)) {
1020
		pr_debug("%s: device is write protected!\n",
1021 1022 1023 1024 1025 1026 1027 1028
					__func__);
		ret = -EIO;
		goto out;
	}

	ret = __nand_unlock(mtd, ofs, len, 0);

out:
1029
	chip->select_chip(mtd, -1);
1030 1031 1032 1033
	nand_release_device(mtd);

	return ret;
}
1034
EXPORT_SYMBOL(nand_unlock);
1035 1036

/**
1037 1038 1039 1040
 * nand_lock - [REPLACEABLE] locks all blocks present in the device
 * @mtd: mtd info
 * @ofs: offset to start unlock from
 * @len: length to unlock
1041
 *
1042 1043 1044 1045
 * This feature is not supported in many NAND parts. 'Micron' NAND parts do
 * have this feature, but it allows only to lock all blocks, not for specified
 * range for block. Implementing 'lock' feature by making use of 'unlock', for
 * now.
1046
 *
1047
 * Returns lock status.
1048 1049 1050 1051 1052
 */
int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
{
	int ret = 0;
	int chipnr, status, page;
1053
	struct nand_chip *chip = mtd_to_nand(mtd);
1054

1055
	pr_debug("%s: start = 0x%012llx, len = %llu\n",
1056 1057 1058
			__func__, (unsigned long long)ofs, len);

	if (check_offs_len(mtd, ofs, len))
1059
		return -EINVAL;
1060

1061
	nand_get_device(mtd, FL_LOCKING);
1062 1063 1064 1065 1066 1067

	/* Shift to get chip number */
	chipnr = ofs >> chip->chip_shift;

	chip->select_chip(mtd, chipnr);

1068 1069 1070 1071 1072 1073 1074 1075 1076
	/*
	 * Reset the chip.
	 * If we want to check the WP through READ STATUS and check the bit 7
	 * we must reset the chip
	 * some operation can also clear the bit 7 of status register
	 * eg. erase/program a locked block
	 */
	chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);

1077 1078
	/* Check, if it is write protected */
	if (nand_check_wp(mtd)) {
1079
		pr_debug("%s: device is write protected!\n",
1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092
					__func__);
		status = MTD_ERASE_FAILED;
		ret = -EIO;
		goto out;
	}

	/* Submit address of first page to lock */
	page = ofs >> chip->page_shift;
	chip->cmdfunc(mtd, NAND_CMD_LOCK, -1, page & chip->pagemask);

	/* Call wait ready function */
	status = chip->waitfunc(mtd, chip);
	/* See if device thinks it succeeded */
1093
	if (status & NAND_STATUS_FAIL) {
1094
		pr_debug("%s: error status = 0x%08x\n",
1095 1096 1097 1098 1099 1100 1101 1102
					__func__, status);
		ret = -EIO;
		goto out;
	}

	ret = __nand_unlock(mtd, ofs, len, 0x1);

out:
1103
	chip->select_chip(mtd, -1);
1104 1105 1106 1107
	nand_release_device(mtd);

	return ret;
}
1108
EXPORT_SYMBOL(nand_lock);
1109

1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237
/**
 * nand_check_erased_buf - check if a buffer contains (almost) only 0xff data
 * @buf: buffer to test
 * @len: buffer length
 * @bitflips_threshold: maximum number of bitflips
 *
 * Check if a buffer contains only 0xff, which means the underlying region
 * has been erased and is ready to be programmed.
 * The bitflips_threshold specify the maximum number of bitflips before
 * considering the region is not erased.
 * Note: The logic of this function has been extracted from the memweight
 * implementation, except that nand_check_erased_buf function exit before
 * testing the whole buffer if the number of bitflips exceed the
 * bitflips_threshold value.
 *
 * Returns a positive number of bitflips less than or equal to
 * bitflips_threshold, or -ERROR_CODE for bitflips in excess of the
 * threshold.
 */
static int nand_check_erased_buf(void *buf, int len, int bitflips_threshold)
{
	const unsigned char *bitmap = buf;
	int bitflips = 0;
	int weight;

	for (; len && ((uintptr_t)bitmap) % sizeof(long);
	     len--, bitmap++) {
		weight = hweight8(*bitmap);
		bitflips += BITS_PER_BYTE - weight;
		if (unlikely(bitflips > bitflips_threshold))
			return -EBADMSG;
	}

	for (; len >= sizeof(long);
	     len -= sizeof(long), bitmap += sizeof(long)) {
		weight = hweight_long(*((unsigned long *)bitmap));
		bitflips += BITS_PER_LONG - weight;
		if (unlikely(bitflips > bitflips_threshold))
			return -EBADMSG;
	}

	for (; len > 0; len--, bitmap++) {
		weight = hweight8(*bitmap);
		bitflips += BITS_PER_BYTE - weight;
		if (unlikely(bitflips > bitflips_threshold))
			return -EBADMSG;
	}

	return bitflips;
}

/**
 * nand_check_erased_ecc_chunk - check if an ECC chunk contains (almost) only
 *				 0xff data
 * @data: data buffer to test
 * @datalen: data length
 * @ecc: ECC buffer
 * @ecclen: ECC length
 * @extraoob: extra OOB buffer
 * @extraooblen: extra OOB length
 * @bitflips_threshold: maximum number of bitflips
 *
 * Check if a data buffer and its associated ECC and OOB data contains only
 * 0xff pattern, which means the underlying region has been erased and is
 * ready to be programmed.
 * The bitflips_threshold specify the maximum number of bitflips before
 * considering the region as not erased.
 *
 * Note:
 * 1/ ECC algorithms are working on pre-defined block sizes which are usually
 *    different from the NAND page size. When fixing bitflips, ECC engines will
 *    report the number of errors per chunk, and the NAND core infrastructure
 *    expect you to return the maximum number of bitflips for the whole page.
 *    This is why you should always use this function on a single chunk and
 *    not on the whole page. After checking each chunk you should update your
 *    max_bitflips value accordingly.
 * 2/ When checking for bitflips in erased pages you should not only check
 *    the payload data but also their associated ECC data, because a user might
 *    have programmed almost all bits to 1 but a few. In this case, we
 *    shouldn't consider the chunk as erased, and checking ECC bytes prevent
 *    this case.
 * 3/ The extraoob argument is optional, and should be used if some of your OOB
 *    data are protected by the ECC engine.
 *    It could also be used if you support subpages and want to attach some
 *    extra OOB data to an ECC chunk.
 *
 * Returns a positive number of bitflips less than or equal to
 * bitflips_threshold, or -ERROR_CODE for bitflips in excess of the
 * threshold. In case of success, the passed buffers are filled with 0xff.
 */
int nand_check_erased_ecc_chunk(void *data, int datalen,
				void *ecc, int ecclen,
				void *extraoob, int extraooblen,
				int bitflips_threshold)
{
	int data_bitflips = 0, ecc_bitflips = 0, extraoob_bitflips = 0;

	data_bitflips = nand_check_erased_buf(data, datalen,
					      bitflips_threshold);
	if (data_bitflips < 0)
		return data_bitflips;

	bitflips_threshold -= data_bitflips;

	ecc_bitflips = nand_check_erased_buf(ecc, ecclen, bitflips_threshold);
	if (ecc_bitflips < 0)
		return ecc_bitflips;

	bitflips_threshold -= ecc_bitflips;

	extraoob_bitflips = nand_check_erased_buf(extraoob, extraooblen,
						  bitflips_threshold);
	if (extraoob_bitflips < 0)
		return extraoob_bitflips;

	if (data_bitflips)
		memset(data, 0xff, datalen);

	if (ecc_bitflips)
		memset(ecc, 0xff, ecclen);

	if (extraoob_bitflips)
		memset(extraoob, 0xff, extraooblen);

	return data_bitflips + ecc_bitflips + extraoob_bitflips;
}
EXPORT_SYMBOL(nand_check_erased_ecc_chunk);

1238
/**
1239
 * nand_read_page_raw - [INTERN] read raw page data without ecc
1240 1241 1242
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: buffer to store read data
1243
 * @oob_required: caller requires OOB data read to chip->oob_poi
1244
 * @page: page number to read
1245
 *
1246
 * Not for syndrome calculating ECC controllers, which use a special oob layout.
1247 1248
 */
static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1249
			      uint8_t *buf, int oob_required, int page)
1250 1251
{
	chip->read_buf(mtd, buf, mtd->writesize);
1252 1253
	if (oob_required)
		chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1254 1255 1256
	return 0;
}

1257
/**
1258
 * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
1259 1260 1261
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: buffer to store read data
1262
 * @oob_required: caller requires OOB data read to chip->oob_poi
1263
 * @page: page number to read
1264 1265 1266
 *
 * We need a special oob layout and handling even when OOB isn't used.
 */
1267
static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
1268 1269
				       struct nand_chip *chip, uint8_t *buf,
				       int oob_required, int page)
1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300
{
	int eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	uint8_t *oob = chip->oob_poi;
	int steps, size;

	for (steps = chip->ecc.steps; steps > 0; steps--) {
		chip->read_buf(mtd, buf, eccsize);
		buf += eccsize;

		if (chip->ecc.prepad) {
			chip->read_buf(mtd, oob, chip->ecc.prepad);
			oob += chip->ecc.prepad;
		}

		chip->read_buf(mtd, oob, eccbytes);
		oob += eccbytes;

		if (chip->ecc.postpad) {
			chip->read_buf(mtd, oob, chip->ecc.postpad);
			oob += chip->ecc.postpad;
		}
	}

	size = mtd->oobsize - (oob - chip->oob_poi);
	if (size)
		chip->read_buf(mtd, oob, size);

	return 0;
}

L
Linus Torvalds 已提交
1301
/**
1302
 * nand_read_page_swecc - [REPLACEABLE] software ECC based page read function
1303 1304 1305
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: buffer to store read data
1306
 * @oob_required: caller requires OOB data read to chip->oob_poi
1307
 * @page: page number to read
1308
 */
1309
static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
1310
				uint8_t *buf, int oob_required, int page)
L
Linus Torvalds 已提交
1311
{
1312 1313 1314 1315
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
	uint8_t *p = buf;
1316 1317
	uint8_t *ecc_calc = chip->buffers->ecccalc;
	uint8_t *ecc_code = chip->buffers->ecccode;
1318
	uint32_t *eccpos = chip->ecc.layout->eccpos;
1319
	unsigned int max_bitflips = 0;
1320

1321
	chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
1322 1323 1324 1325 1326

	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
		chip->ecc.calculate(mtd, p, &ecc_calc[i]);

	for (i = 0; i < chip->ecc.total; i++)
1327
		ecc_code[i] = chip->oob_poi[eccpos[i]];
1328 1329 1330 1331 1332 1333 1334 1335

	eccsteps = chip->ecc.steps;
	p = buf;

	for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
		int stat;

		stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1336
		if (stat < 0) {
1337
			mtd->ecc_stats.failed++;
1338
		} else {
1339
			mtd->ecc_stats.corrected += stat;
1340 1341
			max_bitflips = max_t(unsigned int, max_bitflips, stat);
		}
1342
	}
1343
	return max_bitflips;
1344
}
L
Linus Torvalds 已提交
1345

1346
/**
1347
 * nand_read_subpage - [REPLACEABLE] ECC based sub-page read function
1348 1349 1350 1351 1352
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @data_offs: offset of requested data within the page
 * @readlen: data length
 * @bufpoi: buffer to store read data
1353
 * @page: page number to read
1354
 */
1355
static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
1356 1357
			uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi,
			int page)
1358 1359 1360 1361 1362 1363 1364
{
	int start_step, end_step, num_steps;
	uint32_t *eccpos = chip->ecc.layout->eccpos;
	uint8_t *p;
	int data_col_addr, i, gaps = 0;
	int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
	int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
R
Ron 已提交
1365
	int index;
1366
	unsigned int max_bitflips = 0;
1367

1368
	/* Column address within the page aligned to ECC size (256bytes) */
1369 1370 1371
	start_step = data_offs / chip->ecc.size;
	end_step = (data_offs + readlen - 1) / chip->ecc.size;
	num_steps = end_step - start_step + 1;
R
Ron 已提交
1372
	index = start_step * chip->ecc.bytes;
1373

1374
	/* Data size aligned to ECC ecc.size */
1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385
	datafrag_len = num_steps * chip->ecc.size;
	eccfrag_len = num_steps * chip->ecc.bytes;

	data_col_addr = start_step * chip->ecc.size;
	/* If we read not a page aligned data */
	if (data_col_addr != 0)
		chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);

	p = bufpoi + data_col_addr;
	chip->read_buf(mtd, p, datafrag_len);

1386
	/* Calculate ECC */
1387 1388 1389
	for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
		chip->ecc.calculate(mtd, p, &chip->buffers->ecccalc[i]);

1390 1391
	/*
	 * The performance is faster if we position offsets according to
1392
	 * ecc.pos. Let's make sure that there are no gaps in ECC positions.
1393
	 */
1394
	for (i = 0; i < eccfrag_len - 1; i++) {
1395
		if (eccpos[i + index] + 1 != eccpos[i + index + 1]) {
1396 1397 1398 1399 1400 1401 1402 1403
			gaps = 1;
			break;
		}
	}
	if (gaps) {
		chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
		chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
	} else {
1404
		/*
1405
		 * Send the command to read the particular ECC bytes take care
1406 1407
		 * about buswidth alignment in read_buf.
		 */
1408
		aligned_pos = eccpos[index] & ~(busw - 1);
1409
		aligned_len = eccfrag_len;
1410
		if (eccpos[index] & (busw - 1))
1411
			aligned_len++;
1412
		if (eccpos[index + (num_steps * chip->ecc.bytes)] & (busw - 1))
1413 1414
			aligned_len++;

1415 1416
		chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
					mtd->writesize + aligned_pos, -1);
1417 1418 1419 1420
		chip->read_buf(mtd, &chip->oob_poi[aligned_pos], aligned_len);
	}

	for (i = 0; i < eccfrag_len; i++)
1421
		chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
1422 1423 1424 1425 1426

	p = bufpoi + data_col_addr;
	for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
		int stat;

1427 1428
		stat = chip->ecc.correct(mtd, p,
			&chip->buffers->ecccode[i], &chip->buffers->ecccalc[i]);
1429 1430 1431 1432 1433 1434 1435 1436 1437 1438
		if (stat == -EBADMSG &&
		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
			/* check for empty pages with bitflips */
			stat = nand_check_erased_ecc_chunk(p, chip->ecc.size,
						&chip->buffers->ecccode[i],
						chip->ecc.bytes,
						NULL, 0,
						chip->ecc.strength);
		}

1439
		if (stat < 0) {
1440
			mtd->ecc_stats.failed++;
1441
		} else {
1442
			mtd->ecc_stats.corrected += stat;
1443 1444
			max_bitflips = max_t(unsigned int, max_bitflips, stat);
		}
1445
	}
1446
	return max_bitflips;
1447 1448
}

1449
/**
1450
 * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
1451 1452 1453
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: buffer to store read data
1454
 * @oob_required: caller requires OOB data read to chip->oob_poi
1455
 * @page: page number to read
1456
 *
1457
 * Not for syndrome calculating ECC controllers which need a special oob layout.
1458
 */
1459
static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
1460
				uint8_t *buf, int oob_required, int page)
L
Linus Torvalds 已提交
1461
{
1462 1463 1464 1465
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
	uint8_t *p = buf;
1466 1467
	uint8_t *ecc_calc = chip->buffers->ecccalc;
	uint8_t *ecc_code = chip->buffers->ecccode;
1468
	uint32_t *eccpos = chip->ecc.layout->eccpos;
1469
	unsigned int max_bitflips = 0;
1470 1471 1472 1473 1474

	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
		chip->ecc.hwctl(mtd, NAND_ECC_READ);
		chip->read_buf(mtd, p, eccsize);
		chip->ecc.calculate(mtd, p, &ecc_calc[i]);
L
Linus Torvalds 已提交
1475
	}
1476
	chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
L
Linus Torvalds 已提交
1477

1478
	for (i = 0; i < chip->ecc.total; i++)
1479
		ecc_code[i] = chip->oob_poi[eccpos[i]];
L
Linus Torvalds 已提交
1480

1481 1482
	eccsteps = chip->ecc.steps;
	p = buf;
1483

1484 1485
	for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
		int stat;
L
Linus Torvalds 已提交
1486

1487
		stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
1488 1489 1490 1491 1492 1493 1494 1495 1496
		if (stat == -EBADMSG &&
		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
			/* check for empty pages with bitflips */
			stat = nand_check_erased_ecc_chunk(p, eccsize,
						&ecc_code[i], eccbytes,
						NULL, 0,
						chip->ecc.strength);
		}

1497
		if (stat < 0) {
1498
			mtd->ecc_stats.failed++;
1499
		} else {
1500
			mtd->ecc_stats.corrected += stat;
1501 1502
			max_bitflips = max_t(unsigned int, max_bitflips, stat);
		}
1503
	}
1504
	return max_bitflips;
1505
}
L
Linus Torvalds 已提交
1506

1507
/**
1508
 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
1509 1510 1511
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: buffer to store read data
1512
 * @oob_required: caller requires OOB data read to chip->oob_poi
1513
 * @page: page number to read
1514
 *
1515 1516 1517 1518 1519
 * Hardware ECC for large page chips, require OOB to be read first. For this
 * ECC mode, the write_page method is re-used from ECC_HW. These methods
 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
 * multiple ECC steps, follows the "infix ECC" scheme and reads/writes ECC from
 * the data area, by overwriting the NAND manufacturer bad block markings.
1520 1521
 */
static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
1522
	struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
1523 1524 1525 1526 1527 1528 1529 1530
{
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
	uint8_t *p = buf;
	uint8_t *ecc_code = chip->buffers->ecccode;
	uint32_t *eccpos = chip->ecc.layout->eccpos;
	uint8_t *ecc_calc = chip->buffers->ecccalc;
1531
	unsigned int max_bitflips = 0;
1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548

	/* Read the OOB area first */
	chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
	chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
	chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);

	for (i = 0; i < chip->ecc.total; i++)
		ecc_code[i] = chip->oob_poi[eccpos[i]];

	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
		int stat;

		chip->ecc.hwctl(mtd, NAND_ECC_READ);
		chip->read_buf(mtd, p, eccsize);
		chip->ecc.calculate(mtd, p, &ecc_calc[i]);

		stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
1549 1550 1551 1552 1553 1554 1555 1556 1557
		if (stat == -EBADMSG &&
		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
			/* check for empty pages with bitflips */
			stat = nand_check_erased_ecc_chunk(p, eccsize,
						&ecc_code[i], eccbytes,
						NULL, 0,
						chip->ecc.strength);
		}

1558
		if (stat < 0) {
1559
			mtd->ecc_stats.failed++;
1560
		} else {
1561
			mtd->ecc_stats.corrected += stat;
1562 1563
			max_bitflips = max_t(unsigned int, max_bitflips, stat);
		}
1564
	}
1565
	return max_bitflips;
1566 1567
}

1568
/**
1569
 * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
1570 1571 1572
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: buffer to store read data
1573
 * @oob_required: caller requires OOB data read to chip->oob_poi
1574
 * @page: page number to read
1575
 *
1576 1577
 * The hw generator calculates the error syndrome automatically. Therefore we
 * need a special oob layout and handling.
1578 1579
 */
static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1580
				   uint8_t *buf, int oob_required, int page)
1581 1582 1583 1584
{
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
1585
	int eccpadbytes = eccbytes + chip->ecc.prepad + chip->ecc.postpad;
1586
	uint8_t *p = buf;
1587
	uint8_t *oob = chip->oob_poi;
1588
	unsigned int max_bitflips = 0;
L
Linus Torvalds 已提交
1589

1590 1591
	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
		int stat;
1592

1593 1594
		chip->ecc.hwctl(mtd, NAND_ECC_READ);
		chip->read_buf(mtd, p, eccsize);
L
Linus Torvalds 已提交
1595

1596 1597 1598 1599
		if (chip->ecc.prepad) {
			chip->read_buf(mtd, oob, chip->ecc.prepad);
			oob += chip->ecc.prepad;
		}
L
Linus Torvalds 已提交
1600

1601 1602 1603
		chip->ecc.hwctl(mtd, NAND_ECC_READSYN);
		chip->read_buf(mtd, oob, eccbytes);
		stat = chip->ecc.correct(mtd, p, oob, NULL);
1604

1605
		oob += eccbytes;
L
Linus Torvalds 已提交
1606

1607 1608 1609
		if (chip->ecc.postpad) {
			chip->read_buf(mtd, oob, chip->ecc.postpad);
			oob += chip->ecc.postpad;
1610
		}
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627

		if (stat == -EBADMSG &&
		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
			/* check for empty pages with bitflips */
			stat = nand_check_erased_ecc_chunk(p, chip->ecc.size,
							   oob - eccpadbytes,
							   eccpadbytes,
							   NULL, 0,
							   chip->ecc.strength);
		}

		if (stat < 0) {
			mtd->ecc_stats.failed++;
		} else {
			mtd->ecc_stats.corrected += stat;
			max_bitflips = max_t(unsigned int, max_bitflips, stat);
		}
1628
	}
L
Linus Torvalds 已提交
1629

1630
	/* Calculate remaining oob bytes */
1631
	i = mtd->oobsize - (oob - chip->oob_poi);
1632 1633
	if (i)
		chip->read_buf(mtd, oob, i);
1634

1635
	return max_bitflips;
1636
}
L
Linus Torvalds 已提交
1637

1638
/**
1639
 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
1640 1641 1642 1643
 * @chip: nand chip structure
 * @oob: oob destination address
 * @ops: oob ops structure
 * @len: size of oob to transfer
1644 1645
 */
static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
1646
				  struct mtd_oob_ops *ops, size_t len)
1647
{
1648
	switch (ops->mode) {
1649

1650 1651
	case MTD_OPS_PLACE_OOB:
	case MTD_OPS_RAW:
1652 1653 1654
		memcpy(oob, chip->oob_poi + ops->ooboffs, len);
		return oob + len;

1655
	case MTD_OPS_AUTO_OOB: {
1656
		struct nand_oobfree *free = chip->ecc.layout->oobfree;
1657 1658
		uint32_t boffs = 0, roffs = ops->ooboffs;
		size_t bytes = 0;
1659

1660
		for (; free->length && len; free++, len -= bytes) {
1661
			/* Read request not from offset 0? */
1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675
			if (unlikely(roffs)) {
				if (roffs >= free->length) {
					roffs -= free->length;
					continue;
				}
				boffs = free->offset + roffs;
				bytes = min_t(size_t, len,
					      (free->length - roffs));
				roffs = 0;
			} else {
				bytes = min_t(size_t, len, free->length);
				boffs = free->offset;
			}
			memcpy(oob, chip->oob_poi + boffs, bytes);
1676 1677 1678 1679 1680 1681 1682 1683 1684 1685
			oob += bytes;
		}
		return oob;
	}
	default:
		BUG();
	}
	return NULL;
}

1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696
/**
 * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
 * @mtd: MTD device structure
 * @retry_mode: the retry mode to use
 *
 * Some vendors supply a special command to shift the Vt threshold, to be used
 * when there are too many bitflips in a page (i.e., ECC error). After setting
 * a new threshold, the host should retry reading the page.
 */
static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
{
1697
	struct nand_chip *chip = mtd_to_nand(mtd);
1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709

	pr_debug("setting READ RETRY mode %d\n", retry_mode);

	if (retry_mode >= chip->read_retries)
		return -EINVAL;

	if (!chip->setup_read_retry)
		return -EOPNOTSUPP;

	return chip->setup_read_retry(mtd, retry_mode);
}

1710
/**
1711
 * nand_do_read_ops - [INTERN] Read data with ECC
1712 1713 1714
 * @mtd: MTD device structure
 * @from: offset to read from
 * @ops: oob ops structure
1715 1716 1717
 *
 * Internal function. Called with chip held.
 */
1718 1719
static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
			    struct mtd_oob_ops *ops)
1720
{
1721
	int chipnr, page, realpage, col, bytes, aligned, oob_required;
1722
	struct nand_chip *chip = mtd_to_nand(mtd);
1723
	int ret = 0;
1724
	uint32_t readlen = ops->len;
1725
	uint32_t oobreadlen = ops->ooblen;
1726
	uint32_t max_oobsize = mtd_oobavail(mtd, ops);
1727

1728
	uint8_t *bufpoi, *oob, *buf;
1729
	int use_bufpoi;
1730
	unsigned int max_bitflips = 0;
1731
	int retry_mode = 0;
1732
	bool ecc_fail = false;
L
Linus Torvalds 已提交
1733

1734 1735
	chipnr = (int)(from >> chip->chip_shift);
	chip->select_chip(mtd, chipnr);
1736

1737 1738
	realpage = (int)(from >> chip->page_shift);
	page = realpage & chip->pagemask;
L
Linus Torvalds 已提交
1739

1740
	col = (int)(from & (mtd->writesize - 1));
1741

1742 1743
	buf = ops->datbuf;
	oob = ops->oobbuf;
1744
	oob_required = oob ? 1 : 0;
1745

1746
	while (1) {
1747 1748
		unsigned int ecc_failures = mtd->ecc_stats.failed;

1749 1750
		bytes = min(mtd->writesize - col, readlen);
		aligned = (bytes == mtd->writesize);
1751

1752 1753 1754 1755 1756 1757 1758
		if (!aligned)
			use_bufpoi = 1;
		else if (chip->options & NAND_USE_BOUNCE_BUFFER)
			use_bufpoi = !virt_addr_valid(buf);
		else
			use_bufpoi = 0;

1759
		/* Is the current page in the buffer? */
1760
		if (realpage != chip->pagebuf || oob) {
1761 1762 1763 1764 1765
			bufpoi = use_bufpoi ? chip->buffers->databuf : buf;

			if (use_bufpoi && aligned)
				pr_debug("%s: using read bounce buffer for buf@%p\n",
						 __func__, buf);
1766

1767
read_retry:
1768
			chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
L
Linus Torvalds 已提交
1769

1770 1771 1772 1773
			/*
			 * Now read the page into the buffer.  Absent an error,
			 * the read methods return max bitflips per ecc step.
			 */
1774
			if (unlikely(ops->mode == MTD_OPS_RAW))
1775
				ret = chip->ecc.read_page_raw(mtd, chip, bufpoi,
1776 1777
							      oob_required,
							      page);
1778 1779
			else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
				 !oob)
1780
				ret = chip->ecc.read_subpage(mtd, chip,
1781 1782
							col, bytes, bufpoi,
							page);
1783
			else
1784
				ret = chip->ecc.read_page(mtd, chip, bufpoi,
1785
							  oob_required, page);
1786
			if (ret < 0) {
1787
				if (use_bufpoi)
1788 1789
					/* Invalidate page cache */
					chip->pagebuf = -1;
L
Linus Torvalds 已提交
1790
				break;
1791
			}
1792

1793 1794
			max_bitflips = max_t(unsigned int, max_bitflips, ret);

1795
			/* Transfer not aligned data */
1796
			if (use_bufpoi) {
1797
				if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
1798
				    !(mtd->ecc_stats.failed - ecc_failures) &&
1799
				    (ops->mode != MTD_OPS_RAW)) {
1800
					chip->pagebuf = realpage;
1801 1802
					chip->pagebuf_bitflips = ret;
				} else {
1803 1804
					/* Invalidate page cache */
					chip->pagebuf = -1;
1805
				}
1806
				memcpy(buf, chip->buffers->databuf + col, bytes);
1807 1808
			}

1809
			if (unlikely(oob)) {
1810 1811 1812 1813 1814 1815 1816
				int toread = min(oobreadlen, max_oobsize);

				if (toread) {
					oob = nand_transfer_oob(chip,
						oob, ops, toread);
					oobreadlen -= toread;
				}
1817
			}
1818 1819 1820 1821 1822 1823 1824 1825

			if (chip->options & NAND_NEED_READRDY) {
				/* Apply delay or wait for ready/busy pin */
				if (!chip->dev_ready)
					udelay(chip->chip_delay);
				else
					nand_wait_ready(mtd);
			}
1826

1827
			if (mtd->ecc_stats.failed - ecc_failures) {
1828
				if (retry_mode + 1 < chip->read_retries) {
1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844
					retry_mode++;
					ret = nand_setup_read_retry(mtd,
							retry_mode);
					if (ret < 0)
						break;

					/* Reset failures; retry */
					mtd->ecc_stats.failed = ecc_failures;
					goto read_retry;
				} else {
					/* No more retry modes; real failure */
					ecc_fail = true;
				}
			}

			buf += bytes;
1845
		} else {
1846
			memcpy(buf, chip->buffers->databuf + col, bytes);
1847
			buf += bytes;
1848 1849
			max_bitflips = max_t(unsigned int, max_bitflips,
					     chip->pagebuf_bitflips);
1850
		}
L
Linus Torvalds 已提交
1851

1852
		readlen -= bytes;
1853

1854 1855 1856 1857 1858 1859 1860 1861
		/* Reset to retry mode 0 */
		if (retry_mode) {
			ret = nand_setup_read_retry(mtd, 0);
			if (ret < 0)
				break;
			retry_mode = 0;
		}

1862
		if (!readlen)
1863
			break;
L
Linus Torvalds 已提交
1864

1865
		/* For subsequent reads align to page boundary */
L
Linus Torvalds 已提交
1866 1867 1868 1869
		col = 0;
		/* Increment page address */
		realpage++;

1870
		page = realpage & chip->pagemask;
L
Linus Torvalds 已提交
1871 1872 1873
		/* Check, if we cross a chip boundary */
		if (!page) {
			chipnr++;
1874 1875
			chip->select_chip(mtd, -1);
			chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
1876 1877
		}
	}
1878
	chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
1879

1880
	ops->retlen = ops->len - (size_t) readlen;
1881 1882
	if (oob)
		ops->oobretlen = ops->ooblen - oobreadlen;
L
Linus Torvalds 已提交
1883

1884
	if (ret < 0)
1885 1886
		return ret;

1887
	if (ecc_fail)
1888 1889
		return -EBADMSG;

1890
	return max_bitflips;
1891 1892 1893
}

/**
L
Lucas De Marchi 已提交
1894
 * nand_read - [MTD Interface] MTD compatibility function for nand_do_read_ecc
1895 1896 1897 1898 1899
 * @mtd: MTD device structure
 * @from: offset to read from
 * @len: number of bytes to read
 * @retlen: pointer to variable to store the number of read bytes
 * @buf: the databuffer to put data
1900
 *
1901
 * Get hold of the chip and call nand_do_read.
1902 1903 1904 1905
 */
static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
		     size_t *retlen, uint8_t *buf)
{
1906
	struct mtd_oob_ops ops;
1907 1908
	int ret;

1909
	nand_get_device(mtd, FL_READING);
1910
	memset(&ops, 0, sizeof(ops));
1911 1912
	ops.len = len;
	ops.datbuf = buf;
1913
	ops.mode = MTD_OPS_PLACE_OOB;
1914 1915
	ret = nand_do_read_ops(mtd, from, &ops);
	*retlen = ops.retlen;
1916 1917
	nand_release_device(mtd);
	return ret;
L
Linus Torvalds 已提交
1918 1919
}

1920
/**
1921
 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
1922 1923 1924
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @page: page number to read
1925 1926
 */
static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
1927
			     int page)
1928
{
1929
	chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1930
	chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1931
	return 0;
1932 1933 1934
}

/**
1935
 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
1936
 *			    with syndromes
1937 1938 1939
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @page: page number to read
1940 1941
 */
static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1942
				  int page)
1943 1944 1945 1946
{
	int length = mtd->oobsize;
	int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
	int eccsize = chip->ecc.size;
1947
	uint8_t *bufpoi = chip->oob_poi;
1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967
	int i, toread, sndrnd = 0, pos;

	chip->cmdfunc(mtd, NAND_CMD_READ0, chip->ecc.size, page);
	for (i = 0; i < chip->ecc.steps; i++) {
		if (sndrnd) {
			pos = eccsize + i * (eccsize + chunk);
			if (mtd->writesize > 512)
				chip->cmdfunc(mtd, NAND_CMD_RNDOUT, pos, -1);
			else
				chip->cmdfunc(mtd, NAND_CMD_READ0, pos, page);
		} else
			sndrnd = 1;
		toread = min_t(int, length, chunk);
		chip->read_buf(mtd, bufpoi, toread);
		bufpoi += toread;
		length -= toread;
	}
	if (length > 0)
		chip->read_buf(mtd, bufpoi, length);

1968
	return 0;
1969 1970 1971
}

/**
1972
 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
1973 1974 1975
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @page: page number to write
1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990
 */
static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
			      int page)
{
	int status = 0;
	const uint8_t *buf = chip->oob_poi;
	int length = mtd->oobsize;

	chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
	chip->write_buf(mtd, buf, length);
	/* Send command to program the OOB data */
	chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);

	status = chip->waitfunc(mtd, chip);

S
Savin Zlobec 已提交
1991
	return status & NAND_STATUS_FAIL ? -EIO : 0;
1992 1993 1994
}

/**
1995
 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
1996 1997 1998 1999
 *			     with syndrome - only for large page flash
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @page: page number to write
2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
 */
static int nand_write_oob_syndrome(struct mtd_info *mtd,
				   struct nand_chip *chip, int page)
{
	int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
	int eccsize = chip->ecc.size, length = mtd->oobsize;
	int i, len, pos, status = 0, sndcmd = 0, steps = chip->ecc.steps;
	const uint8_t *bufpoi = chip->oob_poi;

	/*
	 * data-ecc-data-ecc ... ecc-oob
	 * or
	 * data-pad-ecc-pad-data-pad .... ecc-pad-oob
	 */
	if (!chip->ecc.prepad && !chip->ecc.postpad) {
		pos = steps * (eccsize + chunk);
		steps = 0;
	} else
2018
		pos = eccsize;
2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052

	chip->cmdfunc(mtd, NAND_CMD_SEQIN, pos, page);
	for (i = 0; i < steps; i++) {
		if (sndcmd) {
			if (mtd->writesize <= 512) {
				uint32_t fill = 0xFFFFFFFF;

				len = eccsize;
				while (len > 0) {
					int num = min_t(int, len, 4);
					chip->write_buf(mtd, (uint8_t *)&fill,
							num);
					len -= num;
				}
			} else {
				pos = eccsize + i * (eccsize + chunk);
				chip->cmdfunc(mtd, NAND_CMD_RNDIN, pos, -1);
			}
		} else
			sndcmd = 1;
		len = min_t(int, length, chunk);
		chip->write_buf(mtd, bufpoi, len);
		bufpoi += len;
		length -= len;
	}
	if (length > 0)
		chip->write_buf(mtd, bufpoi, length);

	chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
	status = chip->waitfunc(mtd, chip);

	return status & NAND_STATUS_FAIL ? -EIO : 0;
}

L
Linus Torvalds 已提交
2053
/**
2054
 * nand_do_read_oob - [INTERN] NAND read out-of-band
2055 2056 2057
 * @mtd: MTD device structure
 * @from: offset to read from
 * @ops: oob operations description structure
L
Linus Torvalds 已提交
2058
 *
2059
 * NAND read out-of-band data from the spare area.
L
Linus Torvalds 已提交
2060
 */
2061 2062
static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
			    struct mtd_oob_ops *ops)
L
Linus Torvalds 已提交
2063
{
2064
	int page, realpage, chipnr;
2065
	struct nand_chip *chip = mtd_to_nand(mtd);
2066
	struct mtd_ecc_stats stats;
2067 2068
	int readlen = ops->ooblen;
	int len;
2069
	uint8_t *buf = ops->oobbuf;
2070
	int ret = 0;
2071

2072
	pr_debug("%s: from = 0x%08Lx, len = %i\n",
2073
			__func__, (unsigned long long)from, readlen);
L
Linus Torvalds 已提交
2074

2075 2076
	stats = mtd->ecc_stats;

2077
	len = mtd_oobavail(mtd, ops);
2078 2079

	if (unlikely(ops->ooboffs >= len)) {
2080 2081
		pr_debug("%s: attempt to start read outside oob\n",
				__func__);
2082 2083 2084 2085 2086 2087 2088
		return -EINVAL;
	}

	/* Do not allow reads past end of device */
	if (unlikely(from >= mtd->size ||
		     ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
					(from >> chip->page_shift)) * len)) {
2089 2090
		pr_debug("%s: attempt to read beyond end of device\n",
				__func__);
2091 2092
		return -EINVAL;
	}
2093

2094
	chipnr = (int)(from >> chip->chip_shift);
2095
	chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
2096

2097 2098 2099
	/* Shift to get page */
	realpage = (int)(from >> chip->page_shift);
	page = realpage & chip->pagemask;
L
Linus Torvalds 已提交
2100

2101
	while (1) {
2102
		if (ops->mode == MTD_OPS_RAW)
2103
			ret = chip->ecc.read_oob_raw(mtd, chip, page);
2104
		else
2105 2106 2107 2108
			ret = chip->ecc.read_oob(mtd, chip, page);

		if (ret < 0)
			break;
2109 2110 2111

		len = min(len, readlen);
		buf = nand_transfer_oob(chip, buf, ops, len);
2112

2113 2114 2115 2116 2117 2118 2119 2120
		if (chip->options & NAND_NEED_READRDY) {
			/* Apply delay or wait for ready/busy pin */
			if (!chip->dev_ready)
				udelay(chip->chip_delay);
			else
				nand_wait_ready(mtd);
		}

2121
		readlen -= len;
S
Savin Zlobec 已提交
2122 2123 2124
		if (!readlen)
			break;

2125 2126 2127 2128 2129 2130 2131 2132 2133
		/* Increment page address */
		realpage++;

		page = realpage & chip->pagemask;
		/* Check, if we cross a chip boundary */
		if (!page) {
			chipnr++;
			chip->select_chip(mtd, -1);
			chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
2134 2135
		}
	}
2136
	chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
2137

2138 2139 2140 2141
	ops->oobretlen = ops->ooblen - readlen;

	if (ret < 0)
		return ret;
2142 2143 2144 2145 2146

	if (mtd->ecc_stats.failed - stats.failed)
		return -EBADMSG;

	return  mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
L
Linus Torvalds 已提交
2147 2148 2149
}

/**
2150
 * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
2151 2152 2153
 * @mtd: MTD device structure
 * @from: offset to read from
 * @ops: oob operation description structure
L
Linus Torvalds 已提交
2154
 *
2155
 * NAND read data and/or out-of-band data.
L
Linus Torvalds 已提交
2156
 */
2157 2158
static int nand_read_oob(struct mtd_info *mtd, loff_t from,
			 struct mtd_oob_ops *ops)
L
Linus Torvalds 已提交
2159
{
2160 2161 2162
	int ret = -ENOTSUPP;

	ops->retlen = 0;
L
Linus Torvalds 已提交
2163 2164

	/* Do not allow reads past end of device */
2165
	if (ops->datbuf && (from + ops->len) > mtd->size) {
2166 2167
		pr_debug("%s: attempt to read beyond end of device\n",
				__func__);
L
Linus Torvalds 已提交
2168 2169 2170
		return -EINVAL;
	}

2171
	nand_get_device(mtd, FL_READING);
L
Linus Torvalds 已提交
2172

2173
	switch (ops->mode) {
2174 2175 2176
	case MTD_OPS_PLACE_OOB:
	case MTD_OPS_AUTO_OOB:
	case MTD_OPS_RAW:
2177
		break;
L
Linus Torvalds 已提交
2178

2179 2180 2181
	default:
		goto out;
	}
L
Linus Torvalds 已提交
2182

2183 2184 2185 2186
	if (!ops->datbuf)
		ret = nand_do_read_oob(mtd, from, ops);
	else
		ret = nand_do_read_ops(mtd, from, ops);
2187

2188
out:
2189 2190 2191
	nand_release_device(mtd);
	return ret;
}
2192

L
Linus Torvalds 已提交
2193

2194
/**
2195
 * nand_write_page_raw - [INTERN] raw page write function
2196 2197 2198
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: data buffer
2199
 * @oob_required: must write chip->oob_poi to OOB
2200
 * @page: page number to write
2201
 *
2202
 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2203
 */
2204
static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
2205
			       const uint8_t *buf, int oob_required, int page)
2206 2207
{
	chip->write_buf(mtd, buf, mtd->writesize);
2208 2209
	if (oob_required)
		chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2210 2211

	return 0;
L
Linus Torvalds 已提交
2212 2213
}

2214
/**
2215
 * nand_write_page_raw_syndrome - [INTERN] raw page write function
2216 2217 2218
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: data buffer
2219
 * @oob_required: must write chip->oob_poi to OOB
2220
 * @page: page number to write
2221 2222 2223
 *
 * We need a special oob layout and handling even when ECC isn't checked.
 */
2224
static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
2225
					struct nand_chip *chip,
2226 2227
					const uint8_t *buf, int oob_required,
					int page)
2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242
{
	int eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	uint8_t *oob = chip->oob_poi;
	int steps, size;

	for (steps = chip->ecc.steps; steps > 0; steps--) {
		chip->write_buf(mtd, buf, eccsize);
		buf += eccsize;

		if (chip->ecc.prepad) {
			chip->write_buf(mtd, oob, chip->ecc.prepad);
			oob += chip->ecc.prepad;
		}

2243
		chip->write_buf(mtd, oob, eccbytes);
2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254
		oob += eccbytes;

		if (chip->ecc.postpad) {
			chip->write_buf(mtd, oob, chip->ecc.postpad);
			oob += chip->ecc.postpad;
		}
	}

	size = mtd->oobsize - (oob - chip->oob_poi);
	if (size)
		chip->write_buf(mtd, oob, size);
2255 2256

	return 0;
2257
}
2258
/**
2259
 * nand_write_page_swecc - [REPLACEABLE] software ECC based page write function
2260 2261 2262
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: data buffer
2263
 * @oob_required: must write chip->oob_poi to OOB
2264
 * @page: page number to write
2265
 */
2266
static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
2267 2268
				 const uint8_t *buf, int oob_required,
				 int page)
2269
{
2270 2271 2272
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
2273
	uint8_t *ecc_calc = chip->buffers->ecccalc;
2274
	const uint8_t *p = buf;
2275
	uint32_t *eccpos = chip->ecc.layout->eccpos;
2276

2277
	/* Software ECC calculation */
2278 2279
	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
		chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2280

2281 2282
	for (i = 0; i < chip->ecc.total; i++)
		chip->oob_poi[eccpos[i]] = ecc_calc[i];
2283

2284
	return chip->ecc.write_page_raw(mtd, chip, buf, 1, page);
2285
}
2286

2287
/**
2288
 * nand_write_page_hwecc - [REPLACEABLE] hardware ECC based page write function
2289 2290 2291
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: data buffer
2292
 * @oob_required: must write chip->oob_poi to OOB
2293
 * @page: page number to write
2294
 */
2295
static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
2296 2297
				  const uint8_t *buf, int oob_required,
				  int page)
2298 2299 2300 2301
{
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
2302
	uint8_t *ecc_calc = chip->buffers->ecccalc;
2303
	const uint8_t *p = buf;
2304
	uint32_t *eccpos = chip->ecc.layout->eccpos;
2305

2306 2307
	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
		chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
2308
		chip->write_buf(mtd, p, eccsize);
2309
		chip->ecc.calculate(mtd, p, &ecc_calc[i]);
2310 2311
	}

2312 2313 2314 2315
	for (i = 0; i < chip->ecc.total; i++)
		chip->oob_poi[eccpos[i]] = ecc_calc[i];

	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
2316 2317

	return 0;
2318 2319
}

2320 2321

/**
2322
 * nand_write_subpage_hwecc - [REPLACEABLE] hardware ECC based subpage write
2323 2324
 * @mtd:	mtd info structure
 * @chip:	nand chip info structure
2325
 * @offset:	column address of subpage within the page
2326
 * @data_len:	data length
2327
 * @buf:	data buffer
2328
 * @oob_required: must write chip->oob_poi to OOB
2329
 * @page: page number to write
2330 2331 2332
 */
static int nand_write_subpage_hwecc(struct mtd_info *mtd,
				struct nand_chip *chip, uint32_t offset,
2333
				uint32_t data_len, const uint8_t *buf,
2334
				int oob_required, int page)
2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351
{
	uint8_t *oob_buf  = chip->oob_poi;
	uint8_t *ecc_calc = chip->buffers->ecccalc;
	int ecc_size      = chip->ecc.size;
	int ecc_bytes     = chip->ecc.bytes;
	int ecc_steps     = chip->ecc.steps;
	uint32_t *eccpos  = chip->ecc.layout->eccpos;
	uint32_t start_step = offset / ecc_size;
	uint32_t end_step   = (offset + data_len - 1) / ecc_size;
	int oob_bytes       = mtd->oobsize / ecc_steps;
	int step, i;

	for (step = 0; step < ecc_steps; step++) {
		/* configure controller for WRITE access */
		chip->ecc.hwctl(mtd, NAND_ECC_WRITE);

		/* write data (untouched subpages already masked by 0xFF) */
2352
		chip->write_buf(mtd, buf, ecc_size);
2353 2354 2355 2356 2357

		/* mask ECC of un-touched subpages by padding 0xFF */
		if ((step < start_step) || (step > end_step))
			memset(ecc_calc, 0xff, ecc_bytes);
		else
2358
			chip->ecc.calculate(mtd, buf, ecc_calc);
2359 2360 2361 2362 2363 2364

		/* mask OOB of un-touched subpages by padding 0xFF */
		/* if oob_required, preserve OOB metadata of written subpage */
		if (!oob_required || (step < start_step) || (step > end_step))
			memset(oob_buf, 0xff, oob_bytes);

2365
		buf += ecc_size;
2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382
		ecc_calc += ecc_bytes;
		oob_buf  += oob_bytes;
	}

	/* copy calculated ECC for whole page to chip->buffer->oob */
	/* this include masked-value(0xFF) for unwritten subpages */
	ecc_calc = chip->buffers->ecccalc;
	for (i = 0; i < chip->ecc.total; i++)
		chip->oob_poi[eccpos[i]] = ecc_calc[i];

	/* write OOB buffer to NAND device */
	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);

	return 0;
}


2383
/**
2384
 * nand_write_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page write
2385 2386 2387
 * @mtd: mtd info structure
 * @chip: nand chip info structure
 * @buf: data buffer
2388
 * @oob_required: must write chip->oob_poi to OOB
2389
 * @page: page number to write
L
Linus Torvalds 已提交
2390
 *
2391 2392
 * The hw generator calculates the error syndrome automatically. Therefore we
 * need a special oob layout and handling.
2393
 */
2394
static int nand_write_page_syndrome(struct mtd_info *mtd,
2395
				    struct nand_chip *chip,
2396 2397
				    const uint8_t *buf, int oob_required,
				    int page)
L
Linus Torvalds 已提交
2398
{
2399 2400 2401 2402 2403
	int i, eccsize = chip->ecc.size;
	int eccbytes = chip->ecc.bytes;
	int eccsteps = chip->ecc.steps;
	const uint8_t *p = buf;
	uint8_t *oob = chip->oob_poi;
L
Linus Torvalds 已提交
2404

2405
	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
L
Linus Torvalds 已提交
2406

2407 2408
		chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
		chip->write_buf(mtd, p, eccsize);
2409

2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421
		if (chip->ecc.prepad) {
			chip->write_buf(mtd, oob, chip->ecc.prepad);
			oob += chip->ecc.prepad;
		}

		chip->ecc.calculate(mtd, p, oob);
		chip->write_buf(mtd, oob, eccbytes);
		oob += eccbytes;

		if (chip->ecc.postpad) {
			chip->write_buf(mtd, oob, chip->ecc.postpad);
			oob += chip->ecc.postpad;
L
Linus Torvalds 已提交
2422 2423
		}
	}
2424 2425

	/* Calculate remaining oob bytes */
2426
	i = mtd->oobsize - (oob - chip->oob_poi);
2427 2428
	if (i)
		chip->write_buf(mtd, oob, i);
2429 2430

	return 0;
2431 2432 2433
}

/**
2434
 * nand_write_page - [REPLACEABLE] write one page
2435 2436
 * @mtd: MTD device structure
 * @chip: NAND chip descriptor
2437 2438
 * @offset: address offset within the page
 * @data_len: length of actual data to be written
2439
 * @buf: the data to write
2440
 * @oob_required: must write chip->oob_poi to OOB
2441 2442 2443
 * @page: page number to write
 * @cached: cached programming
 * @raw: use _raw version of write_page
2444 2445
 */
static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
2446 2447
		uint32_t offset, int data_len, const uint8_t *buf,
		int oob_required, int page, int cached, int raw)
2448
{
2449 2450 2451 2452 2453 2454 2455
	int status, subpage;

	if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
		chip->ecc.write_subpage)
		subpage = offset || (data_len < mtd->writesize);
	else
		subpage = 0;
2456 2457 2458

	chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);

2459
	if (unlikely(raw))
2460
		status = chip->ecc.write_page_raw(mtd, chip, buf,
2461
						  oob_required, page);
2462 2463
	else if (subpage)
		status = chip->ecc.write_subpage(mtd, chip, offset, data_len,
2464
						 buf, oob_required, page);
2465
	else
2466 2467
		status = chip->ecc.write_page(mtd, chip, buf, oob_required,
					      page);
2468 2469 2470

	if (status < 0)
		return status;
2471 2472

	/*
2473
	 * Cached progamming disabled for now. Not sure if it's worth the
2474
	 * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s).
2475 2476 2477
	 */
	cached = 0;

2478
	if (!cached || !NAND_HAS_CACHEPROG(chip)) {
2479 2480

		chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
2481
		status = chip->waitfunc(mtd, chip);
2482 2483
		/*
		 * See if operation failed and additional status checks are
2484
		 * available.
2485 2486 2487 2488 2489 2490 2491 2492 2493
		 */
		if ((status & NAND_STATUS_FAIL) && (chip->errstat))
			status = chip->errstat(mtd, chip, FL_WRITING, status,
					       page);

		if (status & NAND_STATUS_FAIL)
			return -EIO;
	} else {
		chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
2494
		status = chip->waitfunc(mtd, chip);
2495 2496 2497
	}

	return 0;
L
Linus Torvalds 已提交
2498 2499
}

2500
/**
2501
 * nand_fill_oob - [INTERN] Transfer client buffer to oob
2502
 * @mtd: MTD device structure
2503 2504 2505
 * @oob: oob data buffer
 * @len: oob data write length
 * @ops: oob ops structure
2506
 */
2507 2508
static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len,
			      struct mtd_oob_ops *ops)
2509
{
2510
	struct nand_chip *chip = mtd_to_nand(mtd);
2511 2512 2513 2514 2515 2516 2517

	/*
	 * Initialise to all 0xFF, to avoid the possibility of left over OOB
	 * data from a previous OOB read.
	 */
	memset(chip->oob_poi, 0xff, mtd->oobsize);

2518
	switch (ops->mode) {
2519

2520 2521
	case MTD_OPS_PLACE_OOB:
	case MTD_OPS_RAW:
2522 2523 2524
		memcpy(chip->oob_poi + ops->ooboffs, oob, len);
		return oob + len;

2525
	case MTD_OPS_AUTO_OOB: {
2526
		struct nand_oobfree *free = chip->ecc.layout->oobfree;
2527 2528
		uint32_t boffs = 0, woffs = ops->ooboffs;
		size_t bytes = 0;
2529

2530
		for (; free->length && len; free++, len -= bytes) {
2531
			/* Write request not from offset 0? */
2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544
			if (unlikely(woffs)) {
				if (woffs >= free->length) {
					woffs -= free->length;
					continue;
				}
				boffs = free->offset + woffs;
				bytes = min_t(size_t, len,
					      (free->length - woffs));
				woffs = 0;
			} else {
				bytes = min_t(size_t, len, free->length);
				boffs = free->offset;
			}
2545
			memcpy(chip->oob_poi + boffs, oob, bytes);
2546 2547 2548 2549 2550 2551 2552 2553 2554 2555
			oob += bytes;
		}
		return oob;
	}
	default:
		BUG();
	}
	return NULL;
}

2556
#define NOTALIGNED(x)	((x & (chip->subpagesize - 1)) != 0)
L
Linus Torvalds 已提交
2557 2558

/**
2559
 * nand_do_write_ops - [INTERN] NAND write with ECC
2560 2561 2562
 * @mtd: MTD device structure
 * @to: offset to write to
 * @ops: oob operations description structure
L
Linus Torvalds 已提交
2563
 *
2564
 * NAND write with ECC.
L
Linus Torvalds 已提交
2565
 */
2566 2567
static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
			     struct mtd_oob_ops *ops)
L
Linus Torvalds 已提交
2568
{
2569
	int chipnr, realpage, page, blockmask, column;
2570
	struct nand_chip *chip = mtd_to_nand(mtd);
2571
	uint32_t writelen = ops->len;
2572 2573

	uint32_t oobwritelen = ops->ooblen;
2574
	uint32_t oobmaxlen = mtd_oobavail(mtd, ops);
2575

2576 2577
	uint8_t *oob = ops->oobbuf;
	uint8_t *buf = ops->datbuf;
2578
	int ret;
2579
	int oob_required = oob ? 1 : 0;
L
Linus Torvalds 已提交
2580

2581
	ops->retlen = 0;
2582 2583
	if (!writelen)
		return 0;
L
Linus Torvalds 已提交
2584

2585
	/* Reject writes, which are not page aligned */
2586
	if (NOTALIGNED(to) || NOTALIGNED(ops->len)) {
2587 2588
		pr_notice("%s: attempt to write non page aligned data\n",
			   __func__);
L
Linus Torvalds 已提交
2589 2590 2591
		return -EINVAL;
	}

2592
	column = to & (mtd->writesize - 1);
L
Linus Torvalds 已提交
2593

2594 2595 2596
	chipnr = (int)(to >> chip->chip_shift);
	chip->select_chip(mtd, chipnr);

L
Linus Torvalds 已提交
2597
	/* Check, if it is write protected */
2598 2599 2600 2601
	if (nand_check_wp(mtd)) {
		ret = -EIO;
		goto err_out;
	}
L
Linus Torvalds 已提交
2602

2603 2604 2605 2606 2607
	realpage = (int)(to >> chip->page_shift);
	page = realpage & chip->pagemask;
	blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;

	/* Invalidate the page cache, when we write to the cached page */
2608 2609
	if (to <= ((loff_t)chip->pagebuf << chip->page_shift) &&
	    ((loff_t)chip->pagebuf << chip->page_shift) < (to + ops->len))
2610
		chip->pagebuf = -1;
2611

2612
	/* Don't allow multipage oob writes with offset */
2613 2614 2615 2616
	if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
		ret = -EINVAL;
		goto err_out;
	}
2617

2618
	while (1) {
2619
		int bytes = mtd->writesize;
2620
		int cached = writelen > bytes && page != blockmask;
2621
		uint8_t *wbuf = buf;
2622 2623 2624 2625 2626 2627 2628 2629 2630
		int use_bufpoi;
		int part_pagewr = (column || writelen < (mtd->writesize - 1));

		if (part_pagewr)
			use_bufpoi = 1;
		else if (chip->options & NAND_USE_BOUNCE_BUFFER)
			use_bufpoi = !virt_addr_valid(buf);
		else
			use_bufpoi = 0;
2631

2632 2633 2634 2635
		/* Partial page write?, or need to use bounce buffer */
		if (use_bufpoi) {
			pr_debug("%s: using write bounce buffer for buf@%p\n",
					 __func__, buf);
2636
			cached = 0;
2637 2638
			if (part_pagewr)
				bytes = min_t(int, bytes - column, writelen);
2639 2640 2641 2642 2643
			chip->pagebuf = -1;
			memset(chip->buffers->databuf, 0xff, mtd->writesize);
			memcpy(&chip->buffers->databuf[column], buf, bytes);
			wbuf = chip->buffers->databuf;
		}
L
Linus Torvalds 已提交
2644

2645 2646
		if (unlikely(oob)) {
			size_t len = min(oobwritelen, oobmaxlen);
2647
			oob = nand_fill_oob(mtd, oob, len, ops);
2648
			oobwritelen -= len;
2649 2650 2651
		} else {
			/* We still need to erase leftover OOB data */
			memset(chip->oob_poi, 0xff, mtd->oobsize);
2652
		}
2653 2654 2655
		ret = chip->write_page(mtd, chip, column, bytes, wbuf,
					oob_required, page, cached,
					(ops->mode == MTD_OPS_RAW));
2656 2657 2658 2659 2660 2661 2662
		if (ret)
			break;

		writelen -= bytes;
		if (!writelen)
			break;

2663
		column = 0;
2664 2665 2666 2667 2668 2669 2670 2671 2672
		buf += bytes;
		realpage++;

		page = realpage & chip->pagemask;
		/* Check, if we cross a chip boundary */
		if (!page) {
			chipnr++;
			chip->select_chip(mtd, -1);
			chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
2673 2674
		}
	}
2675 2676

	ops->retlen = ops->len - writelen;
2677 2678
	if (unlikely(oob))
		ops->oobretlen = ops->ooblen;
2679 2680 2681

err_out:
	chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
2682 2683 2684
	return ret;
}

2685 2686
/**
 * panic_nand_write - [MTD Interface] NAND write with ECC
2687 2688 2689 2690 2691
 * @mtd: MTD device structure
 * @to: offset to write to
 * @len: number of bytes to write
 * @retlen: pointer to variable to store the number of written bytes
 * @buf: the data to write
2692 2693 2694 2695 2696 2697 2698
 *
 * NAND write with ECC. Used when performing writes in interrupt context, this
 * may for example be called by mtdoops when writing an oops while in panic.
 */
static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
			    size_t *retlen, const uint8_t *buf)
{
2699
	struct nand_chip *chip = mtd_to_nand(mtd);
2700
	struct mtd_oob_ops ops;
2701 2702
	int ret;

2703
	/* Wait for the device to get ready */
2704 2705
	panic_nand_wait(mtd, chip, 400);

2706
	/* Grab the device */
2707 2708
	panic_nand_get_device(chip, mtd, FL_WRITING);

2709
	memset(&ops, 0, sizeof(ops));
2710 2711
	ops.len = len;
	ops.datbuf = (uint8_t *)buf;
2712
	ops.mode = MTD_OPS_PLACE_OOB;
2713

2714
	ret = nand_do_write_ops(mtd, to, &ops);
2715

2716
	*retlen = ops.retlen;
2717 2718 2719
	return ret;
}

2720
/**
2721
 * nand_write - [MTD Interface] NAND write with ECC
2722 2723 2724 2725 2726
 * @mtd: MTD device structure
 * @to: offset to write to
 * @len: number of bytes to write
 * @retlen: pointer to variable to store the number of written bytes
 * @buf: the data to write
2727
 *
2728
 * NAND write with ECC.
2729
 */
2730 2731
static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
			  size_t *retlen, const uint8_t *buf)
2732
{
2733
	struct mtd_oob_ops ops;
2734 2735
	int ret;

2736
	nand_get_device(mtd, FL_WRITING);
2737
	memset(&ops, 0, sizeof(ops));
2738 2739
	ops.len = len;
	ops.datbuf = (uint8_t *)buf;
2740
	ops.mode = MTD_OPS_PLACE_OOB;
2741 2742
	ret = nand_do_write_ops(mtd, to, &ops);
	*retlen = ops.retlen;
2743
	nand_release_device(mtd);
2744
	return ret;
2745
}
2746

L
Linus Torvalds 已提交
2747
/**
2748
 * nand_do_write_oob - [MTD Interface] NAND write out-of-band
2749 2750 2751
 * @mtd: MTD device structure
 * @to: offset to write to
 * @ops: oob operation description structure
L
Linus Torvalds 已提交
2752
 *
2753
 * NAND write out-of-band.
L
Linus Torvalds 已提交
2754
 */
2755 2756
static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
			     struct mtd_oob_ops *ops)
L
Linus Torvalds 已提交
2757
{
2758
	int chipnr, page, status, len;
2759
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
2760

2761
	pr_debug("%s: to = 0x%08x, len = %i\n",
2762
			 __func__, (unsigned int)to, (int)ops->ooblen);
L
Linus Torvalds 已提交
2763

2764
	len = mtd_oobavail(mtd, ops);
2765

L
Linus Torvalds 已提交
2766
	/* Do not allow write past end of page */
2767
	if ((ops->ooboffs + ops->ooblen) > len) {
2768 2769
		pr_debug("%s: attempt to write past end of page\n",
				__func__);
L
Linus Torvalds 已提交
2770 2771 2772
		return -EINVAL;
	}

2773
	if (unlikely(ops->ooboffs >= len)) {
2774 2775
		pr_debug("%s: attempt to start write outside oob\n",
				__func__);
2776 2777 2778
		return -EINVAL;
	}

2779
	/* Do not allow write past end of device */
2780 2781 2782 2783
	if (unlikely(to >= mtd->size ||
		     ops->ooboffs + ops->ooblen >
			((mtd->size >> chip->page_shift) -
			 (to >> chip->page_shift)) * len)) {
2784 2785
		pr_debug("%s: attempt to write beyond end of device\n",
				__func__);
2786 2787 2788
		return -EINVAL;
	}

2789
	chipnr = (int)(to >> chip->chip_shift);
2790
	chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
2791

2792 2793 2794 2795 2796 2797 2798 2799 2800
	/* Shift to get page */
	page = (int)(to >> chip->page_shift);

	/*
	 * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
	 * of my DiskOnChip 2000 test units) will clear the whole data page too
	 * if we don't do this. I have no clue why, but I seem to have 'fixed'
	 * it in the doc2000 driver in August 1999.  dwmw2.
	 */
2801
	chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
L
Linus Torvalds 已提交
2802 2803

	/* Check, if it is write protected */
2804 2805
	if (nand_check_wp(mtd)) {
		chip->select_chip(mtd, -1);
2806
		return -EROFS;
2807
	}
2808

L
Linus Torvalds 已提交
2809
	/* Invalidate the page cache, if we write to the cached page */
2810 2811
	if (page == chip->pagebuf)
		chip->pagebuf = -1;
L
Linus Torvalds 已提交
2812

2813
	nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops);
2814

2815
	if (ops->mode == MTD_OPS_RAW)
2816 2817 2818
		status = chip->ecc.write_oob_raw(mtd, chip, page & chip->pagemask);
	else
		status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);
L
Linus Torvalds 已提交
2819

2820 2821
	chip->select_chip(mtd, -1);

2822 2823
	if (status)
		return status;
L
Linus Torvalds 已提交
2824

2825
	ops->oobretlen = ops->ooblen;
L
Linus Torvalds 已提交
2826

2827
	return 0;
2828 2829 2830 2831
}

/**
 * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
2832 2833 2834
 * @mtd: MTD device structure
 * @to: offset to write to
 * @ops: oob operation description structure
2835 2836 2837 2838 2839 2840 2841 2842 2843
 */
static int nand_write_oob(struct mtd_info *mtd, loff_t to,
			  struct mtd_oob_ops *ops)
{
	int ret = -ENOTSUPP;

	ops->retlen = 0;

	/* Do not allow writes past end of device */
2844
	if (ops->datbuf && (to + ops->len) > mtd->size) {
2845 2846
		pr_debug("%s: attempt to write beyond end of device\n",
				__func__);
2847 2848 2849
		return -EINVAL;
	}

2850
	nand_get_device(mtd, FL_WRITING);
2851

2852
	switch (ops->mode) {
2853 2854 2855
	case MTD_OPS_PLACE_OOB:
	case MTD_OPS_AUTO_OOB:
	case MTD_OPS_RAW:
2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866
		break;

	default:
		goto out;
	}

	if (!ops->datbuf)
		ret = nand_do_write_oob(mtd, to, ops);
	else
		ret = nand_do_write_ops(mtd, to, ops);

2867
out:
L
Linus Torvalds 已提交
2868 2869 2870 2871 2872
	nand_release_device(mtd);
	return ret;
}

/**
2873
 * single_erase - [GENERIC] NAND standard block erase command function
2874 2875
 * @mtd: MTD device structure
 * @page: the page address of the block which will be erased
L
Linus Torvalds 已提交
2876
 *
2877
 * Standard erase command for NAND chips. Returns NAND status.
L
Linus Torvalds 已提交
2878
 */
2879
static int single_erase(struct mtd_info *mtd, int page)
L
Linus Torvalds 已提交
2880
{
2881
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
2882
	/* Send commands to erase a block */
2883 2884
	chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);
	chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);
2885 2886

	return chip->waitfunc(mtd, chip);
L
Linus Torvalds 已提交
2887 2888 2889 2890
}

/**
 * nand_erase - [MTD Interface] erase block(s)
2891 2892
 * @mtd: MTD device structure
 * @instr: erase instruction
L
Linus Torvalds 已提交
2893
 *
2894
 * Erase one ore more blocks.
L
Linus Torvalds 已提交
2895
 */
2896
static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
L
Linus Torvalds 已提交
2897
{
2898
	return nand_erase_nand(mtd, instr, 0);
L
Linus Torvalds 已提交
2899
}
2900

L
Linus Torvalds 已提交
2901
/**
2902
 * nand_erase_nand - [INTERN] erase block(s)
2903 2904 2905
 * @mtd: MTD device structure
 * @instr: erase instruction
 * @allowbbt: allow erasing the bbt area
L
Linus Torvalds 已提交
2906
 *
2907
 * Erase one ore more blocks.
L
Linus Torvalds 已提交
2908
 */
2909 2910
int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
		    int allowbbt)
L
Linus Torvalds 已提交
2911
{
2912
	int page, status, pages_per_block, ret, chipnr;
2913
	struct nand_chip *chip = mtd_to_nand(mtd);
2914
	loff_t len;
L
Linus Torvalds 已提交
2915

2916 2917 2918
	pr_debug("%s: start = 0x%012llx, len = %llu\n",
			__func__, (unsigned long long)instr->addr,
			(unsigned long long)instr->len);
L
Linus Torvalds 已提交
2919

2920
	if (check_offs_len(mtd, instr->addr, instr->len))
L
Linus Torvalds 已提交
2921 2922 2923
		return -EINVAL;

	/* Grab the lock and see if the device is available */
2924
	nand_get_device(mtd, FL_ERASING);
L
Linus Torvalds 已提交
2925 2926

	/* Shift to get first page */
2927 2928
	page = (int)(instr->addr >> chip->page_shift);
	chipnr = (int)(instr->addr >> chip->chip_shift);
L
Linus Torvalds 已提交
2929 2930

	/* Calculate pages in each block */
2931
	pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
L
Linus Torvalds 已提交
2932 2933

	/* Select the NAND device */
2934
	chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
2935 2936 2937

	/* Check, if it is write protected */
	if (nand_check_wp(mtd)) {
2938 2939
		pr_debug("%s: device is write protected!\n",
				__func__);
L
Linus Torvalds 已提交
2940 2941 2942 2943 2944 2945 2946 2947 2948 2949
		instr->state = MTD_ERASE_FAILED;
		goto erase_exit;
	}

	/* Loop through the pages */
	len = instr->len;

	instr->state = MTD_ERASING;

	while (len) {
W
Wolfram Sang 已提交
2950
		/* Check if we have a bad block, we do not erase bad blocks! */
2951 2952
		if (nand_block_checkbad(mtd, ((loff_t) page) <<
					chip->page_shift, 0, allowbbt)) {
2953 2954
			pr_warn("%s: attempt to erase a bad block at page 0x%08x\n",
				    __func__, page);
L
Linus Torvalds 已提交
2955 2956 2957
			instr->state = MTD_ERASE_FAILED;
			goto erase_exit;
		}
2958

2959 2960
		/*
		 * Invalidate the page cache, if we erase the block which
2961
		 * contains the current cached page.
2962 2963 2964 2965
		 */
		if (page <= chip->pagebuf && chip->pagebuf <
		    (page + pages_per_block))
			chip->pagebuf = -1;
L
Linus Torvalds 已提交
2966

2967
		status = chip->erase(mtd, page & chip->pagemask);
L
Linus Torvalds 已提交
2968

2969 2970 2971 2972 2973 2974 2975
		/*
		 * See if operation failed and additional status checks are
		 * available
		 */
		if ((status & NAND_STATUS_FAIL) && (chip->errstat))
			status = chip->errstat(mtd, chip, FL_ERASING,
					       status, page);
2976

L
Linus Torvalds 已提交
2977
		/* See if block erase succeeded */
2978
		if (status & NAND_STATUS_FAIL) {
2979 2980
			pr_debug("%s: failed erase, page 0x%08x\n",
					__func__, page);
L
Linus Torvalds 已提交
2981
			instr->state = MTD_ERASE_FAILED;
2982 2983
			instr->fail_addr =
				((loff_t)page << chip->page_shift);
L
Linus Torvalds 已提交
2984 2985
			goto erase_exit;
		}
2986

L
Linus Torvalds 已提交
2987
		/* Increment page address and decrement length */
2988
		len -= (1ULL << chip->phys_erase_shift);
L
Linus Torvalds 已提交
2989 2990 2991
		page += pages_per_block;

		/* Check, if we cross a chip boundary */
2992
		if (len && !(page & chip->pagemask)) {
L
Linus Torvalds 已提交
2993
			chipnr++;
2994 2995
			chip->select_chip(mtd, -1);
			chip->select_chip(mtd, chipnr);
L
Linus Torvalds 已提交
2996 2997 2998 2999
		}
	}
	instr->state = MTD_ERASE_DONE;

3000
erase_exit:
L
Linus Torvalds 已提交
3001 3002 3003 3004

	ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;

	/* Deselect and wake up anyone waiting on the device */
3005
	chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
3006 3007
	nand_release_device(mtd);

3008 3009 3010 3011
	/* Do call back function */
	if (!ret)
		mtd_erase_callback(instr);

L
Linus Torvalds 已提交
3012 3013 3014 3015 3016 3017
	/* Return more or less happy */
	return ret;
}

/**
 * nand_sync - [MTD Interface] sync
3018
 * @mtd: MTD device structure
L
Linus Torvalds 已提交
3019
 *
3020
 * Sync is actually a wait for chip ready function.
L
Linus Torvalds 已提交
3021
 */
3022
static void nand_sync(struct mtd_info *mtd)
L
Linus Torvalds 已提交
3023
{
3024
	pr_debug("%s: called\n", __func__);
L
Linus Torvalds 已提交
3025 3026

	/* Grab the lock and see if the device is available */
3027
	nand_get_device(mtd, FL_SYNCING);
L
Linus Torvalds 已提交
3028
	/* Release it and go back */
3029
	nand_release_device(mtd);
L
Linus Torvalds 已提交
3030 3031 3032
}

/**
3033
 * nand_block_isbad - [MTD Interface] Check if block at offset is bad
3034 3035
 * @mtd: MTD device structure
 * @offs: offset relative to mtd start
L
Linus Torvalds 已提交
3036
 */
3037
static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
L
Linus Torvalds 已提交
3038
{
3039
	return nand_block_checkbad(mtd, offs, 1, 0);
L
Linus Torvalds 已提交
3040 3041 3042
}

/**
3043
 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
3044 3045
 * @mtd: MTD device structure
 * @ofs: offset relative to mtd start
L
Linus Torvalds 已提交
3046
 */
3047
static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
L
Linus Torvalds 已提交
3048 3049 3050
{
	int ret;

3051 3052
	ret = nand_block_isbad(mtd, ofs);
	if (ret) {
3053
		/* If it was bad already, return success and do nothing */
L
Linus Torvalds 已提交
3054 3055
		if (ret > 0)
			return 0;
3056 3057
		return ret;
	}
L
Linus Torvalds 已提交
3058

3059
	return nand_block_markbad_lowlevel(mtd, ofs);
L
Linus Torvalds 已提交
3060 3061
}

3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072
/**
 * nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand
 * @mtd: MTD device structure
 * @chip: nand chip info structure
 * @addr: feature address.
 * @subfeature_param: the subfeature parameters, a four bytes array.
 */
static int nand_onfi_set_features(struct mtd_info *mtd, struct nand_chip *chip,
			int addr, uint8_t *subfeature_param)
{
	int status;
3073
	int i;
3074

3075 3076 3077
	if (!chip->onfi_version ||
	    !(le16_to_cpu(chip->onfi_params.opt_cmd)
	      & ONFI_OPT_CMD_SET_GET_FEATURES))
3078 3079 3080
		return -EINVAL;

	chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, addr, -1);
3081 3082 3083
	for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
		chip->write_byte(mtd, subfeature_param[i]);

3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099
	status = chip->waitfunc(mtd, chip);
	if (status & NAND_STATUS_FAIL)
		return -EIO;
	return 0;
}

/**
 * nand_onfi_get_features- [REPLACEABLE] get features for ONFI nand
 * @mtd: MTD device structure
 * @chip: nand chip info structure
 * @addr: feature address.
 * @subfeature_param: the subfeature parameters, a four bytes array.
 */
static int nand_onfi_get_features(struct mtd_info *mtd, struct nand_chip *chip,
			int addr, uint8_t *subfeature_param)
{
3100 3101
	int i;

3102 3103 3104
	if (!chip->onfi_version ||
	    !(le16_to_cpu(chip->onfi_params.opt_cmd)
	      & ONFI_OPT_CMD_SET_GET_FEATURES))
3105 3106 3107
		return -EINVAL;

	chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES, addr, -1);
3108 3109
	for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
		*subfeature_param++ = chip->read_byte(mtd);
3110 3111 3112
	return 0;
}

3113 3114
/**
 * nand_suspend - [MTD Interface] Suspend the NAND flash
3115
 * @mtd: MTD device structure
3116 3117 3118
 */
static int nand_suspend(struct mtd_info *mtd)
{
3119
	return nand_get_device(mtd, FL_PM_SUSPENDED);
3120 3121 3122 3123
}

/**
 * nand_resume - [MTD Interface] Resume the NAND flash
3124
 * @mtd: MTD device structure
3125 3126 3127
 */
static void nand_resume(struct mtd_info *mtd)
{
3128
	struct nand_chip *chip = mtd_to_nand(mtd);
3129

3130
	if (chip->state == FL_PM_SUSPENDED)
3131 3132
		nand_release_device(mtd);
	else
3133 3134
		pr_err("%s called for a chip which is not in suspended state\n",
			__func__);
3135 3136
}

S
Scott Branden 已提交
3137 3138 3139 3140 3141 3142 3143
/**
 * nand_shutdown - [MTD Interface] Finish the current NAND operation and
 *                 prevent further operations
 * @mtd: MTD device structure
 */
static void nand_shutdown(struct mtd_info *mtd)
{
3144
	nand_get_device(mtd, FL_PM_SUSPENDED);
S
Scott Branden 已提交
3145 3146
}

3147
/* Set default functions */
3148
static void nand_set_defaults(struct nand_chip *chip, int busw)
T
Thomas Gleixner 已提交
3149
{
L
Linus Torvalds 已提交
3150
	/* check for proper chip_delay setup, set 20us if not */
3151 3152
	if (!chip->chip_delay)
		chip->chip_delay = 20;
L
Linus Torvalds 已提交
3153 3154

	/* check, if a user supplied command function given */
3155 3156
	if (chip->cmdfunc == NULL)
		chip->cmdfunc = nand_command;
L
Linus Torvalds 已提交
3157 3158

	/* check, if a user supplied wait function given */
3159 3160 3161 3162 3163
	if (chip->waitfunc == NULL)
		chip->waitfunc = nand_wait;

	if (!chip->select_chip)
		chip->select_chip = nand_select_chip;
3164

3165 3166 3167 3168 3169 3170
	/* set for ONFI nand */
	if (!chip->onfi_set_features)
		chip->onfi_set_features = nand_onfi_set_features;
	if (!chip->onfi_get_features)
		chip->onfi_get_features = nand_onfi_get_features;

3171 3172
	/* If called twice, pointers that depend on busw may need to be reset */
	if (!chip->read_byte || chip->read_byte == nand_read_byte)
3173 3174 3175 3176 3177 3178 3179
		chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
	if (!chip->read_word)
		chip->read_word = nand_read_word;
	if (!chip->block_bad)
		chip->block_bad = nand_block_bad;
	if (!chip->block_markbad)
		chip->block_markbad = nand_default_block_markbad;
3180
	if (!chip->write_buf || chip->write_buf == nand_write_buf)
3181
		chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
3182 3183
	if (!chip->write_byte || chip->write_byte == nand_write_byte)
		chip->write_byte = busw ? nand_write_byte16 : nand_write_byte;
3184
	if (!chip->read_buf || chip->read_buf == nand_read_buf)
3185 3186 3187
		chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
	if (!chip->scan_bbt)
		chip->scan_bbt = nand_default_bbt;
3188 3189 3190 3191 3192 3193 3194

	if (!chip->controller) {
		chip->controller = &chip->hwcontrol;
		spin_lock_init(&chip->controller->lock);
		init_waitqueue_head(&chip->controller->wq);
	}

T
Thomas Gleixner 已提交
3195 3196
}

3197
/* Sanitize ONFI strings so we can safely print them */
3198 3199 3200 3201
static void sanitize_string(uint8_t *s, size_t len)
{
	ssize_t i;

3202
	/* Null terminate */
3203 3204
	s[len - 1] = 0;

3205
	/* Remove non printable chars */
3206 3207 3208 3209 3210
	for (i = 0; i < len - 1; i++) {
		if (s[i] < ' ' || s[i] > 127)
			s[i] = '?';
	}

3211
	/* Remove trailing spaces */
3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226
	strim(s);
}

static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
{
	int i;
	while (len--) {
		crc ^= *p++ << 8;
		for (i = 0; i < 8; i++)
			crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0);
	}

	return crc;
}

3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240
/* Parse the Extended Parameter Page. */
static int nand_flash_detect_ext_param_page(struct mtd_info *mtd,
		struct nand_chip *chip, struct nand_onfi_params *p)
{
	struct onfi_ext_param_page *ep;
	struct onfi_ext_section *s;
	struct onfi_ext_ecc_info *ecc;
	uint8_t *cursor;
	int ret = -EINVAL;
	int len;
	int i;

	len = le16_to_cpu(p->ext_param_page_length) * 16;
	ep = kmalloc(len, GFP_KERNEL);
3241 3242
	if (!ep)
		return -ENOMEM;
3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283

	/* Send our own NAND_CMD_PARAM. */
	chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);

	/* Use the Change Read Column command to skip the ONFI param pages. */
	chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
			sizeof(*p) * p->num_of_param_pages , -1);

	/* Read out the Extended Parameter Page. */
	chip->read_buf(mtd, (uint8_t *)ep, len);
	if ((onfi_crc16(ONFI_CRC_BASE, ((uint8_t *)ep) + 2, len - 2)
		!= le16_to_cpu(ep->crc))) {
		pr_debug("fail in the CRC.\n");
		goto ext_out;
	}

	/*
	 * Check the signature.
	 * Do not strictly follow the ONFI spec, maybe changed in future.
	 */
	if (strncmp(ep->sig, "EPPS", 4)) {
		pr_debug("The signature is invalid.\n");
		goto ext_out;
	}

	/* find the ECC section. */
	cursor = (uint8_t *)(ep + 1);
	for (i = 0; i < ONFI_EXT_SECTION_MAX; i++) {
		s = ep->sections + i;
		if (s->type == ONFI_SECTION_TYPE_2)
			break;
		cursor += s->length * 16;
	}
	if (i == ONFI_EXT_SECTION_MAX) {
		pr_debug("We can not find the ECC section.\n");
		goto ext_out;
	}

	/* get the info we want. */
	ecc = (struct onfi_ext_ecc_info *)cursor;

3284 3285 3286
	if (!ecc->codeword_size) {
		pr_debug("Invalid codeword size\n");
		goto ext_out;
3287 3288
	}

3289 3290
	chip->ecc_strength_ds = ecc->ecc_bits;
	chip->ecc_step_ds = 1 << ecc->codeword_size;
3291
	ret = 0;
3292 3293 3294 3295 3296 3297

ext_out:
	kfree(ep);
	return ret;
}

3298 3299
static int nand_setup_read_retry_micron(struct mtd_info *mtd, int retry_mode)
{
3300
	struct nand_chip *chip = mtd_to_nand(mtd);
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321
	uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode};

	return chip->onfi_set_features(mtd, chip, ONFI_FEATURE_ADDR_READ_RETRY,
			feature);
}

/*
 * Configure chip properties from Micron vendor-specific ONFI table
 */
static void nand_onfi_detect_micron(struct nand_chip *chip,
		struct nand_onfi_params *p)
{
	struct nand_onfi_vendor_micron *micron = (void *)p->vendor;

	if (le16_to_cpu(p->vendor_revision) < 1)
		return;

	chip->read_retries = micron->read_retry_options;
	chip->setup_read_retry = nand_setup_read_retry_micron;
}

3322
/*
3323
 * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise.
3324 3325
 */
static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3326
					int *busw)
3327 3328
{
	struct nand_onfi_params *p = &chip->onfi_params;
3329
	int i, j;
3330 3331
	int val;

3332
	/* Try ONFI for unknown chip or LP */
3333 3334 3335 3336 3337 3338 3339
	chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
	if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
		chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
		return 0;

	chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
	for (i = 0; i < 3; i++) {
3340 3341
		for (j = 0; j < sizeof(*p); j++)
			((uint8_t *)p)[j] = chip->read_byte(mtd);
3342 3343 3344 3345 3346 3347
		if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
				le16_to_cpu(p->crc)) {
			break;
		}
	}

3348 3349
	if (i == 3) {
		pr_err("Could not find valid ONFI parameter page; aborting\n");
3350
		return 0;
3351
	}
3352

3353
	/* Check version */
3354
	val = le16_to_cpu(p->revision);
3355 3356 3357
	if (val & (1 << 5))
		chip->onfi_version = 23;
	else if (val & (1 << 4))
3358 3359 3360 3361 3362
		chip->onfi_version = 22;
	else if (val & (1 << 3))
		chip->onfi_version = 21;
	else if (val & (1 << 2))
		chip->onfi_version = 20;
3363
	else if (val & (1 << 1))
3364
		chip->onfi_version = 10;
3365 3366

	if (!chip->onfi_version) {
3367
		pr_info("unsupported ONFI version: %d\n", val);
3368 3369
		return 0;
	}
3370 3371 3372 3373 3374

	sanitize_string(p->manufacturer, sizeof(p->manufacturer));
	sanitize_string(p->model, sizeof(p->model));
	if (!mtd->name)
		mtd->name = p->model;
3375

3376
	mtd->writesize = le32_to_cpu(p->byte_per_page);
3377 3378 3379 3380 3381 3382 3383 3384 3385

	/*
	 * pages_per_block and blocks_per_lun may not be a power-of-2 size
	 * (don't ask me who thought of this...). MTD assumes that these
	 * dimensions will be power-of-2, so just truncate the remaining area.
	 */
	mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
	mtd->erasesize *= mtd->writesize;

3386
	mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
3387 3388 3389

	/* See erasesize comment */
	chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
3390
	chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
3391
	chip->bits_per_cell = p->bits_per_cell;
3392 3393

	if (onfi_feature(chip) & ONFI_FEATURE_16_BIT_BUS)
3394
		*busw = NAND_BUSWIDTH_16;
3395 3396
	else
		*busw = 0;
3397

3398 3399 3400
	if (p->ecc_bits != 0xff) {
		chip->ecc_strength_ds = p->ecc_bits;
		chip->ecc_step_ds = 512;
3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414
	} else if (chip->onfi_version >= 21 &&
		(onfi_feature(chip) & ONFI_FEATURE_EXT_PARAM_PAGE)) {

		/*
		 * The nand_flash_detect_ext_param_page() uses the
		 * Change Read Column command which maybe not supported
		 * by the chip->cmdfunc. So try to update the chip->cmdfunc
		 * now. We do not replace user supplied command function.
		 */
		if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
			chip->cmdfunc = nand_command_lp;

		/* The Extended Parameter Page is supported since ONFI 2.1. */
		if (nand_flash_detect_ext_param_page(mtd, chip, p))
3415 3416 3417
			pr_warn("Failed to detect ONFI extended param page\n");
	} else {
		pr_warn("Could not retrieve ONFI ECC requirements\n");
3418 3419
	}

3420 3421 3422
	if (p->jedec_id == NAND_MFR_MICRON)
		nand_onfi_detect_micron(chip, p);

3423 3424 3425
	return 1;
}

3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506
/*
 * Check if the NAND chip is JEDEC compliant, returns 1 if it is, 0 otherwise.
 */
static int nand_flash_detect_jedec(struct mtd_info *mtd, struct nand_chip *chip,
					int *busw)
{
	struct nand_jedec_params *p = &chip->jedec_params;
	struct jedec_ecc_info *ecc;
	int val;
	int i, j;

	/* Try JEDEC for unknown chip or LP */
	chip->cmdfunc(mtd, NAND_CMD_READID, 0x40, -1);
	if (chip->read_byte(mtd) != 'J' || chip->read_byte(mtd) != 'E' ||
		chip->read_byte(mtd) != 'D' || chip->read_byte(mtd) != 'E' ||
		chip->read_byte(mtd) != 'C')
		return 0;

	chip->cmdfunc(mtd, NAND_CMD_PARAM, 0x40, -1);
	for (i = 0; i < 3; i++) {
		for (j = 0; j < sizeof(*p); j++)
			((uint8_t *)p)[j] = chip->read_byte(mtd);

		if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 510) ==
				le16_to_cpu(p->crc))
			break;
	}

	if (i == 3) {
		pr_err("Could not find valid JEDEC parameter page; aborting\n");
		return 0;
	}

	/* Check version */
	val = le16_to_cpu(p->revision);
	if (val & (1 << 2))
		chip->jedec_version = 10;
	else if (val & (1 << 1))
		chip->jedec_version = 1; /* vendor specific version */

	if (!chip->jedec_version) {
		pr_info("unsupported JEDEC version: %d\n", val);
		return 0;
	}

	sanitize_string(p->manufacturer, sizeof(p->manufacturer));
	sanitize_string(p->model, sizeof(p->model));
	if (!mtd->name)
		mtd->name = p->model;

	mtd->writesize = le32_to_cpu(p->byte_per_page);

	/* Please reference to the comment for nand_flash_detect_onfi. */
	mtd->erasesize = 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1);
	mtd->erasesize *= mtd->writesize;

	mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);

	/* Please reference to the comment for nand_flash_detect_onfi. */
	chip->chipsize = 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1);
	chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
	chip->bits_per_cell = p->bits_per_cell;

	if (jedec_feature(chip) & JEDEC_FEATURE_16_BIT_BUS)
		*busw = NAND_BUSWIDTH_16;
	else
		*busw = 0;

	/* ECC info */
	ecc = &p->ecc_info[0];

	if (ecc->codeword_size >= 9) {
		chip->ecc_strength_ds = ecc->ecc_bits;
		chip->ecc_step_ds = 1 << ecc->codeword_size;
	} else {
		pr_warn("Invalid codeword size\n");
	}

	return 1;
}

3507 3508 3509 3510 3511 3512 3513 3514
/*
 * nand_id_has_period - Check if an ID string has a given wraparound period
 * @id_data: the ID string
 * @arrlen: the length of the @id_data array
 * @period: the period of repitition
 *
 * Check if an ID string is repeated within a given sequence of bytes at
 * specific repetition interval period (e.g., {0x20,0x01,0x7F,0x20} has a
3515
 * period of 3). This is a helper function for nand_id_len(). Returns non-zero
3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565
 * if the repetition has a period of @period; otherwise, returns zero.
 */
static int nand_id_has_period(u8 *id_data, int arrlen, int period)
{
	int i, j;
	for (i = 0; i < period; i++)
		for (j = i + period; j < arrlen; j += period)
			if (id_data[i] != id_data[j])
				return 0;
	return 1;
}

/*
 * nand_id_len - Get the length of an ID string returned by CMD_READID
 * @id_data: the ID string
 * @arrlen: the length of the @id_data array

 * Returns the length of the ID string, according to known wraparound/trailing
 * zero patterns. If no pattern exists, returns the length of the array.
 */
static int nand_id_len(u8 *id_data, int arrlen)
{
	int last_nonzero, period;

	/* Find last non-zero byte */
	for (last_nonzero = arrlen - 1; last_nonzero >= 0; last_nonzero--)
		if (id_data[last_nonzero])
			break;

	/* All zeros */
	if (last_nonzero < 0)
		return 0;

	/* Calculate wraparound period */
	for (period = 1; period < arrlen; period++)
		if (nand_id_has_period(id_data, arrlen, period))
			break;

	/* There's a repeated pattern */
	if (period < arrlen)
		return period;

	/* There are trailing zeros */
	if (last_nonzero < arrlen - 1)
		return last_nonzero + 1;

	/* No pattern detected */
	return arrlen;
}

3566 3567 3568 3569 3570 3571 3572 3573 3574 3575
/* Extract the bits of per cell from the 3rd byte of the extended ID */
static int nand_get_bits_per_cell(u8 cellinfo)
{
	int bits;

	bits = cellinfo & NAND_CI_CELLTYPE_MSK;
	bits >>= NAND_CI_CELLTYPE_SHIFT;
	return bits + 1;
}

3576 3577 3578 3579 3580 3581 3582 3583
/*
 * Many new NAND share similar device ID codes, which represent the size of the
 * chip. The rest of the parameters must be decoded according to generic or
 * manufacturer-specific "extended ID" decoding patterns.
 */
static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
				u8 id_data[8], int *busw)
{
3584
	int extid, id_len;
3585
	/* The 3rd id byte holds MLC / multichip data */
3586
	chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3587 3588 3589
	/* The 4th id byte is the important one */
	extid = id_data[3];

3590 3591
	id_len = nand_id_len(id_data, 8);

3592 3593 3594
	/*
	 * Field definitions are in the following datasheets:
	 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
3595
	 * New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44)
3596
	 * Hynix MLC   (6 byte ID): Hynix H27UBG8T2B (p.22)
3597
	 *
3598 3599
	 * Check for ID length, non-zero 6th byte, cell type, and Hynix/Samsung
	 * ID to decide what to do.
3600
	 */
3601
	if (id_len == 6 && id_data[0] == NAND_MFR_SAMSUNG &&
3602
			!nand_is_slc(chip) && id_data[5] != 0x00) {
3603 3604 3605 3606
		/* Calc pagesize */
		mtd->writesize = 2048 << (extid & 0x03);
		extid >>= 2;
		/* Calc oobsize */
3607
		switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
3608 3609 3610 3611 3612 3613 3614 3615 3616
		case 1:
			mtd->oobsize = 128;
			break;
		case 2:
			mtd->oobsize = 218;
			break;
		case 3:
			mtd->oobsize = 400;
			break;
3617
		case 4:
3618 3619
			mtd->oobsize = 436;
			break;
3620 3621 3622 3623 3624 3625
		case 5:
			mtd->oobsize = 512;
			break;
		case 6:
			mtd->oobsize = 640;
			break;
3626 3627 3628 3629
		case 7:
		default: /* Other cases are "reserved" (unknown) */
			mtd->oobsize = 1024;
			break;
3630 3631 3632 3633 3634 3635
		}
		extid >>= 2;
		/* Calc blocksize */
		mtd->erasesize = (128 * 1024) <<
			(((extid >> 1) & 0x04) | (extid & 0x03));
		*busw = 0;
3636
	} else if (id_len == 6 && id_data[0] == NAND_MFR_HYNIX &&
3637
			!nand_is_slc(chip)) {
3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676
		unsigned int tmp;

		/* Calc pagesize */
		mtd->writesize = 2048 << (extid & 0x03);
		extid >>= 2;
		/* Calc oobsize */
		switch (((extid >> 2) & 0x04) | (extid & 0x03)) {
		case 0:
			mtd->oobsize = 128;
			break;
		case 1:
			mtd->oobsize = 224;
			break;
		case 2:
			mtd->oobsize = 448;
			break;
		case 3:
			mtd->oobsize = 64;
			break;
		case 4:
			mtd->oobsize = 32;
			break;
		case 5:
			mtd->oobsize = 16;
			break;
		default:
			mtd->oobsize = 640;
			break;
		}
		extid >>= 2;
		/* Calc blocksize */
		tmp = ((extid >> 1) & 0x04) | (extid & 0x03);
		if (tmp < 0x03)
			mtd->erasesize = (128 * 1024) << tmp;
		else if (tmp == 0x03)
			mtd->erasesize = 768 * 1024;
		else
			mtd->erasesize = (64 * 1024) << tmp;
		*busw = 0;
3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689
	} else {
		/* Calc pagesize */
		mtd->writesize = 1024 << (extid & 0x03);
		extid >>= 2;
		/* Calc oobsize */
		mtd->oobsize = (8 << (extid & 0x01)) *
			(mtd->writesize >> 9);
		extid >>= 2;
		/* Calc blocksize. Blocksize is multiples of 64KiB */
		mtd->erasesize = (64 * 1024) << (extid & 0x03);
		extid >>= 2;
		/* Get buswidth information */
		*busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
3690 3691 3692 3693 3694 3695 3696 3697 3698 3699

		/*
		 * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per
		 * 512B page. For Toshiba SLC, we decode the 5th/6th byte as
		 * follows:
		 * - ID byte 6, bits[2:0]: 100b -> 43nm, 101b -> 32nm,
		 *                         110b -> 24nm
		 * - ID byte 5, bit[7]:    1 -> BENAND, 0 -> raw SLC
		 */
		if (id_len >= 6 && id_data[0] == NAND_MFR_TOSHIBA &&
3700
				nand_is_slc(chip) &&
3701 3702 3703 3704 3705
				(id_data[5] & 0x7) == 0x6 /* 24nm */ &&
				!(id_data[4] & 0x80) /* !BENAND */) {
			mtd->oobsize = 32 * mtd->writesize >> 9;
		}

3706 3707 3708
	}
}

3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724
/*
 * Old devices have chip data hardcoded in the device ID table. nand_decode_id
 * decodes a matching ID table entry and assigns the MTD size parameters for
 * the chip.
 */
static void nand_decode_id(struct mtd_info *mtd, struct nand_chip *chip,
				struct nand_flash_dev *type, u8 id_data[8],
				int *busw)
{
	int maf_id = id_data[0];

	mtd->erasesize = type->erasesize;
	mtd->writesize = type->pagesize;
	mtd->oobsize = mtd->writesize / 32;
	*busw = type->options & NAND_BUSWIDTH_16;

3725 3726 3727
	/* All legacy ID NAND are small-page, SLC */
	chip->bits_per_cell = 1;

3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741
	/*
	 * Check for Spansion/AMD ID + repeating 5th, 6th byte since
	 * some Spansion chips have erasesize that conflicts with size
	 * listed in nand_ids table.
	 * Data sheet (5 byte ID): Spansion S30ML-P ORNAND (p.39)
	 */
	if (maf_id == NAND_MFR_AMD && id_data[4] != 0x00 && id_data[5] == 0x00
			&& id_data[6] == 0x00 && id_data[7] == 0x00
			&& mtd->writesize == 512) {
		mtd->erasesize = 128 * 1024;
		mtd->erasesize <<= ((id_data[3] & 0x03) << 1);
	}
}

3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763
/*
 * Set the bad block marker/indicator (BBM/BBI) patterns according to some
 * heuristic patterns using various detected parameters (e.g., manufacturer,
 * page size, cell-type information).
 */
static void nand_decode_bbm_options(struct mtd_info *mtd,
				    struct nand_chip *chip, u8 id_data[8])
{
	int maf_id = id_data[0];

	/* Set the bad block position */
	if (mtd->writesize > 512 || (chip->options & NAND_BUSWIDTH_16))
		chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
	else
		chip->badblockpos = NAND_SMALL_BADBLOCK_POS;

	/*
	 * Bad block marker is stored in the last page of each block on Samsung
	 * and Hynix MLC devices; stored in first two pages of each block on
	 * Micron devices with 2KiB pages and on SLC Samsung, Hynix, Toshiba,
	 * AMD/Spansion, and Macronix.  All others scan only the first page.
	 */
3764
	if (!nand_is_slc(chip) &&
3765 3766 3767
			(maf_id == NAND_MFR_SAMSUNG ||
			 maf_id == NAND_MFR_HYNIX))
		chip->bbt_options |= NAND_BBT_SCANLASTPAGE;
3768
	else if ((nand_is_slc(chip) &&
3769 3770 3771 3772 3773 3774 3775 3776 3777 3778
				(maf_id == NAND_MFR_SAMSUNG ||
				 maf_id == NAND_MFR_HYNIX ||
				 maf_id == NAND_MFR_TOSHIBA ||
				 maf_id == NAND_MFR_AMD ||
				 maf_id == NAND_MFR_MACRONIX)) ||
			(mtd->writesize == 2048 &&
			 maf_id == NAND_MFR_MICRON))
		chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
}

3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791
static inline bool is_full_id_nand(struct nand_flash_dev *type)
{
	return type->id_len;
}

static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
		   struct nand_flash_dev *type, u8 *id_data, int *busw)
{
	if (!strncmp(type->id, id_data, type->id_len)) {
		mtd->writesize = type->pagesize;
		mtd->erasesize = type->erasesize;
		mtd->oobsize = type->oobsize;

3792
		chip->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
3793 3794
		chip->chipsize = (uint64_t)type->chipsize << 20;
		chip->options |= type->options;
3795 3796
		chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
		chip->ecc_step_ds = NAND_ECC_STEP(type);
3797 3798
		chip->onfi_timing_mode_default =
					type->onfi_timing_mode_default;
3799 3800 3801

		*busw = type->options & NAND_BUSWIDTH_16;

3802 3803 3804
		if (!mtd->name)
			mtd->name = type->name;

3805 3806 3807 3808 3809
		return true;
	}
	return false;
}

T
Thomas Gleixner 已提交
3810
/*
3811
 * Get the flash and manufacturer id and lookup if the type is supported.
T
Thomas Gleixner 已提交
3812 3813
 */
static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
3814
						  struct nand_chip *chip,
3815
						  int *maf_id, int *dev_id,
3816
						  struct nand_flash_dev *type)
T
Thomas Gleixner 已提交
3817
{
3818
	int busw;
3819
	int i, maf_idx;
3820
	u8 id_data[8];
L
Linus Torvalds 已提交
3821 3822

	/* Select the device */
3823
	chip->select_chip(mtd, 0);
L
Linus Torvalds 已提交
3824

3825 3826
	/*
	 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
3827
	 * after power-up.
3828 3829 3830
	 */
	chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);

L
Linus Torvalds 已提交
3831
	/* Send the command for reading device ID */
3832
	chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
L
Linus Torvalds 已提交
3833 3834

	/* Read manufacturer and device IDs */
3835
	*maf_id = chip->read_byte(mtd);
3836
	*dev_id = chip->read_byte(mtd);
L
Linus Torvalds 已提交
3837

3838 3839
	/*
	 * Try again to make sure, as some systems the bus-hold or other
3840 3841 3842 3843 3844 3845 3846
	 * interface concerns can cause random data which looks like a
	 * possibly credible NAND flash to appear. If the two results do
	 * not match, ignore the device completely.
	 */

	chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);

3847 3848
	/* Read entire ID string */
	for (i = 0; i < 8; i++)
3849
		id_data[i] = chip->read_byte(mtd);
3850

3851
	if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
3852
		pr_info("second ID read did not match %02x,%02x against %02x,%02x\n",
3853
			*maf_id, *dev_id, id_data[0], id_data[1]);
3854 3855 3856
		return ERR_PTR(-ENODEV);
	}

T
Thomas Gleixner 已提交
3857
	if (!type)
3858 3859
		type = nand_flash_ids;

3860 3861 3862 3863 3864
	for (; type->name != NULL; type++) {
		if (is_full_id_nand(type)) {
			if (find_full_id_nand(mtd, chip, type, id_data, &busw))
				goto ident_done;
		} else if (*dev_id == type->dev_id) {
3865
			break;
3866 3867
		}
	}
3868

3869 3870
	chip->onfi_version = 0;
	if (!type->name || !type->pagesize) {
3871
		/* Check if the chip is ONFI compliant */
3872
		if (nand_flash_detect_onfi(mtd, chip, &busw))
3873
			goto ident_done;
3874 3875 3876 3877

		/* Check if the chip is JEDEC compliant */
		if (nand_flash_detect_jedec(mtd, chip, &busw))
			goto ident_done;
3878 3879
	}

3880
	if (!type->name)
T
Thomas Gleixner 已提交
3881 3882
		return ERR_PTR(-ENODEV);

3883 3884 3885
	if (!mtd->name)
		mtd->name = type->name;

3886
	chip->chipsize = (uint64_t)type->chipsize << 20;
T
Thomas Gleixner 已提交
3887

3888
	if (!type->pagesize) {
3889 3890
		/* Decode parameters from extended ID */
		nand_decode_ext_id(mtd, chip, id_data, &busw);
T
Thomas Gleixner 已提交
3891
	} else {
3892
		nand_decode_id(mtd, chip, type, id_data, &busw);
T
Thomas Gleixner 已提交
3893
	}
3894 3895
	/* Get chip options */
	chip->options |= type->options;
3896

3897 3898 3899
	/*
	 * Check if chip is not a Samsung device. Do not clear the
	 * options for chips which do not have an extended id.
3900 3901 3902 3903 3904
	 */
	if (*maf_id != NAND_MFR_SAMSUNG && !type->pagesize)
		chip->options &= ~NAND_SAMSUNG_LP_OPTIONS;
ident_done:

T
Thomas Gleixner 已提交
3905
	/* Try to identify manufacturer */
3906
	for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
T
Thomas Gleixner 已提交
3907 3908 3909
		if (nand_manuf_ids[maf_idx].id == *maf_id)
			break;
	}
3910

3911 3912 3913 3914 3915 3916 3917 3918 3919
	if (chip->options & NAND_BUSWIDTH_AUTO) {
		WARN_ON(chip->options & NAND_BUSWIDTH_16);
		chip->options |= busw;
		nand_set_defaults(chip, busw);
	} else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
		/*
		 * Check, if buswidth is correct. Hardware drivers should set
		 * chip correct!
		 */
3920 3921 3922 3923
		pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
			*maf_id, *dev_id);
		pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
		pr_warn("bus width %d instead %d bit\n",
3924 3925
			   (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
			   busw ? 16 : 8);
T
Thomas Gleixner 已提交
3926 3927
		return ERR_PTR(-EINVAL);
	}
3928

3929 3930
	nand_decode_bbm_options(mtd, chip, id_data);

T
Thomas Gleixner 已提交
3931
	/* Calculate the address shift from the page size */
3932
	chip->page_shift = ffs(mtd->writesize) - 1;
3933
	/* Convert chipsize to number of pages per chip -1 */
3934
	chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
3935

3936
	chip->bbt_erase_shift = chip->phys_erase_shift =
T
Thomas Gleixner 已提交
3937
		ffs(mtd->erasesize) - 1;
3938 3939
	if (chip->chipsize & 0xffffffff)
		chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
3940 3941 3942 3943
	else {
		chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
		chip->chip_shift += 32 - 1;
	}
L
Linus Torvalds 已提交
3944

A
Artem Bityutskiy 已提交
3945
	chip->badblockbits = 8;
3946
	chip->erase = single_erase;
T
Thomas Gleixner 已提交
3947

3948
	/* Do not replace user supplied command function! */
3949 3950
	if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
		chip->cmdfunc = nand_command_lp;
T
Thomas Gleixner 已提交
3951

3952 3953
	pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
		*maf_id, *dev_id);
3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964

	if (chip->onfi_version)
		pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
				chip->onfi_params.model);
	else if (chip->jedec_version)
		pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
				chip->jedec_params.model);
	else
		pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
				type->name);

3965
	pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n",
3966
		(int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
3967
		mtd->erasesize >> 10, mtd->writesize, mtd->oobsize);
T
Thomas Gleixner 已提交
3968 3969 3970
	return type;
}

3971
static int nand_dt_init(struct nand_chip *chip)
3972
{
3973
	struct device_node *dn = nand_get_flash_node(chip);
3974 3975
	int ecc_mode, ecc_strength, ecc_step;

3976 3977 3978
	if (!dn)
		return 0;

3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006
	if (of_get_nand_bus_width(dn) == 16)
		chip->options |= NAND_BUSWIDTH_16;

	if (of_get_nand_on_flash_bbt(dn))
		chip->bbt_options |= NAND_BBT_USE_FLASH;

	ecc_mode = of_get_nand_ecc_mode(dn);
	ecc_strength = of_get_nand_ecc_strength(dn);
	ecc_step = of_get_nand_ecc_step_size(dn);

	if ((ecc_step >= 0 && !(ecc_strength >= 0)) ||
	    (!(ecc_step >= 0) && ecc_strength >= 0)) {
		pr_err("must set both strength and step size in DT\n");
		return -EINVAL;
	}

	if (ecc_mode >= 0)
		chip->ecc.mode = ecc_mode;

	if (ecc_strength >= 0)
		chip->ecc.strength = ecc_strength;

	if (ecc_step > 0)
		chip->ecc.size = ecc_step;

	return 0;
}

T
Thomas Gleixner 已提交
4007
/**
4008
 * nand_scan_ident - [NAND Interface] Scan for the NAND device
4009 4010 4011
 * @mtd: MTD device structure
 * @maxchips: number of chips to scan for
 * @table: alternative NAND ID table
T
Thomas Gleixner 已提交
4012
 *
4013 4014
 * This is the first phase of the normal nand_scan() function. It reads the
 * flash ID and sets up MTD fields accordingly.
T
Thomas Gleixner 已提交
4015
 *
4016
 * The mtd->owner field must be set to the module of the caller.
T
Thomas Gleixner 已提交
4017
 */
4018 4019
int nand_scan_ident(struct mtd_info *mtd, int maxchips,
		    struct nand_flash_dev *table)
T
Thomas Gleixner 已提交
4020
{
4021
	int i, nand_maf_id, nand_dev_id;
4022
	struct nand_chip *chip = mtd_to_nand(mtd);
T
Thomas Gleixner 已提交
4023
	struct nand_flash_dev *type;
4024 4025
	int ret;

4026 4027 4028
	ret = nand_dt_init(chip);
	if (ret)
		return ret;
T
Thomas Gleixner 已提交
4029

4030 4031 4032
	if (!mtd->name && mtd->dev.parent)
		mtd->name = dev_name(mtd->dev.parent);

T
Thomas Gleixner 已提交
4033
	/* Set the default functions */
4034
	nand_set_defaults(chip, chip->options & NAND_BUSWIDTH_16);
T
Thomas Gleixner 已提交
4035 4036

	/* Read the flash type */
4037 4038
	type = nand_get_flash_type(mtd, chip, &nand_maf_id,
				   &nand_dev_id, table);
T
Thomas Gleixner 已提交
4039 4040

	if (IS_ERR(type)) {
4041
		if (!(chip->options & NAND_SCAN_SILENT_NODEV))
4042
			pr_warn("No NAND device found\n");
4043
		chip->select_chip(mtd, -1);
T
Thomas Gleixner 已提交
4044
		return PTR_ERR(type);
L
Linus Torvalds 已提交
4045 4046
	}

4047 4048
	chip->select_chip(mtd, -1);

T
Thomas Gleixner 已提交
4049
	/* Check for a chip array */
4050
	for (i = 1; i < maxchips; i++) {
4051
		chip->select_chip(mtd, i);
4052 4053
		/* See comment in nand_get_flash_type for reset */
		chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
L
Linus Torvalds 已提交
4054
		/* Send the command for reading device ID */
4055
		chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
L
Linus Torvalds 已提交
4056
		/* Read manufacturer and device IDs */
4057
		if (nand_maf_id != chip->read_byte(mtd) ||
4058 4059
		    nand_dev_id != chip->read_byte(mtd)) {
			chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
4060
			break;
4061 4062
		}
		chip->select_chip(mtd, -1);
L
Linus Torvalds 已提交
4063 4064
	}
	if (i > 1)
4065
		pr_info("%d chips detected\n", i);
4066

L
Linus Torvalds 已提交
4067
	/* Store the number of chips and calc total size for mtd */
4068 4069
	chip->numchips = i;
	mtd->size = i * chip->chipsize;
T
Thomas Gleixner 已提交
4070

4071 4072
	return 0;
}
4073
EXPORT_SYMBOL(nand_scan_ident);
4074

4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090
/*
 * Check if the chip configuration meet the datasheet requirements.

 * If our configuration corrects A bits per B bytes and the minimum
 * required correction level is X bits per Y bytes, then we must ensure
 * both of the following are true:
 *
 * (1) A / B >= X / Y
 * (2) A >= X
 *
 * Requirement (1) ensures we can correct for the required bitflip density.
 * Requirement (2) ensures we can correct even when all bitflips are clumped
 * in the same sector.
 */
static bool nand_ecc_strength_good(struct mtd_info *mtd)
{
4091
	struct nand_chip *chip = mtd_to_nand(mtd);
4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107
	struct nand_ecc_ctrl *ecc = &chip->ecc;
	int corr, ds_corr;

	if (ecc->size == 0 || chip->ecc_step_ds == 0)
		/* Not enough information */
		return true;

	/*
	 * We get the number of corrected bits per page to compare
	 * the correction density.
	 */
	corr = (mtd->writesize * ecc->strength) / ecc->size;
	ds_corr = (mtd->writesize * chip->ecc_strength_ds) / chip->ecc_step_ds;

	return corr >= ds_corr && ecc->strength >= chip->ecc_strength_ds;
}
4108 4109 4110

/**
 * nand_scan_tail - [NAND Interface] Scan for the NAND device
4111
 * @mtd: MTD device structure
4112
 *
4113 4114 4115
 * This is the second phase of the normal nand_scan() function. It fills out
 * all the uninitialized function pointers with the defaults and scans for a
 * bad block table if appropriate.
4116 4117 4118 4119
 */
int nand_scan_tail(struct mtd_info *mtd)
{
	int i;
4120
	struct nand_chip *chip = mtd_to_nand(mtd);
4121
	struct nand_ecc_ctrl *ecc = &chip->ecc;
4122
	struct nand_buffers *nbuf;
4123

4124 4125 4126 4127
	/* New bad blocks should be marked in OOB, flash-based BBT, or both */
	BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
			!(chip->bbt_options & NAND_BBT_USE_FLASH));

4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141
	if (!(chip->options & NAND_OWN_BUFFERS)) {
		nbuf = kzalloc(sizeof(*nbuf) + mtd->writesize
				+ mtd->oobsize * 3, GFP_KERNEL);
		if (!nbuf)
			return -ENOMEM;
		nbuf->ecccalc = (uint8_t *)(nbuf + 1);
		nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
		nbuf->databuf = nbuf->ecccode + mtd->oobsize;

		chip->buffers = nbuf;
	} else {
		if (!chip->buffers)
			return -ENOMEM;
	}
4142

4143
	/* Set the internal oob buffer location, just after the page data */
4144
	chip->oob_poi = chip->buffers->databuf + mtd->writesize;
L
Linus Torvalds 已提交
4145

T
Thomas Gleixner 已提交
4146
	/*
4147
	 * If no default placement scheme is given, select an appropriate one.
T
Thomas Gleixner 已提交
4148
	 */
4149
	if (!ecc->layout && (ecc->mode != NAND_ECC_SOFT_BCH)) {
4150
		switch (mtd->oobsize) {
L
Linus Torvalds 已提交
4151
		case 8:
4152
			ecc->layout = &nand_oob_8;
L
Linus Torvalds 已提交
4153 4154
			break;
		case 16:
4155
			ecc->layout = &nand_oob_16;
L
Linus Torvalds 已提交
4156 4157
			break;
		case 64:
4158
			ecc->layout = &nand_oob_64;
L
Linus Torvalds 已提交
4159
			break;
4160
		case 128:
4161
			ecc->layout = &nand_oob_128;
4162
			break;
L
Linus Torvalds 已提交
4163
		default:
4164 4165
			pr_warn("No oob scheme defined for oobsize %d\n",
				   mtd->oobsize);
L
Linus Torvalds 已提交
4166 4167 4168
			BUG();
		}
	}
4169

4170 4171 4172
	if (!chip->write_page)
		chip->write_page = nand_write_page;

4173
	/*
4174
	 * Check ECC mode, default to software if 3byte/512byte hardware ECC is
T
Thomas Gleixner 已提交
4175
	 * selected and we have 256 byte pagesize fallback to software ECC
4176
	 */
4177

4178
	switch (ecc->mode) {
4179 4180
	case NAND_ECC_HW_OOB_FIRST:
		/* Similar to NAND_ECC_HW, but a separate read_page handle */
4181
		if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
4182
			pr_warn("No ECC functions supplied; hardware ECC not possible\n");
4183 4184
			BUG();
		}
4185 4186
		if (!ecc->read_page)
			ecc->read_page = nand_read_page_hwecc_oob_first;
4187

T
Thomas Gleixner 已提交
4188
	case NAND_ECC_HW:
4189
		/* Use standard hwecc read page function? */
4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203
		if (!ecc->read_page)
			ecc->read_page = nand_read_page_hwecc;
		if (!ecc->write_page)
			ecc->write_page = nand_write_page_hwecc;
		if (!ecc->read_page_raw)
			ecc->read_page_raw = nand_read_page_raw;
		if (!ecc->write_page_raw)
			ecc->write_page_raw = nand_write_page_raw;
		if (!ecc->read_oob)
			ecc->read_oob = nand_read_oob_std;
		if (!ecc->write_oob)
			ecc->write_oob = nand_write_oob_std;
		if (!ecc->read_subpage)
			ecc->read_subpage = nand_read_subpage;
4204
		if (!ecc->write_subpage && ecc->hwctl && ecc->calculate)
4205
			ecc->write_subpage = nand_write_subpage_hwecc;
4206

T
Thomas Gleixner 已提交
4207
	case NAND_ECC_HW_SYNDROME:
4208 4209 4210 4211 4212
		if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) &&
		    (!ecc->read_page ||
		     ecc->read_page == nand_read_page_hwecc ||
		     !ecc->write_page ||
		     ecc->write_page == nand_write_page_hwecc)) {
4213
			pr_warn("No ECC functions supplied; hardware ECC not possible\n");
T
Thomas Gleixner 已提交
4214 4215
			BUG();
		}
4216
		/* Use standard syndrome read/write page function? */
4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231
		if (!ecc->read_page)
			ecc->read_page = nand_read_page_syndrome;
		if (!ecc->write_page)
			ecc->write_page = nand_write_page_syndrome;
		if (!ecc->read_page_raw)
			ecc->read_page_raw = nand_read_page_raw_syndrome;
		if (!ecc->write_page_raw)
			ecc->write_page_raw = nand_write_page_raw_syndrome;
		if (!ecc->read_oob)
			ecc->read_oob = nand_read_oob_syndrome;
		if (!ecc->write_oob)
			ecc->write_oob = nand_write_oob_syndrome;

		if (mtd->writesize >= ecc->size) {
			if (!ecc->strength) {
4232 4233 4234
				pr_warn("Driver must set ecc.strength when using hardware ECC\n");
				BUG();
			}
T
Thomas Gleixner 已提交
4235
			break;
4236
		}
4237 4238
		pr_warn("%d byte HW ECC not possible on %d byte page size, fallback to SW ECC\n",
			ecc->size, mtd->writesize);
4239
		ecc->mode = NAND_ECC_SOFT;
4240

T
Thomas Gleixner 已提交
4241
	case NAND_ECC_SOFT:
4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254
		ecc->calculate = nand_calculate_ecc;
		ecc->correct = nand_correct_data;
		ecc->read_page = nand_read_page_swecc;
		ecc->read_subpage = nand_read_subpage;
		ecc->write_page = nand_write_page_swecc;
		ecc->read_page_raw = nand_read_page_raw;
		ecc->write_page_raw = nand_write_page_raw;
		ecc->read_oob = nand_read_oob_std;
		ecc->write_oob = nand_write_oob_std;
		if (!ecc->size)
			ecc->size = 256;
		ecc->bytes = 3;
		ecc->strength = 1;
L
Linus Torvalds 已提交
4255
		break;
4256

4257 4258
	case NAND_ECC_SOFT_BCH:
		if (!mtd_nand_has_bch()) {
4259
			pr_warn("CONFIG_MTD_NAND_ECC_BCH not enabled\n");
4260 4261
			BUG();
		}
4262 4263 4264 4265 4266 4267 4268 4269 4270
		ecc->calculate = nand_bch_calculate_ecc;
		ecc->correct = nand_bch_correct_data;
		ecc->read_page = nand_read_page_swecc;
		ecc->read_subpage = nand_read_subpage;
		ecc->write_page = nand_write_page_swecc;
		ecc->read_page_raw = nand_read_page_raw;
		ecc->write_page_raw = nand_write_page_raw;
		ecc->read_oob = nand_read_oob_std;
		ecc->write_oob = nand_write_oob_std;
4271
		/*
4272 4273 4274
		 * Board driver should supply ecc.size and ecc.strength values
		 * to select how many bits are correctable. Otherwise, default
		 * to 4 bits for large page devices.
4275
		 */
4276 4277
		if (!ecc->size && (mtd->oobsize >= 64)) {
			ecc->size = 512;
4278
			ecc->strength = 4;
4279
		}
4280 4281

		/* See nand_bch_init() for details. */
4282 4283
		ecc->bytes = 0;
		ecc->priv = nand_bch_init(mtd);
4284
		if (!ecc->priv) {
4285
			pr_warn("BCH ECC initialization failed!\n");
4286 4287 4288 4289
			BUG();
		}
		break;

4290
	case NAND_ECC_NONE:
4291
		pr_warn("NAND_ECC_NONE selected by board driver. This is not recommended!\n");
4292 4293 4294 4295 4296 4297 4298 4299 4300
		ecc->read_page = nand_read_page_raw;
		ecc->write_page = nand_write_page_raw;
		ecc->read_oob = nand_read_oob_std;
		ecc->read_page_raw = nand_read_page_raw;
		ecc->write_page_raw = nand_write_page_raw;
		ecc->write_oob = nand_write_oob_std;
		ecc->size = mtd->writesize;
		ecc->bytes = 0;
		ecc->strength = 0;
L
Linus Torvalds 已提交
4301
		break;
4302

L
Linus Torvalds 已提交
4303
	default:
4304
		pr_warn("Invalid NAND_ECC_MODE %d\n", ecc->mode);
4305
		BUG();
L
Linus Torvalds 已提交
4306
	}
4307

4308
	/* For many systems, the standard OOB write also works for raw */
4309 4310 4311 4312
	if (!ecc->read_oob_raw)
		ecc->read_oob_raw = ecc->read_oob;
	if (!ecc->write_oob_raw)
		ecc->write_oob_raw = ecc->write_oob;
4313

4314 4315
	/*
	 * The number of bytes available for a client to place data into
4316
	 * the out of band area.
4317
	 */
4318 4319 4320 4321 4322
	mtd->oobavail = 0;
	if (ecc->layout) {
		for (i = 0; ecc->layout->oobfree[i].length; i++)
			mtd->oobavail += ecc->layout->oobfree[i].length;
	}
4323

4324 4325 4326 4327
	/* ECC sanity check: warn if it's too weak */
	if (!nand_ecc_strength_good(mtd))
		pr_warn("WARNING: %s: the ECC used on your system is too weak compared to the one required by the NAND chip\n",
			mtd->name);
4328

T
Thomas Gleixner 已提交
4329 4330
	/*
	 * Set the number of read / write steps for one page depending on ECC
4331
	 * mode.
T
Thomas Gleixner 已提交
4332
	 */
4333 4334
	ecc->steps = mtd->writesize / ecc->size;
	if (ecc->steps * ecc->size != mtd->writesize) {
4335
		pr_warn("Invalid ECC parameters\n");
T
Thomas Gleixner 已提交
4336
		BUG();
L
Linus Torvalds 已提交
4337
	}
4338
	ecc->total = ecc->steps * ecc->bytes;
4339

4340
	/* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
4341
	if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
4342
		switch (ecc->steps) {
4343 4344 4345 4346 4347
		case 2:
			mtd->subpage_sft = 1;
			break;
		case 4:
		case 8:
4348
		case 16:
4349 4350 4351 4352 4353 4354
			mtd->subpage_sft = 2;
			break;
		}
	}
	chip->subpagesize = mtd->writesize >> mtd->subpage_sft;

4355
	/* Initialize state */
4356
	chip->state = FL_READY;
L
Linus Torvalds 已提交
4357 4358

	/* Invalidate the pagebuffer reference */
4359
	chip->pagebuf = -1;
L
Linus Torvalds 已提交
4360

4361
	/* Large page NAND with SOFT_ECC should support subpage reads */
4362 4363 4364 4365 4366 4367 4368 4369 4370 4371
	switch (ecc->mode) {
	case NAND_ECC_SOFT:
	case NAND_ECC_SOFT_BCH:
		if (chip->page_shift > 9)
			chip->options |= NAND_SUBPAGE_READ;
		break;

	default:
		break;
	}
4372

L
Linus Torvalds 已提交
4373
	/* Fill in remaining MTD driver data */
4374
	mtd->type = nand_is_slc(chip) ? MTD_NANDFLASH : MTD_MLCNANDFLASH;
4375 4376
	mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
						MTD_CAP_NANDFLASH;
4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389
	mtd->_erase = nand_erase;
	mtd->_point = NULL;
	mtd->_unpoint = NULL;
	mtd->_read = nand_read;
	mtd->_write = nand_write;
	mtd->_panic_write = panic_nand_write;
	mtd->_read_oob = nand_read_oob;
	mtd->_write_oob = nand_write_oob;
	mtd->_sync = nand_sync;
	mtd->_lock = NULL;
	mtd->_unlock = NULL;
	mtd->_suspend = nand_suspend;
	mtd->_resume = nand_resume;
S
Scott Branden 已提交
4390
	mtd->_reboot = nand_shutdown;
4391
	mtd->_block_isreserved = nand_block_isreserved;
4392 4393
	mtd->_block_isbad = nand_block_isbad;
	mtd->_block_markbad = nand_block_markbad;
4394
	mtd->writebufsize = mtd->writesize;
L
Linus Torvalds 已提交
4395

M
Mike Dunn 已提交
4396
	/* propagate ecc info to mtd_info */
4397 4398 4399
	mtd->ecclayout = ecc->layout;
	mtd->ecc_strength = ecc->strength;
	mtd->ecc_step_size = ecc->size;
4400 4401 4402 4403 4404 4405
	/*
	 * Initialize bitflip_threshold to its default prior scan_bbt() call.
	 * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
	 * properly set.
	 */
	if (!mtd->bitflip_threshold)
4406
		mtd->bitflip_threshold = DIV_ROUND_UP(mtd->ecc_strength * 3, 4);
L
Linus Torvalds 已提交
4407

4408
	/* Check, if we should skip the bad block table scan */
4409
	if (chip->options & NAND_SKIP_BBTSCAN)
4410
		return 0;
L
Linus Torvalds 已提交
4411 4412

	/* Build bad block table */
4413
	return chip->scan_bbt(mtd);
L
Linus Torvalds 已提交
4414
}
4415
EXPORT_SYMBOL(nand_scan_tail);
L
Linus Torvalds 已提交
4416

4417 4418
/*
 * is_module_text_address() isn't exported, and it's mostly a pointless
4419
 * test if this is a module _anyway_ -- they'd have to try _really_ hard
4420 4421
 * to call us from in-kernel code if the core NAND support is modular.
 */
4422 4423 4424 4425
#ifdef MODULE
#define caller_is_module() (1)
#else
#define caller_is_module() \
4426
	is_module_text_address((unsigned long)__builtin_return_address(0))
4427 4428 4429 4430
#endif

/**
 * nand_scan - [NAND Interface] Scan for the NAND device
4431 4432
 * @mtd: MTD device structure
 * @maxchips: number of chips to scan for
4433
 *
4434 4435 4436 4437
 * This fills out all the uninitialized function pointers with the defaults.
 * The flash ID is read and the mtd/chip structures are filled with the
 * appropriate values. The mtd->owner field must be set to the module of the
 * caller.
4438 4439 4440 4441 4442 4443 4444
 */
int nand_scan(struct mtd_info *mtd, int maxchips)
{
	int ret;

	/* Many callers got this wrong, so check for it for a while... */
	if (!mtd->owner && caller_is_module()) {
4445
		pr_crit("%s called with NULL mtd->owner!\n", __func__);
4446 4447 4448
		BUG();
	}

4449
	ret = nand_scan_ident(mtd, maxchips, NULL);
4450 4451 4452 4453
	if (!ret)
		ret = nand_scan_tail(mtd);
	return ret;
}
4454
EXPORT_SYMBOL(nand_scan);
4455

L
Linus Torvalds 已提交
4456
/**
4457
 * nand_release - [NAND Interface] Free resources held by the NAND device
4458 4459
 * @mtd: MTD device structure
 */
4460
void nand_release(struct mtd_info *mtd)
L
Linus Torvalds 已提交
4461
{
4462
	struct nand_chip *chip = mtd_to_nand(mtd);
L
Linus Torvalds 已提交
4463

4464 4465 4466
	if (chip->ecc.mode == NAND_ECC_SOFT_BCH)
		nand_bch_free((struct nand_bch_control *)chip->ecc.priv);

4467
	mtd_device_unregister(mtd);
L
Linus Torvalds 已提交
4468

J
Jesper Juhl 已提交
4469
	/* Free bad block table memory */
4470
	kfree(chip->bbt);
4471 4472
	if (!(chip->options & NAND_OWN_BUFFERS))
		kfree(chip->buffers);
4473 4474 4475 4476 4477

	/* Free bad block descriptor memory */
	if (chip->badblock_pattern && chip->badblock_pattern->options
			& NAND_BBT_DYNAMICSTRUCT)
		kfree(chip->badblock_pattern);
L
Linus Torvalds 已提交
4478
}
4479
EXPORT_SYMBOL_GPL(nand_release);
4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494

static int __init nand_base_init(void)
{
	led_trigger_register_simple("nand-disk", &nand_led_trigger);
	return 0;
}

static void __exit nand_base_exit(void)
{
	led_trigger_unregister_simple(nand_led_trigger);
}

module_init(nand_base_init);
module_exit(nand_base_exit);

4495
MODULE_LICENSE("GPL");
4496 4497
MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>");
MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
4498
MODULE_DESCRIPTION("Generic NAND flash driver code");