brintos

brintos / linux-shallow public Read only

0
0
Text · 81.4 KiB · e1b5153 Raw
2887 lines · c
1// SPDX-License-Identifier: GPL-2.0+2/*3 * Freescale GPMI NAND Flash Driver4 *5 * Copyright (C) 2010-2015 Freescale Semiconductor, Inc.6 * Copyright (C) 2008 Embedded Alley Solutions, Inc.7 */8#include <linux/clk.h>9#include <linux/delay.h>10#include <linux/slab.h>11#include <linux/sched/task_stack.h>12#include <linux/interrupt.h>13#include <linux/module.h>14#include <linux/mtd/partitions.h>15#include <linux/of.h>16#include <linux/platform_device.h>17#include <linux/pm_runtime.h>18#include <linux/dma/mxs-dma.h>19#include "gpmi-nand.h"20#include "gpmi-regs.h"21#include "bch-regs.h"22 23/* Resource names for the GPMI NAND driver. */24#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME  "gpmi-nand"25#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME   "bch"26#define GPMI_NAND_BCH_INTERRUPT_RES_NAME   "bch"27 28/* Converts time to clock cycles */29#define TO_CYCLES(duration, period) DIV_ROUND_UP_ULL(duration, period)30 31#define MXS_SET_ADDR		0x432#define MXS_CLR_ADDR		0x833/*34 * Clear the bit and poll it cleared.  This is usually called with35 * a reset address and mask being either SFTRST(bit 31) or CLKGATE36 * (bit 30).37 */38static int clear_poll_bit(void __iomem *addr, u32 mask)39{40	int timeout = 0x400;41 42	/* clear the bit */43	writel(mask, addr + MXS_CLR_ADDR);44 45	/*46	 * SFTRST needs 3 GPMI clocks to settle, the reference manual47	 * recommends to wait 1us.48	 */49	udelay(1);50 51	/* poll the bit becoming clear */52	while ((readl(addr) & mask) && --timeout)53		/* nothing */;54 55	return !timeout;56}57 58#define MODULE_CLKGATE		(1 << 30)59#define MODULE_SFTRST		(1 << 31)60/*61 * The current mxs_reset_block() will do two things:62 *  [1] enable the module.63 *  [2] reset the module.64 *65 * In most of the cases, it's ok.66 * But in MX23, there is a hardware bug in the BCH block (see erratum #2847).67 * If you try to soft reset the BCH block, it becomes unusable until68 * the next hard reset. This case occurs in the NAND boot mode. When the board69 * boots by NAND, the ROM of the chip will initialize the BCH blocks itself.70 * So If the driver tries to reset the BCH again, the BCH will not work anymore.71 * You will see a DMA timeout in this case. The bug has been fixed72 * in the following chips, such as MX28.73 *74 * To avoid this bug, just add a new parameter `just_enable` for75 * the mxs_reset_block(), and rewrite it here.76 */77static int gpmi_reset_block(void __iomem *reset_addr, bool just_enable)78{79	int ret;80	int timeout = 0x400;81 82	/* clear and poll SFTRST */83	ret = clear_poll_bit(reset_addr, MODULE_SFTRST);84	if (unlikely(ret))85		goto error;86 87	/* clear CLKGATE */88	writel(MODULE_CLKGATE, reset_addr + MXS_CLR_ADDR);89 90	if (!just_enable) {91		/* set SFTRST to reset the block */92		writel(MODULE_SFTRST, reset_addr + MXS_SET_ADDR);93		udelay(1);94 95		/* poll CLKGATE becoming set */96		while ((!(readl(reset_addr) & MODULE_CLKGATE)) && --timeout)97			/* nothing */;98		if (unlikely(!timeout))99			goto error;100	}101 102	/* clear and poll SFTRST */103	ret = clear_poll_bit(reset_addr, MODULE_SFTRST);104	if (unlikely(ret))105		goto error;106 107	/* clear and poll CLKGATE */108	ret = clear_poll_bit(reset_addr, MODULE_CLKGATE);109	if (unlikely(ret))110		goto error;111 112	return 0;113 114error:115	pr_err("%s(%p): module reset timeout\n", __func__, reset_addr);116	return -ETIMEDOUT;117}118 119static int __gpmi_enable_clk(struct gpmi_nand_data *this, bool v)120{121	struct clk *clk;122	int ret;123	int i;124 125	for (i = 0; i < GPMI_CLK_MAX; i++) {126		clk = this->resources.clock[i];127		if (!clk)128			break;129 130		if (v) {131			ret = clk_prepare_enable(clk);132			if (ret)133				goto err_clk;134		} else {135			clk_disable_unprepare(clk);136		}137	}138	return 0;139 140err_clk:141	for (; i > 0; i--)142		clk_disable_unprepare(this->resources.clock[i - 1]);143	return ret;144}145 146static int gpmi_init(struct gpmi_nand_data *this)147{148	struct resources *r = &this->resources;149	int ret;150 151	ret = pm_runtime_resume_and_get(this->dev);152	if (ret < 0)153		return ret;154 155	ret = gpmi_reset_block(r->gpmi_regs, false);156	if (ret)157		goto err_out;158 159	/*160	 * Reset BCH here, too. We got failures otherwise :(161	 * See later BCH reset for explanation of MX23 and MX28 handling162	 */163	ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MXS(this));164	if (ret)165		goto err_out;166 167	/* Choose NAND mode. */168	writel(BM_GPMI_CTRL1_GPMI_MODE, r->gpmi_regs + HW_GPMI_CTRL1_CLR);169 170	/* Set the IRQ polarity. */171	writel(BM_GPMI_CTRL1_ATA_IRQRDY_POLARITY,172				r->gpmi_regs + HW_GPMI_CTRL1_SET);173 174	/* Disable Write-Protection. */175	writel(BM_GPMI_CTRL1_DEV_RESET, r->gpmi_regs + HW_GPMI_CTRL1_SET);176 177	/* Select BCH ECC. */178	writel(BM_GPMI_CTRL1_BCH_MODE, r->gpmi_regs + HW_GPMI_CTRL1_SET);179 180	/*181	 * Decouple the chip select from dma channel. We use dma0 for all182	 * the chips, force all NAND RDY_BUSY inputs to be sourced from183	 * RDY_BUSY0.184	 */185	writel(BM_GPMI_CTRL1_DECOUPLE_CS | BM_GPMI_CTRL1_GANGED_RDYBUSY,186	       r->gpmi_regs + HW_GPMI_CTRL1_SET);187 188err_out:189	pm_runtime_mark_last_busy(this->dev);190	pm_runtime_put_autosuspend(this->dev);191	return ret;192}193 194/* This function is very useful. It is called only when the bug occur. */195static void gpmi_dump_info(struct gpmi_nand_data *this)196{197	struct resources *r = &this->resources;198	struct bch_geometry *geo = &this->bch_geometry;199	u32 reg;200	int i;201 202	dev_err(this->dev, "Show GPMI registers :\n");203	for (i = 0; i <= HW_GPMI_DEBUG / 0x10 + 1; i++) {204		reg = readl(r->gpmi_regs + i * 0x10);205		dev_err(this->dev, "offset 0x%.3x : 0x%.8x\n", i * 0x10, reg);206	}207 208	/* start to print out the BCH info */209	dev_err(this->dev, "Show BCH registers :\n");210	for (i = 0; i <= HW_BCH_VERSION / 0x10 + 1; i++) {211		reg = readl(r->bch_regs + i * 0x10);212		dev_err(this->dev, "offset 0x%.3x : 0x%.8x\n", i * 0x10, reg);213	}214	dev_err(this->dev, "BCH Geometry :\n"215		"GF length              : %u\n"216		"ECC Strength           : %u\n"217		"Page Size in Bytes     : %u\n"218		"Metadata Size in Bytes : %u\n"219		"ECC0 Chunk Size in Bytes: %u\n"220		"ECCn Chunk Size in Bytes: %u\n"221		"ECC Chunk Count        : %u\n"222		"Payload Size in Bytes  : %u\n"223		"Auxiliary Size in Bytes: %u\n"224		"Auxiliary Status Offset: %u\n"225		"Block Mark Byte Offset : %u\n"226		"Block Mark Bit Offset  : %u\n",227		geo->gf_len,228		geo->ecc_strength,229		geo->page_size,230		geo->metadata_size,231		geo->ecc0_chunk_size,232		geo->eccn_chunk_size,233		geo->ecc_chunk_count,234		geo->payload_size,235		geo->auxiliary_size,236		geo->auxiliary_status_offset,237		geo->block_mark_byte_offset,238		geo->block_mark_bit_offset);239}240 241static bool gpmi_check_ecc(struct gpmi_nand_data *this)242{243	struct nand_chip *chip = &this->nand;244	struct bch_geometry *geo = &this->bch_geometry;245	struct nand_device *nand = &chip->base;246	struct nand_ecc_props *conf = &nand->ecc.ctx.conf;247 248	conf->step_size = geo->eccn_chunk_size;249	conf->strength = geo->ecc_strength;250 251	/* Do the sanity check. */252	if (GPMI_IS_MXS(this)) {253		/* The mx23/mx28 only support the GF13. */254		if (geo->gf_len == 14)255			return false;256	}257 258	if (geo->ecc_strength > this->devdata->bch_max_ecc_strength)259		return false;260 261	if (!nand_ecc_is_strong_enough(nand))262		return false;263 264	return true;265}266 267/* check if bbm locates in data chunk rather than ecc chunk */268static bool bbm_in_data_chunk(struct gpmi_nand_data *this,269			unsigned int *chunk_num)270{271	struct bch_geometry *geo = &this->bch_geometry;272	struct nand_chip *chip = &this->nand;273	struct mtd_info *mtd = nand_to_mtd(chip);274	unsigned int i, j;275 276	if (geo->ecc0_chunk_size != geo->eccn_chunk_size) {277		dev_err(this->dev,278			"The size of ecc0_chunk must equal to eccn_chunk\n");279		return false;280	}281 282	i = (mtd->writesize * 8 - geo->metadata_size * 8) /283		(geo->gf_len * geo->ecc_strength +284			geo->eccn_chunk_size * 8);285 286	j = (mtd->writesize * 8 - geo->metadata_size * 8) -287		(geo->gf_len * geo->ecc_strength +288			geo->eccn_chunk_size * 8) * i;289 290	if (j < geo->eccn_chunk_size * 8) {291		*chunk_num = i+1;292		dev_dbg(this->dev, "Set ecc to %d and bbm in chunk %d\n",293				geo->ecc_strength, *chunk_num);294		return true;295	}296 297	return false;298}299 300/*301 * If we can get the ECC information from the nand chip, we do not302 * need to calculate them ourselves.303 *304 * We may have available oob space in this case.305 */306static int set_geometry_by_ecc_info(struct gpmi_nand_data *this,307				    unsigned int ecc_strength,308				    unsigned int ecc_step)309{310	struct bch_geometry *geo = &this->bch_geometry;311	struct nand_chip *chip = &this->nand;312	struct mtd_info *mtd = nand_to_mtd(chip);313	unsigned int block_mark_bit_offset;314 315	switch (ecc_step) {316	case SZ_512:317		geo->gf_len = 13;318		break;319	case SZ_1K:320		geo->gf_len = 14;321		break;322	default:323		dev_err(this->dev,324			"unsupported nand chip. ecc bits : %d, ecc size : %d\n",325			nanddev_get_ecc_requirements(&chip->base)->strength,326			nanddev_get_ecc_requirements(&chip->base)->step_size);327		return -EINVAL;328	}329	geo->ecc0_chunk_size = ecc_step;330	geo->eccn_chunk_size = ecc_step;331	geo->ecc_strength = round_up(ecc_strength, 2);332	if (!gpmi_check_ecc(this))333		return -EINVAL;334 335	/* Keep the C >= O */336	if (geo->eccn_chunk_size < mtd->oobsize) {337		dev_err(this->dev,338			"unsupported nand chip. ecc size: %d, oob size : %d\n",339			ecc_step, mtd->oobsize);340		return -EINVAL;341	}342 343	/* The default value, see comment in the legacy_set_geometry(). */344	geo->metadata_size = 10;345 346	geo->ecc_chunk_count = mtd->writesize / geo->eccn_chunk_size;347 348	/*349	 * Now, the NAND chip with 2K page(data chunk is 512byte) shows below:350	 *351	 *    |                          P                            |352	 *    |<----------------------------------------------------->|353	 *    |                                                       |354	 *    |                                        (Block Mark)   |355	 *    |                      P'                      |      | |     |356	 *    |<-------------------------------------------->|  D   | |  O' |357	 *    |                                              |<---->| |<--->|358	 *    V                                              V      V V     V359	 *    +---+----------+-+----------+-+----------+-+----------+-+-----+360	 *    | M |   data   |E|   data   |E|   data   |E|   data   |E|     |361	 *    +---+----------+-+----------+-+----------+-+----------+-+-----+362	 *                                                   ^              ^363	 *                                                   |      O       |364	 *                                                   |<------------>|365	 *                                                   |              |366	 *367	 *	P : the page size for BCH module.368	 *	E : The ECC strength.369	 *	G : the length of Galois Field.370	 *	N : The chunk count of per page.371	 *	M : the metasize of per page.372	 *	C : the ecc chunk size, aka the "data" above.373	 *	P': the nand chip's page size.374	 *	O : the nand chip's oob size.375	 *	O': the free oob.376	 *377	 *	The formula for P is :378	 *379	 *	            E * G * N380	 *	       P = ------------ + P' + M381	 *                      8382	 *383	 * The position of block mark moves forward in the ECC-based view384	 * of page, and the delta is:385	 *386	 *                   E * G * (N - 1)387	 *             D = (---------------- + M)388	 *                          8389	 *390	 * Please see the comment in legacy_set_geometry().391	 * With the condition C >= O , we still can get same result.392	 * So the bit position of the physical block mark within the ECC-based393	 * view of the page is :394	 *             (P' - D) * 8395	 */396	geo->page_size = mtd->writesize + geo->metadata_size +397		(geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;398 399	geo->payload_size = mtd->writesize;400 401	geo->auxiliary_status_offset = ALIGN(geo->metadata_size, 4);402	geo->auxiliary_size = ALIGN(geo->metadata_size, 4)403				+ ALIGN(geo->ecc_chunk_count, 4);404 405	if (!this->swap_block_mark)406		return 0;407 408	/* For bit swap. */409	block_mark_bit_offset = mtd->writesize * 8 -410		(geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - 1)411				+ geo->metadata_size * 8);412 413	geo->block_mark_byte_offset = block_mark_bit_offset / 8;414	geo->block_mark_bit_offset  = block_mark_bit_offset % 8;415	return 0;416}417 418/*419 *  Calculate the ECC strength by hand:420 *	E : The ECC strength.421 *	G : the length of Galois Field.422 *	N : The chunk count of per page.423 *	O : the oobsize of the NAND chip.424 *	M : the metasize of per page.425 *426 *	The formula is :427 *		E * G * N428 *	      ------------ <= (O - M)429 *                  8430 *431 *      So, we get E by:432 *                    (O - M) * 8433 *              E <= -------------434 *                       G * N435 */436static inline int get_ecc_strength(struct gpmi_nand_data *this)437{438	struct bch_geometry *geo = &this->bch_geometry;439	struct mtd_info	*mtd = nand_to_mtd(&this->nand);440	int ecc_strength;441 442	ecc_strength = ((mtd->oobsize - geo->metadata_size) * 8)443			/ (geo->gf_len * geo->ecc_chunk_count);444 445	/* We need the minor even number. */446	return round_down(ecc_strength, 2);447}448 449static int set_geometry_for_large_oob(struct gpmi_nand_data *this)450{451	struct bch_geometry *geo = &this->bch_geometry;452	struct nand_chip *chip = &this->nand;453	struct mtd_info *mtd = nand_to_mtd(chip);454	const struct nand_ecc_props *requirements =455		nanddev_get_ecc_requirements(&chip->base);456	unsigned int block_mark_bit_offset;457	unsigned int max_ecc;458	unsigned int bbm_chunk;459	unsigned int i;460 461	/* sanity check for the minimum ecc nand required */462	if (!(requirements->strength > 0 &&463	      requirements->step_size > 0))464		return -EINVAL;465	geo->ecc_strength = requirements->strength;466 467	/* check if platform can support this nand */468	if (!gpmi_check_ecc(this)) {469		dev_err(this->dev,470			"unsupported NAND chip, minimum ecc required %d\n",471			geo->ecc_strength);472		return -EINVAL;473	}474 475	/* calculate the maximum ecc platform can support*/476	geo->metadata_size = 10;477	geo->gf_len = 14;478	geo->ecc0_chunk_size = 1024;479	geo->eccn_chunk_size = 1024;480	geo->ecc_chunk_count = mtd->writesize / geo->eccn_chunk_size;481	max_ecc = min(get_ecc_strength(this),482		      this->devdata->bch_max_ecc_strength);483 484	/*485	 * search a supported ecc strength that makes bbm486	 * located in data chunk487	 */488	geo->ecc_strength = max_ecc;489	while (!(geo->ecc_strength < requirements->strength)) {490		if (bbm_in_data_chunk(this, &bbm_chunk))491			goto geo_setting;492		geo->ecc_strength -= 2;493	}494 495	/* if none of them works, keep using the minimum ecc */496	/* nand required but changing ecc page layout  */497	geo->ecc_strength = requirements->strength;498	/* add extra ecc for meta data */499	geo->ecc0_chunk_size = 0;500	geo->ecc_chunk_count = (mtd->writesize / geo->eccn_chunk_size) + 1;501	geo->ecc_for_meta = 1;502	/* check if oob can afford this extra ecc chunk */503	if (mtd->oobsize * 8 < geo->metadata_size * 8 +504	    geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) {505		dev_err(this->dev, "unsupported NAND chip with new layout\n");506		return -EINVAL;507	}508 509	/* calculate in which chunk bbm located */510	bbm_chunk = (mtd->writesize * 8 - geo->metadata_size * 8 -511		     geo->gf_len * geo->ecc_strength) /512		     (geo->gf_len * geo->ecc_strength +513		     geo->eccn_chunk_size * 8) + 1;514 515geo_setting:516 517	geo->page_size = mtd->writesize + geo->metadata_size +518		(geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;519	geo->payload_size = mtd->writesize;520 521	/*522	 * The auxiliary buffer contains the metadata and the ECC status. The523	 * metadata is padded to the nearest 32-bit boundary. The ECC status524	 * contains one byte for every ECC chunk, and is also padded to the525	 * nearest 32-bit boundary.526	 */527	geo->auxiliary_status_offset = ALIGN(geo->metadata_size, 4);528	geo->auxiliary_size = ALIGN(geo->metadata_size, 4)529				    + ALIGN(geo->ecc_chunk_count, 4);530 531	if (!this->swap_block_mark)532		return 0;533 534	/* calculate the number of ecc chunk behind the bbm */535	i = (mtd->writesize / geo->eccn_chunk_size) - bbm_chunk + 1;536 537	block_mark_bit_offset = mtd->writesize * 8 -538		(geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - i)539		+ geo->metadata_size * 8);540 541	geo->block_mark_byte_offset = block_mark_bit_offset / 8;542	geo->block_mark_bit_offset  = block_mark_bit_offset % 8;543 544	dev_dbg(this->dev, "BCH Geometry :\n"545		"GF length              : %u\n"546		"ECC Strength           : %u\n"547		"Page Size in Bytes     : %u\n"548		"Metadata Size in Bytes : %u\n"549		"ECC0 Chunk Size in Bytes: %u\n"550		"ECCn Chunk Size in Bytes: %u\n"551		"ECC Chunk Count        : %u\n"552		"Payload Size in Bytes  : %u\n"553		"Auxiliary Size in Bytes: %u\n"554		"Auxiliary Status Offset: %u\n"555		"Block Mark Byte Offset : %u\n"556		"Block Mark Bit Offset  : %u\n"557		"Block Mark in chunk	: %u\n"558		"Ecc for Meta data	: %u\n",559		geo->gf_len,560		geo->ecc_strength,561		geo->page_size,562		geo->metadata_size,563		geo->ecc0_chunk_size,564		geo->eccn_chunk_size,565		geo->ecc_chunk_count,566		geo->payload_size,567		geo->auxiliary_size,568		geo->auxiliary_status_offset,569		geo->block_mark_byte_offset,570		geo->block_mark_bit_offset,571		bbm_chunk,572		geo->ecc_for_meta);573 574	return 0;575}576 577static int legacy_set_geometry(struct gpmi_nand_data *this)578{579	struct bch_geometry *geo = &this->bch_geometry;580	struct mtd_info *mtd = nand_to_mtd(&this->nand);581	unsigned int metadata_size;582	unsigned int status_size;583	unsigned int block_mark_bit_offset;584 585	/*586	 * The size of the metadata can be changed, though we set it to 10587	 * bytes now. But it can't be too large, because we have to save588	 * enough space for BCH.589	 */590	geo->metadata_size = 10;591 592	/* The default for the length of Galois Field. */593	geo->gf_len = 13;594 595	/* The default for chunk size. */596	geo->ecc0_chunk_size = 512;597	geo->eccn_chunk_size = 512;598	while (geo->eccn_chunk_size < mtd->oobsize) {599		geo->ecc0_chunk_size *= 2; /* keep C >= O */600		geo->eccn_chunk_size *= 2; /* keep C >= O */601		geo->gf_len = 14;602	}603 604	geo->ecc_chunk_count = mtd->writesize / geo->eccn_chunk_size;605 606	/* We use the same ECC strength for all chunks. */607	geo->ecc_strength = get_ecc_strength(this);608	if (!gpmi_check_ecc(this)) {609		dev_err(this->dev,610			"ecc strength: %d cannot be supported by the controller (%d)\n"611			"try to use minimum ecc strength that NAND chip required\n",612			geo->ecc_strength,613			this->devdata->bch_max_ecc_strength);614		return -EINVAL;615	}616 617	geo->page_size = mtd->writesize + geo->metadata_size +618		(geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;619	geo->payload_size = mtd->writesize;620 621	/*622	 * The auxiliary buffer contains the metadata and the ECC status. The623	 * metadata is padded to the nearest 32-bit boundary. The ECC status624	 * contains one byte for every ECC chunk, and is also padded to the625	 * nearest 32-bit boundary.626	 */627	metadata_size = ALIGN(geo->metadata_size, 4);628	status_size   = ALIGN(geo->ecc_chunk_count, 4);629 630	geo->auxiliary_size = metadata_size + status_size;631	geo->auxiliary_status_offset = metadata_size;632 633	if (!this->swap_block_mark)634		return 0;635 636	/*637	 * We need to compute the byte and bit offsets of638	 * the physical block mark within the ECC-based view of the page.639	 *640	 * NAND chip with 2K page shows below:641	 *                                             (Block Mark)642	 *                                                   |      |643	 *                                                   |  D   |644	 *                                                   |<---->|645	 *                                                   V      V646	 *    +---+----------+-+----------+-+----------+-+----------+-+647	 *    | M |   data   |E|   data   |E|   data   |E|   data   |E|648	 *    +---+----------+-+----------+-+----------+-+----------+-+649	 *650	 * The position of block mark moves forward in the ECC-based view651	 * of page, and the delta is:652	 *653	 *                   E * G * (N - 1)654	 *             D = (---------------- + M)655	 *                          8656	 *657	 * With the formula to compute the ECC strength, and the condition658	 *       : C >= O         (C is the ecc chunk size)659	 *660	 * It's easy to deduce to the following result:661	 *662	 *         E * G       (O - M)      C - M         C - M663	 *      ----------- <= ------- <=  --------  <  ---------664	 *           8            N           N          (N - 1)665	 *666	 *  So, we get:667	 *668	 *                   E * G * (N - 1)669	 *             D = (---------------- + M) < C670	 *                          8671	 *672	 *  The above inequality means the position of block mark673	 *  within the ECC-based view of the page is still in the data chunk,674	 *  and it's NOT in the ECC bits of the chunk.675	 *676	 *  Use the following to compute the bit position of the677	 *  physical block mark within the ECC-based view of the page:678	 *          (page_size - D) * 8679	 *680	 *  --Huang Shijie681	 */682	block_mark_bit_offset = mtd->writesize * 8 -683		(geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - 1)684				+ geo->metadata_size * 8);685 686	geo->block_mark_byte_offset = block_mark_bit_offset / 8;687	geo->block_mark_bit_offset  = block_mark_bit_offset % 8;688	return 0;689}690 691static int common_nfc_set_geometry(struct gpmi_nand_data *this)692{693	struct nand_chip *chip = &this->nand;694	struct mtd_info *mtd = nand_to_mtd(&this->nand);695	const struct nand_ecc_props *requirements =696		nanddev_get_ecc_requirements(&chip->base);697	bool use_minimun_ecc;698	int err;699 700	use_minimun_ecc = of_property_read_bool(this->dev->of_node,701						"fsl,use-minimum-ecc");702 703	/* use legacy bch geometry settings by default*/704	if ((!use_minimun_ecc && mtd->oobsize < 1024) ||705	    !(requirements->strength > 0 && requirements->step_size > 0)) {706		dev_dbg(this->dev, "use legacy bch geometry\n");707		err = legacy_set_geometry(this);708		if (!err)709			return 0;710	}711 712	/* for large oob nand */713	if (mtd->oobsize > 1024) {714		dev_dbg(this->dev, "use large oob bch geometry\n");715		err = set_geometry_for_large_oob(this);716		if (!err)717			return 0;718	}719 720	/* otherwise use the minimum ecc nand chip required */721	dev_dbg(this->dev, "use minimum ecc bch geometry\n");722	err = set_geometry_by_ecc_info(this, requirements->strength,723					requirements->step_size);724	if (err)725		dev_err(this->dev, "none of the bch geometry setting works\n");726 727	return err;728}729 730/* Configures the geometry for BCH.  */731static int bch_set_geometry(struct gpmi_nand_data *this)732{733	struct resources *r = &this->resources;734	int ret;735 736	ret = common_nfc_set_geometry(this);737	if (ret)738		return ret;739 740	ret = pm_runtime_get_sync(this->dev);741	if (ret < 0) {742		pm_runtime_put_autosuspend(this->dev);743		return ret;744	}745 746	/*747	* Due to erratum #2847 of the MX23, the BCH cannot be soft reset on this748	* chip, otherwise it will lock up. So we skip resetting BCH on the MX23.749	* and MX28.750	*/751	ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MXS(this));752	if (ret)753		goto err_out;754 755	/* Set *all* chip selects to use layout 0. */756	writel(0, r->bch_regs + HW_BCH_LAYOUTSELECT);757 758	ret = 0;759err_out:760	pm_runtime_mark_last_busy(this->dev);761	pm_runtime_put_autosuspend(this->dev);762 763	return ret;764}765 766/*767 * <1> Firstly, we should know what's the GPMI-clock means.768 *     The GPMI-clock is the internal clock in the gpmi nand controller.769 *     If you set 100MHz to gpmi nand controller, the GPMI-clock's period770 *     is 10ns. Mark the GPMI-clock's period as GPMI-clock-period.771 *772 * <2> Secondly, we should know what's the frequency on the nand chip pins.773 *     The frequency on the nand chip pins is derived from the GPMI-clock.774 *     We can get it from the following equation:775 *776 *         F = G / (DS + DH)777 *778 *         F  : the frequency on the nand chip pins.779 *         G  : the GPMI clock, such as 100MHz.780 *         DS : GPMI_HW_GPMI_TIMING0:DATA_SETUP781 *         DH : GPMI_HW_GPMI_TIMING0:DATA_HOLD782 *783 * <3> Thirdly, when the frequency on the nand chip pins is above 33MHz,784 *     the nand EDO(extended Data Out) timing could be applied.785 *     The GPMI implements a feedback read strobe to sample the read data.786 *     The feedback read strobe can be delayed to support the nand EDO timing787 *     where the read strobe may deasserts before the read data is valid, and788 *     read data is valid for some time after read strobe.789 *790 *     The following figure illustrates some aspects of a NAND Flash read:791 *792 *                   |<---tREA---->|793 *                   |             |794 *                   |         |   |795 *                   |<--tRP-->|   |796 *                   |         |   |797 *                  __          ___|__________________________________798 *     RDN            \________/   |799 *                                 |800 *                                 /---------\801 *     Read Data    --------------<           >---------802 *                                 \---------/803 *                                |     |804 *                                |<-D->|805 *     FeedbackRDN  ________             ____________806 *                          \___________/807 *808 *          D stands for delay, set in the HW_GPMI_CTRL1:RDN_DELAY.809 *810 *811 * <4> Now, we begin to describe how to compute the right RDN_DELAY.812 *813 *  4.1) From the aspect of the nand chip pins:814 *        Delay = (tREA + C - tRP)               {1}815 *816 *        tREA : the maximum read access time.817 *        C    : a constant to adjust the delay. default is 4000ps.818 *        tRP  : the read pulse width, which is exactly:819 *                   tRP = (GPMI-clock-period) * DATA_SETUP820 *821 *  4.2) From the aspect of the GPMI nand controller:822 *         Delay = RDN_DELAY * 0.125 * RP        {2}823 *824 *         RP   : the DLL reference period.825 *            if (GPMI-clock-period > DLL_THRETHOLD)826 *                   RP = GPMI-clock-period / 2;827 *            else828 *                   RP = GPMI-clock-period;829 *830 *            Set the HW_GPMI_CTRL1:HALF_PERIOD if GPMI-clock-period831 *            is greater DLL_THRETHOLD. In other SOCs, the DLL_THRETHOLD832 *            is 16000ps, but in mx6q, we use 12000ps.833 *834 *  4.3) since {1} equals {2}, we get:835 *836 *                     (tREA + 4000 - tRP) * 8837 *         RDN_DELAY = -----------------------     {3}838 *                           RP839 */840static int gpmi_nfc_compute_timings(struct gpmi_nand_data *this,841				    const struct nand_sdr_timings *sdr)842{843	struct gpmi_nfc_hardware_timing *hw = &this->hw;844	struct resources *r = &this->resources;845	unsigned int dll_threshold_ps = this->devdata->max_chain_delay;846	unsigned int period_ps, reference_period_ps;847	unsigned int data_setup_cycles, data_hold_cycles, addr_setup_cycles;848	unsigned int tRP_ps;849	bool use_half_period;850	int sample_delay_ps, sample_delay_factor;851	unsigned int busy_timeout_cycles;852	u8 wrn_dly_sel;853	unsigned long clk_rate, min_rate;854	u64 busy_timeout_ps;855 856	if (sdr->tRC_min >= 30000) {857		/* ONFI non-EDO modes [0-3] */858		hw->clk_rate = 22000000;859		min_rate = 0;860		wrn_dly_sel = BV_GPMI_CTRL1_WRN_DLY_SEL_4_TO_8NS;861	} else if (sdr->tRC_min >= 25000) {862		/* ONFI EDO mode 4 */863		hw->clk_rate = 80000000;864		min_rate = 22000000;865		wrn_dly_sel = BV_GPMI_CTRL1_WRN_DLY_SEL_NO_DELAY;866	} else {867		/* ONFI EDO mode 5 */868		hw->clk_rate = 100000000;869		min_rate = 80000000;870		wrn_dly_sel = BV_GPMI_CTRL1_WRN_DLY_SEL_NO_DELAY;871	}872 873	clk_rate = clk_round_rate(r->clock[0], hw->clk_rate);874	if (clk_rate <= min_rate) {875		dev_err(this->dev, "clock setting: expected %ld, got %ld\n",876			hw->clk_rate, clk_rate);877		return -ENOTSUPP;878	}879 880	hw->clk_rate = clk_rate;881	/* SDR core timings are given in picoseconds */882	period_ps = div_u64((u64)NSEC_PER_SEC * 1000, hw->clk_rate);883 884	addr_setup_cycles = TO_CYCLES(sdr->tALS_min, period_ps);885	data_setup_cycles = TO_CYCLES(sdr->tDS_min, period_ps);886	data_hold_cycles = TO_CYCLES(sdr->tDH_min, period_ps);887	busy_timeout_ps = max(sdr->tBERS_max, sdr->tPROG_max);888	busy_timeout_cycles = TO_CYCLES(busy_timeout_ps, period_ps);889 890	hw->timing0 = BF_GPMI_TIMING0_ADDRESS_SETUP(addr_setup_cycles) |891		      BF_GPMI_TIMING0_DATA_HOLD(data_hold_cycles) |892		      BF_GPMI_TIMING0_DATA_SETUP(data_setup_cycles);893	hw->timing1 = BF_GPMI_TIMING1_BUSY_TIMEOUT(DIV_ROUND_UP(busy_timeout_cycles, 4096));894 895	/*896	 * Derive NFC ideal delay from {3}:897	 *898	 *                     (tREA + 4000 - tRP) * 8899	 *         RDN_DELAY = -----------------------900	 *                                RP901	 */902	if (period_ps > dll_threshold_ps) {903		use_half_period = true;904		reference_period_ps = period_ps / 2;905	} else {906		use_half_period = false;907		reference_period_ps = period_ps;908	}909 910	tRP_ps = data_setup_cycles * period_ps;911	sample_delay_ps = (sdr->tREA_max + 4000 - tRP_ps) * 8;912	if (sample_delay_ps > 0)913		sample_delay_factor = sample_delay_ps / reference_period_ps;914	else915		sample_delay_factor = 0;916 917	hw->ctrl1n = BF_GPMI_CTRL1_WRN_DLY_SEL(wrn_dly_sel);918	if (sample_delay_factor)919		hw->ctrl1n |= BF_GPMI_CTRL1_RDN_DELAY(sample_delay_factor) |920			      BM_GPMI_CTRL1_DLL_ENABLE |921			      (use_half_period ? BM_GPMI_CTRL1_HALF_PERIOD : 0);922	return 0;923}924 925static int gpmi_nfc_apply_timings(struct gpmi_nand_data *this)926{927	struct gpmi_nfc_hardware_timing *hw = &this->hw;928	struct resources *r = &this->resources;929	void __iomem *gpmi_regs = r->gpmi_regs;930	unsigned int dll_wait_time_us;931	int ret;932 933	/* Clock dividers do NOT guarantee a clean clock signal on its output934	 * during the change of the divide factor on i.MX6Q/UL/SX. On i.MX7/8,935	 * all clock dividers provide these guarantee.936	 */937	if (GPMI_IS_MX6Q(this) || GPMI_IS_MX6SX(this))938		clk_disable_unprepare(r->clock[0]);939 940	ret = clk_set_rate(r->clock[0], hw->clk_rate);941	if (ret) {942		dev_err(this->dev, "cannot set clock rate to %lu Hz: %d\n", hw->clk_rate, ret);943		return ret;944	}945 946	if (GPMI_IS_MX6Q(this) || GPMI_IS_MX6SX(this)) {947		ret = clk_prepare_enable(r->clock[0]);948		if (ret)949			return ret;950	}951 952	writel(hw->timing0, gpmi_regs + HW_GPMI_TIMING0);953	writel(hw->timing1, gpmi_regs + HW_GPMI_TIMING1);954 955	/*956	 * Clear several CTRL1 fields, DLL must be disabled when setting957	 * RDN_DELAY or HALF_PERIOD.958	 */959	writel(BM_GPMI_CTRL1_CLEAR_MASK, gpmi_regs + HW_GPMI_CTRL1_CLR);960	writel(hw->ctrl1n, gpmi_regs + HW_GPMI_CTRL1_SET);961 962	/* Wait 64 clock cycles before using the GPMI after enabling the DLL */963	dll_wait_time_us = USEC_PER_SEC / hw->clk_rate * 64;964	if (!dll_wait_time_us)965		dll_wait_time_us = 1;966 967	/* Wait for the DLL to settle. */968	udelay(dll_wait_time_us);969 970	return 0;971}972 973static int gpmi_setup_interface(struct nand_chip *chip, int chipnr,974				const struct nand_interface_config *conf)975{976	struct gpmi_nand_data *this = nand_get_controller_data(chip);977	const struct nand_sdr_timings *sdr;978	int ret;979 980	/* Retrieve required NAND timings */981	sdr = nand_get_sdr_timings(conf);982	if (IS_ERR(sdr))983		return PTR_ERR(sdr);984 985	/* Only MX28/MX6 GPMI controller can reach EDO timings */986	if (sdr->tRC_min <= 25000 && !this->devdata->support_edo_timing)987		return -ENOTSUPP;988 989	/* Stop here if this call was just a check */990	if (chipnr < 0)991		return 0;992 993	/* Do the actual derivation of the controller timings */994	ret = gpmi_nfc_compute_timings(this, sdr);995	if (ret)996		return ret;997 998	this->hw.must_apply_timings = true;999 1000	return 0;1001}1002 1003/* Clears a BCH interrupt. */1004static void gpmi_clear_bch(struct gpmi_nand_data *this)1005{1006	struct resources *r = &this->resources;1007	writel(BM_BCH_CTRL_COMPLETE_IRQ, r->bch_regs + HW_BCH_CTRL_CLR);1008}1009 1010static struct dma_chan *get_dma_chan(struct gpmi_nand_data *this)1011{1012	/* We use the DMA channel 0 to access all the nand chips. */1013	return this->dma_chans[0];1014}1015 1016/* This will be called after the DMA operation is finished. */1017static void dma_irq_callback(void *param)1018{1019	struct gpmi_nand_data *this = param;1020	struct completion *dma_c = &this->dma_done;1021 1022	complete(dma_c);1023}1024 1025static irqreturn_t bch_irq(int irq, void *cookie)1026{1027	struct gpmi_nand_data *this = cookie;1028 1029	gpmi_clear_bch(this);1030	complete(&this->bch_done);1031	return IRQ_HANDLED;1032}1033 1034static int gpmi_raw_len_to_len(struct gpmi_nand_data *this, int raw_len)1035{1036	/*1037	 * raw_len is the length to read/write including bch data which1038	 * we are passed in exec_op. Calculate the data length from it.1039	 */1040	if (this->bch)1041		return ALIGN_DOWN(raw_len, this->bch_geometry.eccn_chunk_size);1042	else1043		return raw_len;1044}1045 1046/* Can we use the upper's buffer directly for DMA? */1047static bool prepare_data_dma(struct gpmi_nand_data *this, const void *buf,1048			     int raw_len, struct scatterlist *sgl,1049			     enum dma_data_direction dr)1050{1051	int ret;1052	int len = gpmi_raw_len_to_len(this, raw_len);1053 1054	/* first try to map the upper buffer directly */1055	if (virt_addr_valid(buf) && !object_is_on_stack(buf)) {1056		sg_init_one(sgl, buf, len);1057		ret = dma_map_sg(this->dev, sgl, 1, dr);1058		if (ret == 0)1059			goto map_fail;1060 1061		return true;1062	}1063 1064map_fail:1065	/* We have to use our own DMA buffer. */1066	sg_init_one(sgl, this->data_buffer_dma, len);1067 1068	if (dr == DMA_TO_DEVICE && buf != this->data_buffer_dma)1069		memcpy(this->data_buffer_dma, buf, len);1070 1071	dma_map_sg(this->dev, sgl, 1, dr);1072 1073	return false;1074}1075 1076/* add our owner bbt descriptor */1077static uint8_t scan_ff_pattern[] = { 0xff };1078static struct nand_bbt_descr gpmi_bbt_descr = {1079	.options	= 0,1080	.offs		= 0,1081	.len		= 1,1082	.pattern	= scan_ff_pattern1083};1084 1085/*1086 * We may change the layout if we can get the ECC info from the datasheet,1087 * else we will use all the (page + OOB).1088 */1089static int gpmi_ooblayout_ecc(struct mtd_info *mtd, int section,1090			      struct mtd_oob_region *oobregion)1091{1092	struct nand_chip *chip = mtd_to_nand(mtd);1093	struct gpmi_nand_data *this = nand_get_controller_data(chip);1094	struct bch_geometry *geo = &this->bch_geometry;1095 1096	if (section)1097		return -ERANGE;1098 1099	oobregion->offset = 0;1100	oobregion->length = geo->page_size - mtd->writesize;1101 1102	return 0;1103}1104 1105static int gpmi_ooblayout_free(struct mtd_info *mtd, int section,1106			       struct mtd_oob_region *oobregion)1107{1108	struct nand_chip *chip = mtd_to_nand(mtd);1109	struct gpmi_nand_data *this = nand_get_controller_data(chip);1110	struct bch_geometry *geo = &this->bch_geometry;1111 1112	if (section)1113		return -ERANGE;1114 1115	/* The available oob size we have. */1116	if (geo->page_size < mtd->writesize + mtd->oobsize) {1117		oobregion->offset = geo->page_size - mtd->writesize;1118		oobregion->length = mtd->oobsize - oobregion->offset;1119	}1120 1121	return 0;1122}1123 1124static const char * const gpmi_clks_for_mx2x[] = {1125	"gpmi_io",1126};1127 1128static const struct mtd_ooblayout_ops gpmi_ooblayout_ops = {1129	.ecc = gpmi_ooblayout_ecc,1130	.free = gpmi_ooblayout_free,1131};1132 1133static const struct gpmi_devdata gpmi_devdata_imx23 = {1134	.type = IS_MX23,1135	.bch_max_ecc_strength = 20,1136	.max_chain_delay = 16000,1137	.clks = gpmi_clks_for_mx2x,1138	.clks_count = ARRAY_SIZE(gpmi_clks_for_mx2x),1139};1140 1141static const struct gpmi_devdata gpmi_devdata_imx28 = {1142	.type = IS_MX28,1143	.bch_max_ecc_strength = 20,1144	.max_chain_delay = 16000,1145	.support_edo_timing = true,1146	.clks = gpmi_clks_for_mx2x,1147	.clks_count = ARRAY_SIZE(gpmi_clks_for_mx2x),1148};1149 1150static const char * const gpmi_clks_for_mx6[] = {1151	"gpmi_io", "gpmi_apb", "gpmi_bch", "gpmi_bch_apb", "per1_bch",1152};1153 1154static const struct gpmi_devdata gpmi_devdata_imx6q = {1155	.type = IS_MX6Q,1156	.bch_max_ecc_strength = 40,1157	.max_chain_delay = 12000,1158	.support_edo_timing = true,1159	.clks = gpmi_clks_for_mx6,1160	.clks_count = ARRAY_SIZE(gpmi_clks_for_mx6),1161};1162 1163static const struct gpmi_devdata gpmi_devdata_imx6sx = {1164	.type = IS_MX6SX,1165	.bch_max_ecc_strength = 62,1166	.max_chain_delay = 12000,1167	.support_edo_timing = true,1168	.clks = gpmi_clks_for_mx6,1169	.clks_count = ARRAY_SIZE(gpmi_clks_for_mx6),1170};1171 1172static const char * const gpmi_clks_for_mx7d[] = {1173	"gpmi_io", "gpmi_bch_apb",1174};1175 1176static const struct gpmi_devdata gpmi_devdata_imx7d = {1177	.type = IS_MX7D,1178	.bch_max_ecc_strength = 62,1179	.max_chain_delay = 12000,1180	.support_edo_timing = true,1181	.clks = gpmi_clks_for_mx7d,1182	.clks_count = ARRAY_SIZE(gpmi_clks_for_mx7d),1183};1184 1185static const char *gpmi_clks_for_mx8qxp[GPMI_CLK_MAX] = {1186	"gpmi_io", "gpmi_apb", "gpmi_bch", "gpmi_bch_apb",1187};1188 1189static const struct gpmi_devdata gpmi_devdata_imx8qxp = {1190	.type = IS_MX8QXP,1191	.bch_max_ecc_strength = 62,1192	.max_chain_delay = 12000,1193	.support_edo_timing = true,1194	.clks = gpmi_clks_for_mx8qxp,1195	.clks_count = ARRAY_SIZE(gpmi_clks_for_mx8qxp),1196};1197 1198static int acquire_register_block(struct gpmi_nand_data *this,1199				  const char *res_name)1200{1201	struct platform_device *pdev = this->pdev;1202	struct resources *res = &this->resources;1203	void __iomem *p;1204 1205	p = devm_platform_ioremap_resource_byname(pdev, res_name);1206	if (IS_ERR(p))1207		return PTR_ERR(p);1208 1209	if (!strcmp(res_name, GPMI_NAND_GPMI_REGS_ADDR_RES_NAME))1210		res->gpmi_regs = p;1211	else if (!strcmp(res_name, GPMI_NAND_BCH_REGS_ADDR_RES_NAME))1212		res->bch_regs = p;1213	else1214		dev_err(this->dev, "unknown resource name : %s\n", res_name);1215 1216	return 0;1217}1218 1219static int acquire_bch_irq(struct gpmi_nand_data *this, irq_handler_t irq_h)1220{1221	struct platform_device *pdev = this->pdev;1222	const char *res_name = GPMI_NAND_BCH_INTERRUPT_RES_NAME;1223	int err;1224 1225	err = platform_get_irq_byname(pdev, res_name);1226	if (err < 0)1227		return err;1228 1229	err = devm_request_irq(this->dev, err, irq_h, 0, res_name, this);1230	if (err)1231		dev_err(this->dev, "error requesting BCH IRQ\n");1232 1233	return err;1234}1235 1236static void release_dma_channels(struct gpmi_nand_data *this)1237{1238	unsigned int i;1239	for (i = 0; i < DMA_CHANS; i++)1240		if (this->dma_chans[i]) {1241			dma_release_channel(this->dma_chans[i]);1242			this->dma_chans[i] = NULL;1243		}1244}1245 1246static int acquire_dma_channels(struct gpmi_nand_data *this)1247{1248	struct platform_device *pdev = this->pdev;1249	struct dma_chan *dma_chan;1250	int ret = 0;1251 1252	/* request dma channel */1253	dma_chan = dma_request_chan(&pdev->dev, "rx-tx");1254	if (IS_ERR(dma_chan)) {1255		ret = dev_err_probe(this->dev, PTR_ERR(dma_chan),1256				    "DMA channel request failed\n");1257		release_dma_channels(this);1258	} else {1259		this->dma_chans[0] = dma_chan;1260	}1261 1262	return ret;1263}1264 1265static int gpmi_get_clks(struct gpmi_nand_data *this)1266{1267	struct resources *r = &this->resources;1268	struct clk *clk;1269	int err, i;1270 1271	for (i = 0; i < this->devdata->clks_count; i++) {1272		clk = devm_clk_get(this->dev, this->devdata->clks[i]);1273		if (IS_ERR(clk)) {1274			err = PTR_ERR(clk);1275			goto err_clock;1276		}1277 1278		r->clock[i] = clk;1279	}1280 1281	return 0;1282 1283err_clock:1284	dev_dbg(this->dev, "failed in finding the clocks.\n");1285	return err;1286}1287 1288static int acquire_resources(struct gpmi_nand_data *this)1289{1290	int ret;1291 1292	ret = acquire_register_block(this, GPMI_NAND_GPMI_REGS_ADDR_RES_NAME);1293	if (ret)1294		goto exit_regs;1295 1296	ret = acquire_register_block(this, GPMI_NAND_BCH_REGS_ADDR_RES_NAME);1297	if (ret)1298		goto exit_regs;1299 1300	ret = acquire_bch_irq(this, bch_irq);1301	if (ret)1302		goto exit_regs;1303 1304	ret = acquire_dma_channels(this);1305	if (ret)1306		goto exit_regs;1307 1308	ret = gpmi_get_clks(this);1309	if (ret)1310		goto exit_clock;1311	return 0;1312 1313exit_clock:1314	release_dma_channels(this);1315exit_regs:1316	return ret;1317}1318 1319static void release_resources(struct gpmi_nand_data *this)1320{1321	release_dma_channels(this);1322}1323 1324static void gpmi_free_dma_buffer(struct gpmi_nand_data *this)1325{1326	struct device *dev = this->dev;1327	struct bch_geometry *geo = &this->bch_geometry;1328 1329	if (this->auxiliary_virt && virt_addr_valid(this->auxiliary_virt))1330		dma_free_coherent(dev, geo->auxiliary_size,1331					this->auxiliary_virt,1332					this->auxiliary_phys);1333	kfree(this->data_buffer_dma);1334	kfree(this->raw_buffer);1335 1336	this->data_buffer_dma	= NULL;1337	this->raw_buffer	= NULL;1338}1339 1340/* Allocate the DMA buffers */1341static int gpmi_alloc_dma_buffer(struct gpmi_nand_data *this)1342{1343	struct bch_geometry *geo = &this->bch_geometry;1344	struct device *dev = this->dev;1345	struct mtd_info *mtd = nand_to_mtd(&this->nand);1346 1347	/*1348	 * [2] Allocate a read/write data buffer.1349	 *     The gpmi_alloc_dma_buffer can be called twice.1350	 *     We allocate a PAGE_SIZE length buffer if gpmi_alloc_dma_buffer1351	 *     is called before the NAND identification; and we allocate a1352	 *     buffer of the real NAND page size when the gpmi_alloc_dma_buffer1353	 *     is called after.1354	 */1355	this->data_buffer_dma = kzalloc(mtd->writesize ?: PAGE_SIZE,1356					GFP_DMA | GFP_KERNEL);1357	if (this->data_buffer_dma == NULL)1358		goto error_alloc;1359 1360	this->auxiliary_virt = dma_alloc_coherent(dev, geo->auxiliary_size,1361					&this->auxiliary_phys, GFP_DMA);1362	if (!this->auxiliary_virt)1363		goto error_alloc;1364 1365	this->raw_buffer = kzalloc((mtd->writesize ?: PAGE_SIZE) + mtd->oobsize, GFP_KERNEL);1366	if (!this->raw_buffer)1367		goto error_alloc;1368 1369	return 0;1370 1371error_alloc:1372	gpmi_free_dma_buffer(this);1373	return -ENOMEM;1374}1375 1376/*1377 * Handles block mark swapping.1378 * It can be called in swapping the block mark, or swapping it back,1379 * because the operations are the same.1380 */1381static void block_mark_swapping(struct gpmi_nand_data *this,1382				void *payload, void *auxiliary)1383{1384	struct bch_geometry *nfc_geo = &this->bch_geometry;1385	unsigned char *p;1386	unsigned char *a;1387	unsigned int  bit;1388	unsigned char mask;1389	unsigned char from_data;1390	unsigned char from_oob;1391 1392	if (!this->swap_block_mark)1393		return;1394 1395	/*1396	 * If control arrives here, we're swapping. Make some convenience1397	 * variables.1398	 */1399	bit = nfc_geo->block_mark_bit_offset;1400	p   = payload + nfc_geo->block_mark_byte_offset;1401	a   = auxiliary;1402 1403	/*1404	 * Get the byte from the data area that overlays the block mark. Since1405	 * the ECC engine applies its own view to the bits in the page, the1406	 * physical block mark won't (in general) appear on a byte boundary in1407	 * the data.1408	 */1409	from_data = (p[0] >> bit) | (p[1] << (8 - bit));1410 1411	/* Get the byte from the OOB. */1412	from_oob = a[0];1413 1414	/* Swap them. */1415	a[0] = from_data;1416 1417	mask = (0x1 << bit) - 1;1418	p[0] = (p[0] & mask) | (from_oob << bit);1419 1420	mask = ~0 << bit;1421	p[1] = (p[1] & mask) | (from_oob >> (8 - bit));1422}1423 1424static int gpmi_count_bitflips(struct nand_chip *chip, void *buf, int first,1425			       int last, int meta)1426{1427	struct gpmi_nand_data *this = nand_get_controller_data(chip);1428	struct bch_geometry *nfc_geo = &this->bch_geometry;1429	struct mtd_info *mtd = nand_to_mtd(chip);1430	int i;1431	unsigned char *status;1432	unsigned int max_bitflips = 0;1433 1434	/* Loop over status bytes, accumulating ECC status. */1435	status = this->auxiliary_virt + ALIGN(meta, 4);1436 1437	for (i = first; i < last; i++, status++) {1438		if ((*status == STATUS_GOOD) || (*status == STATUS_ERASED))1439			continue;1440 1441		if (*status == STATUS_UNCORRECTABLE) {1442			int eccbits = nfc_geo->ecc_strength * nfc_geo->gf_len;1443			u8 *eccbuf = this->raw_buffer;1444			int offset, bitoffset;1445			int eccbytes;1446			int flips;1447 1448			/* Read ECC bytes into our internal raw_buffer */1449			offset = nfc_geo->metadata_size * 8;1450			offset += ((8 * nfc_geo->eccn_chunk_size) + eccbits) * (i + 1);1451			offset -= eccbits;1452			bitoffset = offset % 8;1453			eccbytes = DIV_ROUND_UP(offset + eccbits, 8);1454			offset /= 8;1455			eccbytes -= offset;1456			nand_change_read_column_op(chip, offset, eccbuf,1457						   eccbytes, false);1458 1459			/*1460			 * ECC data are not byte aligned and we may have1461			 * in-band data in the first and last byte of1462			 * eccbuf. Set non-eccbits to one so that1463			 * nand_check_erased_ecc_chunk() does not count them1464			 * as bitflips.1465			 */1466			if (bitoffset)1467				eccbuf[0] |= GENMASK(bitoffset - 1, 0);1468 1469			bitoffset = (bitoffset + eccbits) % 8;1470			if (bitoffset)1471				eccbuf[eccbytes - 1] |= GENMASK(7, bitoffset);1472 1473			/*1474			 * The ECC hardware has an uncorrectable ECC status1475			 * code in case we have bitflips in an erased page. As1476			 * nothing was written into this subpage the ECC is1477			 * obviously wrong and we can not trust it. We assume1478			 * at this point that we are reading an erased page and1479			 * try to correct the bitflips in buffer up to1480			 * ecc_strength bitflips. If this is a page with random1481			 * data, we exceed this number of bitflips and have a1482			 * ECC failure. Otherwise we use the corrected buffer.1483			 */1484			if (i == 0) {1485				/* The first block includes metadata */1486				flips = nand_check_erased_ecc_chunk(1487						buf + i * nfc_geo->eccn_chunk_size,1488						nfc_geo->eccn_chunk_size,1489						eccbuf, eccbytes,1490						this->auxiliary_virt,1491						nfc_geo->metadata_size,1492						nfc_geo->ecc_strength);1493			} else {1494				flips = nand_check_erased_ecc_chunk(1495						buf + i * nfc_geo->eccn_chunk_size,1496						nfc_geo->eccn_chunk_size,1497						eccbuf, eccbytes,1498						NULL, 0,1499						nfc_geo->ecc_strength);1500			}1501 1502			if (flips > 0) {1503				max_bitflips = max_t(unsigned int, max_bitflips,1504						     flips);1505				mtd->ecc_stats.corrected += flips;1506				continue;1507			}1508 1509			mtd->ecc_stats.failed++;1510			continue;1511		}1512 1513		mtd->ecc_stats.corrected += *status;1514		max_bitflips = max_t(unsigned int, max_bitflips, *status);1515	}1516 1517	return max_bitflips;1518}1519 1520static void gpmi_bch_layout_std(struct gpmi_nand_data *this)1521{1522	struct bch_geometry *geo = &this->bch_geometry;1523	unsigned int ecc_strength = geo->ecc_strength >> 1;1524	unsigned int gf_len = geo->gf_len;1525	unsigned int block0_size = geo->ecc0_chunk_size;1526	unsigned int blockn_size = geo->eccn_chunk_size;1527 1528	this->bch_flashlayout0 =1529		BF_BCH_FLASH0LAYOUT0_NBLOCKS(geo->ecc_chunk_count - 1) |1530		BF_BCH_FLASH0LAYOUT0_META_SIZE(geo->metadata_size) |1531		BF_BCH_FLASH0LAYOUT0_ECC0(ecc_strength, this) |1532		BF_BCH_FLASH0LAYOUT0_GF(gf_len, this) |1533		BF_BCH_FLASH0LAYOUT0_DATA0_SIZE(block0_size, this);1534 1535	this->bch_flashlayout1 =1536		BF_BCH_FLASH0LAYOUT1_PAGE_SIZE(geo->page_size) |1537		BF_BCH_FLASH0LAYOUT1_ECCN(ecc_strength, this) |1538		BF_BCH_FLASH0LAYOUT1_GF(gf_len, this) |1539		BF_BCH_FLASH0LAYOUT1_DATAN_SIZE(blockn_size, this);1540}1541 1542static int gpmi_ecc_read_page(struct nand_chip *chip, uint8_t *buf,1543			      int oob_required, int page)1544{1545	struct gpmi_nand_data *this = nand_get_controller_data(chip);1546	struct mtd_info *mtd = nand_to_mtd(chip);1547	struct bch_geometry *geo = &this->bch_geometry;1548	unsigned int max_bitflips;1549	int ret;1550 1551	gpmi_bch_layout_std(this);1552	this->bch = true;1553 1554	ret = nand_read_page_op(chip, page, 0, buf, geo->page_size);1555	if (ret)1556		return ret;1557 1558	max_bitflips = gpmi_count_bitflips(chip, buf, 0,1559					   geo->ecc_chunk_count,1560					   geo->auxiliary_status_offset);1561 1562	/* handle the block mark swapping */1563	block_mark_swapping(this, buf, this->auxiliary_virt);1564 1565	if (oob_required) {1566		/*1567		 * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob()1568		 * for details about our policy for delivering the OOB.1569		 *1570		 * We fill the caller's buffer with set bits, and then copy the1571		 * block mark to th caller's buffer. Note that, if block mark1572		 * swapping was necessary, it has already been done, so we can1573		 * rely on the first byte of the auxiliary buffer to contain1574		 * the block mark.1575		 */1576		memset(chip->oob_poi, ~0, mtd->oobsize);1577		chip->oob_poi[0] = ((uint8_t *)this->auxiliary_virt)[0];1578	}1579 1580	return max_bitflips;1581}1582 1583/* Fake a virtual small page for the subpage read */1584static int gpmi_ecc_read_subpage(struct nand_chip *chip, uint32_t offs,1585				 uint32_t len, uint8_t *buf, int page)1586{1587	struct gpmi_nand_data *this = nand_get_controller_data(chip);1588	struct bch_geometry *geo = &this->bch_geometry;1589	int size = chip->ecc.size; /* ECC chunk size */1590	int meta, n, page_size;1591	unsigned int max_bitflips;1592	unsigned int ecc_strength;1593	int first, last, marker_pos;1594	int ecc_parity_size;1595	int col = 0;1596	int ret;1597 1598	/* The size of ECC parity */1599	ecc_parity_size = geo->gf_len * geo->ecc_strength / 8;1600 1601	/* Align it with the chunk size */1602	first = offs / size;1603	last = (offs + len - 1) / size;1604 1605	if (this->swap_block_mark) {1606		/*1607		 * Find the chunk which contains the Block Marker.1608		 * If this chunk is in the range of [first, last],1609		 * we have to read out the whole page.1610		 * Why? since we had swapped the data at the position of Block1611		 * Marker to the metadata which is bound with the chunk 0.1612		 */1613		marker_pos = geo->block_mark_byte_offset / size;1614		if (last >= marker_pos && first <= marker_pos) {1615			dev_dbg(this->dev,1616				"page:%d, first:%d, last:%d, marker at:%d\n",1617				page, first, last, marker_pos);1618			return gpmi_ecc_read_page(chip, buf, 0, page);1619		}1620	}1621 1622	/*1623	 * if there is an ECC dedicate for meta:1624	 * - need to add an extra ECC size when calculating col and page_size,1625	 *   if the meta size is NOT zero.1626	 * - ecc0_chunk size need to set to the same size as other chunks,1627	 *   if the meta size is zero.1628	 */1629 1630	meta = geo->metadata_size;1631	if (first) {1632		if (geo->ecc_for_meta)1633			col = meta + ecc_parity_size1634				+ (size + ecc_parity_size) * first;1635		else1636			col = meta + (size + ecc_parity_size) * first;1637 1638		meta = 0;1639		buf = buf + first * size;1640	}1641 1642	ecc_parity_size = geo->gf_len * geo->ecc_strength / 8;1643	n = last - first + 1;1644 1645	if (geo->ecc_for_meta && meta)1646		page_size = meta + ecc_parity_size1647			    + (size + ecc_parity_size) * n;1648	else1649		page_size = meta + (size + ecc_parity_size) * n;1650 1651	ecc_strength = geo->ecc_strength >> 1;1652 1653	this->bch_flashlayout0 = BF_BCH_FLASH0LAYOUT0_NBLOCKS(1654		(geo->ecc_for_meta ? n : n - 1)) |1655		BF_BCH_FLASH0LAYOUT0_META_SIZE(meta) |1656		BF_BCH_FLASH0LAYOUT0_ECC0(ecc_strength, this) |1657		BF_BCH_FLASH0LAYOUT0_GF(geo->gf_len, this) |1658		BF_BCH_FLASH0LAYOUT0_DATA0_SIZE((geo->ecc_for_meta ?1659		0 : geo->ecc0_chunk_size), this);1660 1661	this->bch_flashlayout1 = BF_BCH_FLASH0LAYOUT1_PAGE_SIZE(page_size) |1662		BF_BCH_FLASH0LAYOUT1_ECCN(ecc_strength, this) |1663		BF_BCH_FLASH0LAYOUT1_GF(geo->gf_len, this) |1664		BF_BCH_FLASH0LAYOUT1_DATAN_SIZE(geo->eccn_chunk_size, this);1665 1666	this->bch = true;1667 1668	ret = nand_read_page_op(chip, page, col, buf, page_size);1669	if (ret)1670		return ret;1671 1672	dev_dbg(this->dev, "page:%d(%d:%d)%d, chunk:(%d:%d), BCH PG size:%d\n",1673		page, offs, len, col, first, n, page_size);1674 1675	max_bitflips = gpmi_count_bitflips(chip, buf, first, last, meta);1676 1677	return max_bitflips;1678}1679 1680static int gpmi_ecc_write_page(struct nand_chip *chip, const uint8_t *buf,1681			       int oob_required, int page)1682{1683	struct mtd_info *mtd = nand_to_mtd(chip);1684	struct gpmi_nand_data *this = nand_get_controller_data(chip);1685	struct bch_geometry *nfc_geo = &this->bch_geometry;1686 1687	dev_dbg(this->dev, "ecc write page.\n");1688 1689	gpmi_bch_layout_std(this);1690	this->bch = true;1691 1692	memcpy(this->auxiliary_virt, chip->oob_poi, nfc_geo->auxiliary_size);1693 1694	if (this->swap_block_mark) {1695		/*1696		 * When doing bad block marker swapping we must always copy the1697		 * input buffer as we can't modify the const buffer.1698		 */1699		memcpy(this->data_buffer_dma, buf, mtd->writesize);1700		buf = this->data_buffer_dma;1701		block_mark_swapping(this, this->data_buffer_dma,1702				    this->auxiliary_virt);1703	}1704 1705	return nand_prog_page_op(chip, page, 0, buf, nfc_geo->page_size);1706}1707 1708/*1709 * There are several places in this driver where we have to handle the OOB and1710 * block marks. This is the function where things are the most complicated, so1711 * this is where we try to explain it all. All the other places refer back to1712 * here.1713 *1714 * These are the rules, in order of decreasing importance:1715 *1716 * 1) Nothing the caller does can be allowed to imperil the block mark.1717 *1718 * 2) In read operations, the first byte of the OOB we return must reflect the1719 *    true state of the block mark, no matter where that block mark appears in1720 *    the physical page.1721 *1722 * 3) ECC-based read operations return an OOB full of set bits (since we never1723 *    allow ECC-based writes to the OOB, it doesn't matter what ECC-based reads1724 *    return).1725 *1726 * 4) "Raw" read operations return a direct view of the physical bytes in the1727 *    page, using the conventional definition of which bytes are data and which1728 *    are OOB. This gives the caller a way to see the actual, physical bytes1729 *    in the page, without the distortions applied by our ECC engine.1730 *1731 *1732 * What we do for this specific read operation depends on two questions:1733 *1734 * 1) Are we doing a "raw" read, or an ECC-based read?1735 *1736 * 2) Are we using block mark swapping or transcription?1737 *1738 * There are four cases, illustrated by the following Karnaugh map:1739 *1740 *                    |           Raw           |         ECC-based       |1741 *       -------------+-------------------------+-------------------------+1742 *                    | Read the conventional   |                         |1743 *                    | OOB at the end of the   |                         |1744 *       Swapping     | page and return it. It  |                         |1745 *                    | contains exactly what   |                         |1746 *                    | we want.                | Read the block mark and |1747 *       -------------+-------------------------+ return it in a buffer   |1748 *                    | Read the conventional   | full of set bits.       |1749 *                    | OOB at the end of the   |                         |1750 *                    | page and also the block |                         |1751 *       Transcribing | mark in the metadata.   |                         |1752 *                    | Copy the block mark     |                         |1753 *                    | into the first byte of  |                         |1754 *                    | the OOB.                |                         |1755 *       -------------+-------------------------+-------------------------+1756 *1757 * Note that we break rule #4 in the Transcribing/Raw case because we're not1758 * giving an accurate view of the actual, physical bytes in the page (we're1759 * overwriting the block mark). That's OK because it's more important to follow1760 * rule #2.1761 *1762 * It turns out that knowing whether we want an "ECC-based" or "raw" read is not1763 * easy. When reading a page, for example, the NAND Flash MTD code calls our1764 * ecc.read_page or ecc.read_page_raw function. Thus, the fact that MTD wants an1765 * ECC-based or raw view of the page is implicit in which function it calls1766 * (there is a similar pair of ECC-based/raw functions for writing).1767 */1768static int gpmi_ecc_read_oob(struct nand_chip *chip, int page)1769{1770	struct mtd_info *mtd = nand_to_mtd(chip);1771	struct gpmi_nand_data *this = nand_get_controller_data(chip);1772	int ret;1773 1774	/* clear the OOB buffer */1775	memset(chip->oob_poi, ~0, mtd->oobsize);1776 1777	/* Read out the conventional OOB. */1778	ret = nand_read_page_op(chip, page, mtd->writesize, chip->oob_poi,1779				mtd->oobsize);1780	if (ret)1781		return ret;1782 1783	/*1784	 * Now, we want to make sure the block mark is correct. In the1785	 * non-transcribing case (!GPMI_IS_MX23()), we already have it.1786	 * Otherwise, we need to explicitly read it.1787	 */1788	if (GPMI_IS_MX23(this)) {1789		/* Read the block mark into the first byte of the OOB buffer. */1790		ret = nand_read_page_op(chip, page, 0, chip->oob_poi, 1);1791		if (ret)1792			return ret;1793	}1794 1795	return 0;1796}1797 1798static int gpmi_ecc_write_oob(struct nand_chip *chip, int page)1799{1800	struct mtd_info *mtd = nand_to_mtd(chip);1801	struct mtd_oob_region of = { };1802 1803	/* Do we have available oob area? */1804	mtd_ooblayout_free(mtd, 0, &of);1805	if (!of.length)1806		return -EPERM;1807 1808	if (!nand_is_slc(chip))1809		return -EPERM;1810 1811	return nand_prog_page_op(chip, page, mtd->writesize + of.offset,1812				 chip->oob_poi + of.offset, of.length);1813}1814 1815/*1816 * This function reads a NAND page without involving the ECC engine (no HW1817 * ECC correction).1818 * The tricky part in the GPMI/BCH controller is that it stores ECC bits1819 * inline (interleaved with payload DATA), and do not align data chunk on1820 * byte boundaries.1821 * We thus need to take care moving the payload data and ECC bits stored in the1822 * page into the provided buffers, which is why we're using nand_extract_bits().1823 *1824 * See set_geometry_by_ecc_info inline comments to have a full description1825 * of the layout used by the GPMI controller.1826 */1827static int gpmi_ecc_read_page_raw(struct nand_chip *chip, uint8_t *buf,1828				  int oob_required, int page)1829{1830	struct mtd_info *mtd = nand_to_mtd(chip);1831	struct gpmi_nand_data *this = nand_get_controller_data(chip);1832	struct bch_geometry *nfc_geo = &this->bch_geometry;1833	int eccsize = nfc_geo->eccn_chunk_size;1834	int eccbits = nfc_geo->ecc_strength * nfc_geo->gf_len;1835	u8 *tmp_buf = this->raw_buffer;1836	size_t src_bit_off;1837	size_t oob_bit_off;1838	size_t oob_byte_off;1839	uint8_t *oob = chip->oob_poi;1840	int step;1841	int ret;1842 1843	ret = nand_read_page_op(chip, page, 0, tmp_buf,1844				mtd->writesize + mtd->oobsize);1845	if (ret)1846		return ret;1847 1848	/*1849	 * If required, swap the bad block marker and the data stored in the1850	 * metadata section, so that we don't wrongly consider a block as bad.1851	 *1852	 * See the layout description for a detailed explanation on why this1853	 * is needed.1854	 */1855	if (this->swap_block_mark)1856		swap(tmp_buf[0], tmp_buf[mtd->writesize]);1857 1858	/*1859	 * Copy the metadata section into the oob buffer (this section is1860	 * guaranteed to be aligned on a byte boundary).1861	 */1862	if (oob_required)1863		memcpy(oob, tmp_buf, nfc_geo->metadata_size);1864 1865	oob_bit_off = nfc_geo->metadata_size * 8;1866	src_bit_off = oob_bit_off;1867 1868	/* Extract interleaved payload data and ECC bits */1869	for (step = 0; step < nfc_geo->ecc_chunk_count; step++) {1870		if (buf)1871			nand_extract_bits(buf, step * eccsize * 8, tmp_buf,1872					  src_bit_off, eccsize * 8);1873		src_bit_off += eccsize * 8;1874 1875		/* Align last ECC block to align a byte boundary */1876		if (step == nfc_geo->ecc_chunk_count - 1 &&1877		    (oob_bit_off + eccbits) % 8)1878			eccbits += 8 - ((oob_bit_off + eccbits) % 8);1879 1880		if (oob_required)1881			nand_extract_bits(oob, oob_bit_off, tmp_buf,1882					  src_bit_off, eccbits);1883 1884		src_bit_off += eccbits;1885		oob_bit_off += eccbits;1886	}1887 1888	if (oob_required) {1889		oob_byte_off = oob_bit_off / 8;1890 1891		if (oob_byte_off < mtd->oobsize)1892			memcpy(oob + oob_byte_off,1893			       tmp_buf + mtd->writesize + oob_byte_off,1894			       mtd->oobsize - oob_byte_off);1895	}1896 1897	return 0;1898}1899 1900/*1901 * This function writes a NAND page without involving the ECC engine (no HW1902 * ECC generation).1903 * The tricky part in the GPMI/BCH controller is that it stores ECC bits1904 * inline (interleaved with payload DATA), and do not align data chunk on1905 * byte boundaries.1906 * We thus need to take care moving the OOB area at the right place in the1907 * final page, which is why we're using nand_extract_bits().1908 *1909 * See set_geometry_by_ecc_info inline comments to have a full description1910 * of the layout used by the GPMI controller.1911 */1912static int gpmi_ecc_write_page_raw(struct nand_chip *chip, const uint8_t *buf,1913				   int oob_required, int page)1914{1915	struct mtd_info *mtd = nand_to_mtd(chip);1916	struct gpmi_nand_data *this = nand_get_controller_data(chip);1917	struct bch_geometry *nfc_geo = &this->bch_geometry;1918	int eccsize = nfc_geo->eccn_chunk_size;1919	int eccbits = nfc_geo->ecc_strength * nfc_geo->gf_len;1920	u8 *tmp_buf = this->raw_buffer;1921	uint8_t *oob = chip->oob_poi;1922	size_t dst_bit_off;1923	size_t oob_bit_off;1924	size_t oob_byte_off;1925	int step;1926 1927	/*1928	 * Initialize all bits to 1 in case we don't have a buffer for the1929	 * payload or oob data in order to leave unspecified bits of data1930	 * to their initial state.1931	 */1932	if (!buf || !oob_required)1933		memset(tmp_buf, 0xff, mtd->writesize + mtd->oobsize);1934 1935	/*1936	 * First copy the metadata section (stored in oob buffer) at the1937	 * beginning of the page, as imposed by the GPMI layout.1938	 */1939	memcpy(tmp_buf, oob, nfc_geo->metadata_size);1940	oob_bit_off = nfc_geo->metadata_size * 8;1941	dst_bit_off = oob_bit_off;1942 1943	/* Interleave payload data and ECC bits */1944	for (step = 0; step < nfc_geo->ecc_chunk_count; step++) {1945		if (buf)1946			nand_extract_bits(tmp_buf, dst_bit_off, buf,1947					  step * eccsize * 8, eccsize * 8);1948		dst_bit_off += eccsize * 8;1949 1950		/* Align last ECC block to align a byte boundary */1951		if (step == nfc_geo->ecc_chunk_count - 1 &&1952		    (oob_bit_off + eccbits) % 8)1953			eccbits += 8 - ((oob_bit_off + eccbits) % 8);1954 1955		if (oob_required)1956			nand_extract_bits(tmp_buf, dst_bit_off, oob,1957					  oob_bit_off, eccbits);1958 1959		dst_bit_off += eccbits;1960		oob_bit_off += eccbits;1961	}1962 1963	oob_byte_off = oob_bit_off / 8;1964 1965	if (oob_required && oob_byte_off < mtd->oobsize)1966		memcpy(tmp_buf + mtd->writesize + oob_byte_off,1967		       oob + oob_byte_off, mtd->oobsize - oob_byte_off);1968 1969	/*1970	 * If required, swap the bad block marker and the first byte of the1971	 * metadata section, so that we don't modify the bad block marker.1972	 *1973	 * See the layout description for a detailed explanation on why this1974	 * is needed.1975	 */1976	if (this->swap_block_mark)1977		swap(tmp_buf[0], tmp_buf[mtd->writesize]);1978 1979	return nand_prog_page_op(chip, page, 0, tmp_buf,1980				 mtd->writesize + mtd->oobsize);1981}1982 1983static int gpmi_ecc_read_oob_raw(struct nand_chip *chip, int page)1984{1985	return gpmi_ecc_read_page_raw(chip, NULL, 1, page);1986}1987 1988static int gpmi_ecc_write_oob_raw(struct nand_chip *chip, int page)1989{1990	return gpmi_ecc_write_page_raw(chip, NULL, 1, page);1991}1992 1993static int gpmi_block_markbad(struct nand_chip *chip, loff_t ofs)1994{1995	struct mtd_info *mtd = nand_to_mtd(chip);1996	struct gpmi_nand_data *this = nand_get_controller_data(chip);1997	int ret = 0;1998	uint8_t *block_mark;1999	int column, page, chipnr;2000 2001	chipnr = (int)(ofs >> chip->chip_shift);2002	nand_select_target(chip, chipnr);2003 2004	column = !GPMI_IS_MX23(this) ? mtd->writesize : 0;2005 2006	/* Write the block mark. */2007	block_mark = this->data_buffer_dma;2008	block_mark[0] = 0; /* bad block marker */2009 2010	/* Shift to get page */2011	page = (int)(ofs >> chip->page_shift);2012 2013	ret = nand_prog_page_op(chip, page, column, block_mark, 1);2014 2015	nand_deselect_target(chip);2016 2017	return ret;2018}2019 2020static int nand_boot_set_geometry(struct gpmi_nand_data *this)2021{2022	struct boot_rom_geometry *geometry = &this->rom_geometry;2023 2024	/*2025	 * Set the boot block stride size.2026	 *2027	 * In principle, we should be reading this from the OTP bits, since2028	 * that's where the ROM is going to get it. In fact, we don't have any2029	 * way to read the OTP bits, so we go with the default and hope for the2030	 * best.2031	 */2032	geometry->stride_size_in_pages = 64;2033 2034	/*2035	 * Set the search area stride exponent.2036	 *2037	 * In principle, we should be reading this from the OTP bits, since2038	 * that's where the ROM is going to get it. In fact, we don't have any2039	 * way to read the OTP bits, so we go with the default and hope for the2040	 * best.2041	 */2042	geometry->search_area_stride_exponent = 2;2043	return 0;2044}2045 2046static const char  *fingerprint = "STMP";2047static int mx23_check_transcription_stamp(struct gpmi_nand_data *this)2048{2049	struct boot_rom_geometry *rom_geo = &this->rom_geometry;2050	struct device *dev = this->dev;2051	struct nand_chip *chip = &this->nand;2052	unsigned int search_area_size_in_strides;2053	unsigned int stride;2054	unsigned int page;2055	u8 *buffer = nand_get_data_buf(chip);2056	int found_an_ncb_fingerprint = false;2057	int ret;2058 2059	/* Compute the number of strides in a search area. */2060	search_area_size_in_strides = 1 << rom_geo->search_area_stride_exponent;2061 2062	nand_select_target(chip, 0);2063 2064	/*2065	 * Loop through the first search area, looking for the NCB fingerprint.2066	 */2067	dev_dbg(dev, "Scanning for an NCB fingerprint...\n");2068 2069	for (stride = 0; stride < search_area_size_in_strides; stride++) {2070		/* Compute the page addresses. */2071		page = stride * rom_geo->stride_size_in_pages;2072 2073		dev_dbg(dev, "Looking for a fingerprint in page 0x%x\n", page);2074 2075		/*2076		 * Read the NCB fingerprint. The fingerprint is four bytes long2077		 * and starts in the 12th byte of the page.2078		 */2079		ret = nand_read_page_op(chip, page, 12, buffer,2080					strlen(fingerprint));2081		if (ret)2082			continue;2083 2084		/* Look for the fingerprint. */2085		if (!memcmp(buffer, fingerprint, strlen(fingerprint))) {2086			found_an_ncb_fingerprint = true;2087			break;2088		}2089 2090	}2091 2092	nand_deselect_target(chip);2093 2094	if (found_an_ncb_fingerprint)2095		dev_dbg(dev, "\tFound a fingerprint\n");2096	else2097		dev_dbg(dev, "\tNo fingerprint found\n");2098	return found_an_ncb_fingerprint;2099}2100 2101/* Writes a transcription stamp. */2102static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)2103{2104	struct device *dev = this->dev;2105	struct boot_rom_geometry *rom_geo = &this->rom_geometry;2106	struct nand_chip *chip = &this->nand;2107	struct mtd_info *mtd = nand_to_mtd(chip);2108	unsigned int block_size_in_pages;2109	unsigned int search_area_size_in_strides;2110	unsigned int search_area_size_in_pages;2111	unsigned int search_area_size_in_blocks;2112	unsigned int block;2113	unsigned int stride;2114	unsigned int page;2115	u8 *buffer = nand_get_data_buf(chip);2116	int status;2117 2118	/* Compute the search area geometry. */2119	block_size_in_pages = mtd->erasesize / mtd->writesize;2120	search_area_size_in_strides = 1 << rom_geo->search_area_stride_exponent;2121	search_area_size_in_pages = search_area_size_in_strides *2122					rom_geo->stride_size_in_pages;2123	search_area_size_in_blocks =2124		  (search_area_size_in_pages + (block_size_in_pages - 1)) /2125				    block_size_in_pages;2126 2127	dev_dbg(dev, "Search Area Geometry :\n");2128	dev_dbg(dev, "\tin Blocks : %u\n", search_area_size_in_blocks);2129	dev_dbg(dev, "\tin Strides: %u\n", search_area_size_in_strides);2130	dev_dbg(dev, "\tin Pages  : %u\n", search_area_size_in_pages);2131 2132	nand_select_target(chip, 0);2133 2134	/* Loop over blocks in the first search area, erasing them. */2135	dev_dbg(dev, "Erasing the search area...\n");2136 2137	for (block = 0; block < search_area_size_in_blocks; block++) {2138		/* Erase this block. */2139		dev_dbg(dev, "\tErasing block 0x%x\n", block);2140		status = nand_erase_op(chip, block);2141		if (status)2142			dev_err(dev, "[%s] Erase failed.\n", __func__);2143	}2144 2145	/* Write the NCB fingerprint into the page buffer. */2146	memset(buffer, ~0, mtd->writesize);2147	memcpy(buffer + 12, fingerprint, strlen(fingerprint));2148 2149	/* Loop through the first search area, writing NCB fingerprints. */2150	dev_dbg(dev, "Writing NCB fingerprints...\n");2151	for (stride = 0; stride < search_area_size_in_strides; stride++) {2152		/* Compute the page addresses. */2153		page = stride * rom_geo->stride_size_in_pages;2154 2155		/* Write the first page of the current stride. */2156		dev_dbg(dev, "Writing an NCB fingerprint in page 0x%x\n", page);2157 2158		status = chip->ecc.write_page_raw(chip, buffer, 0, page);2159		if (status)2160			dev_err(dev, "[%s] Write failed.\n", __func__);2161	}2162 2163	nand_deselect_target(chip);2164 2165	return 0;2166}2167 2168static int mx23_boot_init(struct gpmi_nand_data  *this)2169{2170	struct device *dev = this->dev;2171	struct nand_chip *chip = &this->nand;2172	struct mtd_info *mtd = nand_to_mtd(chip);2173	unsigned int block_count;2174	unsigned int block;2175	int     chipnr;2176	int     page;2177	loff_t  byte;2178	uint8_t block_mark;2179	int     ret = 0;2180 2181	/*2182	 * If control arrives here, we can't use block mark swapping, which2183	 * means we're forced to use transcription. First, scan for the2184	 * transcription stamp. If we find it, then we don't have to do2185	 * anything -- the block marks are already transcribed.2186	 */2187	if (mx23_check_transcription_stamp(this))2188		return 0;2189 2190	/*2191	 * If control arrives here, we couldn't find a transcription stamp, so2192	 * so we presume the block marks are in the conventional location.2193	 */2194	dev_dbg(dev, "Transcribing bad block marks...\n");2195 2196	/* Compute the number of blocks in the entire medium. */2197	block_count = nanddev_eraseblocks_per_target(&chip->base);2198 2199	/*2200	 * Loop over all the blocks in the medium, transcribing block marks as2201	 * we go.2202	 */2203	for (block = 0; block < block_count; block++) {2204		/*2205		 * Compute the chip, page and byte addresses for this block's2206		 * conventional mark.2207		 */2208		chipnr = block >> (chip->chip_shift - chip->phys_erase_shift);2209		page = block << (chip->phys_erase_shift - chip->page_shift);2210		byte = block <<  chip->phys_erase_shift;2211 2212		/* Send the command to read the conventional block mark. */2213		nand_select_target(chip, chipnr);2214		ret = nand_read_page_op(chip, page, mtd->writesize, &block_mark,2215					1);2216		nand_deselect_target(chip);2217 2218		if (ret)2219			continue;2220 2221		/*2222		 * Check if the block is marked bad. If so, we need to mark it2223		 * again, but this time the result will be a mark in the2224		 * location where we transcribe block marks.2225		 */2226		if (block_mark != 0xff) {2227			dev_dbg(dev, "Transcribing mark in block %u\n", block);2228			ret = chip->legacy.block_markbad(chip, byte);2229			if (ret)2230				dev_err(dev,2231					"Failed to mark block bad with ret %d\n",2232					ret);2233		}2234	}2235 2236	/* Write the stamp that indicates we've transcribed the block marks. */2237	mx23_write_transcription_stamp(this);2238	return 0;2239}2240 2241static int nand_boot_init(struct gpmi_nand_data  *this)2242{2243	nand_boot_set_geometry(this);2244 2245	/* This is ROM arch-specific initilization before the BBT scanning. */2246	if (GPMI_IS_MX23(this))2247		return mx23_boot_init(this);2248	return 0;2249}2250 2251static int gpmi_set_geometry(struct gpmi_nand_data *this)2252{2253	int ret;2254 2255	/* Free the temporary DMA memory for reading ID. */2256	gpmi_free_dma_buffer(this);2257 2258	/* Set up the NFC geometry which is used by BCH. */2259	ret = bch_set_geometry(this);2260	if (ret) {2261		dev_err(this->dev, "Error setting BCH geometry : %d\n", ret);2262		return ret;2263	}2264 2265	/* Alloc the new DMA buffers according to the pagesize and oobsize */2266	return gpmi_alloc_dma_buffer(this);2267}2268 2269static int gpmi_init_last(struct gpmi_nand_data *this)2270{2271	struct nand_chip *chip = &this->nand;2272	struct mtd_info *mtd = nand_to_mtd(chip);2273	struct nand_ecc_ctrl *ecc = &chip->ecc;2274	struct bch_geometry *bch_geo = &this->bch_geometry;2275	int ret;2276 2277	/* Set up the medium geometry */2278	ret = gpmi_set_geometry(this);2279	if (ret)2280		return ret;2281 2282	/* Init the nand_ecc_ctrl{} */2283	ecc->read_page	= gpmi_ecc_read_page;2284	ecc->write_page	= gpmi_ecc_write_page;2285	ecc->read_oob	= gpmi_ecc_read_oob;2286	ecc->write_oob	= gpmi_ecc_write_oob;2287	ecc->read_page_raw = gpmi_ecc_read_page_raw;2288	ecc->write_page_raw = gpmi_ecc_write_page_raw;2289	ecc->read_oob_raw = gpmi_ecc_read_oob_raw;2290	ecc->write_oob_raw = gpmi_ecc_write_oob_raw;2291	ecc->engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;2292	ecc->size	= bch_geo->eccn_chunk_size;2293	ecc->strength	= bch_geo->ecc_strength;2294	mtd_set_ooblayout(mtd, &gpmi_ooblayout_ops);2295 2296	/*2297	 * We only enable the subpage read when:2298	 *  (1) the chip is imx6, and2299	 *  (2) the size of the ECC parity is byte aligned.2300	 */2301	if (GPMI_IS_MX6(this) &&2302		((bch_geo->gf_len * bch_geo->ecc_strength) % 8) == 0) {2303		ecc->read_subpage = gpmi_ecc_read_subpage;2304		chip->options |= NAND_SUBPAGE_READ;2305	}2306 2307	return 0;2308}2309 2310static int gpmi_nand_attach_chip(struct nand_chip *chip)2311{2312	struct gpmi_nand_data *this = nand_get_controller_data(chip);2313	int ret;2314 2315	if (chip->bbt_options & NAND_BBT_USE_FLASH) {2316		chip->bbt_options |= NAND_BBT_NO_OOB;2317 2318		if (of_property_read_bool(this->dev->of_node,2319					  "fsl,no-blockmark-swap"))2320			this->swap_block_mark = false;2321	}2322	dev_dbg(this->dev, "Blockmark swapping %sabled\n",2323		this->swap_block_mark ? "en" : "dis");2324 2325	ret = gpmi_init_last(this);2326	if (ret)2327		return ret;2328 2329	chip->options |= NAND_SKIP_BBTSCAN;2330 2331	return 0;2332}2333 2334static struct gpmi_transfer *get_next_transfer(struct gpmi_nand_data *this)2335{2336	struct gpmi_transfer *transfer = &this->transfers[this->ntransfers];2337 2338	this->ntransfers++;2339 2340	if (this->ntransfers == GPMI_MAX_TRANSFERS)2341		return NULL;2342 2343	return transfer;2344}2345 2346static struct dma_async_tx_descriptor *gpmi_chain_command(2347	struct gpmi_nand_data *this, u8 cmd, const u8 *addr, int naddr)2348{2349	struct dma_chan *channel = get_dma_chan(this);2350	struct dma_async_tx_descriptor *desc;2351	struct gpmi_transfer *transfer;2352	int chip = this->nand.cur_cs;2353	u32 pio[3];2354 2355	/* [1] send out the PIO words */2356	pio[0] = BF_GPMI_CTRL0_COMMAND_MODE(BV_GPMI_CTRL0_COMMAND_MODE__WRITE)2357		| BM_GPMI_CTRL0_WORD_LENGTH2358		| BF_GPMI_CTRL0_CS(chip, this)2359		| BF_GPMI_CTRL0_LOCK_CS(LOCK_CS_ENABLE, this)2360		| BF_GPMI_CTRL0_ADDRESS(BV_GPMI_CTRL0_ADDRESS__NAND_CLE)2361		| BM_GPMI_CTRL0_ADDRESS_INCREMENT2362		| BF_GPMI_CTRL0_XFER_COUNT(naddr + 1);2363	pio[1] = 0;2364	pio[2] = 0;2365	desc = mxs_dmaengine_prep_pio(channel, pio, ARRAY_SIZE(pio),2366				      DMA_TRANS_NONE, 0);2367	if (!desc)2368		return NULL;2369 2370	transfer = get_next_transfer(this);2371	if (!transfer)2372		return NULL;2373 2374	transfer->cmdbuf[0] = cmd;2375	if (naddr)2376		memcpy(&transfer->cmdbuf[1], addr, naddr);2377 2378	sg_init_one(&transfer->sgl, transfer->cmdbuf, naddr + 1);2379	dma_map_sg(this->dev, &transfer->sgl, 1, DMA_TO_DEVICE);2380 2381	transfer->direction = DMA_TO_DEVICE;2382 2383	desc = dmaengine_prep_slave_sg(channel, &transfer->sgl, 1, DMA_MEM_TO_DEV,2384				       MXS_DMA_CTRL_WAIT4END);2385	return desc;2386}2387 2388static struct dma_async_tx_descriptor *gpmi_chain_wait_ready(2389	struct gpmi_nand_data *this)2390{2391	struct dma_chan *channel = get_dma_chan(this);2392	u32 pio[2];2393 2394	pio[0] =  BF_GPMI_CTRL0_COMMAND_MODE(BV_GPMI_CTRL0_COMMAND_MODE__WAIT_FOR_READY)2395		| BM_GPMI_CTRL0_WORD_LENGTH2396		| BF_GPMI_CTRL0_CS(this->nand.cur_cs, this)2397		| BF_GPMI_CTRL0_LOCK_CS(LOCK_CS_ENABLE, this)2398		| BF_GPMI_CTRL0_ADDRESS(BV_GPMI_CTRL0_ADDRESS__NAND_DATA)2399		| BF_GPMI_CTRL0_XFER_COUNT(0);2400	pio[1] = 0;2401 2402	return mxs_dmaengine_prep_pio(channel, pio, 2, DMA_TRANS_NONE,2403				MXS_DMA_CTRL_WAIT4END | MXS_DMA_CTRL_WAIT4RDY);2404}2405 2406static struct dma_async_tx_descriptor *gpmi_chain_data_read(2407	struct gpmi_nand_data *this, void *buf, int raw_len, bool *direct)2408{2409	struct dma_async_tx_descriptor *desc;2410	struct dma_chan *channel = get_dma_chan(this);2411	struct gpmi_transfer *transfer;2412	u32 pio[6] = {};2413 2414	transfer = get_next_transfer(this);2415	if (!transfer)2416		return NULL;2417 2418	transfer->direction = DMA_FROM_DEVICE;2419 2420	*direct = prepare_data_dma(this, buf, raw_len, &transfer->sgl,2421				   DMA_FROM_DEVICE);2422 2423	pio[0] =  BF_GPMI_CTRL0_COMMAND_MODE(BV_GPMI_CTRL0_COMMAND_MODE__READ)2424		| BM_GPMI_CTRL0_WORD_LENGTH2425		| BF_GPMI_CTRL0_CS(this->nand.cur_cs, this)2426		| BF_GPMI_CTRL0_LOCK_CS(LOCK_CS_ENABLE, this)2427		| BF_GPMI_CTRL0_ADDRESS(BV_GPMI_CTRL0_ADDRESS__NAND_DATA)2428		| BF_GPMI_CTRL0_XFER_COUNT(raw_len);2429 2430	if (this->bch) {2431		pio[2] =  BM_GPMI_ECCCTRL_ENABLE_ECC2432			| BF_GPMI_ECCCTRL_ECC_CMD(BV_GPMI_ECCCTRL_ECC_CMD__BCH_DECODE)2433			| BF_GPMI_ECCCTRL_BUFFER_MASK(BV_GPMI_ECCCTRL_BUFFER_MASK__BCH_PAGE2434				| BV_GPMI_ECCCTRL_BUFFER_MASK__BCH_AUXONLY);2435		pio[3] = raw_len;2436		pio[4] = transfer->sgl.dma_address;2437		pio[5] = this->auxiliary_phys;2438	}2439 2440	desc = mxs_dmaengine_prep_pio(channel, pio, ARRAY_SIZE(pio),2441				      DMA_TRANS_NONE, 0);2442	if (!desc)2443		return NULL;2444 2445	if (!this->bch)2446		desc = dmaengine_prep_slave_sg(channel, &transfer->sgl, 1,2447					     DMA_DEV_TO_MEM,2448					     MXS_DMA_CTRL_WAIT4END);2449 2450	return desc;2451}2452 2453static struct dma_async_tx_descriptor *gpmi_chain_data_write(2454	struct gpmi_nand_data *this, const void *buf, int raw_len)2455{2456	struct dma_chan *channel = get_dma_chan(this);2457	struct dma_async_tx_descriptor *desc;2458	struct gpmi_transfer *transfer;2459	u32 pio[6] = {};2460 2461	transfer = get_next_transfer(this);2462	if (!transfer)2463		return NULL;2464 2465	transfer->direction = DMA_TO_DEVICE;2466 2467	prepare_data_dma(this, buf, raw_len, &transfer->sgl, DMA_TO_DEVICE);2468 2469	pio[0] = BF_GPMI_CTRL0_COMMAND_MODE(BV_GPMI_CTRL0_COMMAND_MODE__WRITE)2470		| BM_GPMI_CTRL0_WORD_LENGTH2471		| BF_GPMI_CTRL0_CS(this->nand.cur_cs, this)2472		| BF_GPMI_CTRL0_LOCK_CS(LOCK_CS_ENABLE, this)2473		| BF_GPMI_CTRL0_ADDRESS(BV_GPMI_CTRL0_ADDRESS__NAND_DATA)2474		| BF_GPMI_CTRL0_XFER_COUNT(raw_len);2475 2476	if (this->bch) {2477		pio[2] = BM_GPMI_ECCCTRL_ENABLE_ECC2478			| BF_GPMI_ECCCTRL_ECC_CMD(BV_GPMI_ECCCTRL_ECC_CMD__BCH_ENCODE)2479			| BF_GPMI_ECCCTRL_BUFFER_MASK(BV_GPMI_ECCCTRL_BUFFER_MASK__BCH_PAGE |2480					BV_GPMI_ECCCTRL_BUFFER_MASK__BCH_AUXONLY);2481		pio[3] = raw_len;2482		pio[4] = transfer->sgl.dma_address;2483		pio[5] = this->auxiliary_phys;2484	}2485 2486	desc = mxs_dmaengine_prep_pio(channel, pio, ARRAY_SIZE(pio),2487				      DMA_TRANS_NONE,2488				      (this->bch ? MXS_DMA_CTRL_WAIT4END : 0));2489	if (!desc)2490		return NULL;2491 2492	if (!this->bch)2493		desc = dmaengine_prep_slave_sg(channel, &transfer->sgl, 1,2494					       DMA_MEM_TO_DEV,2495					       MXS_DMA_CTRL_WAIT4END);2496 2497	return desc;2498}2499 2500static int gpmi_nfc_exec_op(struct nand_chip *chip,2501			     const struct nand_operation *op,2502			     bool check_only)2503{2504	const struct nand_op_instr *instr;2505	struct gpmi_nand_data *this = nand_get_controller_data(chip);2506	struct dma_async_tx_descriptor *desc = NULL;2507	int i, ret, buf_len = 0, nbufs = 0;2508	u8 cmd = 0;2509	void *buf_read = NULL;2510	const void *buf_write = NULL;2511	bool direct = false;2512	struct completion *dma_completion, *bch_completion;2513	unsigned long to;2514 2515	if (check_only)2516		return 0;2517 2518	this->ntransfers = 0;2519	for (i = 0; i < GPMI_MAX_TRANSFERS; i++)2520		this->transfers[i].direction = DMA_NONE;2521 2522	ret = pm_runtime_resume_and_get(this->dev);2523	if (ret < 0)2524		return ret;2525 2526	/*2527	 * This driver currently supports only one NAND chip. Plus, dies share2528	 * the same configuration. So once timings have been applied on the2529	 * controller side, they will not change anymore. When the time will2530	 * come, the check on must_apply_timings will have to be dropped.2531	 */2532	if (this->hw.must_apply_timings) {2533		this->hw.must_apply_timings = false;2534		ret = gpmi_nfc_apply_timings(this);2535		if (ret)2536			goto out_pm;2537	}2538 2539	dev_dbg(this->dev, "%s: %d instructions\n", __func__, op->ninstrs);2540 2541	for (i = 0; i < op->ninstrs; i++) {2542		instr = &op->instrs[i];2543 2544		nand_op_trace("  ", instr);2545 2546		switch (instr->type) {2547		case NAND_OP_WAITRDY_INSTR:2548			desc = gpmi_chain_wait_ready(this);2549			break;2550		case NAND_OP_CMD_INSTR:2551			cmd = instr->ctx.cmd.opcode;2552 2553			/*2554			 * When this command has an address cycle chain it2555			 * together with the address cycle2556			 */2557			if (i + 1 != op->ninstrs &&2558			    op->instrs[i + 1].type == NAND_OP_ADDR_INSTR)2559				continue;2560 2561			desc = gpmi_chain_command(this, cmd, NULL, 0);2562 2563			break;2564		case NAND_OP_ADDR_INSTR:2565			desc = gpmi_chain_command(this, cmd, instr->ctx.addr.addrs,2566						  instr->ctx.addr.naddrs);2567			break;2568		case NAND_OP_DATA_OUT_INSTR:2569			buf_write = instr->ctx.data.buf.out;2570			buf_len = instr->ctx.data.len;2571			nbufs++;2572 2573			desc = gpmi_chain_data_write(this, buf_write, buf_len);2574 2575			break;2576		case NAND_OP_DATA_IN_INSTR:2577			if (!instr->ctx.data.len)2578				break;2579			buf_read = instr->ctx.data.buf.in;2580			buf_len = instr->ctx.data.len;2581			nbufs++;2582 2583			desc = gpmi_chain_data_read(this, buf_read, buf_len,2584						   &direct);2585			break;2586		}2587 2588		if (!desc) {2589			ret = -ENXIO;2590			goto unmap;2591		}2592	}2593 2594	dev_dbg(this->dev, "%s setup done\n", __func__);2595 2596	if (nbufs > 1) {2597		dev_err(this->dev, "Multiple data instructions not supported\n");2598		ret = -EINVAL;2599		goto unmap;2600	}2601 2602	if (this->bch) {2603		writel(this->bch_flashlayout0,2604		       this->resources.bch_regs + HW_BCH_FLASH0LAYOUT0);2605		writel(this->bch_flashlayout1,2606		       this->resources.bch_regs + HW_BCH_FLASH0LAYOUT1);2607	}2608 2609	desc->callback = dma_irq_callback;2610	desc->callback_param = this;2611	dma_completion = &this->dma_done;2612	bch_completion = NULL;2613 2614	init_completion(dma_completion);2615 2616	if (this->bch && buf_read) {2617		writel(BM_BCH_CTRL_COMPLETE_IRQ_EN,2618		       this->resources.bch_regs + HW_BCH_CTRL_SET);2619		bch_completion = &this->bch_done;2620		init_completion(bch_completion);2621	}2622 2623	dmaengine_submit(desc);2624	dma_async_issue_pending(get_dma_chan(this));2625 2626	to = wait_for_completion_timeout(dma_completion, msecs_to_jiffies(1000));2627	if (!to) {2628		dev_err(this->dev, "DMA timeout, last DMA\n");2629		gpmi_dump_info(this);2630		ret = -ETIMEDOUT;2631		goto unmap;2632	}2633 2634	if (this->bch && buf_read) {2635		to = wait_for_completion_timeout(bch_completion, msecs_to_jiffies(1000));2636		if (!to) {2637			dev_err(this->dev, "BCH timeout, last DMA\n");2638			gpmi_dump_info(this);2639			ret = -ETIMEDOUT;2640			goto unmap;2641		}2642	}2643 2644	writel(BM_BCH_CTRL_COMPLETE_IRQ_EN,2645	       this->resources.bch_regs + HW_BCH_CTRL_CLR);2646	gpmi_clear_bch(this);2647 2648	ret = 0;2649 2650unmap:2651	for (i = 0; i < this->ntransfers; i++) {2652		struct gpmi_transfer *transfer = &this->transfers[i];2653 2654		if (transfer->direction != DMA_NONE)2655			dma_unmap_sg(this->dev, &transfer->sgl, 1,2656				     transfer->direction);2657	}2658 2659	if (!ret && buf_read && !direct)2660		memcpy(buf_read, this->data_buffer_dma,2661		       gpmi_raw_len_to_len(this, buf_len));2662 2663	this->bch = false;2664 2665out_pm:2666	pm_runtime_mark_last_busy(this->dev);2667	pm_runtime_put_autosuspend(this->dev);2668 2669	return ret;2670}2671 2672static const struct nand_controller_ops gpmi_nand_controller_ops = {2673	.attach_chip = gpmi_nand_attach_chip,2674	.setup_interface = gpmi_setup_interface,2675	.exec_op = gpmi_nfc_exec_op,2676};2677 2678static int gpmi_nand_init(struct gpmi_nand_data *this)2679{2680	struct nand_chip *chip = &this->nand;2681	struct mtd_info  *mtd = nand_to_mtd(chip);2682	int ret;2683 2684	/* init the MTD data structures */2685	mtd->name		= "gpmi-nand";2686	mtd->dev.parent		= this->dev;2687 2688	/* init the nand_chip{}, we don't support a 16-bit NAND Flash bus. */2689	nand_set_controller_data(chip, this);2690	nand_set_flash_node(chip, this->pdev->dev.of_node);2691	chip->legacy.block_markbad = gpmi_block_markbad;2692	chip->badblock_pattern	= &gpmi_bbt_descr;2693	chip->options		|= NAND_NO_SUBPAGE_WRITE;2694 2695	/* Set up swap_block_mark, must be set before the gpmi_set_geometry() */2696	this->swap_block_mark = !GPMI_IS_MX23(this);2697 2698	/*2699	 * Allocate a temporary DMA buffer for reading ID in the2700	 * nand_scan_ident().2701	 */2702	this->bch_geometry.payload_size = 1024;2703	this->bch_geometry.auxiliary_size = 128;2704	ret = gpmi_alloc_dma_buffer(this);2705	if (ret)2706		return ret;2707 2708	nand_controller_init(&this->base);2709	this->base.ops = &gpmi_nand_controller_ops;2710	chip->controller = &this->base;2711 2712	ret = nand_scan(chip, GPMI_IS_MX6(this) ? 2 : 1);2713	if (ret)2714		goto err_out;2715 2716	ret = nand_boot_init(this);2717	if (ret)2718		goto err_nand_cleanup;2719	ret = nand_create_bbt(chip);2720	if (ret)2721		goto err_nand_cleanup;2722 2723	ret = mtd_device_register(mtd, NULL, 0);2724	if (ret)2725		goto err_nand_cleanup;2726	return 0;2727 2728err_nand_cleanup:2729	nand_cleanup(chip);2730err_out:2731	gpmi_free_dma_buffer(this);2732	return ret;2733}2734 2735static const struct of_device_id gpmi_nand_id_table[] = {2736	{ .compatible = "fsl,imx23-gpmi-nand", .data = &gpmi_devdata_imx23, },2737	{ .compatible = "fsl,imx28-gpmi-nand", .data = &gpmi_devdata_imx28, },2738	{ .compatible = "fsl,imx6q-gpmi-nand", .data = &gpmi_devdata_imx6q, },2739	{ .compatible = "fsl,imx6sx-gpmi-nand", .data = &gpmi_devdata_imx6sx, },2740	{ .compatible = "fsl,imx7d-gpmi-nand", .data = &gpmi_devdata_imx7d,},2741	{ .compatible = "fsl,imx8qxp-gpmi-nand", .data = &gpmi_devdata_imx8qxp, },2742	{}2743};2744MODULE_DEVICE_TABLE(of, gpmi_nand_id_table);2745 2746static int gpmi_nand_probe(struct platform_device *pdev)2747{2748	struct gpmi_nand_data *this;2749	int ret;2750 2751	this = devm_kzalloc(&pdev->dev, sizeof(*this), GFP_KERNEL);2752	if (!this)2753		return -ENOMEM;2754 2755	this->devdata = of_device_get_match_data(&pdev->dev);2756	platform_set_drvdata(pdev, this);2757	this->pdev  = pdev;2758	this->dev   = &pdev->dev;2759 2760	ret = acquire_resources(this);2761	if (ret)2762		goto exit_acquire_resources;2763 2764	ret = __gpmi_enable_clk(this, true);2765	if (ret)2766		goto exit_acquire_resources;2767 2768	pm_runtime_set_autosuspend_delay(&pdev->dev, 500);2769	pm_runtime_use_autosuspend(&pdev->dev);2770	pm_runtime_set_active(&pdev->dev);2771	pm_runtime_enable(&pdev->dev);2772	pm_runtime_get_sync(&pdev->dev);2773 2774	ret = gpmi_init(this);2775	if (ret)2776		goto exit_nfc_init;2777 2778	ret = gpmi_nand_init(this);2779	if (ret)2780		goto exit_nfc_init;2781 2782	pm_runtime_mark_last_busy(&pdev->dev);2783	pm_runtime_put_autosuspend(&pdev->dev);2784 2785	dev_info(this->dev, "driver registered.\n");2786 2787	return 0;2788 2789exit_nfc_init:2790	pm_runtime_put(&pdev->dev);2791	pm_runtime_disable(&pdev->dev);2792	release_resources(this);2793exit_acquire_resources:2794 2795	return ret;2796}2797 2798static void gpmi_nand_remove(struct platform_device *pdev)2799{2800	struct gpmi_nand_data *this = platform_get_drvdata(pdev);2801	struct nand_chip *chip = &this->nand;2802	int ret;2803 2804	pm_runtime_put_sync(&pdev->dev);2805	pm_runtime_disable(&pdev->dev);2806 2807	ret = mtd_device_unregister(nand_to_mtd(chip));2808	WARN_ON(ret);2809	nand_cleanup(chip);2810	gpmi_free_dma_buffer(this);2811	release_resources(this);2812}2813 2814#ifdef CONFIG_PM_SLEEP2815static int gpmi_pm_suspend(struct device *dev)2816{2817	struct gpmi_nand_data *this = dev_get_drvdata(dev);2818 2819	release_dma_channels(this);2820	return 0;2821}2822 2823static int gpmi_pm_resume(struct device *dev)2824{2825	struct gpmi_nand_data *this = dev_get_drvdata(dev);2826	int ret;2827 2828	ret = acquire_dma_channels(this);2829	if (ret < 0)2830		return ret;2831 2832	/* re-init the GPMI registers */2833	ret = gpmi_init(this);2834	if (ret) {2835		dev_err(this->dev, "Error setting GPMI : %d\n", ret);2836		return ret;2837	}2838 2839	/* Set flag to get timing setup restored for next exec_op */2840	if (this->hw.clk_rate)2841		this->hw.must_apply_timings = true;2842 2843	/* re-init the BCH registers */2844	ret = bch_set_geometry(this);2845	if (ret) {2846		dev_err(this->dev, "Error setting BCH : %d\n", ret);2847		return ret;2848	}2849 2850	return 0;2851}2852#endif /* CONFIG_PM_SLEEP */2853 2854static int __maybe_unused gpmi_runtime_suspend(struct device *dev)2855{2856	struct gpmi_nand_data *this = dev_get_drvdata(dev);2857 2858	return __gpmi_enable_clk(this, false);2859}2860 2861static int __maybe_unused gpmi_runtime_resume(struct device *dev)2862{2863	struct gpmi_nand_data *this = dev_get_drvdata(dev);2864 2865	return __gpmi_enable_clk(this, true);2866}2867 2868static const struct dev_pm_ops gpmi_pm_ops = {2869	SET_SYSTEM_SLEEP_PM_OPS(gpmi_pm_suspend, gpmi_pm_resume)2870	SET_RUNTIME_PM_OPS(gpmi_runtime_suspend, gpmi_runtime_resume, NULL)2871};2872 2873static struct platform_driver gpmi_nand_driver = {2874	.driver = {2875		.name = "gpmi-nand",2876		.pm = &gpmi_pm_ops,2877		.of_match_table = gpmi_nand_id_table,2878	},2879	.probe   = gpmi_nand_probe,2880	.remove_new = gpmi_nand_remove,2881};2882module_platform_driver(gpmi_nand_driver);2883 2884MODULE_AUTHOR("Freescale Semiconductor, Inc.");2885MODULE_DESCRIPTION("i.MX GPMI NAND Flash Controller Driver");2886MODULE_LICENSE("GPL");2887