cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

nand_base.c (172295B)


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