1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 *  Overview:
4 *   This is the generic MTD driver for NAND flash devices. It should be
5 *   capable of working with almost all NAND chips currently available.
6 *
7 *	Additional technical information is available on
8 *	http://www.linux-mtd.infradead.org/doc/nand.html
9 *
10 *  Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
11 *		  2002-2006 Thomas Gleixner (tglx@linutronix.de)
12 *
13 *  Credits:
14 *	David Woodhouse for adding multichip support
15 *
16 *	Aleph One Ltd. and Toby Churchill Ltd. for supporting the
17 *	rework for 2K page size chips
18 *
19 *  TODO:
20 *	Enable cached programming for 2k page size chips
21 *	Check, if mtd->ecctype should be set to MTD_ECC_HW
22 *	if we have HW ECC support.
23 *	BBT table is not serialized, has to be fixed
24 */
25
26#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
27
28#include <linux/module.h>
29#include <linux/delay.h>
30#include <linux/errno.h>
31#include <linux/err.h>
32#include <linux/sched.h>
33#include <linux/slab.h>
34#include <linux/mm.h>
35#include <linux/types.h>
36#include <linux/mtd/mtd.h>
37#include <linux/mtd/nand.h>
38#include <linux/mtd/nand_ecc.h>
39#include <linux/mtd/nand_bch.h>
40#include <linux/interrupt.h>
41#include <linux/bitops.h>
42#include <linux/io.h>
43#include <linux/mtd/partitions.h>
44#include <linux/of.h>
45#include <linux/gpio/consumer.h>
46
47#include "internals.h"
48
49static int nand_pairing_dist3_get_info(struct mtd_info *mtd, int page,
50				       struct mtd_pairing_info *info)
51{
52	int lastpage = (mtd->erasesize / mtd->writesize) - 1;
53	int dist = 3;
54
55	if (page == lastpage)
56		dist = 2;
57
58	if (!page || (page & 1)) {
59		info->group = 0;
60		info->pair = (page + 1) / 2;
61	} else {
62		info->group = 1;
63		info->pair = (page + 1 - dist) / 2;
64	}
65
66	return 0;
67}
68
69static int nand_pairing_dist3_get_wunit(struct mtd_info *mtd,
70					const struct mtd_pairing_info *info)
71{
72	int lastpair = ((mtd->erasesize / mtd->writesize) - 1) / 2;
73	int page = info->pair * 2;
74	int dist = 3;
75
76	if (!info->group && !info->pair)
77		return 0;
78
79	if (info->pair == lastpair && info->group)
80		dist = 2;
81
82	if (!info->group)
83		page--;
84	else if (info->pair)
85		page += dist - 1;
86
87	if (page >= mtd->erasesize / mtd->writesize)
88		return -EINVAL;
89
90	return page;
91}
92
93const struct mtd_pairing_scheme dist3_pairing_scheme = {
94	.ngroups = 2,
95	.get_info = nand_pairing_dist3_get_info,
96	.get_wunit = nand_pairing_dist3_get_wunit,
97};
98
99static int check_offs_len(struct nand_chip *chip, loff_t ofs, uint64_t len)
100{
101	int ret = 0;
102
103	/* Start address must align on block boundary */
104	if (ofs & ((1ULL << chip->phys_erase_shift) - 1)) {
105		pr_debug("%s: unaligned address\n", __func__);
106		ret = -EINVAL;
107	}
108
109	/* Length must align on block boundary */
110	if (len & ((1ULL << chip->phys_erase_shift) - 1)) {
111		pr_debug("%s: length not block aligned\n", __func__);
112		ret = -EINVAL;
113	}
114
115	return ret;
116}
117
118/**
119 * nand_extract_bits - Copy unaligned bits from one buffer to another one
120 * @dst: destination buffer
121 * @dst_off: bit offset at which the writing starts
122 * @src: source buffer
123 * @src_off: bit offset at which the reading starts
124 * @nbits: number of bits to copy from @src to @dst
125 *
126 * Copy bits from one memory region to another (overlap authorized).
127 */
128void nand_extract_bits(u8 *dst, unsigned int dst_off, const u8 *src,
129		       unsigned int src_off, unsigned int nbits)
130{
131	unsigned int tmp, n;
132
133	dst += dst_off / 8;
134	dst_off %= 8;
135	src += src_off / 8;
136	src_off %= 8;
137
138	while (nbits) {
139		n = min3(8 - dst_off, 8 - src_off, nbits);
140
141		tmp = (*src >> src_off) & GENMASK(n - 1, 0);
142		*dst &= ~GENMASK(n - 1 + dst_off, dst_off);
143		*dst |= tmp << dst_off;
144
145		dst_off += n;
146		if (dst_off >= 8) {
147			dst++;
148			dst_off -= 8;
149		}
150
151		src_off += n;
152		if (src_off >= 8) {
153			src++;
154			src_off -= 8;
155		}
156
157		nbits -= n;
158	}
159}
160EXPORT_SYMBOL_GPL(nand_extract_bits);
161
162/**
163 * nand_select_target() - Select a NAND target (A.K.A. die)
164 * @chip: NAND chip object
165 * @cs: the CS line to select. Note that this CS id is always from the chip
166 *	PoV, not the controller one
167 *
168 * Select a NAND target so that further operations executed on @chip go to the
169 * selected NAND target.
170 */
171void nand_select_target(struct nand_chip *chip, unsigned int cs)
172{
173	/*
174	 * cs should always lie between 0 and nanddev_ntargets(), when that's
175	 * not the case it's a bug and the caller should be fixed.
176	 */
177	if (WARN_ON(cs > nanddev_ntargets(&chip->base)))
178		return;
179
180	chip->cur_cs = cs;
181
182	if (chip->legacy.select_chip)
183		chip->legacy.select_chip(chip, cs);
184}
185EXPORT_SYMBOL_GPL(nand_select_target);
186
187/**
188 * nand_deselect_target() - Deselect the currently selected target
189 * @chip: NAND chip object
190 *
191 * Deselect the currently selected NAND target. The result of operations
192 * executed on @chip after the target has been deselected is undefined.
193 */
194void nand_deselect_target(struct nand_chip *chip)
195{
196	if (chip->legacy.select_chip)
197		chip->legacy.select_chip(chip, -1);
198
199	chip->cur_cs = -1;
200}
201EXPORT_SYMBOL_GPL(nand_deselect_target);
202
203/**
204 * nand_release_device - [GENERIC] release chip
205 * @chip: NAND chip object
206 *
207 * Release chip lock and wake up anyone waiting on the device.
208 */
209static void nand_release_device(struct nand_chip *chip)
210{
211	/* Release the controller and the chip */
212	mutex_unlock(&chip->controller->lock);
213	mutex_unlock(&chip->lock);
214}
215
216/**
217 * nand_bbm_get_next_page - Get the next page for bad block markers
218 * @chip: NAND chip object
219 * @page: First page to start checking for bad block marker usage
220 *
221 * Returns an integer that corresponds to the page offset within a block, for
222 * a page that is used to store bad block markers. If no more pages are
223 * available, -EINVAL is returned.
224 */
225int nand_bbm_get_next_page(struct nand_chip *chip, int page)
226{
227	struct mtd_info *mtd = nand_to_mtd(chip);
228	int last_page = ((mtd->erasesize - mtd->writesize) >>
229			 chip->page_shift) & chip->pagemask;
230	unsigned int bbm_flags = NAND_BBM_FIRSTPAGE | NAND_BBM_SECONDPAGE
231		| NAND_BBM_LASTPAGE;
232
233	if (page == 0 && !(chip->options & bbm_flags))
234		return 0;
235	if (page == 0 && chip->options & NAND_BBM_FIRSTPAGE)
236		return 0;
237	if (page <= 1 && chip->options & NAND_BBM_SECONDPAGE)
238		return 1;
239	if (page <= last_page && chip->options & NAND_BBM_LASTPAGE)
240		return last_page;
241
242	return -EINVAL;
243}
244
245/**
246 * nand_block_bad - [DEFAULT] Read bad block marker from the chip
247 * @chip: NAND chip object
248 * @ofs: offset from device start
249 *
250 * Check, if the block is bad.
251 */
252static int nand_block_bad(struct nand_chip *chip, loff_t ofs)
253{
254	int first_page, page_offset;
255	int res;
256	u8 bad;
257
258	first_page = (int)(ofs >> chip->page_shift) & chip->pagemask;
259	page_offset = nand_bbm_get_next_page(chip, 0);
260
261	while (page_offset >= 0) {
262		res = chip->ecc.read_oob(chip, first_page + page_offset);
263		if (res < 0)
264			return res;
265
266		bad = chip->oob_poi[chip->badblockpos];
267
268		if (likely(chip->badblockbits == 8))
269			res = bad != 0xFF;
270		else
271			res = hweight8(bad) < chip->badblockbits;
272		if (res)
273			return res;
274
275		page_offset = nand_bbm_get_next_page(chip, page_offset + 1);
276	}
277
278	return 0;
279}
280
281static int nand_isbad_bbm(struct nand_chip *chip, loff_t ofs)
282{
283	if (chip->options & NAND_NO_BBM_QUIRK)
284		return 0;
285
286	if (chip->legacy.block_bad)
287		return chip->legacy.block_bad(chip, ofs);
288
289	return nand_block_bad(chip, ofs);
290}
291
292/**
293 * nand_get_device - [GENERIC] Get chip for selected access
294 * @chip: NAND chip structure
295 *
296 * Lock the device and its controller for exclusive access
297 *
298 * Return: -EBUSY if the chip has been suspended, 0 otherwise
299 */
300static void nand_get_device(struct nand_chip *chip)
301{
302	/* Wait until the device is resumed. */
303	while (1) {
304		mutex_lock(&chip->lock);
305		if (!chip->suspended) {
306			mutex_lock(&chip->controller->lock);
307			return;
308		}
309		mutex_unlock(&chip->lock);
310
311		wait_event(chip->resume_wq, !chip->suspended);
312	}
313}
314
315/**
316 * nand_check_wp - [GENERIC] check if the chip is write protected
317 * @chip: NAND chip object
318 *
319 * Check, if the device is write protected. The function expects, that the
320 * device is already selected.
321 */
322static int nand_check_wp(struct nand_chip *chip)
323{
324	u8 status;
325	int ret;
326
327	/* Broken xD cards report WP despite being writable */
328	if (chip->options & NAND_BROKEN_XD)
329		return 0;
330
331	/* Check the WP bit */
332	ret = nand_status_op(chip, &status);
333	if (ret)
334		return ret;
335
336	return status & NAND_STATUS_WP ? 0 : 1;
337}
338
339/**
340 * nand_fill_oob - [INTERN] Transfer client buffer to oob
341 * @chip: NAND chip object
342 * @oob: oob data buffer
343 * @len: oob data write length
344 * @ops: oob ops structure
345 */
346static uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, size_t len,
347			      struct mtd_oob_ops *ops)
348{
349	struct mtd_info *mtd = nand_to_mtd(chip);
350	int ret;
351
352	/*
353	 * Initialise to all 0xFF, to avoid the possibility of left over OOB
354	 * data from a previous OOB read.
355	 */
356	memset(chip->oob_poi, 0xff, mtd->oobsize);
357
358	switch (ops->mode) {
359
360	case MTD_OPS_PLACE_OOB:
361	case MTD_OPS_RAW:
362		memcpy(chip->oob_poi + ops->ooboffs, oob, len);
363		return oob + len;
364
365	case MTD_OPS_AUTO_OOB:
366		ret = mtd_ooblayout_set_databytes(mtd, oob, chip->oob_poi,
367						  ops->ooboffs, len);
368		BUG_ON(ret);
369		return oob + len;
370
371	default:
372		BUG();
373	}
374	return NULL;
375}
376
377/**
378 * nand_do_write_oob - [MTD Interface] NAND write out-of-band
379 * @chip: NAND chip object
380 * @to: offset to write to
381 * @ops: oob operation description structure
382 *
383 * NAND write out-of-band.
384 */
385static int nand_do_write_oob(struct nand_chip *chip, loff_t to,
386			     struct mtd_oob_ops *ops)
387{
388	struct mtd_info *mtd = nand_to_mtd(chip);
389	int chipnr, page, status, len, ret;
390
391	pr_debug("%s: to = 0x%08x, len = %i\n",
392			 __func__, (unsigned int)to, (int)ops->ooblen);
393
394	len = mtd_oobavail(mtd, ops);
395
396	/* Do not allow write past end of page */
397	if ((ops->ooboffs + ops->ooblen) > len) {
398		pr_debug("%s: attempt to write past end of page\n",
399				__func__);
400		return -EINVAL;
401	}
402
403	chipnr = (int)(to >> chip->chip_shift);
404
405	/*
406	 * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
407	 * of my DiskOnChip 2000 test units) will clear the whole data page too
408	 * if we don't do this. I have no clue why, but I seem to have 'fixed'
409	 * it in the doc2000 driver in August 1999.  dwmw2.
410	 */
411	ret = nand_reset(chip, chipnr);
412	if (ret)
413		return ret;
414
415	nand_select_target(chip, chipnr);
416
417	/* Shift to get page */
418	page = (int)(to >> chip->page_shift);
419
420	/* Check, if it is write protected */
421	if (nand_check_wp(chip)) {
422		nand_deselect_target(chip);
423		return -EROFS;
424	}
425
426	/* Invalidate the page cache, if we write to the cached page */
427	if (page == chip->pagecache.page)
428		chip->pagecache.page = -1;
429
430	nand_fill_oob(chip, ops->oobbuf, ops->ooblen, ops);
431
432	if (ops->mode == MTD_OPS_RAW)
433		status = chip->ecc.write_oob_raw(chip, page & chip->pagemask);
434	else
435		status = chip->ecc.write_oob(chip, page & chip->pagemask);
436
437	nand_deselect_target(chip);
438
439	if (status)
440		return status;
441
442	ops->oobretlen = ops->ooblen;
443
444	return 0;
445}
446
447/**
448 * nand_default_block_markbad - [DEFAULT] mark a block bad via bad block marker
449 * @chip: NAND chip object
450 * @ofs: offset from device start
451 *
452 * This is the default implementation, which can be overridden by a hardware
453 * specific driver. It provides the details for writing a bad block marker to a
454 * block.
455 */
456static int nand_default_block_markbad(struct nand_chip *chip, loff_t ofs)
457{
458	struct mtd_info *mtd = nand_to_mtd(chip);
459	struct mtd_oob_ops ops;
460	uint8_t buf[2] = { 0, 0 };
461	int ret = 0, res, page_offset;
462
463	memset(&ops, 0, sizeof(ops));
464	ops.oobbuf = buf;
465	ops.ooboffs = chip->badblockpos;
466	if (chip->options & NAND_BUSWIDTH_16) {
467		ops.ooboffs &= ~0x01;
468		ops.len = ops.ooblen = 2;
469	} else {
470		ops.len = ops.ooblen = 1;
471	}
472	ops.mode = MTD_OPS_PLACE_OOB;
473
474	page_offset = nand_bbm_get_next_page(chip, 0);
475
476	while (page_offset >= 0) {
477		res = nand_do_write_oob(chip,
478					ofs + (page_offset * mtd->writesize),
479					&ops);
480
481		if (!ret)
482			ret = res;
483
484		page_offset = nand_bbm_get_next_page(chip, page_offset + 1);
485	}
486
487	return ret;
488}
489
490/**
491 * nand_markbad_bbm - mark a block by updating the BBM
492 * @chip: NAND chip object
493 * @ofs: offset of the block to mark bad
494 */
495int nand_markbad_bbm(struct nand_chip *chip, loff_t ofs)
496{
497	if (chip->legacy.block_markbad)
498		return chip->legacy.block_markbad(chip, ofs);
499
500	return nand_default_block_markbad(chip, ofs);
501}
502
503/**
504 * nand_block_markbad_lowlevel - mark a block bad
505 * @chip: NAND chip object
506 * @ofs: offset from device start
507 *
508 * This function performs the generic NAND bad block marking steps (i.e., bad
509 * block table(s) and/or marker(s)). We only allow the hardware driver to
510 * specify how to write bad block markers to OOB (chip->legacy.block_markbad).
511 *
512 * We try operations in the following order:
513 *
514 *  (1) erase the affected block, to allow OOB marker to be written cleanly
515 *  (2) write bad block marker to OOB area of affected block (unless flag
516 *      NAND_BBT_NO_OOB_BBM is present)
517 *  (3) update the BBT
518 *
519 * Note that we retain the first error encountered in (2) or (3), finish the
520 * procedures, and dump the error in the end.
521*/
522static int nand_block_markbad_lowlevel(struct nand_chip *chip, loff_t ofs)
523{
524	struct mtd_info *mtd = nand_to_mtd(chip);
525	int res, ret = 0;
526
527	if (!(chip->bbt_options & NAND_BBT_NO_OOB_BBM)) {
528		struct erase_info einfo;
529
530		/* Attempt erase before marking OOB */
531		memset(&einfo, 0, sizeof(einfo));
532		einfo.addr = ofs;
533		einfo.len = 1ULL << chip->phys_erase_shift;
534		nand_erase_nand(chip, &einfo, 0);
535
536		/* Write bad block marker to OOB */
537		nand_get_device(chip);
538
539		ret = nand_markbad_bbm(chip, ofs);
540		nand_release_device(chip);
541	}
542
543	/* Mark block bad in BBT */
544	if (chip->bbt) {
545		res = nand_markbad_bbt(chip, ofs);
546		if (!ret)
547			ret = res;
548	}
549
550	if (!ret)
551		mtd->ecc_stats.badblocks++;
552
553	return ret;
554}
555
556/**
557 * nand_block_isreserved - [GENERIC] Check if a block is marked reserved.
558 * @mtd: MTD device structure
559 * @ofs: offset from device start
560 *
561 * Check if the block is marked as reserved.
562 */
563static int nand_block_isreserved(struct mtd_info *mtd, loff_t ofs)
564{
565	struct nand_chip *chip = mtd_to_nand(mtd);
566
567	if (!chip->bbt)
568		return 0;
569	/* Return info from the table */
570	return nand_isreserved_bbt(chip, ofs);
571}
572
573/**
574 * nand_block_checkbad - [GENERIC] Check if a block is marked bad
575 * @chip: NAND chip object
576 * @ofs: offset from device start
577 * @allowbbt: 1, if its allowed to access the bbt area
578 *
579 * Check, if the block is bad. Either by reading the bad block table or
580 * calling of the scan function.
581 */
582static int nand_block_checkbad(struct nand_chip *chip, loff_t ofs, int allowbbt)
583{
584	/* Return info from the table */
585	if (chip->bbt)
586		return nand_isbad_bbt(chip, ofs, allowbbt);
587
588	return nand_isbad_bbm(chip, ofs);
589}
590
591/**
592 * nand_soft_waitrdy - Poll STATUS reg until RDY bit is set to 1
593 * @chip: NAND chip structure
594 * @timeout_ms: Timeout in ms
595 *
596 * Poll the STATUS register using ->exec_op() until the RDY bit becomes 1.
597 * If that does not happen whitin the specified timeout, -ETIMEDOUT is
598 * returned.
599 *
600 * This helper is intended to be used when the controller does not have access
601 * to the NAND R/B pin.
602 *
603 * Be aware that calling this helper from an ->exec_op() implementation means
604 * ->exec_op() must be re-entrant.
605 *
606 * Return 0 if the NAND chip is ready, a negative error otherwise.
607 */
608int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms)
609{
610	const struct nand_sdr_timings *timings;
611	u8 status = 0;
612	int ret;
613
614	if (!nand_has_exec_op(chip))
615		return -ENOTSUPP;
616
617	/* Wait tWB before polling the STATUS reg. */
618	timings = nand_get_sdr_timings(nand_get_interface_config(chip));
619	ndelay(PSEC_TO_NSEC(timings->tWB_max));
620
621	ret = nand_status_op(chip, NULL);
622	if (ret)
623		return ret;
624
625	/*
626	 * +1 below is necessary because if we are now in the last fraction
627	 * of jiffy and msecs_to_jiffies is 1 then we will wait only that
628	 * small jiffy fraction - possibly leading to false timeout
629	 */
630	timeout_ms = jiffies + msecs_to_jiffies(timeout_ms) + 1;
631	do {
632		ret = nand_read_data_op(chip, &status, sizeof(status), true,
633					false);
634		if (ret)
635			break;
636
637		if (status & NAND_STATUS_READY)
638			break;
639
640		/*
641		 * Typical lowest execution time for a tR on most NANDs is 10us,
642		 * use this as polling delay before doing something smarter (ie.
643		 * deriving a delay from the timeout value, timeout_ms/ratio).
644		 */
645		udelay(10);
646	} while	(time_before(jiffies, timeout_ms));
647
648	/*
649	 * We have to exit READ_STATUS mode in order to read real data on the
650	 * bus in case the WAITRDY instruction is preceding a DATA_IN
651	 * instruction.
652	 */
653	nand_exit_status_op(chip);
654
655	if (ret)
656		return ret;
657
658	return status & NAND_STATUS_READY ? 0 : -ETIMEDOUT;
659};
660EXPORT_SYMBOL_GPL(nand_soft_waitrdy);
661
662/**
663 * nand_gpio_waitrdy - Poll R/B GPIO pin until ready
664 * @chip: NAND chip structure
665 * @gpiod: GPIO descriptor of R/B pin
666 * @timeout_ms: Timeout in ms
667 *
668 * Poll the R/B GPIO pin until it becomes ready. If that does not happen
669 * whitin the specified timeout, -ETIMEDOUT is returned.
670 *
671 * This helper is intended to be used when the controller has access to the
672 * NAND R/B pin over GPIO.
673 *
674 * Return 0 if the R/B pin indicates chip is ready, a negative error otherwise.
675 */
676int nand_gpio_waitrdy(struct nand_chip *chip, struct gpio_desc *gpiod,
677		      unsigned long timeout_ms)
678{
679
680	/*
681	 * Wait until R/B pin indicates chip is ready or timeout occurs.
682	 * +1 below is necessary because if we are now in the last fraction
683	 * of jiffy and msecs_to_jiffies is 1 then we will wait only that
684	 * small jiffy fraction - possibly leading to false timeout.
685	 */
686	timeout_ms = jiffies + msecs_to_jiffies(timeout_ms) + 1;
687	do {
688		if (gpiod_get_value_cansleep(gpiod))
689			return 0;
690
691		cond_resched();
692	} while	(time_before(jiffies, timeout_ms));
693
694	return gpiod_get_value_cansleep(gpiod) ? 0 : -ETIMEDOUT;
695};
696EXPORT_SYMBOL_GPL(nand_gpio_waitrdy);
697
698/**
699 * panic_nand_wait - [GENERIC] wait until the command is done
700 * @chip: NAND chip structure
701 * @timeo: timeout
702 *
703 * Wait for command done. This is a helper function for nand_wait used when
704 * we are in interrupt context. May happen when in panic and trying to write
705 * an oops through mtdoops.
706 */
707void panic_nand_wait(struct nand_chip *chip, unsigned long timeo)
708{
709	int i;
710	for (i = 0; i < timeo; i++) {
711		if (chip->legacy.dev_ready) {
712			if (chip->legacy.dev_ready(chip))
713				break;
714		} else {
715			int ret;
716			u8 status;
717
718			ret = nand_read_data_op(chip, &status, sizeof(status),
719						true, false);
720			if (ret)
721				return;
722
723			if (status & NAND_STATUS_READY)
724				break;
725		}
726		mdelay(1);
727	}
728}
729
730static bool nand_supports_get_features(struct nand_chip *chip, int addr)
731{
732	return (chip->parameters.supports_set_get_features &&
733		test_bit(addr, chip->parameters.get_feature_list));
734}
735
736static bool nand_supports_set_features(struct nand_chip *chip, int addr)
737{
738	return (chip->parameters.supports_set_get_features &&
739		test_bit(addr, chip->parameters.set_feature_list));
740}
741
742/**
743 * nand_reset_interface - Reset data interface and timings
744 * @chip: The NAND chip
745 * @chipnr: Internal die id
746 *
747 * Reset the Data interface and timings to ONFI mode 0.
748 *
749 * Returns 0 for success or negative error code otherwise.
750 */
751static int nand_reset_interface(struct nand_chip *chip, int chipnr)
752{
753	const struct nand_controller_ops *ops = chip->controller->ops;
754	int ret;
755
756	if (!nand_controller_can_setup_interface(chip))
757		return 0;
758
759	/*
760	 * The ONFI specification says:
761	 * "
762	 * To transition from NV-DDR or NV-DDR2 to the SDR data
763	 * interface, the host shall use the Reset (FFh) command
764	 * using SDR timing mode 0. A device in any timing mode is
765	 * required to recognize Reset (FFh) command issued in SDR
766	 * timing mode 0.
767	 * "
768	 *
769	 * Configure the data interface in SDR mode and set the
770	 * timings to timing mode 0.
771	 */
772
773	chip->current_interface_config = nand_get_reset_interface_config();
774	ret = ops->setup_interface(chip, chipnr,
775				   chip->current_interface_config);
776	if (ret)
777		pr_err("Failed to configure data interface to SDR timing mode 0\n");
778
779	return ret;
780}
781
782/**
783 * nand_setup_interface - Setup the best data interface and timings
784 * @chip: The NAND chip
785 * @chipnr: Internal die id
786 *
787 * Configure what has been reported to be the best data interface and NAND
788 * timings supported by the chip and the driver.
789 *
790 * Returns 0 for success or negative error code otherwise.
791 */
792static int nand_setup_interface(struct nand_chip *chip, int chipnr)
793{
794	const struct nand_controller_ops *ops = chip->controller->ops;
795	u8 tmode_param[ONFI_SUBFEATURE_PARAM_LEN] = { };
796	int ret;
797
798	if (!nand_controller_can_setup_interface(chip))
799		return 0;
800
801	/*
802	 * A nand_reset_interface() put both the NAND chip and the NAND
803	 * controller in timings mode 0. If the default mode for this chip is
804	 * also 0, no need to proceed to the change again. Plus, at probe time,
805	 * nand_setup_interface() uses ->set/get_features() which would
806	 * fail anyway as the parameter page is not available yet.
807	 */
808	if (!chip->best_interface_config)
809		return 0;
810
811	tmode_param[0] = chip->best_interface_config->timings.mode;
812
813	/* Change the mode on the chip side (if supported by the NAND chip) */
814	if (nand_supports_set_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE)) {
815		nand_select_target(chip, chipnr);
816		ret = nand_set_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE,
817					tmode_param);
818		nand_deselect_target(chip);
819		if (ret)
820			return ret;
821	}
822
823	/* Change the mode on the controller side */
824	ret = ops->setup_interface(chip, chipnr, chip->best_interface_config);
825	if (ret)
826		return ret;
827
828	/* Check the mode has been accepted by the chip, if supported */
829	if (!nand_supports_get_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE))
830		goto update_interface_config;
831
832	memset(tmode_param, 0, ONFI_SUBFEATURE_PARAM_LEN);
833	nand_select_target(chip, chipnr);
834	ret = nand_get_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE,
835				tmode_param);
836	nand_deselect_target(chip);
837	if (ret)
838		goto err_reset_chip;
839
840	if (tmode_param[0] != chip->best_interface_config->timings.mode) {
841		pr_warn("timing mode %d not acknowledged by the NAND chip\n",
842			chip->best_interface_config->timings.mode);
843		goto err_reset_chip;
844	}
845
846update_interface_config:
847	chip->current_interface_config = chip->best_interface_config;
848
849	return 0;
850
851err_reset_chip:
852	/*
853	 * Fallback to mode 0 if the chip explicitly did not ack the chosen
854	 * timing mode.
855	 */
856	nand_reset_interface(chip, chipnr);
857	nand_select_target(chip, chipnr);
858	nand_reset_op(chip);
859	nand_deselect_target(chip);
860
861	return ret;
862}
863
864/**
865 * nand_choose_best_sdr_timings - Pick up the best SDR timings that both the
866 *                                NAND controller and the NAND chip support
867 * @chip: the NAND chip
868 * @iface: the interface configuration (can eventually be updated)
869 * @spec_timings: specific timings, when not fitting the ONFI specification
870 *
871 * If specific timings are provided, use them. Otherwise, retrieve supported
872 * timing modes from ONFI information.
873 */
874int nand_choose_best_sdr_timings(struct nand_chip *chip,
875				 struct nand_interface_config *iface,
876				 struct nand_sdr_timings *spec_timings)
877{
878	const struct nand_controller_ops *ops = chip->controller->ops;
879	int best_mode = 0, mode, ret;
880
881	iface->type = NAND_SDR_IFACE;
882
883	if (spec_timings) {
884		iface->timings.sdr = *spec_timings;
885		iface->timings.mode = onfi_find_closest_sdr_mode(spec_timings);
886
887		/* Verify the controller supports the requested interface */
888		ret = ops->setup_interface(chip, NAND_DATA_IFACE_CHECK_ONLY,
889					   iface);
890		if (!ret) {
891			chip->best_interface_config = iface;
892			return ret;
893		}
894
895		/* Fallback to slower modes */
896		best_mode = iface->timings.mode;
897	} else if (chip->parameters.onfi) {
898		best_mode = fls(chip->parameters.onfi->async_timing_mode) - 1;
899	}
900
901	for (mode = best_mode; mode >= 0; mode--) {
902		onfi_fill_interface_config(chip, iface, NAND_SDR_IFACE, mode);
903
904		ret = ops->setup_interface(chip, NAND_DATA_IFACE_CHECK_ONLY,
905					   iface);
906		if (!ret)
907			break;
908	}
909
910	chip->best_interface_config = iface;
911
912	return 0;
913}
914
915/**
916 * nand_choose_interface_config - find the best data interface and timings
917 * @chip: The NAND chip
918 *
919 * Find the best data interface and NAND timings supported by the chip
920 * and the driver. Eventually let the NAND manufacturer driver propose his own
921 * set of timings.
922 *
923 * After this function nand_chip->interface_config is initialized with the best
924 * timing mode available.
925 *
926 * Returns 0 for success or negative error code otherwise.
927 */
928static int nand_choose_interface_config(struct nand_chip *chip)
929{
930	struct nand_interface_config *iface;
931	int ret;
932
933	if (!nand_controller_can_setup_interface(chip))
934		return 0;
935
936	iface = kzalloc(sizeof(*iface), GFP_KERNEL);
937	if (!iface)
938		return -ENOMEM;
939
940	if (chip->ops.choose_interface_config)
941		ret = chip->ops.choose_interface_config(chip, iface);
942	else
943		ret = nand_choose_best_sdr_timings(chip, iface, NULL);
944
945	if (ret)
946		kfree(iface);
947
948	return ret;
949}
950
951/**
952 * nand_fill_column_cycles - fill the column cycles of an address
953 * @chip: The NAND chip
954 * @addrs: Array of address cycles to fill
955 * @offset_in_page: The offset in the page
956 *
957 * Fills the first or the first two bytes of the @addrs field depending
958 * on the NAND bus width and the page size.
959 *
960 * Returns the number of cycles needed to encode the column, or a negative
961 * error code in case one of the arguments is invalid.
962 */
963static int nand_fill_column_cycles(struct nand_chip *chip, u8 *addrs,
964				   unsigned int offset_in_page)
965{
966	struct mtd_info *mtd = nand_to_mtd(chip);
967
968	/* Make sure the offset is less than the actual page size. */
969	if (offset_in_page > mtd->writesize + mtd->oobsize)
970		return -EINVAL;
971
972	/*
973	 * On small page NANDs, there's a dedicated command to access the OOB
974	 * area, and the column address is relative to the start of the OOB
975	 * area, not the start of the page. Asjust the address accordingly.
976	 */
977	if (mtd->writesize <= 512 && offset_in_page >= mtd->writesize)
978		offset_in_page -= mtd->writesize;
979
980	/*
981	 * The offset in page is expressed in bytes, if the NAND bus is 16-bit
982	 * wide, then it must be divided by 2.
983	 */
984	if (chip->options & NAND_BUSWIDTH_16) {
985		if (WARN_ON(offset_in_page % 2))
986			return -EINVAL;
987
988		offset_in_page /= 2;
989	}
990
991	addrs[0] = offset_in_page;
992
993	/*
994	 * Small page NANDs use 1 cycle for the columns, while large page NANDs
995	 * need 2
996	 */
997	if (mtd->writesize <= 512)
998		return 1;
999
1000	addrs[1] = offset_in_page >> 8;
1001
1002	return 2;
1003}
1004
1005static int nand_sp_exec_read_page_op(struct nand_chip *chip, unsigned int page,
1006				     unsigned int offset_in_page, void *buf,
1007				     unsigned int len)
1008{
1009	const struct nand_sdr_timings *sdr =
1010		nand_get_sdr_timings(nand_get_interface_config(chip));
1011	struct mtd_info *mtd = nand_to_mtd(chip);
1012	u8 addrs[4];
1013	struct nand_op_instr instrs[] = {
1014		NAND_OP_CMD(NAND_CMD_READ0, 0),
1015		NAND_OP_ADDR(3, addrs, PSEC_TO_NSEC(sdr->tWB_max)),
1016		NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tR_max),
1017				 PSEC_TO_NSEC(sdr->tRR_min)),
1018		NAND_OP_DATA_IN(len, buf, 0),
1019	};
1020	struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1021	int ret;
1022
1023	/* Drop the DATA_IN instruction if len is set to 0. */
1024	if (!len)
1025		op.ninstrs--;
1026
1027	if (offset_in_page >= mtd->writesize)
1028		instrs[0].ctx.cmd.opcode = NAND_CMD_READOOB;
1029	else if (offset_in_page >= 256 &&
1030		 !(chip->options & NAND_BUSWIDTH_16))
1031		instrs[0].ctx.cmd.opcode = NAND_CMD_READ1;
1032
1033	ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1034	if (ret < 0)
1035		return ret;
1036
1037	addrs[1] = page;
1038	addrs[2] = page >> 8;
1039
1040	if (chip->options & NAND_ROW_ADDR_3) {
1041		addrs[3] = page >> 16;
1042		instrs[1].ctx.addr.naddrs++;
1043	}
1044
1045	return nand_exec_op(chip, &op);
1046}
1047
1048static int nand_lp_exec_read_page_op(struct nand_chip *chip, unsigned int page,
1049				     unsigned int offset_in_page, void *buf,
1050				     unsigned int len)
1051{
1052	const struct nand_sdr_timings *sdr =
1053		nand_get_sdr_timings(nand_get_interface_config(chip));
1054	u8 addrs[5];
1055	struct nand_op_instr instrs[] = {
1056		NAND_OP_CMD(NAND_CMD_READ0, 0),
1057		NAND_OP_ADDR(4, addrs, 0),
1058		NAND_OP_CMD(NAND_CMD_READSTART, PSEC_TO_NSEC(sdr->tWB_max)),
1059		NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tR_max),
1060				 PSEC_TO_NSEC(sdr->tRR_min)),
1061		NAND_OP_DATA_IN(len, buf, 0),
1062	};
1063	struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1064	int ret;
1065
1066	/* Drop the DATA_IN instruction if len is set to 0. */
1067	if (!len)
1068		op.ninstrs--;
1069
1070	ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1071	if (ret < 0)
1072		return ret;
1073
1074	addrs[2] = page;
1075	addrs[3] = page >> 8;
1076
1077	if (chip->options & NAND_ROW_ADDR_3) {
1078		addrs[4] = page >> 16;
1079		instrs[1].ctx.addr.naddrs++;
1080	}
1081
1082	return nand_exec_op(chip, &op);
1083}
1084
1085/**
1086 * nand_read_page_op - Do a READ PAGE operation
1087 * @chip: The NAND chip
1088 * @page: page to read
1089 * @offset_in_page: offset within the page
1090 * @buf: buffer used to store the data
1091 * @len: length of the buffer
1092 *
1093 * This function issues a READ PAGE operation.
1094 * This function does not select/unselect the CS line.
1095 *
1096 * Returns 0 on success, a negative error code otherwise.
1097 */
1098int nand_read_page_op(struct nand_chip *chip, unsigned int page,
1099		      unsigned int offset_in_page, void *buf, unsigned int len)
1100{
1101	struct mtd_info *mtd = nand_to_mtd(chip);
1102
1103	if (len && !buf)
1104		return -EINVAL;
1105
1106	if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1107		return -EINVAL;
1108
1109	if (nand_has_exec_op(chip)) {
1110		if (mtd->writesize > 512)
1111			return nand_lp_exec_read_page_op(chip, page,
1112							 offset_in_page, buf,
1113							 len);
1114
1115		return nand_sp_exec_read_page_op(chip, page, offset_in_page,
1116						 buf, len);
1117	}
1118
1119	chip->legacy.cmdfunc(chip, NAND_CMD_READ0, offset_in_page, page);
1120	if (len)
1121		chip->legacy.read_buf(chip, buf, len);
1122
1123	return 0;
1124}
1125EXPORT_SYMBOL_GPL(nand_read_page_op);
1126
1127/**
1128 * nand_read_param_page_op - Do a READ PARAMETER PAGE operation
1129 * @chip: The NAND chip
1130 * @page: parameter page to read
1131 * @buf: buffer used to store the data
1132 * @len: length of the buffer
1133 *
1134 * This function issues a READ PARAMETER PAGE operation.
1135 * This function does not select/unselect the CS line.
1136 *
1137 * Returns 0 on success, a negative error code otherwise.
1138 */
1139int nand_read_param_page_op(struct nand_chip *chip, u8 page, void *buf,
1140			    unsigned int len)
1141{
1142	unsigned int i;
1143	u8 *p = buf;
1144
1145	if (len && !buf)
1146		return -EINVAL;
1147
1148	if (nand_has_exec_op(chip)) {
1149		const struct nand_sdr_timings *sdr =
1150			nand_get_sdr_timings(nand_get_interface_config(chip));
1151		struct nand_op_instr instrs[] = {
1152			NAND_OP_CMD(NAND_CMD_PARAM, 0),
1153			NAND_OP_ADDR(1, &page, PSEC_TO_NSEC(sdr->tWB_max)),
1154			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tR_max),
1155					 PSEC_TO_NSEC(sdr->tRR_min)),
1156			NAND_OP_8BIT_DATA_IN(len, buf, 0),
1157		};
1158		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1159
1160		/* Drop the DATA_IN instruction if len is set to 0. */
1161		if (!len)
1162			op.ninstrs--;
1163
1164		return nand_exec_op(chip, &op);
1165	}
1166
1167	chip->legacy.cmdfunc(chip, NAND_CMD_PARAM, page, -1);
1168	for (i = 0; i < len; i++)
1169		p[i] = chip->legacy.read_byte(chip);
1170
1171	return 0;
1172}
1173
1174/**
1175 * nand_change_read_column_op - Do a CHANGE READ COLUMN operation
1176 * @chip: The NAND chip
1177 * @offset_in_page: offset within the page
1178 * @buf: buffer used to store the data
1179 * @len: length of the buffer
1180 * @force_8bit: force 8-bit bus access
1181 *
1182 * This function issues a CHANGE READ COLUMN operation.
1183 * This function does not select/unselect the CS line.
1184 *
1185 * Returns 0 on success, a negative error code otherwise.
1186 */
1187int nand_change_read_column_op(struct nand_chip *chip,
1188			       unsigned int offset_in_page, void *buf,
1189			       unsigned int len, bool force_8bit)
1190{
1191	struct mtd_info *mtd = nand_to_mtd(chip);
1192
1193	if (len && !buf)
1194		return -EINVAL;
1195
1196	if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1197		return -EINVAL;
1198
1199	/* Small page NANDs do not support column change. */
1200	if (mtd->writesize <= 512)
1201		return -ENOTSUPP;
1202
1203	if (nand_has_exec_op(chip)) {
1204		const struct nand_sdr_timings *sdr =
1205			nand_get_sdr_timings(nand_get_interface_config(chip));
1206		u8 addrs[2] = {};
1207		struct nand_op_instr instrs[] = {
1208			NAND_OP_CMD(NAND_CMD_RNDOUT, 0),
1209			NAND_OP_ADDR(2, addrs, 0),
1210			NAND_OP_CMD(NAND_CMD_RNDOUTSTART,
1211				    PSEC_TO_NSEC(sdr->tCCS_min)),
1212			NAND_OP_DATA_IN(len, buf, 0),
1213		};
1214		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1215		int ret;
1216
1217		ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1218		if (ret < 0)
1219			return ret;
1220
1221		/* Drop the DATA_IN instruction if len is set to 0. */
1222		if (!len)
1223			op.ninstrs--;
1224
1225		instrs[3].ctx.data.force_8bit = force_8bit;
1226
1227		return nand_exec_op(chip, &op);
1228	}
1229
1230	chip->legacy.cmdfunc(chip, NAND_CMD_RNDOUT, offset_in_page, -1);
1231	if (len)
1232		chip->legacy.read_buf(chip, buf, len);
1233
1234	return 0;
1235}
1236EXPORT_SYMBOL_GPL(nand_change_read_column_op);
1237
1238/**
1239 * nand_read_oob_op - Do a READ OOB operation
1240 * @chip: The NAND chip
1241 * @page: page to read
1242 * @offset_in_oob: offset within the OOB area
1243 * @buf: buffer used to store the data
1244 * @len: length of the buffer
1245 *
1246 * This function issues a READ OOB operation.
1247 * This function does not select/unselect the CS line.
1248 *
1249 * Returns 0 on success, a negative error code otherwise.
1250 */
1251int nand_read_oob_op(struct nand_chip *chip, unsigned int page,
1252		     unsigned int offset_in_oob, void *buf, unsigned int len)
1253{
1254	struct mtd_info *mtd = nand_to_mtd(chip);
1255
1256	if (len && !buf)
1257		return -EINVAL;
1258
1259	if (offset_in_oob + len > mtd->oobsize)
1260		return -EINVAL;
1261
1262	if (nand_has_exec_op(chip))
1263		return nand_read_page_op(chip, page,
1264					 mtd->writesize + offset_in_oob,
1265					 buf, len);
1266
1267	chip->legacy.cmdfunc(chip, NAND_CMD_READOOB, offset_in_oob, page);
1268	if (len)
1269		chip->legacy.read_buf(chip, buf, len);
1270
1271	return 0;
1272}
1273EXPORT_SYMBOL_GPL(nand_read_oob_op);
1274
1275static int nand_exec_prog_page_op(struct nand_chip *chip, unsigned int page,
1276				  unsigned int offset_in_page, const void *buf,
1277				  unsigned int len, bool prog)
1278{
1279	const struct nand_sdr_timings *sdr =
1280		nand_get_sdr_timings(nand_get_interface_config(chip));
1281	struct mtd_info *mtd = nand_to_mtd(chip);
1282	u8 addrs[5] = {};
1283	struct nand_op_instr instrs[] = {
1284		/*
1285		 * The first instruction will be dropped if we're dealing
1286		 * with a large page NAND and adjusted if we're dealing
1287		 * with a small page NAND and the page offset is > 255.
1288		 */
1289		NAND_OP_CMD(NAND_CMD_READ0, 0),
1290		NAND_OP_CMD(NAND_CMD_SEQIN, 0),
1291		NAND_OP_ADDR(0, addrs, PSEC_TO_NSEC(sdr->tADL_min)),
1292		NAND_OP_DATA_OUT(len, buf, 0),
1293		NAND_OP_CMD(NAND_CMD_PAGEPROG, PSEC_TO_NSEC(sdr->tWB_max)),
1294		NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tPROG_max), 0),
1295	};
1296	struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1297	int naddrs = nand_fill_column_cycles(chip, addrs, offset_in_page);
1298	int ret;
1299	u8 status;
1300
1301	if (naddrs < 0)
1302		return naddrs;
1303
1304	addrs[naddrs++] = page;
1305	addrs[naddrs++] = page >> 8;
1306	if (chip->options & NAND_ROW_ADDR_3)
1307		addrs[naddrs++] = page >> 16;
1308
1309	instrs[2].ctx.addr.naddrs = naddrs;
1310
1311	/* Drop the last two instructions if we're not programming the page. */
1312	if (!prog) {
1313		op.ninstrs -= 2;
1314		/* Also drop the DATA_OUT instruction if empty. */
1315		if (!len)
1316			op.ninstrs--;
1317	}
1318
1319	if (mtd->writesize <= 512) {
1320		/*
1321		 * Small pages need some more tweaking: we have to adjust the
1322		 * first instruction depending on the page offset we're trying
1323		 * to access.
1324		 */
1325		if (offset_in_page >= mtd->writesize)
1326			instrs[0].ctx.cmd.opcode = NAND_CMD_READOOB;
1327		else if (offset_in_page >= 256 &&
1328			 !(chip->options & NAND_BUSWIDTH_16))
1329			instrs[0].ctx.cmd.opcode = NAND_CMD_READ1;
1330	} else {
1331		/*
1332		 * Drop the first command if we're dealing with a large page
1333		 * NAND.
1334		 */
1335		op.instrs++;
1336		op.ninstrs--;
1337	}
1338
1339	ret = nand_exec_op(chip, &op);
1340	if (!prog || ret)
1341		return ret;
1342
1343	ret = nand_status_op(chip, &status);
1344	if (ret)
1345		return ret;
1346
1347	return status;
1348}
1349
1350/**
1351 * nand_prog_page_begin_op - starts a PROG PAGE operation
1352 * @chip: The NAND chip
1353 * @page: page to write
1354 * @offset_in_page: offset within the page
1355 * @buf: buffer containing the data to write to the page
1356 * @len: length of the buffer
1357 *
1358 * This function issues the first half of a PROG PAGE operation.
1359 * This function does not select/unselect the CS line.
1360 *
1361 * Returns 0 on success, a negative error code otherwise.
1362 */
1363int nand_prog_page_begin_op(struct nand_chip *chip, unsigned int page,
1364			    unsigned int offset_in_page, const void *buf,
1365			    unsigned int len)
1366{
1367	struct mtd_info *mtd = nand_to_mtd(chip);
1368
1369	if (len && !buf)
1370		return -EINVAL;
1371
1372	if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1373		return -EINVAL;
1374
1375	if (nand_has_exec_op(chip))
1376		return nand_exec_prog_page_op(chip, page, offset_in_page, buf,
1377					      len, false);
1378
1379	chip->legacy.cmdfunc(chip, NAND_CMD_SEQIN, offset_in_page, page);
1380
1381	if (buf)
1382		chip->legacy.write_buf(chip, buf, len);
1383
1384	return 0;
1385}
1386EXPORT_SYMBOL_GPL(nand_prog_page_begin_op);
1387
1388/**
1389 * nand_prog_page_end_op - ends a PROG PAGE operation
1390 * @chip: The NAND chip
1391 *
1392 * This function issues the second half of a PROG PAGE operation.
1393 * This function does not select/unselect the CS line.
1394 *
1395 * Returns 0 on success, a negative error code otherwise.
1396 */
1397int nand_prog_page_end_op(struct nand_chip *chip)
1398{
1399	int ret;
1400	u8 status;
1401
1402	if (nand_has_exec_op(chip)) {
1403		const struct nand_sdr_timings *sdr =
1404			nand_get_sdr_timings(nand_get_interface_config(chip));
1405		struct nand_op_instr instrs[] = {
1406			NAND_OP_CMD(NAND_CMD_PAGEPROG,
1407				    PSEC_TO_NSEC(sdr->tWB_max)),
1408			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tPROG_max), 0),
1409		};
1410		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1411
1412		ret = nand_exec_op(chip, &op);
1413		if (ret)
1414			return ret;
1415
1416		ret = nand_status_op(chip, &status);
1417		if (ret)
1418			return ret;
1419	} else {
1420		chip->legacy.cmdfunc(chip, NAND_CMD_PAGEPROG, -1, -1);
1421		ret = chip->legacy.waitfunc(chip);
1422		if (ret < 0)
1423			return ret;
1424
1425		status = ret;
1426	}
1427
1428	if (status & NAND_STATUS_FAIL)
1429		return -EIO;
1430
1431	return 0;
1432}
1433EXPORT_SYMBOL_GPL(nand_prog_page_end_op);
1434
1435/**
1436 * nand_prog_page_op - Do a full PROG PAGE operation
1437 * @chip: The NAND chip
1438 * @page: page to write
1439 * @offset_in_page: offset within the page
1440 * @buf: buffer containing the data to write to the page
1441 * @len: length of the buffer
1442 *
1443 * This function issues a full PROG PAGE operation.
1444 * This function does not select/unselect the CS line.
1445 *
1446 * Returns 0 on success, a negative error code otherwise.
1447 */
1448int nand_prog_page_op(struct nand_chip *chip, unsigned int page,
1449		      unsigned int offset_in_page, const void *buf,
1450		      unsigned int len)
1451{
1452	struct mtd_info *mtd = nand_to_mtd(chip);
1453	int status;
1454
1455	if (!len || !buf)
1456		return -EINVAL;
1457
1458	if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1459		return -EINVAL;
1460
1461	if (nand_has_exec_op(chip)) {
1462		status = nand_exec_prog_page_op(chip, page, offset_in_page, buf,
1463						len, true);
1464	} else {
1465		chip->legacy.cmdfunc(chip, NAND_CMD_SEQIN, offset_in_page,
1466				     page);
1467		chip->legacy.write_buf(chip, buf, len);
1468		chip->legacy.cmdfunc(chip, NAND_CMD_PAGEPROG, -1, -1);
1469		status = chip->legacy.waitfunc(chip);
1470	}
1471
1472	if (status & NAND_STATUS_FAIL)
1473		return -EIO;
1474
1475	return 0;
1476}
1477EXPORT_SYMBOL_GPL(nand_prog_page_op);
1478
1479/**
1480 * nand_change_write_column_op - Do a CHANGE WRITE COLUMN operation
1481 * @chip: The NAND chip
1482 * @offset_in_page: offset within the page
1483 * @buf: buffer containing the data to send to the NAND
1484 * @len: length of the buffer
1485 * @force_8bit: force 8-bit bus access
1486 *
1487 * This function issues a CHANGE WRITE COLUMN operation.
1488 * This function does not select/unselect the CS line.
1489 *
1490 * Returns 0 on success, a negative error code otherwise.
1491 */
1492int nand_change_write_column_op(struct nand_chip *chip,
1493				unsigned int offset_in_page,
1494				const void *buf, unsigned int len,
1495				bool force_8bit)
1496{
1497	struct mtd_info *mtd = nand_to_mtd(chip);
1498
1499	if (len && !buf)
1500		return -EINVAL;
1501
1502	if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1503		return -EINVAL;
1504
1505	/* Small page NANDs do not support column change. */
1506	if (mtd->writesize <= 512)
1507		return -ENOTSUPP;
1508
1509	if (nand_has_exec_op(chip)) {
1510		const struct nand_sdr_timings *sdr =
1511			nand_get_sdr_timings(nand_get_interface_config(chip));
1512		u8 addrs[2];
1513		struct nand_op_instr instrs[] = {
1514			NAND_OP_CMD(NAND_CMD_RNDIN, 0),
1515			NAND_OP_ADDR(2, addrs, PSEC_TO_NSEC(sdr->tCCS_min)),
1516			NAND_OP_DATA_OUT(len, buf, 0),
1517		};
1518		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1519		int ret;
1520
1521		ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1522		if (ret < 0)
1523			return ret;
1524
1525		instrs[2].ctx.data.force_8bit = force_8bit;
1526
1527		/* Drop the DATA_OUT instruction if len is set to 0. */
1528		if (!len)
1529			op.ninstrs--;
1530
1531		return nand_exec_op(chip, &op);
1532	}
1533
1534	chip->legacy.cmdfunc(chip, NAND_CMD_RNDIN, offset_in_page, -1);
1535	if (len)
1536		chip->legacy.write_buf(chip, buf, len);
1537
1538	return 0;
1539}
1540EXPORT_SYMBOL_GPL(nand_change_write_column_op);
1541
1542/**
1543 * nand_readid_op - Do a READID operation
1544 * @chip: The NAND chip
1545 * @addr: address cycle to pass after the READID command
1546 * @buf: buffer used to store the ID
1547 * @len: length of the buffer
1548 *
1549 * This function sends a READID command and reads back the ID returned by the
1550 * NAND.
1551 * This function does not select/unselect the CS line.
1552 *
1553 * Returns 0 on success, a negative error code otherwise.
1554 */
1555int nand_readid_op(struct nand_chip *chip, u8 addr, void *buf,
1556		   unsigned int len)
1557{
1558	unsigned int i;
1559	u8 *id = buf;
1560
1561	if (len && !buf)
1562		return -EINVAL;
1563
1564	if (nand_has_exec_op(chip)) {
1565		const struct nand_sdr_timings *sdr =
1566			nand_get_sdr_timings(nand_get_interface_config(chip));
1567		struct nand_op_instr instrs[] = {
1568			NAND_OP_CMD(NAND_CMD_READID, 0),
1569			NAND_OP_ADDR(1, &addr, PSEC_TO_NSEC(sdr->tADL_min)),
1570			NAND_OP_8BIT_DATA_IN(len, buf, 0),
1571		};
1572		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1573
1574		/* Drop the DATA_IN instruction if len is set to 0. */
1575		if (!len)
1576			op.ninstrs--;
1577
1578		return nand_exec_op(chip, &op);
1579	}
1580
1581	chip->legacy.cmdfunc(chip, NAND_CMD_READID, addr, -1);
1582
1583	for (i = 0; i < len; i++)
1584		id[i] = chip->legacy.read_byte(chip);
1585
1586	return 0;
1587}
1588EXPORT_SYMBOL_GPL(nand_readid_op);
1589
1590/**
1591 * nand_status_op - Do a STATUS operation
1592 * @chip: The NAND chip
1593 * @status: out variable to store the NAND status
1594 *
1595 * This function sends a STATUS command and reads back the status returned by
1596 * the NAND.
1597 * This function does not select/unselect the CS line.
1598 *
1599 * Returns 0 on success, a negative error code otherwise.
1600 */
1601int nand_status_op(struct nand_chip *chip, u8 *status)
1602{
1603	if (nand_has_exec_op(chip)) {
1604		const struct nand_sdr_timings *sdr =
1605			nand_get_sdr_timings(nand_get_interface_config(chip));
1606		struct nand_op_instr instrs[] = {
1607			NAND_OP_CMD(NAND_CMD_STATUS,
1608				    PSEC_TO_NSEC(sdr->tADL_min)),
1609			NAND_OP_8BIT_DATA_IN(1, status, 0),
1610		};
1611		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1612
1613		if (!status)
1614			op.ninstrs--;
1615
1616		return nand_exec_op(chip, &op);
1617	}
1618
1619	chip->legacy.cmdfunc(chip, NAND_CMD_STATUS, -1, -1);
1620	if (status)
1621		*status = chip->legacy.read_byte(chip);
1622
1623	return 0;
1624}
1625EXPORT_SYMBOL_GPL(nand_status_op);
1626
1627/**
1628 * nand_exit_status_op - Exit a STATUS operation
1629 * @chip: The NAND chip
1630 *
1631 * This function sends a READ0 command to cancel the effect of the STATUS
1632 * command to avoid reading only the status until a new read command is sent.
1633 *
1634 * This function does not select/unselect the CS line.
1635 *
1636 * Returns 0 on success, a negative error code otherwise.
1637 */
1638int nand_exit_status_op(struct nand_chip *chip)
1639{
1640	if (nand_has_exec_op(chip)) {
1641		struct nand_op_instr instrs[] = {
1642			NAND_OP_CMD(NAND_CMD_READ0, 0),
1643		};
1644		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1645
1646		return nand_exec_op(chip, &op);
1647	}
1648
1649	chip->legacy.cmdfunc(chip, NAND_CMD_READ0, -1, -1);
1650
1651	return 0;
1652}
1653
1654/**
1655 * nand_erase_op - Do an erase operation
1656 * @chip: The NAND chip
1657 * @eraseblock: block to erase
1658 *
1659 * This function sends an ERASE command and waits for the NAND to be ready
1660 * before returning.
1661 * This function does not select/unselect the CS line.
1662 *
1663 * Returns 0 on success, a negative error code otherwise.
1664 */
1665int nand_erase_op(struct nand_chip *chip, unsigned int eraseblock)
1666{
1667	unsigned int page = eraseblock <<
1668			    (chip->phys_erase_shift - chip->page_shift);
1669	int ret;
1670	u8 status;
1671
1672	if (nand_has_exec_op(chip)) {
1673		const struct nand_sdr_timings *sdr =
1674			nand_get_sdr_timings(nand_get_interface_config(chip));
1675		u8 addrs[3] = {	page, page >> 8, page >> 16 };
1676		struct nand_op_instr instrs[] = {
1677			NAND_OP_CMD(NAND_CMD_ERASE1, 0),
1678			NAND_OP_ADDR(2, addrs, 0),
1679			NAND_OP_CMD(NAND_CMD_ERASE2,
1680				    PSEC_TO_MSEC(sdr->tWB_max)),
1681			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tBERS_max), 0),
1682		};
1683		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1684
1685		if (chip->options & NAND_ROW_ADDR_3)
1686			instrs[1].ctx.addr.naddrs++;
1687
1688		ret = nand_exec_op(chip, &op);
1689		if (ret)
1690			return ret;
1691
1692		ret = nand_status_op(chip, &status);
1693		if (ret)
1694			return ret;
1695	} else {
1696		chip->legacy.cmdfunc(chip, NAND_CMD_ERASE1, -1, page);
1697		chip->legacy.cmdfunc(chip, NAND_CMD_ERASE2, -1, -1);
1698
1699		ret = chip->legacy.waitfunc(chip);
1700		if (ret < 0)
1701			return ret;
1702
1703		status = ret;
1704	}
1705
1706	if (status & NAND_STATUS_FAIL)
1707		return -EIO;
1708
1709	return 0;
1710}
1711EXPORT_SYMBOL_GPL(nand_erase_op);
1712
1713/**
1714 * nand_set_features_op - Do a SET FEATURES operation
1715 * @chip: The NAND chip
1716 * @feature: feature id
1717 * @data: 4 bytes of data
1718 *
1719 * This function sends a SET FEATURES command and waits for the NAND to be
1720 * ready before returning.
1721 * This function does not select/unselect the CS line.
1722 *
1723 * Returns 0 on success, a negative error code otherwise.
1724 */
1725static int nand_set_features_op(struct nand_chip *chip, u8 feature,
1726				const void *data)
1727{
1728	const u8 *params = data;
1729	int i, ret;
1730
1731	if (nand_has_exec_op(chip)) {
1732		const struct nand_sdr_timings *sdr =
1733			nand_get_sdr_timings(nand_get_interface_config(chip));
1734		struct nand_op_instr instrs[] = {
1735			NAND_OP_CMD(NAND_CMD_SET_FEATURES, 0),
1736			NAND_OP_ADDR(1, &feature, PSEC_TO_NSEC(sdr->tADL_min)),
1737			NAND_OP_8BIT_DATA_OUT(ONFI_SUBFEATURE_PARAM_LEN, data,
1738					      PSEC_TO_NSEC(sdr->tWB_max)),
1739			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tFEAT_max), 0),
1740		};
1741		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1742
1743		return nand_exec_op(chip, &op);
1744	}
1745
1746	chip->legacy.cmdfunc(chip, NAND_CMD_SET_FEATURES, feature, -1);
1747	for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
1748		chip->legacy.write_byte(chip, params[i]);
1749
1750	ret = chip->legacy.waitfunc(chip);
1751	if (ret < 0)
1752		return ret;
1753
1754	if (ret & NAND_STATUS_FAIL)
1755		return -EIO;
1756
1757	return 0;
1758}
1759
1760/**
1761 * nand_get_features_op - Do a GET FEATURES operation
1762 * @chip: The NAND chip
1763 * @feature: feature id
1764 * @data: 4 bytes of data
1765 *
1766 * This function sends a GET FEATURES command and waits for the NAND to be
1767 * ready before returning.
1768 * This function does not select/unselect the CS line.
1769 *
1770 * Returns 0 on success, a negative error code otherwise.
1771 */
1772static int nand_get_features_op(struct nand_chip *chip, u8 feature,
1773				void *data)
1774{
1775	u8 *params = data;
1776	int i;
1777
1778	if (nand_has_exec_op(chip)) {
1779		const struct nand_sdr_timings *sdr =
1780			nand_get_sdr_timings(nand_get_interface_config(chip));
1781		struct nand_op_instr instrs[] = {
1782			NAND_OP_CMD(NAND_CMD_GET_FEATURES, 0),
1783			NAND_OP_ADDR(1, &feature, PSEC_TO_NSEC(sdr->tWB_max)),
1784			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tFEAT_max),
1785					 PSEC_TO_NSEC(sdr->tRR_min)),
1786			NAND_OP_8BIT_DATA_IN(ONFI_SUBFEATURE_PARAM_LEN,
1787					     data, 0),
1788		};
1789		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1790
1791		return nand_exec_op(chip, &op);
1792	}
1793
1794	chip->legacy.cmdfunc(chip, NAND_CMD_GET_FEATURES, feature, -1);
1795	for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
1796		params[i] = chip->legacy.read_byte(chip);
1797
1798	return 0;
1799}
1800
1801static int nand_wait_rdy_op(struct nand_chip *chip, unsigned int timeout_ms,
1802			    unsigned int delay_ns)
1803{
1804	if (nand_has_exec_op(chip)) {
1805		struct nand_op_instr instrs[] = {
1806			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(timeout_ms),
1807					 PSEC_TO_NSEC(delay_ns)),
1808		};
1809		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1810
1811		return nand_exec_op(chip, &op);
1812	}
1813
1814	/* Apply delay or wait for ready/busy pin */
1815	if (!chip->legacy.dev_ready)
1816		udelay(chip->legacy.chip_delay);
1817	else
1818		nand_wait_ready(chip);
1819
1820	return 0;
1821}
1822
1823/**
1824 * nand_reset_op - Do a reset operation
1825 * @chip: The NAND chip
1826 *
1827 * This function sends a RESET command and waits for the NAND to be ready
1828 * before returning.
1829 * This function does not select/unselect the CS line.
1830 *
1831 * Returns 0 on success, a negative error code otherwise.
1832 */
1833int nand_reset_op(struct nand_chip *chip)
1834{
1835	if (nand_has_exec_op(chip)) {
1836		const struct nand_sdr_timings *sdr =
1837			nand_get_sdr_timings(nand_get_interface_config(chip));
1838		struct nand_op_instr instrs[] = {
1839			NAND_OP_CMD(NAND_CMD_RESET, PSEC_TO_NSEC(sdr->tWB_max)),
1840			NAND_OP_WAIT_RDY(PSEC_TO_MSEC(sdr->tRST_max), 0),
1841		};
1842		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1843
1844		return nand_exec_op(chip, &op);
1845	}
1846
1847	chip->legacy.cmdfunc(chip, NAND_CMD_RESET, -1, -1);
1848
1849	return 0;
1850}
1851EXPORT_SYMBOL_GPL(nand_reset_op);
1852
1853/**
1854 * nand_read_data_op - Read data from the NAND
1855 * @chip: The NAND chip
1856 * @buf: buffer used to store the data
1857 * @len: length of the buffer
1858 * @force_8bit: force 8-bit bus access
1859 * @check_only: do not actually run the command, only checks if the
1860 *              controller driver supports it
1861 *
1862 * This function does a raw data read on the bus. Usually used after launching
1863 * another NAND operation like nand_read_page_op().
1864 * This function does not select/unselect the CS line.
1865 *
1866 * Returns 0 on success, a negative error code otherwise.
1867 */
1868int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len,
1869		      bool force_8bit, bool check_only)
1870{
1871	if (!len || !buf)
1872		return -EINVAL;
1873
1874	if (nand_has_exec_op(chip)) {
1875		struct nand_op_instr instrs[] = {
1876			NAND_OP_DATA_IN(len, buf, 0),
1877		};
1878		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1879
1880		instrs[0].ctx.data.force_8bit = force_8bit;
1881
1882		if (check_only)
1883			return nand_check_op(chip, &op);
1884
1885		return nand_exec_op(chip, &op);
1886	}
1887
1888	if (check_only)
1889		return 0;
1890
1891	if (force_8bit) {
1892		u8 *p = buf;
1893		unsigned int i;
1894
1895		for (i = 0; i < len; i++)
1896			p[i] = chip->legacy.read_byte(chip);
1897	} else {
1898		chip->legacy.read_buf(chip, buf, len);
1899	}
1900
1901	return 0;
1902}
1903EXPORT_SYMBOL_GPL(nand_read_data_op);
1904
1905/**
1906 * nand_write_data_op - Write data from the NAND
1907 * @chip: The NAND chip
1908 * @buf: buffer containing the data to send on the bus
1909 * @len: length of the buffer
1910 * @force_8bit: force 8-bit bus access
1911 *
1912 * This function does a raw data write on the bus. Usually used after launching
1913 * another NAND operation like nand_write_page_begin_op().
1914 * This function does not select/unselect the CS line.
1915 *
1916 * Returns 0 on success, a negative error code otherwise.
1917 */
1918int nand_write_data_op(struct nand_chip *chip, const void *buf,
1919		       unsigned int len, bool force_8bit)
1920{
1921	if (!len || !buf)
1922		return -EINVAL;
1923
1924	if (nand_has_exec_op(chip)) {
1925		struct nand_op_instr instrs[] = {
1926			NAND_OP_DATA_OUT(len, buf, 0),
1927		};
1928		struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1929
1930		instrs[0].ctx.data.force_8bit = force_8bit;
1931
1932		return nand_exec_op(chip, &op);
1933	}
1934
1935	if (force_8bit) {
1936		const u8 *p = buf;
1937		unsigned int i;
1938
1939		for (i = 0; i < len; i++)
1940			chip->legacy.write_byte(chip, p[i]);
1941	} else {
1942		chip->legacy.write_buf(chip, buf, len);
1943	}
1944
1945	return 0;
1946}
1947EXPORT_SYMBOL_GPL(nand_write_data_op);
1948
1949/**
1950 * struct nand_op_parser_ctx - Context used by the parser
1951 * @instrs: array of all the instructions that must be addressed
1952 * @ninstrs: length of the @instrs array
1953 * @subop: Sub-operation to be passed to the NAND controller
1954 *
1955 * This structure is used by the core to split NAND operations into
1956 * sub-operations that can be handled by the NAND controller.
1957 */
1958struct nand_op_parser_ctx {
1959	const struct nand_op_instr *instrs;
1960	unsigned int ninstrs;
1961	struct nand_subop subop;
1962};
1963
1964/**
1965 * nand_op_parser_must_split_instr - Checks if an instruction must be split
1966 * @pat: the parser pattern element that matches @instr
1967 * @instr: pointer to the instruction to check
1968 * @start_offset: this is an in/out parameter. If @instr has already been
1969 *		  split, then @start_offset is the offset from which to start
1970 *		  (either an address cycle or an offset in the data buffer).
1971 *		  Conversely, if the function returns true (ie. instr must be
1972 *		  split), this parameter is updated to point to the first
1973 *		  data/address cycle that has not been taken care of.
1974 *
1975 * Some NAND controllers are limited and cannot send X address cycles with a
1976 * unique operation, or cannot read/write more than Y bytes at the same time.
1977 * In this case, split the instruction that does not fit in a single
1978 * controller-operation into two or more chunks.
1979 *
1980 * Returns true if the instruction must be split, false otherwise.
1981 * The @start_offset parameter is also updated to the offset at which the next
1982 * bundle of instruction must start (if an address or a data instruction).
1983 */
1984static bool
1985nand_op_parser_must_split_instr(const struct nand_op_parser_pattern_elem *pat,
1986				const struct nand_op_instr *instr,
1987				unsigned int *start_offset)
1988{
1989	switch (pat->type) {
1990	case NAND_OP_ADDR_INSTR:
1991		if (!pat->ctx.addr.maxcycles)
1992			break;
1993
1994		if (instr->ctx.addr.naddrs - *start_offset >
1995		    pat->ctx.addr.maxcycles) {
1996			*start_offset += pat->ctx.addr.maxcycles;
1997			return true;
1998		}
1999		break;
2000
2001	case NAND_OP_DATA_IN_INSTR:
2002	case NAND_OP_DATA_OUT_INSTR:
2003		if (!pat->ctx.data.maxlen)
2004			break;
2005
2006		if (instr->ctx.data.len - *start_offset >
2007		    pat->ctx.data.maxlen) {
2008			*start_offset += pat->ctx.data.maxlen;
2009			return true;
2010		}
2011		break;
2012
2013	default:
2014		break;
2015	}
2016
2017	return false;
2018}
2019
2020/**
2021 * nand_op_parser_match_pat - Checks if a pattern matches the instructions
2022 *			      remaining in the parser context
2023 * @pat: the pattern to test
2024 * @ctx: the parser context structure to match with the pattern @pat
2025 *
2026 * Check if @pat matches the set or a sub-set of instructions remaining in @ctx.
2027 * Returns true if this is the case, false ortherwise. When true is returned,
2028 * @ctx->subop is updated with the set of instructions to be passed to the
2029 * controller driver.
2030 */
2031static bool
2032nand_op_parser_match_pat(const struct nand_op_parser_pattern *pat,
2033			 struct nand_op_parser_ctx *ctx)
2034{
2035	unsigned int instr_offset = ctx->subop.first_instr_start_off;
2036	const struct nand_op_instr *end = ctx->instrs + ctx->ninstrs;
2037	const struct nand_op_instr *instr = ctx->subop.instrs;
2038	unsigned int i, ninstrs;
2039
2040	for (i = 0, ninstrs = 0; i < pat->nelems && instr < end; i++) {
2041		/*
2042		 * The pattern instruction does not match the operation
2043		 * instruction. If the instruction is marked optional in the
2044		 * pattern definition, we skip the pattern element and continue
2045		 * to the next one. If the element is mandatory, there's no
2046		 * match and we can return false directly.
2047		 */
2048		if (instr->type != pat->elems[i].type) {
2049			if (!pat->elems[i].optional)
2050				return false;
2051
2052			continue;
2053		}
2054
2055		/*
2056		 * Now check the pattern element constraints. If the pattern is
2057		 * not able to handle the whole instruction in a single step,
2058		 * we have to split it.
2059		 * The last_instr_end_off value comes back updated to point to
2060		 * the position where we have to split the instruction (the
2061		 * start of the next subop chunk).
2062		 */
2063		if (nand_op_parser_must_split_instr(&pat->elems[i], instr,
2064						    &instr_offset)) {
2065			ninstrs++;
2066			i++;
2067			break;
2068		}
2069
2070		instr++;
2071		ninstrs++;
2072		instr_offset = 0;
2073	}
2074
2075	/*
2076	 * This can happen if all instructions of a pattern are optional.
2077	 * Still, if there's not at least one instruction handled by this
2078	 * pattern, this is not a match, and we should try the next one (if
2079	 * any).
2080	 */
2081	if (!ninstrs)
2082		return false;
2083
2084	/*
2085	 * We had a match on the pattern head, but the pattern may be longer
2086	 * than the instructions we're asked to execute. We need to make sure
2087	 * there's no mandatory elements in the pattern tail.
2088	 */
2089	for (; i < pat->nelems; i++) {
2090		if (!pat->elems[i].optional)
2091			return false;
2092	}
2093
2094	/*
2095	 * We have a match: update the subop structure accordingly and return
2096	 * true.
2097	 */
2098	ctx->subop.ninstrs = ninstrs;
2099	ctx->subop.last_instr_end_off = instr_offset;
2100
2101	return true;
2102}
2103
2104#if IS_ENABLED(CONFIG_DYNAMIC_DEBUG) || defined(DEBUG)
2105static void nand_op_parser_trace(const struct nand_op_parser_ctx *ctx)
2106{
2107	const struct nand_op_instr *instr;
2108	char *prefix = "      ";
2109	unsigned int i;
2110
2111	pr_debug("executing subop (CS%d):\n", ctx->subop.cs);
2112
2113	for (i = 0; i < ctx->ninstrs; i++) {
2114		instr = &ctx->instrs[i];
2115
2116		if (instr == &ctx->subop.instrs[0])
2117			prefix = "    ->";
2118
2119		nand_op_trace(prefix, instr);
2120
2121		if (instr == &ctx->subop.instrs[ctx->subop.ninstrs - 1])
2122			prefix = "      ";
2123	}
2124}
2125#else
2126static void nand_op_parser_trace(const struct nand_op_parser_ctx *ctx)
2127{
2128	/* NOP */
2129}
2130#endif
2131
2132static int nand_op_parser_cmp_ctx(const struct nand_op_parser_ctx *a,
2133				  const struct nand_op_parser_ctx *b)
2134{
2135	if (a->subop.ninstrs < b->subop.ninstrs)
2136		return -1;
2137	else if (a->subop.ninstrs > b->subop.ninstrs)
2138		return 1;
2139
2140	if (a->subop.last_instr_end_off < b->subop.last_instr_end_off)
2141		return -1;
2142	else if (a->subop.last_instr_end_off > b->subop.last_instr_end_off)
2143		return 1;
2144
2145	return 0;
2146}
2147
2148/**
2149 * nand_op_parser_exec_op - exec_op parser
2150 * @chip: the NAND chip
2151 * @parser: patterns description provided by the controller driver
2152 * @op: the NAND operation to address
2153 * @check_only: when true, the function only checks if @op can be handled but
2154 *		does not execute the operation
2155 *
2156 * Helper function designed to ease integration of NAND controller drivers that
2157 * only support a limited set of instruction sequences. The supported sequences
2158 * are described in @parser, and the framework takes care of splitting @op into
2159 * multiple sub-operations (if required) and pass them back to the ->exec()
2160 * callback of the matching pattern if @check_only is set to false.
2161 *
2162 * NAND controller drivers should call this function from their own ->exec_op()
2163 * implementation.
2164 *
2165 * Returns 0 on success, a negative error code otherwise. A failure can be
2166 * caused by an unsupported operation (none of the supported patterns is able
2167 * to handle the requested operation), or an error returned by one of the
2168 * matching pattern->exec() hook.
2169 */
2170int nand_op_parser_exec_op(struct nand_chip *chip,
2171			   const struct nand_op_parser *parser,
2172			   const struct nand_operation *op, bool check_only)
2173{
2174	struct nand_op_parser_ctx ctx = {
2175		.subop.cs = op->cs,
2176		.subop.instrs = op->instrs,
2177		.instrs = op->instrs,
2178		.ninstrs = op->ninstrs,
2179	};
2180	unsigned int i;
2181
2182	while (ctx.subop.instrs < op->instrs + op->ninstrs) {
2183		const struct nand_op_parser_pattern *pattern;
2184		struct nand_op_parser_ctx best_ctx;
2185		int ret, best_pattern = -1;
2186
2187		for (i = 0; i < parser->npatterns; i++) {
2188			struct nand_op_parser_ctx test_ctx = ctx;
2189
2190			pattern = &parser->patterns[i];
2191			if (!nand_op_parser_match_pat(pattern, &test_ctx))
2192				continue;
2193
2194			if (best_pattern >= 0 &&
2195			    nand_op_parser_cmp_ctx(&test_ctx, &best_ctx) <= 0)
2196				continue;
2197
2198			best_pattern = i;
2199			best_ctx = test_ctx;
2200		}
2201
2202		if (best_pattern < 0) {
2203			pr_debug("->exec_op() parser: pattern not found!\n");
2204			return -ENOTSUPP;
2205		}
2206
2207		ctx = best_ctx;
2208		nand_op_parser_trace(&ctx);
2209
2210		if (!check_only) {
2211			pattern = &parser->patterns[best_pattern];
2212			ret = pattern->exec(chip, &ctx.subop);
2213			if (ret)
2214				return ret;
2215		}
2216
2217		/*
2218		 * Update the context structure by pointing to the start of the
2219		 * next subop.
2220		 */
2221		ctx.subop.instrs = ctx.subop.instrs + ctx.subop.ninstrs;
2222		if (ctx.subop.last_instr_end_off)
2223			ctx.subop.instrs -= 1;
2224
2225		ctx.subop.first_instr_start_off = ctx.subop.last_instr_end_off;
2226	}
2227
2228	return 0;
2229}
2230EXPORT_SYMBOL_GPL(nand_op_parser_exec_op);
2231
2232static bool nand_instr_is_data(const struct nand_op_instr *instr)
2233{
2234	return instr && (instr->type == NAND_OP_DATA_IN_INSTR ||
2235			 instr->type == NAND_OP_DATA_OUT_INSTR);
2236}
2237
2238static bool nand_subop_instr_is_valid(const struct nand_subop *subop,
2239				      unsigned int instr_idx)
2240{
2241	return subop && instr_idx < subop->ninstrs;
2242}
2243
2244static unsigned int nand_subop_get_start_off(const struct nand_subop *subop,
2245					     unsigned int instr_idx)
2246{
2247	if (instr_idx)
2248		return 0;
2249
2250	return subop->first_instr_start_off;
2251}
2252
2253/**
2254 * nand_subop_get_addr_start_off - Get the start offset in an address array
2255 * @subop: The entire sub-operation
2256 * @instr_idx: Index of the instruction inside the sub-operation
2257 *
2258 * During driver development, one could be tempted to directly use the
2259 * ->addr.addrs field of address instructions. This is wrong as address
2260 * instructions might be split.
2261 *
2262 * Given an address instruction, returns the offset of the first cycle to issue.
2263 */
2264unsigned int nand_subop_get_addr_start_off(const struct nand_subop *subop,
2265					   unsigned int instr_idx)
2266{
2267	if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2268		    subop->instrs[instr_idx].type != NAND_OP_ADDR_INSTR))
2269		return 0;
2270
2271	return nand_subop_get_start_off(subop, instr_idx);
2272}
2273EXPORT_SYMBOL_GPL(nand_subop_get_addr_start_off);
2274
2275/**
2276 * nand_subop_get_num_addr_cyc - Get the remaining address cycles to assert
2277 * @subop: The entire sub-operation
2278 * @instr_idx: Index of the instruction inside the sub-operation
2279 *
2280 * During driver development, one could be tempted to directly use the
2281 * ->addr->naddrs field of a data instruction. This is wrong as instructions
2282 * might be split.
2283 *
2284 * Given an address instruction, returns the number of address cycle to issue.
2285 */
2286unsigned int nand_subop_get_num_addr_cyc(const struct nand_subop *subop,
2287					 unsigned int instr_idx)
2288{
2289	int start_off, end_off;
2290
2291	if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2292		    subop->instrs[instr_idx].type != NAND_OP_ADDR_INSTR))
2293		return 0;
2294
2295	start_off = nand_subop_get_addr_start_off(subop, instr_idx);
2296
2297	if (instr_idx == subop->ninstrs - 1 &&
2298	    subop->last_instr_end_off)
2299		end_off = subop->last_instr_end_off;
2300	else
2301		end_off = subop->instrs[instr_idx].ctx.addr.naddrs;
2302
2303	return end_off - start_off;
2304}
2305EXPORT_SYMBOL_GPL(nand_subop_get_num_addr_cyc);
2306
2307/**
2308 * nand_subop_get_data_start_off - Get the start offset in a data array
2309 * @subop: The entire sub-operation
2310 * @instr_idx: Index of the instruction inside the sub-operation
2311 *
2312 * During driver development, one could be tempted to directly use the
2313 * ->data->buf.{in,out} field of data instructions. This is wrong as data
2314 * instructions might be split.
2315 *
2316 * Given a data instruction, returns the offset to start from.
2317 */
2318unsigned int nand_subop_get_data_start_off(const struct nand_subop *subop,
2319					   unsigned int instr_idx)
2320{
2321	if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2322		    !nand_instr_is_data(&subop->instrs[instr_idx])))
2323		return 0;
2324
2325	return nand_subop_get_start_off(subop, instr_idx);
2326}
2327EXPORT_SYMBOL_GPL(nand_subop_get_data_start_off);
2328
2329/**
2330 * nand_subop_get_data_len - Get the number of bytes to retrieve
2331 * @subop: The entire sub-operation
2332 * @instr_idx: Index of the instruction inside the sub-operation
2333 *
2334 * During driver development, one could be tempted to directly use the
2335 * ->data->len field of a data instruction. This is wrong as data instructions
2336 * might be split.
2337 *
2338 * Returns the length of the chunk of data to send/receive.
2339 */
2340unsigned int nand_subop_get_data_len(const struct nand_subop *subop,
2341				     unsigned int instr_idx)
2342{
2343	int start_off = 0, end_off;
2344
2345	if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2346		    !nand_instr_is_data(&subop->instrs[instr_idx])))
2347		return 0;
2348
2349	start_off = nand_subop_get_data_start_off(subop, instr_idx);
2350
2351	if (instr_idx == subop->ninstrs - 1 &&
2352	    subop->last_instr_end_off)
2353		end_off = subop->last_instr_end_off;
2354	else
2355		end_off = subop->instrs[instr_idx].ctx.data.len;
2356
2357	return end_off - start_off;
2358}
2359EXPORT_SYMBOL_GPL(nand_subop_get_data_len);
2360
2361/**
2362 * nand_reset - Reset and initialize a NAND device
2363 * @chip: The NAND chip
2364 * @chipnr: Internal die id
2365 *
2366 * Save the timings data structure, then apply SDR timings mode 0 (see
2367 * nand_reset_interface for details), do the reset operation, and apply
2368 * back the previous timings.
2369 *
2370 * Returns 0 on success, a negative error code otherwise.
2371 */
2372int nand_reset(struct nand_chip *chip, int chipnr)
2373{
2374	int ret;
2375
2376	ret = nand_reset_interface(chip, chipnr);
2377	if (ret)
2378		return ret;
2379
2380	/*
2381	 * The CS line has to be released before we can apply the new NAND
2382	 * interface settings, hence this weird nand_select_target()
2383	 * nand_deselect_target() dance.
2384	 */
2385	nand_select_target(chip, chipnr);
2386	ret = nand_reset_op(chip);
2387	nand_deselect_target(chip);
2388	if (ret)
2389		return ret;
2390
2391	ret = nand_setup_interface(chip, chipnr);
2392	if (ret)
2393		return ret;
2394
2395	return 0;
2396}
2397EXPORT_SYMBOL_GPL(nand_reset);
2398
2399/**
2400 * nand_get_features - wrapper to perform a GET_FEATURE
2401 * @chip: NAND chip info structure
2402 * @addr: feature address
2403 * @subfeature_param: the subfeature parameters, a four bytes array
2404 *
2405 * Returns 0 for success, a negative error otherwise. Returns -ENOTSUPP if the
2406 * operation cannot be handled.
2407 */
2408int nand_get_features(struct nand_chip *chip, int addr,
2409		      u8 *subfeature_param)
2410{
2411	if (!nand_supports_get_features(chip, addr))
2412		return -ENOTSUPP;
2413
2414	if (chip->legacy.get_features)
2415		return chip->legacy.get_features(chip, addr, subfeature_param);
2416
2417	return nand_get_features_op(chip, addr, subfeature_param);
2418}
2419
2420/**
2421 * nand_set_features - wrapper to perform a SET_FEATURE
2422 * @chip: NAND chip info structure
2423 * @addr: feature address
2424 * @subfeature_param: the subfeature parameters, a four bytes array
2425 *
2426 * Returns 0 for success, a negative error otherwise. Returns -ENOTSUPP if the
2427 * operation cannot be handled.
2428 */
2429int nand_set_features(struct nand_chip *chip, int addr,
2430		      u8 *subfeature_param)
2431{
2432	if (!nand_supports_set_features(chip, addr))
2433		return -ENOTSUPP;
2434
2435	if (chip->legacy.set_features)
2436		return chip->legacy.set_features(chip, addr, subfeature_param);
2437
2438	return nand_set_features_op(chip, addr, subfeature_param);
2439}
2440
2441/**
2442 * nand_check_erased_buf - check if a buffer contains (almost) only 0xff data
2443 * @buf: buffer to test
2444 * @len: buffer length
2445 * @bitflips_threshold: maximum number of bitflips
2446 *
2447 * Check if a buffer contains only 0xff, which means the underlying region
2448 * has been erased and is ready to be programmed.
2449 * The bitflips_threshold specify the maximum number of bitflips before
2450 * considering the region is not erased.
2451 * Note: The logic of this function has been extracted from the memweight
2452 * implementation, except that nand_check_erased_buf function exit before
2453 * testing the whole buffer if the number of bitflips exceed the
2454 * bitflips_threshold value.
2455 *
2456 * Returns a positive number of bitflips less than or equal to
2457 * bitflips_threshold, or -ERROR_CODE for bitflips in excess of the
2458 * threshold.
2459 */
2460static int nand_check_erased_buf(void *buf, int len, int bitflips_threshold)
2461{
2462	const unsigned char *bitmap = buf;
2463	int bitflips = 0;
2464	int weight;
2465
2466	for (; len && ((uintptr_t)bitmap) % sizeof(long);
2467	     len--, bitmap++) {
2468		weight = hweight8(*bitmap);
2469		bitflips += BITS_PER_BYTE - weight;
2470		if (unlikely(bitflips > bitflips_threshold))
2471			return -EBADMSG;
2472	}
2473
2474	for (; len >= sizeof(long);
2475	     len -= sizeof(long), bitmap += sizeof(long)) {
2476		unsigned long d = *((unsigned long *)bitmap);
2477		if (d == ~0UL)
2478			continue;
2479		weight = hweight_long(d);
2480		bitflips += BITS_PER_LONG - weight;
2481		if (unlikely(bitflips > bitflips_threshold))
2482			return -EBADMSG;
2483	}
2484
2485	for (; len > 0; len--, bitmap++) {
2486		weight = hweight8(*bitmap);
2487		bitflips += BITS_PER_BYTE - weight;
2488		if (unlikely(bitflips > bitflips_threshold))
2489			return -EBADMSG;
2490	}
2491
2492	return bitflips;
2493}
2494
2495/**
2496 * nand_check_erased_ecc_chunk - check if an ECC chunk contains (almost) only
2497 *				 0xff data
2498 * @data: data buffer to test
2499 * @datalen: data length
2500 * @ecc: ECC buffer
2501 * @ecclen: ECC length
2502 * @extraoob: extra OOB buffer
2503 * @extraooblen: extra OOB length
2504 * @bitflips_threshold: maximum number of bitflips
2505 *
2506 * Check if a data buffer and its associated ECC and OOB data contains only
2507 * 0xff pattern, which means the underlying region has been erased and is
2508 * ready to be programmed.
2509 * The bitflips_threshold specify the maximum number of bitflips before
2510 * considering the region as not erased.
2511 *
2512 * Note:
2513 * 1/ ECC algorithms are working on pre-defined block sizes which are usually
2514 *    different from the NAND page size. When fixing bitflips, ECC engines will
2515 *    report the number of errors per chunk, and the NAND core infrastructure
2516 *    expect you to return the maximum number of bitflips for the whole page.
2517 *    This is why you should always use this function on a single chunk and
2518 *    not on the whole page. After checking each chunk you should update your
2519 *    max_bitflips value accordingly.
2520 * 2/ When checking for bitflips in erased pages you should not only check
2521 *    the payload data but also their associated ECC data, because a user might
2522 *    have programmed almost all bits to 1 but a few. In this case, we
2523 *    shouldn't consider the chunk as erased, and checking ECC bytes prevent
2524 *    this case.
2525 * 3/ The extraoob argument is optional, and should be used if some of your OOB
2526 *    data are protected by the ECC engine.
2527 *    It could also be used if you support subpages and want to attach some
2528 *    extra OOB data to an ECC chunk.
2529 *
2530 * Returns a positive number of bitflips less than or equal to
2531 * bitflips_threshold, or -ERROR_CODE for bitflips in excess of the
2532 * threshold. In case of success, the passed buffers are filled with 0xff.
2533 */
2534int nand_check_erased_ecc_chunk(void *data, int datalen,
2535				void *ecc, int ecclen,
2536				void *extraoob, int extraooblen,
2537				int bitflips_threshold)
2538{
2539	int data_bitflips = 0, ecc_bitflips = 0, extraoob_bitflips = 0;
2540
2541	data_bitflips = nand_check_erased_buf(data, datalen,
2542					      bitflips_threshold);
2543	if (data_bitflips < 0)
2544		return data_bitflips;
2545
2546	bitflips_threshold -= data_bitflips;
2547
2548	ecc_bitflips = nand_check_erased_buf(ecc, ecclen, bitflips_threshold);
2549	if (ecc_bitflips < 0)
2550		return ecc_bitflips;
2551
2552	bitflips_threshold -= ecc_bitflips;
2553
2554	extraoob_bitflips = nand_check_erased_buf(extraoob, extraooblen,
2555						  bitflips_threshold);
2556	if (extraoob_bitflips < 0)
2557		return extraoob_bitflips;
2558
2559	if (data_bitflips)
2560		memset(data, 0xff, datalen);
2561
2562	if (ecc_bitflips)
2563		memset(ecc, 0xff, ecclen);
2564
2565	if (extraoob_bitflips)
2566		memset(extraoob, 0xff, extraooblen);
2567
2568	return data_bitflips + ecc_bitflips + extraoob_bitflips;
2569}
2570EXPORT_SYMBOL(nand_check_erased_ecc_chunk);
2571
2572/**
2573 * nand_read_page_raw_notsupp - dummy read raw page function
2574 * @chip: nand chip info structure
2575 * @buf: buffer to store read data
2576 * @oob_required: caller requires OOB data read to chip->oob_poi
2577 * @page: page number to read
2578 *
2579 * Returns -ENOTSUPP unconditionally.
2580 */
2581int nand_read_page_raw_notsupp(struct nand_chip *chip, u8 *buf,
2582			       int oob_required, int page)
2583{
2584	return -ENOTSUPP;
2585}
2586
2587/**
2588 * nand_read_page_raw - [INTERN] read raw page data without ecc
2589 * @chip: nand chip info structure
2590 * @buf: buffer to store read data
2591 * @oob_required: caller requires OOB data read to chip->oob_poi
2592 * @page: page number to read
2593 *
2594 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2595 */
2596int nand_read_page_raw(struct nand_chip *chip, uint8_t *buf, int oob_required,
2597		       int page)
2598{
2599	struct mtd_info *mtd = nand_to_mtd(chip);
2600	int ret;
2601
2602	ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize);
2603	if (ret)
2604		return ret;
2605
2606	if (oob_required) {
2607		ret = nand_read_data_op(chip, chip->oob_poi, mtd->oobsize,
2608					false, false);
2609		if (ret)
2610			return ret;
2611	}
2612
2613	return 0;
2614}
2615EXPORT_SYMBOL(nand_read_page_raw);
2616
2617/**
2618 * nand_monolithic_read_page_raw - Monolithic page read in raw mode
2619 * @chip: NAND chip info structure
2620 * @buf: buffer to store read data
2621 * @oob_required: caller requires OOB data read to chip->oob_poi
2622 * @page: page number to read
2623 *
2624 * This is a raw page read, ie. without any error detection/correction.
2625 * Monolithic means we are requesting all the relevant data (main plus
2626 * eventually OOB) to be loaded in the NAND cache and sent over the
2627 * bus (from the NAND chip to the NAND controller) in a single
2628 * operation. This is an alternative to nand_read_page_raw(), which
2629 * first reads the main data, and if the OOB data is requested too,
2630 * then reads more data on the bus.
2631 */
2632int nand_monolithic_read_page_raw(struct nand_chip *chip, u8 *buf,
2633				  int oob_required, int page)
2634{
2635	struct mtd_info *mtd = nand_to_mtd(chip);
2636	unsigned int size = mtd->writesize;
2637	u8 *read_buf = buf;
2638	int ret;
2639
2640	if (oob_required) {
2641		size += mtd->oobsize;
2642
2643		if (buf != chip->data_buf)
2644			read_buf = nand_get_data_buf(chip);
2645	}
2646
2647	ret = nand_read_page_op(chip, page, 0, read_buf, size);
2648	if (ret)
2649		return ret;
2650
2651	if (buf != chip->data_buf)
2652		memcpy(buf, read_buf, mtd->writesize);
2653
2654	return 0;
2655}
2656EXPORT_SYMBOL(nand_monolithic_read_page_raw);
2657
2658/**
2659 * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
2660 * @chip: nand chip info structure
2661 * @buf: buffer to store read data
2662 * @oob_required: caller requires OOB data read to chip->oob_poi
2663 * @page: page number to read
2664 *
2665 * We need a special oob layout and handling even when OOB isn't used.
2666 */
2667static int nand_read_page_raw_syndrome(struct nand_chip *chip, uint8_t *buf,
2668				       int oob_required, int page)
2669{
2670	struct mtd_info *mtd = nand_to_mtd(chip);
2671	int eccsize = chip->ecc.size;
2672	int eccbytes = chip->ecc.bytes;
2673	uint8_t *oob = chip->oob_poi;
2674	int steps, size, ret;
2675
2676	ret = nand_read_page_op(chip, page, 0, NULL, 0);
2677	if (ret)
2678		return ret;
2679
2680	for (steps = chip->ecc.steps; steps > 0; steps--) {
2681		ret = nand_read_data_op(chip, buf, eccsize, false, false);
2682		if (ret)
2683			return ret;
2684
2685		buf += eccsize;
2686
2687		if (chip->ecc.prepad) {
2688			ret = nand_read_data_op(chip, oob, chip->ecc.prepad,
2689						false, false);
2690			if (ret)
2691				return ret;
2692
2693			oob += chip->ecc.prepad;
2694		}
2695
2696		ret = nand_read_data_op(chip, oob, eccbytes, false, false);
2697		if (ret)
2698			return ret;
2699
2700		oob += eccbytes;
2701
2702		if (chip->ecc.postpad) {
2703			ret = nand_read_data_op(chip, oob, chip->ecc.postpad,
2704						false, false);
2705			if (ret)
2706				return ret;
2707
2708			oob += chip->ecc.postpad;
2709		}
2710	}
2711
2712	size = mtd->oobsize - (oob - chip->oob_poi);
2713	if (size) {
2714		ret = nand_read_data_op(chip, oob, size, false, false);
2715		if (ret)
2716			return ret;
2717	}
2718
2719	return 0;
2720}
2721
2722/**
2723 * nand_read_page_swecc - [REPLACEABLE] software ECC based page read function
2724 * @chip: nand chip info structure
2725 * @buf: buffer to store read data
2726 * @oob_required: caller requires OOB data read to chip->oob_poi
2727 * @page: page number to read
2728 */
2729static int nand_read_page_swecc(struct nand_chip *chip, uint8_t *buf,
2730				int oob_required, int page)
2731{
2732	struct mtd_info *mtd = nand_to_mtd(chip);
2733	int i, eccsize = chip->ecc.size, ret;
2734	int eccbytes = chip->ecc.bytes;
2735	int eccsteps = chip->ecc.steps;
2736	uint8_t *p = buf;
2737	uint8_t *ecc_calc = chip->ecc.calc_buf;
2738	uint8_t *ecc_code = chip->ecc.code_buf;
2739	unsigned int max_bitflips = 0;
2740
2741	chip->ecc.read_page_raw(chip, buf, 1, page);
2742
2743	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
2744		chip->ecc.calculate(chip, p, &ecc_calc[i]);
2745
2746	ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
2747					 chip->ecc.total);
2748	if (ret)
2749		return ret;
2750
2751	eccsteps = chip->ecc.steps;
2752	p = buf;
2753
2754	for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2755		int stat;
2756
2757		stat = chip->ecc.correct(chip, p, &ecc_code[i], &ecc_calc[i]);
2758		if (stat < 0) {
2759			mtd->ecc_stats.failed++;
2760		} else {
2761			mtd->ecc_stats.corrected += stat;
2762			max_bitflips = max_t(unsigned int, max_bitflips, stat);
2763		}
2764	}
2765	return max_bitflips;
2766}
2767
2768/**
2769 * nand_read_subpage - [REPLACEABLE] ECC based sub-page read function
2770 * @chip: nand chip info structure
2771 * @data_offs: offset of requested data within the page
2772 * @readlen: data length
2773 * @bufpoi: buffer to store read data
2774 * @page: page number to read
2775 */
2776static int nand_read_subpage(struct nand_chip *chip, uint32_t data_offs,
2777			     uint32_t readlen, uint8_t *bufpoi, int page)
2778{
2779	struct mtd_info *mtd = nand_to_mtd(chip);
2780	int start_step, end_step, num_steps, ret;
2781	uint8_t *p;
2782	int data_col_addr, i, gaps = 0;
2783	int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
2784	int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
2785	int index, section = 0;
2786	unsigned int max_bitflips = 0;
2787	struct mtd_oob_region oobregion = { };
2788
2789	/* Column address within the page aligned to ECC size (256bytes) */
2790	start_step = data_offs / chip->ecc.size;
2791	end_step = (data_offs + readlen - 1) / chip->ecc.size;
2792	num_steps = end_step - start_step + 1;
2793	index = start_step * chip->ecc.bytes;
2794
2795	/* Data size aligned to ECC ecc.size */
2796	datafrag_len = num_steps * chip->ecc.size;
2797	eccfrag_len = num_steps * chip->ecc.bytes;
2798
2799	data_col_addr = start_step * chip->ecc.size;
2800	/* If we read not a page aligned data */
2801	p = bufpoi + data_col_addr;
2802	ret = nand_read_page_op(chip, page, data_col_addr, p, datafrag_len);
2803	if (ret)
2804		return ret;
2805
2806	/* Calculate ECC */
2807	for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
2808		chip->ecc.calculate(chip, p, &chip->ecc.calc_buf[i]);
2809
2810	/*
2811	 * The performance is faster if we position offsets according to
2812	 * ecc.pos. Let's make sure that there are no gaps in ECC positions.
2813	 */
2814	ret = mtd_ooblayout_find_eccregion(mtd, index, &section, &oobregion);
2815	if (ret)
2816		return ret;
2817
2818	if (oobregion.length < eccfrag_len)
2819		gaps = 1;
2820
2821	if (gaps) {
2822		ret = nand_change_read_column_op(chip, mtd->writesize,
2823						 chip->oob_poi, mtd->oobsize,
2824						 false);
2825		if (ret)
2826			return ret;
2827	} else {
2828		/*
2829		 * Send the command to read the particular ECC bytes take care
2830		 * about buswidth alignment in read_buf.
2831		 */
2832		aligned_pos = oobregion.offset & ~(busw - 1);
2833		aligned_len = eccfrag_len;
2834		if (oobregion.offset & (busw - 1))
2835			aligned_len++;
2836		if ((oobregion.offset + (num_steps * chip->ecc.bytes)) &
2837		    (busw - 1))
2838			aligned_len++;
2839
2840		ret = nand_change_read_column_op(chip,
2841						 mtd->writesize + aligned_pos,
2842						 &chip->oob_poi[aligned_pos],
2843						 aligned_len, false);
2844		if (ret)
2845			return ret;
2846	}
2847
2848	ret = mtd_ooblayout_get_eccbytes(mtd, chip->ecc.code_buf,
2849					 chip->oob_poi, index, eccfrag_len);
2850	if (ret)
2851		return ret;
2852
2853	p = bufpoi + data_col_addr;
2854	for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
2855		int stat;
2856
2857		stat = chip->ecc.correct(chip, p, &chip->ecc.code_buf[i],
2858					 &chip->ecc.calc_buf[i]);
2859		if (stat == -EBADMSG &&
2860		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
2861			/* check for empty pages with bitflips */
2862			stat = nand_check_erased_ecc_chunk(p, chip->ecc.size,
2863						&chip->ecc.code_buf[i],
2864						chip->ecc.bytes,
2865						NULL, 0,
2866						chip->ecc.strength);
2867		}
2868
2869		if (stat < 0) {
2870			mtd->ecc_stats.failed++;
2871		} else {
2872			mtd->ecc_stats.corrected += stat;
2873			max_bitflips = max_t(unsigned int, max_bitflips, stat);
2874		}
2875	}
2876	return max_bitflips;
2877}
2878
2879/**
2880 * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
2881 * @chip: nand chip info structure
2882 * @buf: buffer to store read data
2883 * @oob_required: caller requires OOB data read to chip->oob_poi
2884 * @page: page number to read
2885 *
2886 * Not for syndrome calculating ECC controllers which need a special oob layout.
2887 */
2888static int nand_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
2889				int oob_required, int page)
2890{
2891	struct mtd_info *mtd = nand_to_mtd(chip);
2892	int i, eccsize = chip->ecc.size, ret;
2893	int eccbytes = chip->ecc.bytes;
2894	int eccsteps = chip->ecc.steps;
2895	uint8_t *p = buf;
2896	uint8_t *ecc_calc = chip->ecc.calc_buf;
2897	uint8_t *ecc_code = chip->ecc.code_buf;
2898	unsigned int max_bitflips = 0;
2899
2900	ret = nand_read_page_op(chip, page, 0, NULL, 0);
2901	if (ret)
2902		return ret;
2903
2904	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2905		chip->ecc.hwctl(chip, NAND_ECC_READ);
2906
2907		ret = nand_read_data_op(chip, p, eccsize, false, false);
2908		if (ret)
2909			return ret;
2910
2911		chip->ecc.calculate(chip, p, &ecc_calc[i]);
2912	}
2913
2914	ret = nand_read_data_op(chip, chip->oob_poi, mtd->oobsize, false,
2915				false);
2916	if (ret)
2917		return ret;
2918
2919	ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
2920					 chip->ecc.total);
2921	if (ret)
2922		return ret;
2923
2924	eccsteps = chip->ecc.steps;
2925	p = buf;
2926
2927	for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2928		int stat;
2929
2930		stat = chip->ecc.correct(chip, p, &ecc_code[i], &ecc_calc[i]);
2931		if (stat == -EBADMSG &&
2932		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
2933			/* check for empty pages with bitflips */
2934			stat = nand_check_erased_ecc_chunk(p, eccsize,
2935						&ecc_code[i], eccbytes,
2936						NULL, 0,
2937						chip->ecc.strength);
2938		}
2939
2940		if (stat < 0) {
2941			mtd->ecc_stats.failed++;
2942		} else {
2943			mtd->ecc_stats.corrected += stat;
2944			max_bitflips = max_t(unsigned int, max_bitflips, stat);
2945		}
2946	}
2947	return max_bitflips;
2948}
2949
2950/**
2951 * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
2952 * @chip: nand chip info structure
2953 * @buf: buffer to store read data
2954 * @oob_required: caller requires OOB data read to chip->oob_poi
2955 * @page: page number to read
2956 *
2957 * The hw generator calculates the error syndrome automatically. Therefore we
2958 * need a special oob layout and handling.
2959 */
2960static int nand_read_page_syndrome(struct nand_chip *chip, uint8_t *buf,
2961				   int oob_required, int page)
2962{
2963	struct mtd_info *mtd = nand_to_mtd(chip);
2964	int ret, i, eccsize = chip->ecc.size;
2965	int eccbytes = chip->ecc.bytes;
2966	int eccsteps = chip->ecc.steps;
2967	int eccpadbytes = eccbytes + chip->ecc.prepad + chip->ecc.postpad;
2968	uint8_t *p = buf;
2969	uint8_t *oob = chip->oob_poi;
2970	unsigned int max_bitflips = 0;
2971
2972	ret = nand_read_page_op(chip, page, 0, NULL, 0);
2973	if (ret)
2974		return ret;
2975
2976	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2977		int stat;
2978
2979		chip->ecc.hwctl(chip, NAND_ECC_READ);
2980
2981		ret = nand_read_data_op(chip, p, eccsize, false, false);
2982		if (ret)
2983			return ret;
2984
2985		if (chip->ecc.prepad) {
2986			ret = nand_read_data_op(chip, oob, chip->ecc.prepad,
2987						false, false);
2988			if (ret)
2989				return ret;
2990
2991			oob += chip->ecc.prepad;
2992		}
2993
2994		chip->ecc.hwctl(chip, NAND_ECC_READSYN);
2995
2996		ret = nand_read_data_op(chip, oob, eccbytes, false, false);
2997		if (ret)
2998			return ret;
2999
3000		stat = chip->ecc.correct(chip, p, oob, NULL);
3001
3002		oob += eccbytes;
3003
3004		if (chip->ecc.postpad) {
3005			ret = nand_read_data_op(chip, oob, chip->ecc.postpad,
3006						false, false);
3007			if (ret)
3008				return ret;
3009
3010			oob += chip->ecc.postpad;
3011		}
3012
3013		if (stat == -EBADMSG &&
3014		    (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
3015			/* check for empty pages with bitflips */
3016			stat = nand_check_erased_ecc_chunk(p, chip->ecc.size,
3017							   oob - eccpadbytes,
3018							   eccpadbytes,
3019							   NULL, 0,
3020							   chip->ecc.strength);
3021		}
3022
3023		if (stat < 0) {
3024			mtd->ecc_stats.failed++;
3025		} else {
3026			mtd->ecc_stats.corrected += stat;
3027			max_bitflips = max_t(unsigned int, max_bitflips, stat);
3028		}
3029	}
3030
3031	/* Calculate remaining oob bytes */
3032	i = mtd->oobsize - (oob - chip->oob_poi);
3033	if (i) {
3034		ret = nand_read_data_op(chip, oob, i, false, false);
3035		if (ret)
3036			return ret;
3037	}
3038
3039	return max_bitflips;
3040}
3041
3042/**
3043 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
3044 * @chip: NAND chip object
3045 * @oob: oob destination address
3046 * @ops: oob ops structure
3047 * @len: size of oob to transfer
3048 */
3049static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
3050				  struct mtd_oob_ops *ops, size_t len)
3051{
3052	struct mtd_info *mtd = nand_to_mtd(chip);
3053	int ret;
3054
3055	switch (ops->mode) {
3056
3057	case MTD_OPS_PLACE_OOB:
3058	case MTD_OPS_RAW:
3059		memcpy(oob, chip->oob_poi + ops->ooboffs, len);
3060		return oob + len;
3061
3062	case MTD_OPS_AUTO_OOB:
3063		ret = mtd_ooblayout_get_databytes(mtd, oob, chip->oob_poi,
3064						  ops->ooboffs, len);
3065		BUG_ON(ret);
3066		return oob + len;
3067
3068	default:
3069		BUG();
3070	}
3071	return NULL;
3072}
3073
3074/**
3075 * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
3076 * @chip: NAND chip object
3077 * @retry_mode: the retry mode to use
3078 *
3079 * Some vendors supply a special command to shift the Vt threshold, to be used
3080 * when there are too many bitflips in a page (i.e., ECC error). After setting
3081 * a new threshold, the host should retry reading the page.
3082 */
3083static int nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
3084{
3085	pr_debug("setting READ RETRY mode %d\n", retry_mode);
3086
3087	if (retry_mode >= chip->read_retries)
3088		return -EINVAL;
3089
3090	if (!chip->ops.setup_read_retry)
3091		return -EOPNOTSUPP;
3092
3093	return chip->ops.setup_read_retry(chip, retry_mode);
3094}
3095
3096static void nand_wait_readrdy(struct nand_chip *chip)
3097{
3098	const struct nand_sdr_timings *sdr;
3099
3100	if (!(chip->options & NAND_NEED_READRDY))
3101		return;
3102
3103	sdr = nand_get_sdr_timings(nand_get_interface_config(chip));
3104	WARN_ON(nand_wait_rdy_op(chip, PSEC_TO_MSEC(sdr->tR_max), 0));
3105}
3106
3107/**
3108 * nand_do_read_ops - [INTERN] Read data with ECC
3109 * @chip: NAND chip object
3110 * @from: offset to read from
3111 * @ops: oob ops structure
3112 *
3113 * Internal function. Called with chip held.
3114 */
3115static int nand_do_read_ops(struct nand_chip *chip, loff_t from,
3116			    struct mtd_oob_ops *ops)
3117{
3118	int chipnr, page, realpage, col, bytes, aligned, oob_required;
3119	struct mtd_info *mtd = nand_to_mtd(chip);
3120	int ret = 0;
3121	uint32_t readlen = ops->len;
3122	uint32_t oobreadlen = ops->ooblen;
3123	uint32_t max_oobsize = mtd_oobavail(mtd, ops);
3124
3125	uint8_t *bufpoi, *oob, *buf;
3126	int use_bounce_buf;
3127	unsigned int max_bitflips = 0;
3128	int retry_mode = 0;
3129	bool ecc_fail = false;
3130
3131	chipnr = (int)(from >> chip->chip_shift);
3132	nand_select_target(chip, chipnr);
3133
3134	realpage = (int)(from >> chip->page_shift);
3135	page = realpage & chip->pagemask;
3136
3137	col = (int)(from & (mtd->writesize - 1));
3138
3139	buf = ops->datbuf;
3140	oob = ops->oobbuf;
3141	oob_required = oob ? 1 : 0;
3142
3143	while (1) {
3144		struct mtd_ecc_stats ecc_stats = mtd->ecc_stats;
3145
3146		bytes = min(mtd->writesize - col, readlen);
3147		aligned = (bytes == mtd->writesize);
3148
3149		if (!aligned)
3150			use_bounce_buf = 1;
3151		else if (chip->options & NAND_USES_DMA)
3152			use_bounce_buf = !virt_addr_valid(buf) ||
3153					 !IS_ALIGNED((unsigned long)buf,
3154						     chip->buf_align);
3155		else
3156			use_bounce_buf = 0;
3157
3158		/* Is the current page in the buffer? */
3159		if (realpage != chip->pagecache.page || oob) {
3160			bufpoi = use_bounce_buf ? chip->data_buf : buf;
3161
3162			if (use_bounce_buf && aligned)
3163				pr_debug("%s: using read bounce buffer for buf@%p\n",
3164						 __func__, buf);
3165
3166read_retry:
3167			/*
3168			 * Now read the page into the buffer.  Absent an error,
3169			 * the read methods return max bitflips per ecc step.
3170			 */
3171			if (unlikely(ops->mode == MTD_OPS_RAW))
3172				ret = chip->ecc.read_page_raw(chip, bufpoi,
3173							      oob_required,
3174							      page);
3175			else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
3176				 !oob)
3177				ret = chip->ecc.read_subpage(chip, col, bytes,
3178							     bufpoi, page);
3179			else
3180				ret = chip->ecc.read_page(chip, bufpoi,
3181							  oob_required, page);
3182			if (ret < 0) {
3183				if (use_bounce_buf)
3184					/* Invalidate page cache */
3185					chip->pagecache.page = -1;
3186				break;
3187			}
3188
3189			/*
3190			 * Copy back the data in the initial buffer when reading
3191			 * partial pages or when a bounce buffer is required.
3192			 */
3193			if (use_bounce_buf) {
3194				if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
3195				    !(mtd->ecc_stats.failed - ecc_stats.failed) &&
3196				    (ops->mode != MTD_OPS_RAW)) {
3197					chip->pagecache.page = realpage;
3198					chip->pagecache.bitflips = ret;
3199				} else {
3200					/* Invalidate page cache */
3201					chip->pagecache.page = -1;
3202				}
3203				memcpy(buf, bufpoi + col, bytes);
3204			}
3205
3206			if (unlikely(oob)) {
3207				int toread = min(oobreadlen, max_oobsize);
3208
3209				if (toread) {
3210					oob = nand_transfer_oob(chip, oob, ops,
3211								toread);
3212					oobreadlen -= toread;
3213				}
3214			}
3215
3216			nand_wait_readrdy(chip);
3217
3218			if (mtd->ecc_stats.failed - ecc_stats.failed) {
3219				if (retry_mode + 1 < chip->read_retries) {
3220					retry_mode++;
3221					ret = nand_setup_read_retry(chip,
3222							retry_mode);
3223					if (ret < 0)
3224						break;
3225
3226					/* Reset ecc_stats; retry */
3227					mtd->ecc_stats = ecc_stats;
3228					goto read_retry;
3229				} else {
3230					/* No more retry modes; real failure */
3231					ecc_fail = true;
3232				}
3233			}
3234
3235			buf += bytes;
3236			max_bitflips = max_t(unsigned int, max_bitflips, ret);
3237		} else {
3238			memcpy(buf, chip->data_buf + col, bytes);
3239			buf += bytes;
3240			max_bitflips = max_t(unsigned int, max_bitflips,
3241					     chip->pagecache.bitflips);
3242		}
3243
3244		readlen -= bytes;
3245
3246		/* Reset to retry mode 0 */
3247		if (retry_mode) {
3248			ret = nand_setup_read_retry(chip, 0);
3249			if (ret < 0)
3250				break;
3251			retry_mode = 0;
3252		}
3253
3254		if (!readlen)
3255			break;
3256
3257		/* For subsequent reads align to page boundary */
3258		col = 0;
3259		/* Increment page address */
3260		realpage++;
3261
3262		page = realpage & chip->pagemask;
3263		/* Check, if we cross a chip boundary */
3264		if (!page) {
3265			chipnr++;
3266			nand_deselect_target(chip);
3267			nand_select_target(chip, chipnr);
3268		}
3269	}
3270	nand_deselect_target(chip);
3271
3272	ops->retlen = ops->len - (size_t) readlen;
3273	if (oob)
3274		ops->oobretlen = ops->ooblen - oobreadlen;
3275
3276	if (ret < 0)
3277		return ret;
3278
3279	if (ecc_fail)
3280		return -EBADMSG;
3281
3282	return max_bitflips;
3283}
3284
3285/**
3286 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
3287 * @chip: nand chip info structure
3288 * @page: page number to read
3289 */
3290int nand_read_oob_std(struct nand_chip *chip, int page)
3291{
3292	struct mtd_info *mtd = nand_to_mtd(chip);
3293
3294	return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
3295}
3296EXPORT_SYMBOL(nand_read_oob_std);
3297
3298/**
3299 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
3300 *			    with syndromes
3301 * @chip: nand chip info structure
3302 * @page: page number to read
3303 */
3304static int nand_read_oob_syndrome(struct nand_chip *chip, int page)
3305{
3306	struct mtd_info *mtd = nand_to_mtd(chip);
3307	int length = mtd->oobsize;
3308	int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
3309	int eccsize = chip->ecc.size;
3310	uint8_t *bufpoi = chip->oob_poi;
3311	int i, toread, sndrnd = 0, pos, ret;
3312
3313	ret = nand_read_page_op(chip, page, chip->ecc.size, NULL, 0);
3314	if (ret)
3315		return ret;
3316
3317	for (i = 0; i < chip->ecc.steps; i++) {
3318		if (sndrnd) {
3319			int ret;
3320
3321			pos = eccsize + i * (eccsize + chunk);
3322			if (mtd->writesize > 512)
3323				ret = nand_change_read_column_op(chip, pos,
3324								 NULL, 0,
3325								 false);
3326			else
3327				ret = nand_read_page_op(chip, page, pos, NULL,
3328							0);
3329
3330			if (ret)
3331				return ret;
3332		} else
3333			sndrnd = 1;
3334		toread = min_t(int, length, chunk);
3335
3336		ret = nand_read_data_op(chip, bufpoi, toread, false, false);
3337		if (ret)
3338			return ret;
3339
3340		bufpoi += toread;
3341		length -= toread;
3342	}
3343	if (length > 0) {
3344		ret = nand_read_data_op(chip, bufpoi, length, false, false);
3345		if (ret)
3346			return ret;
3347	}
3348
3349	return 0;
3350}
3351
3352/**
3353 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
3354 * @chip: nand chip info structure
3355 * @page: page number to write
3356 */
3357int nand_write_oob_std(struct nand_chip *chip, int page)
3358{
3359	struct mtd_info *mtd = nand_to_mtd(chip);
3360
3361	return nand_prog_page_op(chip, page, mtd->writesize, chip->oob_poi,
3362				 mtd->oobsize);
3363}
3364EXPORT_SYMBOL(nand_write_oob_std);
3365
3366/**
3367 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
3368 *			     with syndrome - only for large page flash
3369 * @chip: nand chip info structure
3370 * @page: page number to write
3371 */
3372static int nand_write_oob_syndrome(struct nand_chip *chip, int page)
3373{
3374	struct mtd_info *mtd = nand_to_mtd(chip);
3375	int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
3376	int eccsize = chip->ecc.size, length = mtd->oobsize;
3377	int ret, i, len, pos, sndcmd = 0, steps = chip->ecc.steps;
3378	const uint8_t *bufpoi = chip->oob_poi;
3379
3380	/*
3381	 * data-ecc-data-ecc ... ecc-oob
3382	 * or
3383	 * data-pad-ecc-pad-data-pad .... ecc-pad-oob
3384	 */
3385	if (!chip->ecc.prepad && !chip->ecc.postpad) {
3386		pos = steps * (eccsize + chunk);
3387		steps = 0;
3388	} else
3389		pos = eccsize;
3390
3391	ret = nand_prog_page_begin_op(chip, page, pos, NULL, 0);
3392	if (ret)
3393		return ret;
3394
3395	for (i = 0; i < steps; i++) {
3396		if (sndcmd) {
3397			if (mtd->writesize <= 512) {
3398				uint32_t fill = 0xFFFFFFFF;
3399
3400				len = eccsize;
3401				while (len > 0) {
3402					int num = min_t(int, len, 4);
3403
3404					ret = nand_write_data_op(chip, &fill,
3405								 num, false);
3406					if (ret)
3407						return ret;
3408
3409					len -= num;
3410				}
3411			} else {
3412				pos = eccsize + i * (eccsize + chunk);
3413				ret = nand_change_write_column_op(chip, pos,
3414								  NULL, 0,
3415								  false);
3416				if (ret)
3417					return ret;
3418			}
3419		} else
3420			sndcmd = 1;
3421		len = min_t(int, length, chunk);
3422
3423		ret = nand_write_data_op(chip, bufpoi, len, false);
3424		if (ret)
3425			return ret;
3426
3427		bufpoi += len;
3428		length -= len;
3429	}
3430	if (length > 0) {
3431		ret = nand_write_data_op(chip, bufpoi, length, false);
3432		if (ret)
3433			return ret;
3434	}
3435
3436	return nand_prog_page_end_op(chip);
3437}
3438
3439/**
3440 * nand_do_read_oob - [INTERN] NAND read out-of-band
3441 * @chip: NAND chip object
3442 * @from: offset to read from
3443 * @ops: oob operations description structure
3444 *
3445 * NAND read out-of-band data from the spare area.
3446 */
3447static int nand_do_read_oob(struct nand_chip *chip, loff_t from,
3448			    struct mtd_oob_ops *ops)
3449{
3450	struct mtd_info *mtd = nand_to_mtd(chip);
3451	unsigned int max_bitflips = 0;
3452	int page, realpage, chipnr;
3453	struct mtd_ecc_stats stats;
3454	int readlen = ops->ooblen;
3455	int len;
3456	uint8_t *buf = ops->oobbuf;
3457	int ret = 0;
3458
3459	pr_debug("%s: from = 0x%08Lx, len = %i\n",
3460			__func__, (unsigned long long)from, readlen);
3461
3462	stats = mtd->ecc_stats;
3463
3464	len = mtd_oobavail(mtd, ops);
3465
3466	chipnr = (int)(from >> chip->chip_shift);
3467	nand_select_target(chip, chipnr);
3468
3469	/* Shift to get page */
3470	realpage = (int)(from >> chip->page_shift);
3471	page = realpage & chip->pagemask;
3472
3473	while (1) {
3474		if (ops->mode == MTD_OPS_RAW)
3475			ret = chip->ecc.read_oob_raw(chip, page);
3476		else
3477			ret = chip->ecc.read_oob(chip, page);
3478
3479		if (ret < 0)
3480			break;
3481
3482		len = min(len, readlen);
3483		buf = nand_transfer_oob(chip, buf, ops, len);
3484
3485		nand_wait_readrdy(chip);
3486
3487		max_bitflips = max_t(unsigned int, max_bitflips, ret);
3488
3489		readlen -= len;
3490		if (!readlen)
3491			break;
3492
3493		/* Increment page address */
3494		realpage++;
3495
3496		page = realpage & chip->pagemask;
3497		/* Check, if we cross a chip boundary */
3498		if (!page) {
3499			chipnr++;
3500			nand_deselect_target(chip);
3501			nand_select_target(chip, chipnr);
3502		}
3503	}
3504	nand_deselect_target(chip);
3505
3506	ops->oobretlen = ops->ooblen - readlen;
3507
3508	if (ret < 0)
3509		return ret;
3510
3511	if (mtd->ecc_stats.failed - stats.failed)
3512		return -EBADMSG;
3513
3514	return max_bitflips;
3515}
3516
3517/**
3518 * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
3519 * @mtd: MTD device structure
3520 * @from: offset to read from
3521 * @ops: oob operation description structure
3522 *
3523 * NAND read data and/or out-of-band data.
3524 */
3525static int nand_read_oob(struct mtd_info *mtd, loff_t from,
3526			 struct mtd_oob_ops *ops)
3527{
3528	struct nand_chip *chip = mtd_to_nand(mtd);
3529	int ret;
3530
3531	ops->retlen = 0;
3532
3533	if (ops->mode != MTD_OPS_PLACE_OOB &&
3534	    ops->mode != MTD_OPS_AUTO_OOB &&
3535	    ops->mode != MTD_OPS_RAW)
3536		return -ENOTSUPP;
3537
3538	nand_get_device(chip);
3539
3540	if (!ops->datbuf)
3541		ret = nand_do_read_oob(chip, from, ops);
3542	else
3543		ret = nand_do_read_ops(chip, from, ops);
3544
3545	nand_release_device(chip);
3546	return ret;
3547}
3548
3549/**
3550 * nand_write_page_raw_notsupp - dummy raw page write function
3551 * @chip: nand chip info structure
3552 * @buf: data buffer
3553 * @oob_required: must write chip->oob_poi to OOB
3554 * @page: page number to write
3555 *
3556 * Returns -ENOTSUPP unconditionally.
3557 */
3558int nand_write_page_raw_notsupp(struct nand_chip *chip, const u8 *buf,
3559				int oob_required, int page)
3560{
3561	return -ENOTSUPP;
3562}
3563
3564/**
3565 * nand_write_page_raw - [INTERN] raw page write function
3566 * @chip: nand chip info structure
3567 * @buf: data buffer
3568 * @oob_required: must write chip->oob_poi to OOB
3569 * @page: page number to write
3570 *
3571 * Not for syndrome calculating ECC controllers, which use a special oob layout.
3572 */
3573int nand_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
3574			int oob_required, int page)
3575{
3576	struct mtd_info *mtd = nand_to_mtd(chip);
3577	int ret;
3578
3579	ret = nand_prog_page_begin_op(chip, page, 0, buf, mtd->writesize);
3580	if (ret)
3581		return ret;
3582
3583	if (oob_required) {
3584		ret = nand_write_data_op(chip, chip->oob_poi, mtd->oobsize,
3585					 false);
3586		if (ret)
3587			return ret;
3588	}
3589
3590	return nand_prog_page_end_op(chip);
3591}
3592EXPORT_SYMBOL(nand_write_page_raw);
3593
3594/**
3595 * nand_monolithic_write_page_raw - Monolithic page write in raw mode
3596 * @chip: NAND chip info structure
3597 * @buf: data buffer to write
3598 * @oob_required: must write chip->oob_poi to OOB
3599 * @page: page number to write
3600 *
3601 * This is a raw page write, ie. without any error detection/correction.
3602 * Monolithic means we are requesting all the relevant data (main plus
3603 * eventually OOB) to be sent over the bus and effectively programmed
3604 * into the NAND chip arrays in a single operation. This is an
3605 * alternative to nand_write_page_raw(), which first sends the main
3606 * data, then eventually send the OOB data by latching more data
3607 * cycles on the NAND bus, and finally sends the program command to
3608 * synchronyze the NAND chip cache.
3609 */
3610int nand_monolithic_write_page_raw(struct nand_chip *chip, const u8 *buf,
3611				   int oob_required, int page)
3612{
3613	struct mtd_info *mtd = nand_to_mtd(chip);
3614	unsigned int size = mtd->writesize;
3615	u8 *write_buf = (u8 *)buf;
3616
3617	if (oob_required) {
3618		size += mtd->oobsize;
3619
3620		if (buf != chip->data_buf) {
3621			write_buf = nand_get_data_buf(chip);
3622			memcpy(write_buf, buf, mtd->writesize);
3623		}
3624	}
3625
3626	return nand_prog_page_op(chip, page, 0, write_buf, size);
3627}
3628EXPORT_SYMBOL(nand_monolithic_write_page_raw);
3629
3630/**
3631 * nand_write_page_raw_syndrome - [INTERN] raw page write function
3632 * @chip: nand chip info structure
3633 * @buf: data buffer
3634 * @oob_required: must write chip->oob_poi to OOB
3635 * @page: page number to write
3636 *
3637 * We need a special oob layout and handling even when ECC isn't checked.
3638 */
3639static int nand_write_page_raw_syndrome(struct nand_chip *chip,
3640					const uint8_t *buf, int oob_required,
3641					int page)
3642{
3643	struct mtd_info *mtd = nand_to_mtd(chip);
3644	int eccsize = chip->ecc.size;
3645	int eccbytes = chip->ecc.bytes;
3646	uint8_t *oob = chip->oob_poi;
3647	int steps, size, ret;
3648
3649	ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
3650	if (ret)
3651		return ret;
3652
3653	for (steps = chip->ecc.steps; steps > 0; steps--) {
3654		ret = nand_write_data_op(chip, buf, eccsize, false);
3655		if (ret)
3656			return ret;
3657
3658		buf += eccsize;
3659
3660		if (chip->ecc.prepad) {
3661			ret = nand_write_data_op(chip, oob, chip->ecc.prepad,
3662						 false);
3663			if (ret)
3664				return ret;
3665
3666			oob += chip->ecc.prepad;
3667		}
3668
3669		ret = nand_write_data_op(chip, oob, eccbytes, false);
3670		if (ret)
3671			return ret;
3672
3673		oob += eccbytes;
3674
3675		if (chip->ecc.postpad) {
3676			ret = nand_write_data_op(chip, oob, chip->ecc.postpad,
3677						 false);
3678			if (ret)
3679				return ret;
3680
3681			oob += chip->ecc.postpad;
3682		}
3683	}
3684
3685	size = mtd->oobsize - (oob - chip->oob_poi);
3686	if (size) {
3687		ret = nand_write_data_op(chip, oob, size, false);
3688		if (ret)
3689			return ret;
3690	}
3691
3692	return nand_prog_page_end_op(chip);
3693}
3694/**
3695 * nand_write_page_swecc - [REPLACEABLE] software ECC based page write function
3696 * @chip: nand chip info structure
3697 * @buf: data buffer
3698 * @oob_required: must write chip->oob_poi to OOB
3699 * @page: page number to write
3700 */
3701static int nand_write_page_swecc(struct nand_chip *chip, const uint8_t *buf,
3702				 int oob_required, int page)
3703{
3704	struct mtd_info *mtd = nand_to_mtd(chip);
3705	int i, eccsize = chip->ecc.size, ret;
3706	int eccbytes = chip->ecc.bytes;
3707	int eccsteps = chip->ecc.steps;
3708	uint8_t *ecc_calc = chip->ecc.calc_buf;
3709	const uint8_t *p = buf;
3710
3711	/* Software ECC calculation */
3712	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
3713		chip->ecc.calculate(chip, p, &ecc_calc[i]);
3714
3715	ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
3716					 chip->ecc.total);
3717	if (ret)
3718		return ret;
3719
3720	return chip->ecc.write_page_raw(chip, buf, 1, page);
3721}
3722
3723/**
3724 * nand_write_page_hwecc - [REPLACEABLE] hardware ECC based page write function
3725 * @chip: nand chip info structure
3726 * @buf: data buffer
3727 * @oob_required: must write chip->oob_poi to OOB
3728 * @page: page number to write
3729 */
3730static int nand_write_page_hwecc(struct nand_chip *chip, const uint8_t *buf,
3731				 int oob_required, int page)
3732{
3733	struct mtd_info *mtd = nand_to_mtd(chip);
3734	int i, eccsize = chip->ecc.size, ret;
3735	int eccbytes = chip->ecc.bytes;
3736	int eccsteps = chip->ecc.steps;
3737	uint8_t *ecc_calc = chip->ecc.calc_buf;
3738	const uint8_t *p = buf;
3739
3740	ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
3741	if (ret)
3742		return ret;
3743
3744	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
3745		chip->ecc.hwctl(chip, NAND_ECC_WRITE);
3746
3747		ret = nand_write_data_op(chip, p, eccsize, false);
3748		if (ret)
3749			return ret;
3750
3751		chip->ecc.calculate(chip, p, &ecc_calc[i]);
3752	}
3753
3754	ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
3755					 chip->ecc.total);
3756	if (ret)
3757		return ret;
3758
3759	ret = nand_write_data_op(chip, chip->oob_poi, mtd->oobsize, false);
3760	if (ret)
3761		return ret;
3762
3763	return nand_prog_page_end_op(chip);
3764}
3765
3766
3767/**
3768 * nand_write_subpage_hwecc - [REPLACEABLE] hardware ECC based subpage write
3769 * @chip:	nand chip info structure
3770 * @offset:	column address of subpage within the page
3771 * @data_len:	data length
3772 * @buf:	data buffer
3773 * @oob_required: must write chip->oob_poi to OOB
3774 * @page: page number to write
3775 */
3776static int nand_write_subpage_hwecc(struct nand_chip *chip, uint32_t offset,
3777				    uint32_t data_len, const uint8_t *buf,
3778				    int oob_required, int page)
3779{
3780	struct mtd_info *mtd = nand_to_mtd(chip);
3781	uint8_t *oob_buf  = chip->oob_poi;
3782	uint8_t *ecc_calc = chip->ecc.calc_buf;
3783	int ecc_size      = chip->ecc.size;
3784	int ecc_bytes     = chip->ecc.bytes;
3785	int ecc_steps     = chip->ecc.steps;
3786	uint32_t start_step = offset / ecc_size;
3787	uint32_t end_step   = (offset + data_len - 1) / ecc_size;
3788	int oob_bytes       = mtd->oobsize / ecc_steps;
3789	int step, ret;
3790
3791	ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
3792	if (ret)
3793		return ret;
3794
3795	for (step = 0; step < ecc_steps; step++) {
3796		/* configure controller for WRITE access */
3797		chip->ecc.hwctl(chip, NAND_ECC_WRITE);
3798
3799		/* write data (untouched subpages already masked by 0xFF) */
3800		ret = nand_write_data_op(chip, buf, ecc_size, false);
3801		if (ret)
3802			return ret;
3803
3804		/* mask ECC of un-touched subpages by padding 0xFF */
3805		if ((step < start_step) || (step > end_step))
3806			memset(ecc_calc, 0xff, ecc_bytes);
3807		else
3808			chip->ecc.calculate(chip, buf, ecc_calc);
3809
3810		/* mask OOB of un-touched subpages by padding 0xFF */
3811		/* if oob_required, preserve OOB metadata of written subpage */
3812		if (!oob_required || (step < start_step) || (step > end_step))
3813			memset(oob_buf, 0xff, oob_bytes);
3814
3815		buf += ecc_size;
3816		ecc_calc += ecc_bytes;
3817		oob_buf  += oob_bytes;
3818	}
3819
3820	/* copy calculated ECC for whole page to chip->buffer->oob */
3821	/* this include masked-value(0xFF) for unwritten subpages */
3822	ecc_calc = chip->ecc.calc_buf;
3823	ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
3824					 chip->ecc.total);
3825	if (ret)
3826		return ret;
3827
3828	/* write OOB buffer to NAND device */
3829	ret = nand_write_data_op(chip, chip->oob_poi, mtd->oobsize, false);
3830	if (ret)
3831		return ret;
3832
3833	return nand_prog_page_end_op(chip);
3834}
3835
3836
3837/**
3838 * nand_write_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page write
3839 * @chip: nand chip info structure
3840 * @buf: data buffer
3841 * @oob_required: must write chip->oob_poi to OOB
3842 * @page: page number to write
3843 *
3844 * The hw generator calculates the error syndrome automatically. Therefore we
3845 * need a special oob layout and handling.
3846 */
3847static int nand_write_page_syndrome(struct nand_chip *chip, const uint8_t *buf,
3848				    int oob_required, int page)
3849{
3850	struct mtd_info *mtd = nand_to_mtd(chip);
3851	int i, eccsize = chip->ecc.size;
3852	int eccbytes = chip->ecc.bytes;
3853	int eccsteps = chip->ecc.steps;
3854	const uint8_t *p = buf;
3855	uint8_t *oob = chip->oob_poi;
3856	int ret;
3857
3858	ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
3859	if (ret)
3860		return ret;
3861
3862	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
3863		chip->ecc.hwctl(chip, NAND_ECC_WRITE);
3864
3865		ret = nand_write_data_op(chip, p, eccsize, false);
3866		if (ret)
3867			return ret;
3868
3869		if (chip->ecc.prepad) {
3870			ret = nand_write_data_op(chip, oob, chip->ecc.prepad,
3871						 false);
3872			if (ret)
3873				return ret;
3874
3875			oob += chip->ecc.prepad;
3876		}
3877
3878		chip->ecc.calculate(chip, p, oob);
3879
3880		ret = nand_write_data_op(chip, oob, eccbytes, false);
3881		if (ret)
3882			return ret;
3883
3884		oob += eccbytes;
3885
3886		if (chip->ecc.postpad) {
3887			ret = nand_write_data_op(chip, oob, chip->ecc.postpad,
3888						 false);
3889			if (ret)
3890				return ret;
3891
3892			oob += chip->ecc.postpad;
3893		}
3894	}
3895
3896	/* Calculate remaining oob bytes */
3897	i = mtd->oobsize - (oob - chip->oob_poi);
3898	if (i) {
3899		ret = nand_write_data_op(chip, oob, i, false);
3900		if (ret)
3901			return ret;
3902	}
3903
3904	return nand_prog_page_end_op(chip);
3905}
3906
3907/**
3908 * nand_write_page - write one page
3909 * @chip: NAND chip descriptor
3910 * @offset: address offset within the page
3911 * @data_len: length of actual data to be written
3912 * @buf: the data to write
3913 * @oob_required: must write chip->oob_poi to OOB
3914 * @page: page number to write
3915 * @raw: use _raw version of write_page
3916 */
3917static int nand_write_page(struct nand_chip *chip, uint32_t offset,
3918			   int data_len, const uint8_t *buf, int oob_required,
3919			   int page, int raw)
3920{
3921	struct mtd_info *mtd = nand_to_mtd(chip);
3922	int status, subpage;
3923
3924	if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
3925		chip->ecc.write_subpage)
3926		subpage = offset || (data_len < mtd->writesize);
3927	else
3928		subpage = 0;
3929
3930	if (unlikely(raw))
3931		status = chip->ecc.write_page_raw(chip, buf, oob_required,
3932						  page);
3933	else if (subpage)
3934		status = chip->ecc.write_subpage(chip, offset, data_len, buf,
3935						 oob_required, page);
3936	else
3937		status = chip->ecc.write_page(chip, buf, oob_required, page);
3938
3939	if (status < 0)
3940		return status;
3941
3942	return 0;
3943}
3944
3945#define NOTALIGNED(x)	((x & (chip->subpagesize - 1)) != 0)
3946
3947/**
3948 * nand_do_write_ops - [INTERN] NAND write with ECC
3949 * @chip: NAND chip object
3950 * @to: offset to write to
3951 * @ops: oob operations description structure
3952 *
3953 * NAND write with ECC.
3954 */
3955static int nand_do_write_ops(struct nand_chip *chip, loff_t to,
3956			     struct mtd_oob_ops *ops)
3957{
3958	struct mtd_info *mtd = nand_to_mtd(chip);
3959	int chipnr, realpage, page, column;
3960	uint32_t writelen = ops->len;
3961
3962	uint32_t oobwritelen = ops->ooblen;
3963	uint32_t oobmaxlen = mtd_oobavail(mtd, ops);
3964
3965	uint8_t *oob = ops->oobbuf;
3966	uint8_t *buf = ops->datbuf;
3967	int ret;
3968	int oob_required = oob ? 1 : 0;
3969
3970	ops->retlen = 0;
3971	if (!writelen)
3972		return 0;
3973
3974	/* Reject writes, which are not page aligned */
3975	if (NOTALIGNED(to) || NOTALIGNED(ops->len)) {
3976		pr_notice("%s: attempt to write non page aligned data\n",
3977			   __func__);
3978		return -EINVAL;
3979	}
3980
3981	column = to & (mtd->writesize - 1);
3982
3983	chipnr = (int)(to >> chip->chip_shift);
3984	nand_select_target(chip, chipnr);
3985
3986	/* Check, if it is write protected */
3987	if (nand_check_wp(chip)) {
3988		ret = -EIO;
3989		goto err_out;
3990	}
3991
3992	realpage = (int)(to >> chip->page_shift);
3993	page = realpage & chip->pagemask;
3994
3995	/* Invalidate the page cache, when we write to the cached page */
3996	if (to <= ((loff_t)chip->pagecache.page << chip->page_shift) &&
3997	    ((loff_t)chip->pagecache.page << chip->page_shift) < (to + ops->len))
3998		chip->pagecache.page = -1;
3999
4000	/* Don't allow multipage oob writes with offset */
4001	if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
4002		ret = -EINVAL;
4003		goto err_out;
4004	}
4005
4006	while (1) {
4007		int bytes = mtd->writesize;
4008		uint8_t *wbuf = buf;
4009		int use_bounce_buf;
4010		int part_pagewr = (column || writelen < mtd->writesize);
4011
4012		if (part_pagewr)
4013			use_bounce_buf = 1;
4014		else if (chip->options & NAND_USES_DMA)
4015			use_bounce_buf = !virt_addr_valid(buf) ||
4016					 !IS_ALIGNED((unsigned long)buf,
4017						     chip->buf_align);
4018		else
4019			use_bounce_buf = 0;
4020
4021		/*
4022		 * Copy the data from the initial buffer when doing partial page
4023		 * writes or when a bounce buffer is required.
4024		 */
4025		if (use_bounce_buf) {
4026			pr_debug("%s: using write bounce buffer for buf@%p\n",
4027					 __func__, buf);
4028			if (part_pagewr)
4029				bytes = min_t(int, bytes - column, writelen);
4030			wbuf = nand_get_data_buf(chip);
4031			memset(wbuf, 0xff, mtd->writesize);
4032			memcpy(&wbuf[column], buf, bytes);
4033		}
4034
4035		if (unlikely(oob)) {
4036			size_t len = min(oobwritelen, oobmaxlen);
4037			oob = nand_fill_oob(chip, oob, len, ops);
4038			oobwritelen -= len;
4039		} else {
4040			/* We still need to erase leftover OOB data */
4041			memset(chip->oob_poi, 0xff, mtd->oobsize);
4042		}
4043
4044		ret = nand_write_page(chip, column, bytes, wbuf,
4045				      oob_required, page,
4046				      (ops->mode == MTD_OPS_RAW));
4047		if (ret)
4048			break;
4049
4050		writelen -= bytes;
4051		if (!writelen)
4052			break;
4053
4054		column = 0;
4055		buf += bytes;
4056		realpage++;
4057
4058		page = realpage & chip->pagemask;
4059		/* Check, if we cross a chip boundary */
4060		if (!page) {
4061			chipnr++;
4062			nand_deselect_target(chip);
4063			nand_select_target(chip, chipnr);
4064		}
4065	}
4066
4067	ops->retlen = ops->len - writelen;
4068	if (unlikely(oob))
4069		ops->oobretlen = ops->ooblen;
4070
4071err_out:
4072	nand_deselect_target(chip);
4073	return ret;
4074}
4075
4076/**
4077 * panic_nand_write - [MTD Interface] NAND write with ECC
4078 * @mtd: MTD device structure
4079 * @to: offset to write to
4080 * @len: number of bytes to write
4081 * @retlen: pointer to variable to store the number of written bytes
4082 * @buf: the data to write
4083 *
4084 * NAND write with ECC. Used when performing writes in interrupt context, this
4085 * may for example be called by mtdoops when writing an oops while in panic.
4086 */
4087static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
4088			    size_t *retlen, const uint8_t *buf)
4089{
4090	struct nand_chip *chip = mtd_to_nand(mtd);
4091	int chipnr = (int)(to >> chip->chip_shift);
4092	struct mtd_oob_ops ops;
4093	int ret;
4094
4095	nand_select_target(chip, chipnr);
4096
4097	/* Wait for the device to get ready */
4098	panic_nand_wait(chip, 400);
4099
4100	memset(&ops, 0, sizeof(ops));
4101	ops.len = len;
4102	ops.datbuf = (uint8_t *)buf;
4103	ops.mode = MTD_OPS_PLACE_OOB;
4104
4105	ret = nand_do_write_ops(chip, to, &ops);
4106
4107	*retlen = ops.retlen;
4108	return ret;
4109}
4110
4111/**
4112 * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
4113 * @mtd: MTD device structure
4114 * @to: offset to write to
4115 * @ops: oob operation description structure
4116 */
4117static int nand_write_oob(struct mtd_info *mtd, loff_t to,
4118			  struct mtd_oob_ops *ops)
4119{
4120	struct nand_chip *chip = mtd_to_nand(mtd);
4121	int ret = 0;
4122
4123	ops->retlen = 0;
4124
4125	nand_get_device(chip);
4126
4127	switch (ops->mode) {
4128	case MTD_OPS_PLACE_OOB:
4129	case MTD_OPS_AUTO_OOB:
4130	case MTD_OPS_RAW:
4131		break;
4132
4133	default:
4134		goto out;
4135	}
4136
4137	if (!ops->datbuf)
4138		ret = nand_do_write_oob(chip, to, ops);
4139	else
4140		ret = nand_do_write_ops(chip, to, ops);
4141
4142out:
4143	nand_release_device(chip);
4144	return ret;
4145}
4146
4147/**
4148 * nand_erase - [MTD Interface] erase block(s)
4149 * @mtd: MTD device structure
4150 * @instr: erase instruction
4151 *
4152 * Erase one ore more blocks.
4153 */
4154static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
4155{
4156	return nand_erase_nand(mtd_to_nand(mtd), instr, 0);
4157}
4158
4159/**
4160 * nand_erase_nand - [INTERN] erase block(s)
4161 * @chip: NAND chip object
4162 * @instr: erase instruction
4163 * @allowbbt: allow erasing the bbt area
4164 *
4165 * Erase one ore more blocks.
4166 */
4167int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr,
4168		    int allowbbt)
4169{
4170	int page, pages_per_block, ret, chipnr;
4171	loff_t len;
4172
4173	pr_debug("%s: start = 0x%012llx, len = %llu\n",
4174			__func__, (unsigned long long)instr->addr,
4175			(unsigned long long)instr->len);
4176
4177	if (check_offs_len(chip, instr->addr, instr->len))
4178		return -EINVAL;
4179
4180	/* Grab the lock and see if the device is available */
4181	nand_get_device(chip);
4182
4183	/* Shift to get first page */
4184	page = (int)(instr->addr >> chip->page_shift);
4185	chipnr = (int)(instr->addr >> chip->chip_shift);
4186
4187	/* Calculate pages in each block */
4188	pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
4189
4190	/* Select the NAND device */
4191	nand_select_target(chip, chipnr);
4192
4193	/* Check, if it is write protected */
4194	if (nand_check_wp(chip)) {
4195		pr_debug("%s: device is write protected!\n",
4196				__func__);
4197		ret = -EIO;
4198		goto erase_exit;
4199	}
4200
4201	/* Loop through the pages */
4202	len = instr->len;
4203
4204	while (len) {
4205		/* Check if we have a bad block, we do not erase bad blocks! */
4206		if (nand_block_checkbad(chip, ((loff_t) page) <<
4207					chip->page_shift, allowbbt)) {
4208			pr_warn("%s: attempt to erase a bad block at page 0x%08x\n",
4209				    __func__, page);
4210			ret = -EIO;
4211			goto erase_exit;
4212		}
4213
4214		/*
4215		 * Invalidate the page cache, if we erase the block which
4216		 * contains the current cached page.
4217		 */
4218		if (page <= chip->pagecache.page && chip->pagecache.page <
4219		    (page + pages_per_block))
4220			chip->pagecache.page = -1;
4221
4222		ret = nand_erase_op(chip, (page & chip->pagemask) >>
4223				    (chip->phys_erase_shift - chip->page_shift));
4224		if (ret) {
4225			pr_debug("%s: failed erase, page 0x%08x\n",
4226					__func__, page);
4227			instr->fail_addr =
4228				((loff_t)page << chip->page_shift);
4229			goto erase_exit;
4230		}
4231
4232		/* Increment page address and decrement length */
4233		len -= (1ULL << chip->phys_erase_shift);
4234		page += pages_per_block;
4235
4236		/* Check, if we cross a chip boundary */
4237		if (len && !(page & chip->pagemask)) {
4238			chipnr++;
4239			nand_deselect_target(chip);
4240			nand_select_target(chip, chipnr);
4241		}
4242	}
4243
4244	ret = 0;
4245erase_exit:
4246
4247	/* Deselect and wake up anyone waiting on the device */
4248	nand_deselect_target(chip);
4249	nand_release_device(chip);
4250
4251	/* Return more or less happy */
4252	return ret;
4253}
4254
4255/**
4256 * nand_sync - [MTD Interface] sync
4257 * @mtd: MTD device structure
4258 *
4259 * Sync is actually a wait for chip ready function.
4260 */
4261static void nand_sync(struct mtd_info *mtd)
4262{
4263	struct nand_chip *chip = mtd_to_nand(mtd);
4264
4265	pr_debug("%s: called\n", __func__);
4266
4267	/* Grab the lock and see if the device is available */
4268	nand_get_device(chip);
4269	/* Release it and go back */
4270	nand_release_device(chip);
4271}
4272
4273/**
4274 * nand_block_isbad - [MTD Interface] Check if block at offset is bad
4275 * @mtd: MTD device structure
4276 * @offs: offset relative to mtd start
4277 */
4278static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
4279{
4280	struct nand_chip *chip = mtd_to_nand(mtd);
4281	int chipnr = (int)(offs >> chip->chip_shift);
4282	int ret;
4283
4284	/* Select the NAND device */
4285	nand_get_device(chip);
4286
4287	nand_select_target(chip, chipnr);
4288
4289	ret = nand_block_checkbad(chip, offs, 0);
4290
4291	nand_deselect_target(chip);
4292	nand_release_device(chip);
4293
4294	return ret;
4295}
4296
4297/**
4298 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
4299 * @mtd: MTD device structure
4300 * @ofs: offset relative to mtd start
4301 */
4302static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
4303{
4304	int ret;
4305
4306	ret = nand_block_isbad(mtd, ofs);
4307	if (ret) {
4308		/* If it was bad already, return success and do nothing */
4309		if (ret > 0)
4310			return 0;
4311		return ret;
4312	}
4313
4314	return nand_block_markbad_lowlevel(mtd_to_nand(mtd), ofs);
4315}
4316
4317/**
4318 * nand_suspend - [MTD Interface] Suspend the NAND flash
4319 * @mtd: MTD device structure
4320 *
4321 * Returns 0 for success or negative error code otherwise.
4322 */
4323static int nand_suspend(struct mtd_info *mtd)
4324{
4325	struct nand_chip *chip = mtd_to_nand(mtd);
4326	int ret = 0;
4327
4328	mutex_lock(&chip->lock);
4329	if (chip->ops.suspend)
4330		ret = chip->ops.suspend(chip);
4331	if (!ret)
4332		chip->suspended = 1;
4333	mutex_unlock(&chip->lock);
4334
4335	return ret;
4336}
4337
4338/**
4339 * nand_resume - [MTD Interface] Resume the NAND flash
4340 * @mtd: MTD device structure
4341 */
4342static void nand_resume(struct mtd_info *mtd)
4343{
4344	struct nand_chip *chip = mtd_to_nand(mtd);
4345
4346	mutex_lock(&chip->lock);
4347	if (chip->suspended) {
4348		if (chip->ops.resume)
4349			chip->ops.resume(chip);
4350		chip->suspended = 0;
4351	} else {
4352		pr_err("%s called for a chip which is not in suspended state\n",
4353			__func__);
4354	}
4355	mutex_unlock(&chip->lock);
4356
4357	wake_up_all(&chip->resume_wq);
4358}
4359
4360/**
4361 * nand_shutdown - [MTD Interface] Finish the current NAND operation and
4362 *                 prevent further operations
4363 * @mtd: MTD device structure
4364 */
4365static void nand_shutdown(struct mtd_info *mtd)
4366{
4367	nand_suspend(mtd);
4368}
4369
4370/**
4371 * nand_lock - [MTD Interface] Lock the NAND flash
4372 * @mtd: MTD device structure
4373 * @ofs: offset byte address
4374 * @len: number of bytes to lock (must be a multiple of block/page size)
4375 */
4376static int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
4377{
4378	struct nand_chip *chip = mtd_to_nand(mtd);
4379
4380	if (!chip->ops.lock_area)
4381		return -ENOTSUPP;
4382
4383	return chip->ops.lock_area(chip, ofs, len);
4384}
4385
4386/**
4387 * nand_unlock - [MTD Interface] Unlock the NAND flash
4388 * @mtd: MTD device structure
4389 * @ofs: offset byte address
4390 * @len: number of bytes to unlock (must be a multiple of block/page size)
4391 */
4392static int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
4393{
4394	struct nand_chip *chip = mtd_to_nand(mtd);
4395
4396	if (!chip->ops.unlock_area)
4397		return -ENOTSUPP;
4398
4399	return chip->ops.unlock_area(chip, ofs, len);
4400}
4401
4402/* Set default functions */
4403static void nand_set_defaults(struct nand_chip *chip)
4404{
4405	/* If no controller is provided, use the dummy, legacy one. */
4406	if (!chip->controller) {
4407		chip->controller = &chip->legacy.dummy_controller;
4408		nand_controller_init(chip->controller);
4409	}
4410
4411	nand_legacy_set_defaults(chip);
4412
4413	if (!chip->buf_align)
4414		chip->buf_align = 1;
4415}
4416
4417/* Sanitize ONFI strings so we can safely print them */
4418void sanitize_string(uint8_t *s, size_t len)
4419{
4420	ssize_t i;
4421
4422	/* Null terminate */
4423	s[len - 1] = 0;
4424
4425	/* Remove non printable chars */
4426	for (i = 0; i < len - 1; i++) {
4427		if (s[i] < ' ' || s[i] > 127)
4428			s[i] = '?';
4429	}
4430
4431	/* Remove trailing spaces */
4432	strim(s);
4433}
4434
4435/*
4436 * nand_id_has_period - Check if an ID string has a given wraparound period
4437 * @id_data: the ID string
4438 * @arrlen: the length of the @id_data array
4439 * @period: the period of repitition
4440 *
4441 * Check if an ID string is repeated within a given sequence of bytes at
4442 * specific repetition interval period (e.g., {0x20,0x01,0x7F,0x20} has a
4443 * period of 3). This is a helper function for nand_id_len(). Returns non-zero
4444 * if the repetition has a period of @period; otherwise, returns zero.
4445 */
4446static int nand_id_has_period(u8 *id_data, int arrlen, int period)
4447{
4448	int i, j;
4449	for (i = 0; i < period; i++)
4450		for (j = i + period; j < arrlen; j += period)
4451			if (id_data[i] != id_data[j])
4452				return 0;
4453	return 1;
4454}
4455
4456/*
4457 * nand_id_len - Get the length of an ID string returned by CMD_READID
4458 * @id_data: the ID string
4459 * @arrlen: the length of the @id_data array
4460
4461 * Returns the length of the ID string, according to known wraparound/trailing
4462 * zero patterns. If no pattern exists, returns the length of the array.
4463 */
4464static int nand_id_len(u8 *id_data, int arrlen)
4465{
4466	int last_nonzero, period;
4467
4468	/* Find last non-zero byte */
4469	for (last_nonzero = arrlen - 1; last_nonzero >= 0; last_nonzero--)
4470		if (id_data[last_nonzero])
4471			break;
4472
4473	/* All zeros */
4474	if (last_nonzero < 0)
4475		return 0;
4476
4477	/* Calculate wraparound period */
4478	for (period = 1; period < arrlen; period++)
4479		if (nand_id_has_period(id_data, arrlen, period))
4480			break;
4481
4482	/* There's a repeated pattern */
4483	if (period < arrlen)
4484		return period;
4485
4486	/* There are trailing zeros */
4487	if (last_nonzero < arrlen - 1)
4488		return last_nonzero + 1;
4489
4490	/* No pattern detected */
4491	return arrlen;
4492}
4493
4494/* Extract the bits of per cell from the 3rd byte of the extended ID */
4495static int nand_get_bits_per_cell(u8 cellinfo)
4496{
4497	int bits;
4498
4499	bits = cellinfo & NAND_CI_CELLTYPE_MSK;
4500	bits >>= NAND_CI_CELLTYPE_SHIFT;
4501	return bits + 1;
4502}
4503
4504/*
4505 * Many new NAND share similar device ID codes, which represent the size of the
4506 * chip. The rest of the parameters must be decoded according to generic or
4507 * manufacturer-specific "extended ID" decoding patterns.
4508 */
4509void nand_decode_ext_id(struct nand_chip *chip)
4510{
4511	struct nand_memory_organization *memorg;
4512	struct mtd_info *mtd = nand_to_mtd(chip);
4513	int extid;
4514	u8 *id_data = chip->id.data;
4515
4516	memorg = nanddev_get_memorg(&chip->base);
4517
4518	/* The 3rd id byte holds MLC / multichip data */
4519	memorg->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
4520	/* The 4th id byte is the important one */
4521	extid = id_data[3];
4522
4523	/* Calc pagesize */
4524	memorg->pagesize = 1024 << (extid & 0x03);
4525	mtd->writesize = memorg->pagesize;
4526	extid >>= 2;
4527	/* Calc oobsize */
4528	memorg->oobsize = (8 << (extid & 0x01)) * (mtd->writesize >> 9);
4529	mtd->oobsize = memorg->oobsize;
4530	extid >>= 2;
4531	/* Calc blocksize. Blocksize is multiples of 64KiB */
4532	memorg->pages_per_eraseblock = ((64 * 1024) << (extid & 0x03)) /
4533				       memorg->pagesize;
4534	mtd->erasesize = (64 * 1024) << (extid & 0x03);
4535	extid >>= 2;
4536	/* Get buswidth information */
4537	if (extid & 0x1)
4538		chip->options |= NAND_BUSWIDTH_16;
4539}
4540EXPORT_SYMBOL_GPL(nand_decode_ext_id);
4541
4542/*
4543 * Old devices have chip data hardcoded in the device ID table. nand_decode_id
4544 * decodes a matching ID table entry and assigns the MTD size parameters for
4545 * the chip.
4546 */
4547static void nand_decode_id(struct nand_chip *chip, struct nand_flash_dev *type)
4548{
4549	struct mtd_info *mtd = nand_to_mtd(chip);
4550	struct nand_memory_organization *memorg;
4551
4552	memorg = nanddev_get_memorg(&chip->base);
4553
4554	memorg->pages_per_eraseblock = type->erasesize / type->pagesize;
4555	mtd->erasesize = type->erasesize;
4556	memorg->pagesize = type->pagesize;
4557	mtd->writesize = memorg->pagesize;
4558	memorg->oobsize = memorg->pagesize / 32;
4559	mtd->oobsize = memorg->oobsize;
4560
4561	/* All legacy ID NAND are small-page, SLC */
4562	memorg->bits_per_cell = 1;
4563}
4564
4565/*
4566 * Set the bad block marker/indicator (BBM/BBI) patterns according to some
4567 * heuristic patterns using various detected parameters (e.g., manufacturer,
4568 * page size, cell-type information).
4569 */
4570static void nand_decode_bbm_options(struct nand_chip *chip)
4571{
4572	struct mtd_info *mtd = nand_to_mtd(chip);
4573
4574	/* Set the bad block position */
4575	if (mtd->writesize > 512 || (chip->options & NAND_BUSWIDTH_16))
4576		chip->badblockpos = NAND_BBM_POS_LARGE;
4577	else
4578		chip->badblockpos = NAND_BBM_POS_SMALL;
4579}
4580
4581static inline bool is_full_id_nand(struct nand_flash_dev *type)
4582{
4583	return type->id_len;
4584}
4585
4586static bool find_full_id_nand(struct nand_chip *chip,
4587			      struct nand_flash_dev *type)
4588{
4589	struct nand_device *base = &chip->base;
4590	struct nand_ecc_props requirements;
4591	struct mtd_info *mtd = nand_to_mtd(chip);
4592	struct nand_memory_organization *memorg;
4593	u8 *id_data = chip->id.data;
4594
4595	memorg = nanddev_get_memorg(&chip->base);
4596
4597	if (!strncmp(type->id, id_data, type->id_len)) {
4598		memorg->pagesize = type->pagesize;
4599		mtd->writesize = memorg->pagesize;
4600		memorg->pages_per_eraseblock = type->erasesize /
4601					       type->pagesize;
4602		mtd->erasesize = type->erasesize;
4603		memorg->oobsize = type->oobsize;
4604		mtd->oobsize = memorg->oobsize;
4605
4606		memorg->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
4607		memorg->eraseblocks_per_lun =
4608			DIV_ROUND_DOWN_ULL((u64)type->chipsize << 20,
4609					   memorg->pagesize *
4610					   memorg->pages_per_eraseblock);
4611		chip->options |= type->options;
4612		requirements.strength = NAND_ECC_STRENGTH(type);
4613		requirements.step_size = NAND_ECC_STEP(type);
4614		nanddev_set_ecc_requirements(base, &requirements);
4615
4616		chip->parameters.model = kstrdup(type->name, GFP_KERNEL);
4617		if (!chip->parameters.model)
4618			return false;
4619
4620		return true;
4621	}
4622	return false;
4623}
4624
4625/*
4626 * Manufacturer detection. Only used when the NAND is not ONFI or JEDEC
4627 * compliant and does not have a full-id or legacy-id entry in the nand_ids
4628 * table.
4629 */
4630static void nand_manufacturer_detect(struct nand_chip *chip)
4631{
4632	/*
4633	 * Try manufacturer detection if available and use
4634	 * nand_decode_ext_id() otherwise.
4635	 */
4636	if (chip->manufacturer.desc && chip->manufacturer.desc->ops &&
4637	    chip->manufacturer.desc->ops->detect) {
4638		struct nand_memory_organization *memorg;
4639
4640		memorg = nanddev_get_memorg(&chip->base);
4641
4642		/* The 3rd id byte holds MLC / multichip data */
4643		memorg->bits_per_cell = nand_get_bits_per_cell(chip->id.data[2]);
4644		chip->manufacturer.desc->ops->detect(chip);
4645	} else {
4646		nand_decode_ext_id(chip);
4647	}
4648}
4649
4650/*
4651 * Manufacturer initialization. This function is called for all NANDs including
4652 * ONFI and JEDEC compliant ones.
4653 * Manufacturer drivers should put all their specific initialization code in
4654 * their ->init() hook.
4655 */
4656static int nand_manufacturer_init(struct nand_chip *chip)
4657{
4658	if (!chip->manufacturer.desc || !chip->manufacturer.desc->ops ||
4659	    !chip->manufacturer.desc->ops->init)
4660		return 0;
4661
4662	return chip->manufacturer.desc->ops->init(chip);
4663}
4664
4665/*
4666 * Manufacturer cleanup. This function is called for all NANDs including
4667 * ONFI and JEDEC compliant ones.
4668 * Manufacturer drivers should put all their specific cleanup code in their
4669 * ->cleanup() hook.
4670 */
4671static void nand_manufacturer_cleanup(struct nand_chip *chip)
4672{
4673	/* Release manufacturer private data */
4674	if (chip->manufacturer.desc && chip->manufacturer.desc->ops &&
4675	    chip->manufacturer.desc->ops->cleanup)
4676		chip->manufacturer.desc->ops->cleanup(chip);
4677}
4678
4679static const char *
4680nand_manufacturer_name(const struct nand_manufacturer_desc *manufacturer_desc)
4681{
4682	return manufacturer_desc ? manufacturer_desc->name : "Unknown";
4683}
4684
4685/*
4686 * Get the flash and manufacturer id and lookup if the type is supported.
4687 */
4688static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
4689{
4690	const struct nand_manufacturer_desc *manufacturer_desc;
4691	struct mtd_info *mtd = nand_to_mtd(chip);
4692	struct nand_memory_organization *memorg;
4693	int busw, ret;
4694	u8 *id_data = chip->id.data;
4695	u8 maf_id, dev_id;
4696	u64 targetsize;
4697
4698	/*
4699	 * Let's start by initializing memorg fields that might be left
4700	 * unassigned by the ID-based detection logic.
4701	 */
4702	memorg = nanddev_get_memorg(&chip->base);
4703	memorg->planes_per_lun = 1;
4704	memorg->luns_per_target = 1;
4705
4706	/*
4707	 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
4708	 * after power-up.
4709	 */
4710	ret = nand_reset(chip, 0);
4711	if (ret)
4712		return ret;
4713
4714	/* Select the device */
4715	nand_select_target(chip, 0);
4716
4717	/* Send the command for reading device ID */
4718	ret = nand_readid_op(chip, 0, id_data, 2);
4719	if (ret)
4720		return ret;
4721
4722	/* Read manufacturer and device IDs */
4723	maf_id = id_data[0];
4724	dev_id = id_data[1];
4725
4726	/*
4727	 * Try again to make sure, as some systems the bus-hold or other
4728	 * interface concerns can cause random data which looks like a
4729	 * possibly credible NAND flash to appear. If the two results do
4730	 * not match, ignore the device completely.
4731	 */
4732
4733	/* Read entire ID string */
4734	ret = nand_readid_op(chip, 0, id_data, sizeof(chip->id.data));
4735	if (ret)
4736		return ret;
4737
4738	if (id_data[0] != maf_id || id_data[1] != dev_id) {
4739		pr_info("second ID read did not match %02x,%02x against %02x,%02x\n",
4740			maf_id, dev_id, id_data[0], id_data[1]);
4741		return -ENODEV;
4742	}
4743
4744	chip->id.len = nand_id_len(id_data, ARRAY_SIZE(chip->id.data));
4745
4746	/* Try to identify manufacturer */
4747	manufacturer_desc = nand_get_manufacturer_desc(maf_id);
4748	chip->manufacturer.desc = manufacturer_desc;
4749
4750	if (!type)
4751		type = nand_flash_ids;
4752
4753	/*
4754	 * Save the NAND_BUSWIDTH_16 flag before letting auto-detection logic
4755	 * override it.
4756	 * This is required to make sure initial NAND bus width set by the
4757	 * NAND controller driver is coherent with the real NAND bus width
4758	 * (extracted by auto-detection code).
4759	 */
4760	busw = chip->options & NAND_BUSWIDTH_16;
4761
4762	/*
4763	 * The flag is only set (never cleared), reset it to its default value
4764	 * before starting auto-detection.
4765	 */
4766	chip->options &= ~NAND_BUSWIDTH_16;
4767
4768	for (; type->name != NULL; type++) {
4769		if (is_full_id_nand(type)) {
4770			if (find_full_id_nand(chip, type))
4771				goto ident_done;
4772		} else if (dev_id == type->dev_id) {
4773			break;
4774		}
4775	}
4776
4777	if (!type->name || !type->pagesize) {
4778		/* Check if the chip is ONFI compliant */
4779		ret = nand_onfi_detect(chip);
4780		if (ret < 0)
4781			return ret;
4782		else if (ret)
4783			goto ident_done;
4784
4785		/* Check if the chip is JEDEC compliant */
4786		ret = nand_jedec_detect(chip);
4787		if (ret < 0)
4788			return ret;
4789		else if (ret)
4790			goto ident_done;
4791	}
4792
4793	if (!type->name)
4794		return -ENODEV;
4795
4796	chip->parameters.model = kstrdup(type->name, GFP_KERNEL);
4797	if (!chip->parameters.model)
4798		return -ENOMEM;
4799
4800	if (!type->pagesize)
4801		nand_manufacturer_detect(chip);
4802	else
4803		nand_decode_id(chip, type);
4804
4805	/* Get chip options */
4806	chip->options |= type->options;
4807
4808	memorg->eraseblocks_per_lun =
4809			DIV_ROUND_DOWN_ULL((u64)type->chipsize << 20,
4810					   memorg->pagesize *
4811					   memorg->pages_per_eraseblock);
4812
4813ident_done:
4814	if (!mtd->name)
4815		mtd->name = chip->parameters.model;
4816
4817	if (chip->options & NAND_BUSWIDTH_AUTO) {
4818		WARN_ON(busw & NAND_BUSWIDTH_16);
4819		nand_set_defaults(chip);
4820	} else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
4821		/*
4822		 * Check, if buswidth is correct. Hardware drivers should set
4823		 * chip correct!
4824		 */
4825		pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
4826			maf_id, dev_id);
4827		pr_info("%s %s\n", nand_manufacturer_name(manufacturer_desc),
4828			mtd->name);
4829		pr_warn("bus width %d instead of %d bits\n", busw ? 16 : 8,
4830			(chip->options & NAND_BUSWIDTH_16) ? 16 : 8);
4831		ret = -EINVAL;
4832
4833		goto free_detect_allocation;
4834	}
4835
4836	nand_decode_bbm_options(chip);
4837
4838	/* Calculate the address shift from the page size */
4839	chip->page_shift = ffs(mtd->writesize) - 1;
4840	/* Convert chipsize to number of pages per chip -1 */
4841	targetsize = nanddev_target_size(&chip->base);
4842	chip->pagemask = (targetsize >> chip->page_shift) - 1;
4843
4844	chip->bbt_erase_shift = chip->phys_erase_shift =
4845		ffs(mtd->erasesize) - 1;
4846	if (targetsize & 0xffffffff)
4847		chip->chip_shift = ffs((unsigned)targetsize) - 1;
4848	else {
4849		chip->chip_shift = ffs((unsigned)(targetsize >> 32));
4850		chip->chip_shift += 32 - 1;
4851	}
4852
4853	if (chip->chip_shift - chip->page_shift > 16)
4854		chip->options |= NAND_ROW_ADDR_3;
4855
4856	chip->badblockbits = 8;
4857
4858	nand_legacy_adjust_cmdfunc(chip);
4859
4860	pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
4861		maf_id, dev_id);
4862	pr_info("%s %s\n", nand_manufacturer_name(manufacturer_desc),
4863		chip->parameters.model);
4864	pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n",
4865		(int)(targetsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
4866		mtd->erasesize >> 10, mtd->writesize, mtd->oobsize);
4867	return 0;
4868
4869free_detect_allocation:
4870	kfree(chip->parameters.model);
4871
4872	return ret;
4873}
4874
4875static enum nand_ecc_engine_type
4876of_get_rawnand_ecc_engine_type_legacy(struct device_node *np)
4877{
4878	enum nand_ecc_legacy_mode {
4879		NAND_ECC_INVALID,
4880		NAND_ECC_NONE,
4881		NAND_ECC_SOFT,
4882		NAND_ECC_SOFT_BCH,
4883		NAND_ECC_HW,
4884		NAND_ECC_HW_SYNDROME,
4885		NAND_ECC_ON_DIE,
4886	};
4887	const char * const nand_ecc_legacy_modes[] = {
4888		[NAND_ECC_NONE]		= "none",
4889		[NAND_ECC_SOFT]		= "soft",
4890		[NAND_ECC_SOFT_BCH]	= "soft_bch",
4891		[NAND_ECC_HW]		= "hw",
4892		[NAND_ECC_HW_SYNDROME]	= "hw_syndrome",
4893		[NAND_ECC_ON_DIE]	= "on-die",
4894	};
4895	enum nand_ecc_legacy_mode eng_type;
4896	const char *pm;
4897	int err;
4898
4899	err = of_property_read_string(np, "nand-ecc-mode", &pm);
4900	if (err)
4901		return NAND_ECC_ENGINE_TYPE_INVALID;
4902
4903	for (eng_type = NAND_ECC_NONE;
4904	     eng_type < ARRAY_SIZE(nand_ecc_legacy_modes); eng_type++) {
4905		if (!strcasecmp(pm, nand_ecc_legacy_modes[eng_type])) {
4906			switch (eng_type) {
4907			case NAND_ECC_NONE:
4908				return NAND_ECC_ENGINE_TYPE_NONE;
4909			case NAND_ECC_SOFT:
4910			case NAND_ECC_SOFT_BCH:
4911				return NAND_ECC_ENGINE_TYPE_SOFT;
4912			case NAND_ECC_HW:
4913			case NAND_ECC_HW_SYNDROME:
4914				return NAND_ECC_ENGINE_TYPE_ON_HOST;
4915			case NAND_ECC_ON_DIE:
4916				return NAND_ECC_ENGINE_TYPE_ON_DIE;
4917			default:
4918				break;
4919			}
4920		}
4921	}
4922
4923	return NAND_ECC_ENGINE_TYPE_INVALID;
4924}
4925
4926static enum nand_ecc_placement
4927of_get_rawnand_ecc_placement_legacy(struct device_node *np)
4928{
4929	const char *pm;
4930	int err;
4931
4932	err = of_property_read_string(np, "nand-ecc-mode", &pm);
4933	if (!err) {
4934		if (!strcasecmp(pm, "hw_syndrome"))
4935			return NAND_ECC_PLACEMENT_INTERLEAVED;
4936	}
4937
4938	return NAND_ECC_PLACEMENT_UNKNOWN;
4939}
4940
4941static enum nand_ecc_algo of_get_rawnand_ecc_algo_legacy(struct device_node *np)
4942{
4943	const char *pm;
4944	int err;
4945
4946	err = of_property_read_string(np, "nand-ecc-mode", &pm);
4947	if (!err) {
4948		if (!strcasecmp(pm, "soft"))
4949			return NAND_ECC_ALGO_HAMMING;
4950		else if (!strcasecmp(pm, "soft_bch"))
4951			return NAND_ECC_ALGO_BCH;
4952	}
4953
4954	return NAND_ECC_ALGO_UNKNOWN;
4955}
4956
4957static void of_get_nand_ecc_legacy_user_config(struct nand_chip *chip)
4958{
4959	struct device_node *dn = nand_get_flash_node(chip);
4960	struct nand_ecc_props *user_conf = &chip->base.ecc.user_conf;
4961
4962	if (user_conf->engine_type == NAND_ECC_ENGINE_TYPE_INVALID)
4963		user_conf->engine_type = of_get_rawnand_ecc_engine_type_legacy(dn);
4964
4965	if (user_conf->algo == NAND_ECC_ALGO_UNKNOWN)
4966		user_conf->algo = of_get_rawnand_ecc_algo_legacy(dn);
4967
4968	if (user_conf->placement == NAND_ECC_PLACEMENT_UNKNOWN)
4969		user_conf->placement = of_get_rawnand_ecc_placement_legacy(dn);
4970}
4971
4972static int of_get_nand_bus_width(struct device_node *np)
4973{
4974	u32 val;
4975
4976	if (of_property_read_u32(np, "nand-bus-width", &val))
4977		return 8;
4978
4979	switch (val) {
4980	case 8:
4981	case 16:
4982		return val;
4983	default:
4984		return -EIO;
4985	}
4986}
4987
4988static bool of_get_nand_on_flash_bbt(struct device_node *np)
4989{
4990	return of_property_read_bool(np, "nand-on-flash-bbt");
4991}
4992
4993static int rawnand_dt_init(struct nand_chip *chip)
4994{
4995	struct nand_device *nand = mtd_to_nanddev(nand_to_mtd(chip));
4996	struct device_node *dn = nand_get_flash_node(chip);
4997
4998	if (!dn)
4999		return 0;
5000
5001	if (of_get_nand_bus_width(dn) == 16)
5002		chip->options |= NAND_BUSWIDTH_16;
5003
5004	if (of_property_read_bool(dn, "nand-is-boot-medium"))
5005		chip->options |= NAND_IS_BOOT_MEDIUM;
5006
5007	if (of_get_nand_on_flash_bbt(dn))
5008		chip->bbt_options |= NAND_BBT_USE_FLASH;
5009
5010	of_get_nand_ecc_user_config(nand);
5011	of_get_nand_ecc_legacy_user_config(chip);
5012
5013	/*
5014	 * If neither the user nor the NAND controller have requested a specific
5015	 * ECC engine type, we will default to NAND_ECC_ENGINE_TYPE_ON_HOST.
5016	 */
5017	nand->ecc.defaults.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
5018
5019	/*
5020	 * Use the user requested engine type, unless there is none, in this
5021	 * case default to the NAND controller choice, otherwise fallback to
5022	 * the raw NAND default one.
5023	 */
5024	if (nand->ecc.user_conf.engine_type != NAND_ECC_ENGINE_TYPE_INVALID)
5025		chip->ecc.engine_type = nand->ecc.user_conf.engine_type;
5026	if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_INVALID)
5027		chip->ecc.engine_type = nand->ecc.defaults.engine_type;
5028
5029	chip->ecc.placement = nand->ecc.user_conf.placement;
5030	chip->ecc.algo = nand->ecc.user_conf.algo;
5031	chip->ecc.strength = nand->ecc.user_conf.strength;
5032	chip->ecc.size = nand->ecc.user_conf.step_size;
5033
5034	return 0;
5035}
5036
5037/**
5038 * nand_scan_ident - Scan for the NAND device
5039 * @chip: NAND chip object
5040 * @maxchips: number of chips to scan for
5041 * @table: alternative NAND ID table
5042 *
5043 * This is the first phase of the normal nand_scan() function. It reads the
5044 * flash ID and sets up MTD fields accordingly.
5045 *
5046 * This helper used to be called directly from controller drivers that needed
5047 * to tweak some ECC-related parameters before nand_scan_tail(). This separation
5048 * prevented dynamic allocations during this phase which was unconvenient and
5049 * as been banned for the benefit of the ->init_ecc()/cleanup_ecc() hooks.
5050 */
5051static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips,
5052			   struct nand_flash_dev *table)
5053{
5054	struct mtd_info *mtd = nand_to_mtd(chip);
5055	struct nand_memory_organization *memorg;
5056	int nand_maf_id, nand_dev_id;
5057	unsigned int i;
5058	int ret;
5059
5060	memorg = nanddev_get_memorg(&chip->base);
5061
5062	/* Assume all dies are deselected when we enter nand_scan_ident(). */
5063	chip->cur_cs = -1;
5064
5065	mutex_init(&chip->lock);
5066	init_waitqueue_head(&chip->resume_wq);
5067
5068	/* Enforce the right timings for reset/detection */
5069	chip->current_interface_config = nand_get_reset_interface_config();
5070
5071	ret = rawnand_dt_init(chip);
5072	if (ret)
5073		return ret;
5074
5075	if (!mtd->name && mtd->dev.parent)
5076		mtd->name = dev_name(mtd->dev.parent);
5077
5078	/* Set the default functions */
5079	nand_set_defaults(chip);
5080
5081	ret = nand_legacy_check_hooks(chip);
5082	if (ret)
5083		return ret;
5084
5085	memorg->ntargets = maxchips;
5086
5087	/* Read the flash type */
5088	ret = nand_detect(chip, table);
5089	if (ret) {
5090		if (!(chip->options & NAND_SCAN_SILENT_NODEV))
5091			pr_warn("No NAND device found\n");
5092		nand_deselect_target(chip);
5093		return ret;
5094	}
5095
5096	nand_maf_id = chip->id.data[0];
5097	nand_dev_id = chip->id.data[1];
5098
5099	nand_deselect_target(chip);
5100
5101	/* Check for a chip array */
5102	for (i = 1; i < maxchips; i++) {
5103		u8 id[2];
5104
5105		/* See comment in nand_get_flash_type for reset */
5106		ret = nand_reset(chip, i);
5107		if (ret)
5108			break;
5109
5110		nand_select_target(chip, i);
5111		/* Send the command for reading device ID */
5112		ret = nand_readid_op(chip, 0, id, sizeof(id));
5113		if (ret)
5114			break;
5115		/* Read manufacturer and device IDs */
5116		if (nand_maf_id != id[0] || nand_dev_id != id[1]) {
5117			nand_deselect_target(chip);
5118			break;
5119		}
5120		nand_deselect_target(chip);
5121	}
5122	if (i > 1)
5123		pr_info("%d chips detected\n", i);
5124
5125	/* Store the number of chips and calc total size for mtd */
5126	memorg->ntargets = i;
5127	mtd->size = i * nanddev_target_size(&chip->base);
5128
5129	return 0;
5130}
5131
5132static void nand_scan_ident_cleanup(struct nand_chip *chip)
5133{
5134	kfree(chip->parameters.model);
5135	kfree(chip->parameters.onfi);
5136}
5137
5138static int nand_set_ecc_on_host_ops(struct nand_chip *chip)
5139{
5140	struct nand_ecc_ctrl *ecc = &chip->ecc;
5141
5142	switch (ecc->placement) {
5143	case NAND_ECC_PLACEMENT_UNKNOWN:
5144	case NAND_ECC_PLACEMENT_OOB:
5145		/* Use standard hwecc read page function? */
5146		if (!ecc->read_page)
5147			ecc->read_page = nand_read_page_hwecc;
5148		if (!ecc->write_page)
5149			ecc->write_page = nand_write_page_hwecc;
5150		if (!ecc->read_page_raw)
5151			ecc->read_page_raw = nand_read_page_raw;
5152		if (!ecc->write_page_raw)
5153			ecc->write_page_raw = nand_write_page_raw;
5154		if (!ecc->read_oob)
5155			ecc->read_oob = nand_read_oob_std;
5156		if (!ecc->write_oob)
5157			ecc->write_oob = nand_write_oob_std;
5158		if (!ecc->read_subpage)
5159			ecc->read_subpage = nand_read_subpage;
5160		if (!ecc->write_subpage && ecc->hwctl && ecc->calculate)
5161			ecc->write_subpage = nand_write_subpage_hwecc;
5162		fallthrough;
5163
5164	case NAND_ECC_PLACEMENT_INTERLEAVED:
5165		if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) &&
5166		    (!ecc->read_page ||
5167		     ecc->read_page == nand_read_page_hwecc ||
5168		     !ecc->write_page ||
5169		     ecc->write_page == nand_write_page_hwecc)) {
5170			WARN(1, "No ECC functions supplied; hardware ECC not possible\n");
5171			return -EINVAL;
5172		}
5173		/* Use standard syndrome read/write page function? */
5174		if (!ecc->read_page)
5175			ecc->read_page = nand_read_page_syndrome;
5176		if (!ecc->write_page)
5177			ecc->write_page = nand_write_page_syndrome;
5178		if (!ecc->read_page_raw)
5179			ecc->read_page_raw = nand_read_page_raw_syndrome;
5180		if (!ecc->write_page_raw)
5181			ecc->write_page_raw = nand_write_page_raw_syndrome;
5182		if (!ecc->read_oob)
5183			ecc->read_oob = nand_read_oob_syndrome;
5184		if (!ecc->write_oob)
5185			ecc->write_oob = nand_write_oob_syndrome;
5186		break;
5187
5188	default:
5189		pr_warn("Invalid NAND_ECC_PLACEMENT %d\n",
5190			ecc->placement);
5191		return -EINVAL;
5192	}
5193
5194	return 0;
5195}
5196
5197static int nand_set_ecc_soft_ops(struct nand_chip *chip)
5198{
5199	struct mtd_info *mtd = nand_to_mtd(chip);
5200	struct nand_device *nanddev = mtd_to_nanddev(mtd);
5201	struct nand_ecc_ctrl *ecc = &chip->ecc;
5202
5203	if (WARN_ON(ecc->engine_type != NAND_ECC_ENGINE_TYPE_SOFT))
5204		return -EINVAL;
5205
5206	switch (ecc->algo) {
5207	case NAND_ECC_ALGO_HAMMING:
5208		ecc->calculate = nand_calculate_ecc;
5209		ecc->correct = nand_correct_data;
5210		ecc->read_page = nand_read_page_swecc;
5211		ecc->read_subpage = nand_read_subpage;
5212		ecc->write_page = nand_write_page_swecc;
5213		if (!ecc->read_page_raw)
5214			ecc->read_page_raw = nand_read_page_raw;
5215		if (!ecc->write_page_raw)
5216			ecc->write_page_raw = nand_write_page_raw;
5217		ecc->read_oob = nand_read_oob_std;
5218		ecc->write_oob = nand_write_oob_std;
5219		if (!ecc->size)
5220			ecc->size = 256;
5221		ecc->bytes = 3;
5222		ecc->strength = 1;
5223
5224		if (IS_ENABLED(CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC))
5225			ecc->options |= NAND_ECC_SOFT_HAMMING_SM_ORDER;
5226
5227		return 0;
5228	case NAND_ECC_ALGO_BCH:
5229		if (!mtd_nand_has_bch()) {
5230			WARN(1, "CONFIG_MTD_NAND_ECC_SW_BCH not enabled\n");
5231			return -EINVAL;
5232		}
5233		ecc->calculate = nand_bch_calculate_ecc;
5234		ecc->correct = nand_bch_correct_data;
5235		ecc->read_page = nand_read_page_swecc;
5236		ecc->read_subpage = nand_read_subpage;
5237		ecc->write_page = nand_write_page_swecc;
5238		if (!ecc->read_page_raw)
5239			ecc->read_page_raw = nand_read_page_raw;
5240		if (!ecc->write_page_raw)
5241			ecc->write_page_raw = nand_write_page_raw;
5242		ecc->read_oob = nand_read_oob_std;
5243		ecc->write_oob = nand_write_oob_std;
5244
5245		/*
5246		* Board driver should supply ecc.size and ecc.strength
5247		* values to select how many bits are correctable.
5248		* Otherwise, default to 4 bits for large page devices.
5249		*/
5250		if (!ecc->size && (mtd->oobsize >= 64)) {
5251			ecc->size = 512;
5252			ecc->strength = 4;
5253		}
5254
5255		/*
5256		 * if no ecc placement scheme was provided pickup the default
5257		 * large page one.
5258		 */
5259		if (!mtd->ooblayout) {
5260			/* handle large page devices only */
5261			if (mtd->oobsize < 64) {
5262				WARN(1, "OOB layout is required when using software BCH on small pages\n");
5263				return -EINVAL;
5264			}
5265
5266			mtd_set_ooblayout(mtd, nand_get_large_page_ooblayout());
5267
5268		}
5269
5270		/*
5271		 * We can only maximize ECC config when the default layout is
5272		 * used, otherwise we don't know how many bytes can really be
5273		 * used.
5274		 */
5275		if (mtd->ooblayout == nand_get_large_page_ooblayout() &&
5276		    nanddev->ecc.user_conf.flags & NAND_ECC_MAXIMIZE_STRENGTH) {
5277			int steps, bytes;
5278
5279			/* Always prefer 1k blocks over 512bytes ones */
5280			ecc->size = 1024;
5281			steps = mtd->writesize / ecc->size;
5282
5283			/* Reserve 2 bytes for the BBM */
5284			bytes = (mtd->oobsize - 2) / steps;
5285			ecc->strength = bytes * 8 / fls(8 * ecc->size);
5286		}
5287
5288		/* See nand_bch_init() for details. */
5289		ecc->bytes = 0;
5290		ecc->priv = nand_bch_init(mtd);
5291		if (!ecc->priv) {
5292			WARN(1, "BCH ECC initialization failed!\n");
5293			return -EINVAL;
5294		}
5295		return 0;
5296	default:
5297		WARN(1, "Unsupported ECC algorithm!\n");
5298		return -EINVAL;
5299	}
5300}
5301
5302/**
5303 * nand_check_ecc_caps - check the sanity of preset ECC settings
5304 * @chip: nand chip info structure
5305 * @caps: ECC caps info structure
5306 * @oobavail: OOB size that the ECC engine can use
5307 *
5308 * When ECC step size and strength are already set, check if they are supported
5309 * by the controller and the calculated ECC bytes fit within the chip's OOB.
5310 * On success, the calculated ECC bytes is set.
5311 */
5312static int
5313nand_check_ecc_caps(struct nand_chip *chip,
5314		    const struct nand_ecc_caps *caps, int oobavail)
5315{
5316	struct mtd_info *mtd = nand_to_mtd(chip);
5317	const struct nand_ecc_step_info *stepinfo;
5318	int preset_step = chip->ecc.size;
5319	int preset_strength = chip->ecc.strength;
5320	int ecc_bytes, nsteps = mtd->writesize / preset_step;
5321	int i, j;
5322
5323	for (i = 0; i < caps->nstepinfos; i++) {
5324		stepinfo = &caps->stepinfos[i];
5325
5326		if (stepinfo->stepsize != preset_step)
5327			continue;
5328
5329		for (j = 0; j < stepinfo->nstrengths; j++) {
5330			if (stepinfo->strengths[j] != preset_strength)
5331				continue;
5332
5333			ecc_bytes = caps->calc_ecc_bytes(preset_step,
5334							 preset_strength);
5335			if (WARN_ON_ONCE(ecc_bytes < 0))
5336				return ecc_bytes;
5337
5338			if (ecc_bytes * nsteps > oobavail) {
5339				pr_err("ECC (step, strength) = (%d, %d) does not fit in OOB",
5340				       preset_step, preset_strength);
5341				return -ENOSPC;
5342			}
5343
5344			chip->ecc.bytes = ecc_bytes;
5345
5346			return 0;
5347		}
5348	}
5349
5350	pr_err("ECC (step, strength) = (%d, %d) not supported on this controller",
5351	       preset_step, preset_strength);
5352
5353	return -ENOTSUPP;
5354}
5355
5356/**
5357 * nand_match_ecc_req - meet the chip's requirement with least ECC bytes
5358 * @chip: nand chip info structure
5359 * @caps: ECC engine caps info structure
5360 * @oobavail: OOB size that the ECC engine can use
5361 *
5362 * If a chip's ECC requirement is provided, try to meet it with the least
5363 * number of ECC bytes (i.e. with the largest number of OOB-free bytes).
5364 * On success, the chosen ECC settings are set.
5365 */
5366static int
5367nand_match_ecc_req(struct nand_chip *chip,
5368		   const struct nand_ecc_caps *caps, int oobavail)
5369{
5370	const struct nand_ecc_props *requirements =
5371		nanddev_get_ecc_requirements(&chip->base);
5372	struct mtd_info *mtd = nand_to_mtd(chip);
5373	const struct nand_ecc_step_info *stepinfo;
5374	int req_step = requirements->step_size;
5375	int req_strength = requirements->strength;
5376	int req_corr, step_size, strength, nsteps, ecc_bytes, ecc_bytes_total;
5377	int best_step, best_strength, best_ecc_bytes;
5378	int best_ecc_bytes_total = INT_MAX;
5379	int i, j;
5380
5381	/* No information provided by the NAND chip */
5382	if (!req_step || !req_strength)
5383		return -ENOTSUPP;
5384
5385	/* number of correctable bits the chip requires in a page */
5386	req_corr = mtd->writesize / req_step * req_strength;
5387
5388	for (i = 0; i < caps->nstepinfos; i++) {
5389		stepinfo = &caps->stepinfos[i];
5390		step_size = stepinfo->stepsize;
5391
5392		for (j = 0; j < stepinfo->nstrengths; j++) {
5393			strength = stepinfo->strengths[j];
5394
5395			/*
5396			 * If both step size and strength are smaller than the
5397			 * chip's requirement, it is not easy to compare the
5398			 * resulted reliability.
5399			 */
5400			if (step_size < req_step && strength < req_strength)
5401				continue;
5402
5403			if (mtd->writesize % step_size)
5404				continue;
5405
5406			nsteps = mtd->writesize / step_size;
5407
5408			ecc_bytes = caps->calc_ecc_bytes(step_size, strength);
5409			if (WARN_ON_ONCE(ecc_bytes < 0))
5410				continue;
5411			ecc_bytes_total = ecc_bytes * nsteps;
5412
5413			if (ecc_bytes_total > oobavail ||
5414			    strength * nsteps < req_corr)
5415				continue;
5416
5417			/*
5418			 * We assume the best is to meet the chip's requrement
5419			 * with the least number of ECC bytes.
5420			 */
5421			if (ecc_bytes_total < best_ecc_bytes_total) {
5422				best_ecc_bytes_total = ecc_bytes_total;
5423				best_step = step_size;
5424				best_strength = strength;
5425				best_ecc_bytes = ecc_bytes;
5426			}
5427		}
5428	}
5429
5430	if (best_ecc_bytes_total == INT_MAX)
5431		return -ENOTSUPP;
5432
5433	chip->ecc.size = best_step;
5434	chip->ecc.strength = best_strength;
5435	chip->ecc.bytes = best_ecc_bytes;
5436
5437	return 0;
5438}
5439
5440/**
5441 * nand_maximize_ecc - choose the max ECC strength available
5442 * @chip: nand chip info structure
5443 * @caps: ECC engine caps info structure
5444 * @oobavail: OOB size that the ECC engine can use
5445 *
5446 * Choose the max ECC strength that is supported on the controller, and can fit
5447 * within the chip's OOB.  On success, the chosen ECC settings are set.
5448 */
5449static int
5450nand_maximize_ecc(struct nand_chip *chip,
5451		  const struct nand_ecc_caps *caps, int oobavail)
5452{
5453	struct mtd_info *mtd = nand_to_mtd(chip);
5454	const struct nand_ecc_step_info *stepinfo;
5455	int step_size, strength, nsteps, ecc_bytes, corr;
5456	int best_corr = 0;
5457	int best_step = 0;
5458	int best_strength, best_ecc_bytes;
5459	int i, j;
5460
5461	for (i = 0; i < caps->nstepinfos; i++) {
5462		stepinfo = &caps->stepinfos[i];
5463		step_size = stepinfo->stepsize;
5464
5465		/* If chip->ecc.size is already set, respect it */
5466		if (chip->ecc.size && step_size != chip->ecc.size)
5467			continue;
5468
5469		for (j = 0; j < stepinfo->nstrengths; j++) {
5470			strength = stepinfo->strengths[j];
5471
5472			if (mtd->writesize % step_size)
5473				continue;
5474
5475			nsteps = mtd->writesize / step_size;
5476
5477			ecc_bytes = caps->calc_ecc_bytes(step_size, strength);
5478			if (WARN_ON_ONCE(ecc_bytes < 0))
5479				continue;
5480
5481			if (ecc_bytes * nsteps > oobavail)
5482				continue;
5483
5484			corr = strength * nsteps;
5485
5486			/*
5487			 * If the number of correctable bits is the same,
5488			 * bigger step_size has more reliability.
5489			 */
5490			if (corr > best_corr ||
5491			    (corr == best_corr && step_size > best_step)) {
5492				best_corr = corr;
5493				best_step = step_size;
5494				best_strength = strength;
5495				best_ecc_bytes = ecc_bytes;
5496			}
5497		}
5498	}
5499
5500	if (!best_corr)
5501		return -ENOTSUPP;
5502
5503	chip->ecc.size = best_step;
5504	chip->ecc.strength = best_strength;
5505	chip->ecc.bytes = best_ecc_bytes;
5506
5507	return 0;
5508}
5509
5510/**
5511 * nand_ecc_choose_conf - Set the ECC strength and ECC step size
5512 * @chip: nand chip info structure
5513 * @caps: ECC engine caps info structure
5514 * @oobavail: OOB size that the ECC engine can use
5515 *
5516 * Choose the ECC configuration according to following logic.
5517 *
5518 * 1. If both ECC step size and ECC strength are already set (usually by DT)
5519 *    then check if it is supported by this controller.
5520 * 2. If the user provided the nand-ecc-maximize property, then select maximum
5521 *    ECC strength.
5522 * 3. Otherwise, try to match the ECC step size and ECC strength closest
5523 *    to the chip's requirement. If available OOB size can't fit the chip
5524 *    requirement then fallback to the maximum ECC step size and ECC strength.
5525 *
5526 * On success, the chosen ECC settings are set.
5527 */
5528int nand_ecc_choose_conf(struct nand_chip *chip,
5529			 const struct nand_ecc_caps *caps, int oobavail)
5530{
5531	struct mtd_info *mtd = nand_to_mtd(chip);
5532	struct nand_device *nanddev = mtd_to_nanddev(mtd);
5533
5534	if (WARN_ON(oobavail < 0 || oobavail > mtd->oobsize))
5535		return -EINVAL;
5536
5537	if (chip->ecc.size && chip->ecc.strength)
5538		return nand_check_ecc_caps(chip, caps, oobavail);
5539
5540	if (nanddev->ecc.user_conf.flags & NAND_ECC_MAXIMIZE_STRENGTH)
5541		return nand_maximize_ecc(chip, caps, oobavail);
5542
5543	if (!nand_match_ecc_req(chip, caps, oobavail))
5544		return 0;
5545
5546	return nand_maximize_ecc(chip, caps, oobavail);
5547}
5548EXPORT_SYMBOL_GPL(nand_ecc_choose_conf);
5549
5550static int rawnand_erase(struct nand_device *nand, const struct nand_pos *pos)
5551{
5552	struct nand_chip *chip = container_of(nand, struct nand_chip,
5553					      base);
5554	unsigned int eb = nanddev_pos_to_row(nand, pos);
5555	int ret;
5556
5557	eb >>= nand->rowconv.eraseblock_addr_shift;
5558
5559	nand_select_target(chip, pos->target);
5560	ret = nand_erase_op(chip, eb);
5561	nand_deselect_target(chip);
5562
5563	return ret;
5564}
5565
5566static int rawnand_markbad(struct nand_device *nand,
5567			   const struct nand_pos *pos)
5568{
5569	struct nand_chip *chip = container_of(nand, struct nand_chip,
5570					      base);
5571
5572	return nand_markbad_bbm(chip, nanddev_pos_to_offs(nand, pos));
5573}
5574
5575static bool rawnand_isbad(struct nand_device *nand, const struct nand_pos *pos)
5576{
5577	struct nand_chip *chip = container_of(nand, struct nand_chip,
5578					      base);
5579	int ret;
5580
5581	nand_select_target(chip, pos->target);
5582	ret = nand_isbad_bbm(chip, nanddev_pos_to_offs(nand, pos));
5583	nand_deselect_target(chip);
5584
5585	return ret;
5586}
5587
5588static const struct nand_ops rawnand_ops = {
5589	.erase = rawnand_erase,
5590	.markbad = rawnand_markbad,
5591	.isbad = rawnand_isbad,
5592};
5593
5594/**
5595 * nand_scan_tail - Scan for the NAND device
5596 * @chip: NAND chip object
5597 *
5598 * This is the second phase of the normal nand_scan() function. It fills out
5599 * all the uninitialized function pointers with the defaults and scans for a
5600 * bad block table if appropriate.
5601 */
5602static int nand_scan_tail(struct nand_chip *chip)
5603{
5604	struct mtd_info *mtd = nand_to_mtd(chip);
5605	struct nand_ecc_ctrl *ecc = &chip->ecc;
5606	int ret, i;
5607
5608	/* New bad blocks should be marked in OOB, flash-based BBT, or both */
5609	if (WARN_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
5610		   !(chip->bbt_options & NAND_BBT_USE_FLASH))) {
5611		return -EINVAL;
5612	}
5613
5614	chip->data_buf = kmalloc(mtd->writesize + mtd->oobsize, GFP_KERNEL);
5615	if (!chip->data_buf)
5616		return -ENOMEM;
5617
5618	/*
5619	 * FIXME: some NAND manufacturer drivers expect the first die to be
5620	 * selected when manufacturer->init() is called. They should be fixed
5621	 * to explictly select the relevant die when interacting with the NAND
5622	 * chip.
5623	 */
5624	nand_select_target(chip, 0);
5625	ret = nand_manufacturer_init(chip);
5626	nand_deselect_target(chip);
5627	if (ret)
5628		goto err_free_buf;
5629
5630	/* Set the internal oob buffer location, just after the page data */
5631	chip->oob_poi = chip->data_buf + mtd->writesize;
5632
5633	/*
5634	 * If no default placement scheme is given, select an appropriate one.
5635	 */
5636	if (!mtd->ooblayout &&
5637	    !(ecc->engine_type == NAND_ECC_ENGINE_TYPE_SOFT &&
5638	      ecc->algo == NAND_ECC_ALGO_BCH)) {
5639		switch (mtd->oobsize) {
5640		case 8:
5641		case 16:
5642			mtd_set_ooblayout(mtd, nand_get_small_page_ooblayout());
5643			break;
5644		case 64:
5645		case 128:
5646			mtd_set_ooblayout(mtd,
5647					  nand_get_large_page_hamming_ooblayout());
5648			break;
5649		default:
5650			/*
5651			 * Expose the whole OOB area to users if ECC_NONE
5652			 * is passed. We could do that for all kind of
5653			 * ->oobsize, but we must keep the old large/small
5654			 * page with ECC layout when ->oobsize <= 128 for
5655			 * compatibility reasons.
5656			 */
5657			if (ecc->engine_type == NAND_ECC_ENGINE_TYPE_NONE) {
5658				mtd_set_ooblayout(mtd,
5659						  nand_get_large_page_ooblayout());
5660				break;
5661			}
5662
5663			WARN(1, "No oob scheme defined for oobsize %d\n",
5664				mtd->oobsize);
5665			ret = -EINVAL;
5666			goto err_nand_manuf_cleanup;
5667		}
5668	}
5669
5670	/*
5671	 * Check ECC mode, default to software if 3byte/512byte hardware ECC is
5672	 * selected and we have 256 byte pagesize fallback to software ECC
5673	 */
5674
5675	switch (ecc->engine_type) {
5676	case NAND_ECC_ENGINE_TYPE_ON_HOST:
5677		ret = nand_set_ecc_on_host_ops(chip);
5678		if (ret)
5679			goto err_nand_manuf_cleanup;
5680
5681		if (mtd->writesize >= ecc->size) {
5682			if (!ecc->strength) {
5683				WARN(1, "Driver must set ecc.strength when using hardware ECC\n");
5684				ret = -EINVAL;
5685				goto err_nand_manuf_cleanup;
5686			}
5687			break;
5688		}
5689		pr_warn("%d byte HW ECC not possible on %d byte page size, fallback to SW ECC\n",
5690			ecc->size, mtd->writesize);
5691		ecc->engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
5692		ecc->algo = NAND_ECC_ALGO_HAMMING;
5693		fallthrough;
5694
5695	case NAND_ECC_ENGINE_TYPE_SOFT:
5696		ret = nand_set_ecc_soft_ops(chip);
5697		if (ret)
5698			goto err_nand_manuf_cleanup;
5699		break;
5700
5701	case NAND_ECC_ENGINE_TYPE_ON_DIE:
5702		if (!ecc->read_page || !ecc->write_page) {
5703			WARN(1, "No ECC functions supplied; on-die ECC not possible\n");
5704			ret = -EINVAL;
5705			goto err_nand_manuf_cleanup;
5706		}
5707		if (!ecc->read_oob)
5708			ecc->read_oob = nand_read_oob_std;
5709		if (!ecc->write_oob)
5710			ecc->write_oob = nand_write_oob_std;
5711		break;
5712
5713	case NAND_ECC_ENGINE_TYPE_NONE:
5714		pr_warn("NAND_ECC_ENGINE_TYPE_NONE selected by board driver. This is not recommended!\n");
5715		ecc->read_page = nand_read_page_raw;
5716		ecc->write_page = nand_write_page_raw;
5717		ecc->read_oob = nand_read_oob_std;
5718		ecc->read_page_raw = nand_read_page_raw;
5719		ecc->write_page_raw = nand_write_page_raw;
5720		ecc->write_oob = nand_write_oob_std;
5721		ecc->size = mtd->writesize;
5722		ecc->bytes = 0;
5723		ecc->strength = 0;
5724		break;
5725
5726	default:
5727		WARN(1, "Invalid NAND_ECC_MODE %d\n", ecc->engine_type);
5728		ret = -EINVAL;
5729		goto err_nand_manuf_cleanup;
5730	}
5731
5732	if (ecc->correct || ecc->calculate) {
5733		ecc->calc_buf = kmalloc(mtd->oobsize, GFP_KERNEL);
5734		ecc->code_buf = kmalloc(mtd->oobsize, GFP_KERNEL);
5735		if (!ecc->calc_buf || !ecc->code_buf) {
5736			ret = -ENOMEM;
5737			goto err_nand_manuf_cleanup;
5738		}
5739	}
5740
5741	/* For many systems, the standard OOB write also works for raw */
5742	if (!ecc->read_oob_raw)
5743		ecc->read_oob_raw = ecc->read_oob;
5744	if (!ecc->write_oob_raw)
5745		ecc->write_oob_raw = ecc->write_oob;
5746
5747	/* propagate ecc info to mtd_info */
5748	mtd->ecc_strength = ecc->strength;
5749	mtd->ecc_step_size = ecc->size;
5750
5751	/*
5752	 * Set the number of read / write steps for one page depending on ECC
5753	 * mode.
5754	 */
5755	ecc->steps = mtd->writesize / ecc->size;
5756	if (ecc->steps * ecc->size != mtd->writesize) {
5757		WARN(1, "Invalid ECC parameters\n");
5758		ret = -EINVAL;
5759		goto err_nand_manuf_cleanup;
5760	}
5761
5762	ecc->total = ecc->steps * ecc->bytes;
5763	chip->base.ecc.ctx.total = ecc->total;
5764
5765	if (ecc->total > mtd->oobsize) {
5766		WARN(1, "Total number of ECC bytes exceeded oobsize\n");
5767		ret = -EINVAL;
5768		goto err_nand_manuf_cleanup;
5769	}
5770
5771	/*
5772	 * The number of bytes available for a client to place data into
5773	 * the out of band area.
5774	 */
5775	ret = mtd_ooblayout_count_freebytes(mtd);
5776	if (ret < 0)
5777		ret = 0;
5778
5779	mtd->oobavail = ret;
5780
5781	/* ECC sanity check: warn if it's too weak */
5782	if (!nand_ecc_is_strong_enough(&chip->base))
5783		pr_warn("WARNING: %s: the ECC used on your system (%db/%dB) is too weak compared to the one required by the NAND chip (%db/%dB)\n",
5784			mtd->name, chip->ecc.strength, chip->ecc.size,
5785			nanddev_get_ecc_requirements(&chip->base)->strength,
5786			nanddev_get_ecc_requirements(&chip->base)->step_size);
5787
5788	/* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
5789	if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
5790		switch (ecc->steps) {
5791		case 2:
5792			mtd->subpage_sft = 1;
5793			break;
5794		case 4:
5795		case 8:
5796		case 16:
5797			mtd->subpage_sft = 2;
5798			break;
5799		}
5800	}
5801	chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
5802
5803	/* Invalidate the pagebuffer reference */
5804	chip->pagecache.page = -1;
5805
5806	/* Large page NAND with SOFT_ECC should support subpage reads */
5807	switch (ecc->engine_type) {
5808	case NAND_ECC_ENGINE_TYPE_SOFT:
5809		if (chip->page_shift > 9)
5810			chip->options |= NAND_SUBPAGE_READ;
5811		break;
5812
5813	default:
5814		break;
5815	}
5816
5817	ret = nanddev_init(&chip->base, &rawnand_ops, mtd->owner);
5818	if (ret)
5819		goto err_nand_manuf_cleanup;
5820
5821	/* Adjust the MTD_CAP_ flags when NAND_ROM is set. */
5822	if (chip->options & NAND_ROM)
5823		mtd->flags = MTD_CAP_ROM;
5824
5825	/* Fill in remaining MTD driver data */
5826	mtd->_erase = nand_erase;
5827	mtd->_point = NULL;
5828	mtd->_unpoint = NULL;
5829	mtd->_panic_write = panic_nand_write;
5830	mtd->_read_oob = nand_read_oob;
5831	mtd->_write_oob = nand_write_oob;
5832	mtd->_sync = nand_sync;
5833	mtd->_lock = nand_lock;
5834	mtd->_unlock = nand_unlock;
5835	mtd->_suspend = nand_suspend;
5836	mtd->_resume = nand_resume;
5837	mtd->_reboot = nand_shutdown;
5838	mtd->_block_isreserved = nand_block_isreserved;
5839	mtd->_block_isbad = nand_block_isbad;
5840	mtd->_block_markbad = nand_block_markbad;
5841	mtd->_max_bad_blocks = nanddev_mtd_max_bad_blocks;
5842
5843	/*
5844	 * Initialize bitflip_threshold to its default prior scan_bbt() call.
5845	 * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
5846	 * properly set.
5847	 */
5848	if (!mtd->bitflip_threshold)
5849		mtd->bitflip_threshold = DIV_ROUND_UP(mtd->ecc_strength * 3, 4);
5850
5851	/* Find the fastest data interface for this chip */
5852	ret = nand_choose_interface_config(chip);
5853	if (ret)
5854		goto err_nanddev_cleanup;
5855
5856	/* Enter fastest possible mode on all dies. */
5857	for (i = 0; i < nanddev_ntargets(&chip->base); i++) {
5858		ret = nand_setup_interface(chip, i);
5859		if (ret)
5860			goto err_free_interface_config;
5861	}
5862
5863	/* Check, if we should skip the bad block table scan */
5864	if (chip->options & NAND_SKIP_BBTSCAN)
5865		return 0;
5866
5867	/* Build bad block table */
5868	ret = nand_create_bbt(chip);
5869	if (ret)
5870		goto err_free_interface_config;
5871
5872	return 0;
5873
5874err_free_interface_config:
5875	kfree(chip->best_interface_config);
5876
5877err_nanddev_cleanup:
5878	nanddev_cleanup(&chip->base);
5879
5880err_nand_manuf_cleanup:
5881	nand_manufacturer_cleanup(chip);
5882
5883err_free_buf:
5884	kfree(chip->data_buf);
5885	kfree(ecc->code_buf);
5886	kfree(ecc->calc_buf);
5887
5888	return ret;
5889}
5890
5891static int nand_attach(struct nand_chip *chip)
5892{
5893	if (chip->controller->ops && chip->controller->ops->attach_chip)
5894		return chip->controller->ops->attach_chip(chip);
5895
5896	return 0;
5897}
5898
5899static void nand_detach(struct nand_chip *chip)
5900{
5901	if (chip->controller->ops && chip->controller->ops->detach_chip)
5902		chip->controller->ops->detach_chip(chip);
5903}
5904
5905/**
5906 * nand_scan_with_ids - [NAND Interface] Scan for the NAND device
5907 * @chip: NAND chip object
5908 * @maxchips: number of chips to scan for.
5909 * @ids: optional flash IDs table
5910 *
5911 * This fills out all the uninitialized function pointers with the defaults.
5912 * The flash ID is read and the mtd/chip structures are filled with the
5913 * appropriate values.
5914 */
5915int nand_scan_with_ids(struct nand_chip *chip, unsigned int maxchips,
5916		       struct nand_flash_dev *ids)
5917{
5918	int ret;
5919
5920	if (!maxchips)
5921		return -EINVAL;
5922
5923	ret = nand_scan_ident(chip, maxchips, ids);
5924	if (ret)
5925		return ret;
5926
5927	ret = nand_attach(chip);
5928	if (ret)
5929		goto cleanup_ident;
5930
5931	ret = nand_scan_tail(chip);
5932	if (ret)
5933		goto detach_chip;
5934
5935	return 0;
5936
5937detach_chip:
5938	nand_detach(chip);
5939cleanup_ident:
5940	nand_scan_ident_cleanup(chip);
5941
5942	return ret;
5943}
5944EXPORT_SYMBOL(nand_scan_with_ids);
5945
5946/**
5947 * nand_cleanup - [NAND Interface] Free resources held by the NAND device
5948 * @chip: NAND chip object
5949 */
5950void nand_cleanup(struct nand_chip *chip)
5951{
5952	if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_SOFT &&
5953	    chip->ecc.algo == NAND_ECC_ALGO_BCH)
5954		nand_bch_free((struct nand_bch_control *)chip->ecc.priv);
5955
5956	nanddev_cleanup(&chip->base);
5957
5958	/* Free bad block table memory */
5959	kfree(chip->bbt);
5960	kfree(chip->data_buf);
5961	kfree(chip->ecc.code_buf);
5962	kfree(chip->ecc.calc_buf);
5963
5964	/* Free bad block descriptor memory */
5965	if (chip->badblock_pattern && chip->badblock_pattern->options
5966			& NAND_BBT_DYNAMICSTRUCT)
5967		kfree(chip->badblock_pattern);
5968
5969	/* Free the data interface */
5970	kfree(chip->best_interface_config);
5971
5972	/* Free manufacturer priv data. */
5973	nand_manufacturer_cleanup(chip);
5974
5975	/* Free controller specific allocations after chip identification */
5976	nand_detach(chip);
5977
5978	/* Free identification phase allocations */
5979	nand_scan_ident_cleanup(chip);
5980}
5981
5982EXPORT_SYMBOL_GPL(nand_cleanup);
5983
5984MODULE_LICENSE("GPL");
5985MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>");
5986MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
5987MODULE_DESCRIPTION("Generic NAND flash driver code");
5988