xref: /linux/drivers/mtd/nand/raw/mxc_nand.c (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
4  * Copyright 2008 Sascha Hauer, kernel@pengutronix.de
5  */
6 
7 #include <linux/delay.h>
8 #include <linux/slab.h>
9 #include <linux/init.h>
10 #include <linux/module.h>
11 #include <linux/mtd/mtd.h>
12 #include <linux/mtd/rawnand.h>
13 #include <linux/mtd/partitions.h>
14 #include <linux/interrupt.h>
15 #include <linux/device.h>
16 #include <linux/platform_device.h>
17 #include <linux/clk.h>
18 #include <linux/err.h>
19 #include <linux/io.h>
20 #include <linux/irq.h>
21 #include <linux/completion.h>
22 #include <linux/of.h>
23 #include <linux/bitfield.h>
24 
25 #define DRIVER_NAME "mxc_nand"
26 
27 /* Addresses for NFC registers */
28 #define NFC_V1_V2_BUF_SIZE		(host->regs + 0x00)
29 #define NFC_V1_V2_BUF_ADDR		(host->regs + 0x04)
30 #define NFC_V1_V2_FLASH_ADDR		(host->regs + 0x06)
31 #define NFC_V1_V2_FLASH_CMD		(host->regs + 0x08)
32 #define NFC_V1_V2_CONFIG		(host->regs + 0x0a)
33 #define NFC_V1_V2_ECC_STATUS_RESULT	(host->regs + 0x0c)
34 #define NFC_V1_V2_RSLTMAIN_AREA		(host->regs + 0x0e)
35 #define NFC_V21_RSLTSPARE_AREA		(host->regs + 0x10)
36 #define NFC_V1_V2_WRPROT		(host->regs + 0x12)
37 #define NFC_V1_UNLOCKSTART_BLKADDR	(host->regs + 0x14)
38 #define NFC_V1_UNLOCKEND_BLKADDR	(host->regs + 0x16)
39 #define NFC_V21_UNLOCKSTART_BLKADDR0	(host->regs + 0x20)
40 #define NFC_V21_UNLOCKSTART_BLKADDR1	(host->regs + 0x24)
41 #define NFC_V21_UNLOCKSTART_BLKADDR2	(host->regs + 0x28)
42 #define NFC_V21_UNLOCKSTART_BLKADDR3	(host->regs + 0x2c)
43 #define NFC_V21_UNLOCKEND_BLKADDR0	(host->regs + 0x22)
44 #define NFC_V21_UNLOCKEND_BLKADDR1	(host->regs + 0x26)
45 #define NFC_V21_UNLOCKEND_BLKADDR2	(host->regs + 0x2a)
46 #define NFC_V21_UNLOCKEND_BLKADDR3	(host->regs + 0x2e)
47 #define NFC_V1_V2_NF_WRPRST		(host->regs + 0x18)
48 #define NFC_V1_V2_CONFIG1		(host->regs + 0x1a)
49 #define NFC_V1_V2_CONFIG2		(host->regs + 0x1c)
50 
51 #define NFC_V1_V2_ECC_STATUS_RESULT_ERM GENMASK(3, 2)
52 
53 #define NFC_V2_CONFIG1_ECC_MODE_4	(1 << 0)
54 #define NFC_V1_V2_CONFIG1_SP_EN		(1 << 2)
55 #define NFC_V1_V2_CONFIG1_ECC_EN	(1 << 3)
56 #define NFC_V1_V2_CONFIG1_INT_MSK	(1 << 4)
57 #define NFC_V1_V2_CONFIG1_BIG		(1 << 5)
58 #define NFC_V1_V2_CONFIG1_RST		(1 << 6)
59 #define NFC_V1_V2_CONFIG1_CE		(1 << 7)
60 #define NFC_V2_CONFIG1_ONE_CYCLE	(1 << 8)
61 #define NFC_V2_CONFIG1_PPB(x)		(((x) & 0x3) << 9)
62 #define NFC_V2_CONFIG1_FP_INT		(1 << 11)
63 
64 #define NFC_V1_V2_CONFIG2_INT		(1 << 15)
65 
66 /*
67  * Operation modes for the NFC. Valid for v1, v2 and v3
68  * type controllers.
69  */
70 #define NFC_CMD				(1 << 0)
71 #define NFC_ADDR			(1 << 1)
72 #define NFC_INPUT			(1 << 2)
73 #define NFC_OUTPUT			(1 << 3)
74 #define NFC_ID				(1 << 4)
75 #define NFC_STATUS			(1 << 5)
76 
77 #define NFC_V3_FLASH_CMD		(host->regs_axi + 0x00)
78 #define NFC_V3_FLASH_ADDR0		(host->regs_axi + 0x04)
79 
80 #define NFC_V3_CONFIG1			(host->regs_axi + 0x34)
81 #define NFC_V3_CONFIG1_SP_EN		(1 << 0)
82 #define NFC_V3_CONFIG1_RBA(x)		(((x) & 0x7 ) << 4)
83 
84 #define NFC_V3_ECC_STATUS_RESULT	(host->regs_axi + 0x38)
85 
86 #define NFC_V3_LAUNCH			(host->regs_axi + 0x40)
87 
88 #define NFC_V3_WRPROT			(host->regs_ip + 0x0)
89 #define NFC_V3_WRPROT_LOCK_TIGHT	(1 << 0)
90 #define NFC_V3_WRPROT_LOCK		(1 << 1)
91 #define NFC_V3_WRPROT_UNLOCK		(1 << 2)
92 #define NFC_V3_WRPROT_BLS_UNLOCK	(2 << 6)
93 
94 #define NFC_V3_WRPROT_UNLOCK_BLK_ADD0   (host->regs_ip + 0x04)
95 
96 #define NFC_V3_CONFIG2			(host->regs_ip + 0x24)
97 #define NFC_V3_CONFIG2_PS_512			(0 << 0)
98 #define NFC_V3_CONFIG2_PS_2048			(1 << 0)
99 #define NFC_V3_CONFIG2_PS_4096			(2 << 0)
100 #define NFC_V3_CONFIG2_ONE_CYCLE		(1 << 2)
101 #define NFC_V3_CONFIG2_ECC_EN			(1 << 3)
102 #define NFC_V3_CONFIG2_2CMD_PHASES		(1 << 4)
103 #define NFC_V3_CONFIG2_NUM_ADDR_PHASE0		(1 << 5)
104 #define NFC_V3_CONFIG2_ECC_MODE_8		(1 << 6)
105 #define NFC_V3_CONFIG2_PPB(x, shift)		(((x) & 0x3) << shift)
106 #define NFC_V3_CONFIG2_NUM_ADDR_PHASE1(x)	(((x) & 0x3) << 12)
107 #define NFC_V3_CONFIG2_INT_MSK			(1 << 15)
108 #define NFC_V3_CONFIG2_ST_CMD(x)		(((x) & 0xff) << 24)
109 #define NFC_V3_CONFIG2_SPAS(x)			(((x) & 0xff) << 16)
110 
111 #define NFC_V3_CONFIG3				(host->regs_ip + 0x28)
112 #define NFC_V3_CONFIG3_ADD_OP(x)		(((x) & 0x3) << 0)
113 #define NFC_V3_CONFIG3_FW8			(1 << 3)
114 #define NFC_V3_CONFIG3_SBB(x)			(((x) & 0x7) << 8)
115 #define NFC_V3_CONFIG3_NUM_OF_DEVICES(x)	(((x) & 0x7) << 12)
116 #define NFC_V3_CONFIG3_RBB_MODE			(1 << 15)
117 #define NFC_V3_CONFIG3_NO_SDMA			(1 << 20)
118 
119 #define NFC_V3_IPC			(host->regs_ip + 0x2C)
120 #define NFC_V3_IPC_CREQ			(1 << 0)
121 #define NFC_V3_IPC_INT			(1 << 31)
122 
123 #define NFC_V3_DELAY_LINE		(host->regs_ip + 0x34)
124 
125 struct mxc_nand_host;
126 
127 struct mxc_nand_devtype_data {
128 	void (*preset)(struct mtd_info *);
129 	int (*read_page)(struct nand_chip *chip);
130 	void (*send_cmd)(struct mxc_nand_host *, uint16_t, int);
131 	void (*send_addr)(struct mxc_nand_host *, uint16_t, int);
132 	void (*send_page)(struct mtd_info *, unsigned int);
133 	void (*send_read_id)(struct mxc_nand_host *);
134 	uint16_t (*get_dev_status)(struct mxc_nand_host *);
135 	int (*check_int)(struct mxc_nand_host *);
136 	void (*irq_control)(struct mxc_nand_host *, int);
137 	u32 (*get_ecc_status)(struct nand_chip *);
138 	const struct mtd_ooblayout_ops *ooblayout;
139 	void (*select_chip)(struct nand_chip *chip, int cs);
140 	int (*setup_interface)(struct nand_chip *chip, int csline,
141 			       const struct nand_interface_config *conf);
142 	void (*enable_hwecc)(struct nand_chip *chip, bool enable);
143 
144 	/*
145 	 * On i.MX21 the CONFIG2:INT bit cannot be read if interrupts are masked
146 	 * (CONFIG1:INT_MSK is set). To handle this the driver uses
147 	 * enable_irq/disable_irq_nosync instead of CONFIG1:INT_MSK
148 	 */
149 	int irqpending_quirk;
150 	int needs_ip;
151 
152 	size_t regs_offset;
153 	size_t spare0_offset;
154 	size_t axi_offset;
155 
156 	int spare_len;
157 	int eccbytes;
158 	int eccsize;
159 	int ppb_shift;
160 };
161 
162 struct mxc_nand_host {
163 	struct nand_chip	nand;
164 	struct device		*dev;
165 
166 	void __iomem		*spare0;
167 	void __iomem		*main_area0;
168 
169 	void __iomem		*base;
170 	void __iomem		*regs;
171 	void __iomem		*regs_axi;
172 	void __iomem		*regs_ip;
173 	int			status_request;
174 	struct clk		*clk;
175 	int			clk_act;
176 	int			irq;
177 	int			eccsize;
178 	int			used_oobsize;
179 	int			active_cs;
180 	unsigned int		ecc_stats_v1;
181 
182 	struct completion	op_completion;
183 
184 	void			*data_buf;
185 
186 	const struct mxc_nand_devtype_data *devtype_data;
187 };
188 
189 static const char * const part_probes[] = {
190 	"cmdlinepart", "RedBoot", "ofpart", NULL };
191 
memcpy32_fromio(void * trg,const void __iomem * src,size_t size)192 static void memcpy32_fromio(void *trg, const void __iomem  *src, size_t size)
193 {
194 	int i;
195 	u32 *t = trg;
196 	const __iomem u32 *s = src;
197 
198 	for (i = 0; i < (size >> 2); i++)
199 		*t++ = __raw_readl(s++);
200 }
201 
memcpy16_fromio(void * trg,const void __iomem * src,size_t size)202 static void memcpy16_fromio(void *trg, const void __iomem  *src, size_t size)
203 {
204 	int i;
205 	u16 *t = trg;
206 	const __iomem u16 *s = src;
207 
208 	/* We assume that src (IO) is always 32bit aligned */
209 	if (PTR_ALIGN(trg, 4) == trg && IS_ALIGNED(size, 4)) {
210 		memcpy32_fromio(trg, src, size);
211 		return;
212 	}
213 
214 	for (i = 0; i < (size >> 1); i++)
215 		*t++ = __raw_readw(s++);
216 }
217 
memcpy32_toio(void __iomem * trg,const void * src,int size)218 static inline void memcpy32_toio(void __iomem *trg, const void *src, int size)
219 {
220 	/* __iowrite32_copy use 32bit size values so divide by 4 */
221 	__iowrite32_copy(trg, src, size / 4);
222 }
223 
memcpy16_toio(void __iomem * trg,const void * src,int size)224 static void memcpy16_toio(void __iomem *trg, const void *src, int size)
225 {
226 	int i;
227 	__iomem u16 *t = trg;
228 	const u16 *s = src;
229 
230 	/* We assume that trg (IO) is always 32bit aligned */
231 	if (PTR_ALIGN(src, 4) == src && IS_ALIGNED(size, 4)) {
232 		memcpy32_toio(trg, src, size);
233 		return;
234 	}
235 
236 	for (i = 0; i < (size >> 1); i++)
237 		__raw_writew(*s++, t++);
238 }
239 
240 /*
241  * The controller splits a page into data chunks of 512 bytes + partial oob.
242  * There are writesize / 512 such chunks, the size of the partial oob parts is
243  * oobsize / #chunks rounded down to a multiple of 2. The last oob chunk then
244  * contains additionally the byte lost by rounding (if any).
245  * This function handles the needed shuffling between host->data_buf (which
246  * holds a page in natural order, i.e. writesize bytes data + oobsize bytes
247  * spare) and the NFC buffer.
248  */
copy_spare(struct mtd_info * mtd,bool bfrom,void * buf)249 static void copy_spare(struct mtd_info *mtd, bool bfrom, void *buf)
250 {
251 	struct nand_chip *this = mtd_to_nand(mtd);
252 	struct mxc_nand_host *host = nand_get_controller_data(this);
253 	u16 i, oob_chunk_size;
254 	u16 num_chunks = mtd->writesize / 512;
255 
256 	u8 *d = buf;
257 	u8 __iomem *s = host->spare0;
258 	u16 sparebuf_size = host->devtype_data->spare_len;
259 
260 	/* size of oob chunk for all but possibly the last one */
261 	oob_chunk_size = (host->used_oobsize / num_chunks) & ~1;
262 
263 	if (bfrom) {
264 		for (i = 0; i < num_chunks - 1; i++)
265 			memcpy16_fromio(d + i * oob_chunk_size,
266 					s + i * sparebuf_size,
267 					oob_chunk_size);
268 
269 		/* the last chunk */
270 		memcpy16_fromio(d + i * oob_chunk_size,
271 				s + i * sparebuf_size,
272 				host->used_oobsize - i * oob_chunk_size);
273 	} else {
274 		for (i = 0; i < num_chunks - 1; i++)
275 			memcpy16_toio(&s[i * sparebuf_size],
276 				      &d[i * oob_chunk_size],
277 				      oob_chunk_size);
278 
279 		/* the last chunk */
280 		memcpy16_toio(&s[i * sparebuf_size],
281 			      &d[i * oob_chunk_size],
282 			      host->used_oobsize - i * oob_chunk_size);
283 	}
284 }
285 
check_int_v3(struct mxc_nand_host * host)286 static int check_int_v3(struct mxc_nand_host *host)
287 {
288 	uint32_t tmp;
289 
290 	tmp = readl(NFC_V3_IPC);
291 	if (!(tmp & NFC_V3_IPC_INT))
292 		return 0;
293 
294 	tmp &= ~NFC_V3_IPC_INT;
295 	writel(tmp, NFC_V3_IPC);
296 
297 	return 1;
298 }
299 
check_int_v1_v2(struct mxc_nand_host * host)300 static int check_int_v1_v2(struct mxc_nand_host *host)
301 {
302 	uint32_t tmp;
303 
304 	tmp = readw(NFC_V1_V2_CONFIG2);
305 	if (!(tmp & NFC_V1_V2_CONFIG2_INT))
306 		return 0;
307 
308 	if (!host->devtype_data->irqpending_quirk)
309 		writew(tmp & ~NFC_V1_V2_CONFIG2_INT, NFC_V1_V2_CONFIG2);
310 
311 	return 1;
312 }
313 
irq_control_v1_v2(struct mxc_nand_host * host,int activate)314 static void irq_control_v1_v2(struct mxc_nand_host *host, int activate)
315 {
316 	uint16_t tmp;
317 
318 	tmp = readw(NFC_V1_V2_CONFIG1);
319 
320 	if (activate)
321 		tmp &= ~NFC_V1_V2_CONFIG1_INT_MSK;
322 	else
323 		tmp |= NFC_V1_V2_CONFIG1_INT_MSK;
324 
325 	writew(tmp, NFC_V1_V2_CONFIG1);
326 }
327 
irq_control_v3(struct mxc_nand_host * host,int activate)328 static void irq_control_v3(struct mxc_nand_host *host, int activate)
329 {
330 	uint32_t tmp;
331 
332 	tmp = readl(NFC_V3_CONFIG2);
333 
334 	if (activate)
335 		tmp &= ~NFC_V3_CONFIG2_INT_MSK;
336 	else
337 		tmp |= NFC_V3_CONFIG2_INT_MSK;
338 
339 	writel(tmp, NFC_V3_CONFIG2);
340 }
341 
irq_control(struct mxc_nand_host * host,int activate)342 static void irq_control(struct mxc_nand_host *host, int activate)
343 {
344 	if (host->devtype_data->irqpending_quirk) {
345 		if (activate)
346 			enable_irq(host->irq);
347 		else
348 			disable_irq_nosync(host->irq);
349 	} else {
350 		host->devtype_data->irq_control(host, activate);
351 	}
352 }
353 
get_ecc_status_v1(struct nand_chip * chip)354 static u32 get_ecc_status_v1(struct nand_chip *chip)
355 {
356 	struct mtd_info *mtd = nand_to_mtd(chip);
357 	struct mxc_nand_host *host = nand_get_controller_data(chip);
358 	unsigned int ecc_stats, max_bitflips = 0;
359 	int no_subpages, i;
360 
361 	no_subpages = mtd->writesize >> 9;
362 
363 	ecc_stats = host->ecc_stats_v1;
364 
365 	for (i = 0; i < no_subpages; i++) {
366 		switch (ecc_stats & 0x3) {
367 		case 0:
368 		default:
369 			break;
370 		case 1:
371 			mtd->ecc_stats.corrected++;
372 			max_bitflips = 1;
373 			break;
374 		case 2:
375 			mtd->ecc_stats.failed++;
376 			break;
377 		}
378 
379 		ecc_stats >>= 2;
380 	}
381 
382 	return max_bitflips;
383 }
384 
get_ecc_status_v2_v3(struct nand_chip * chip,unsigned int ecc_stat)385 static u32 get_ecc_status_v2_v3(struct nand_chip *chip, unsigned int ecc_stat)
386 {
387 	struct mtd_info *mtd = nand_to_mtd(chip);
388 	struct mxc_nand_host *host = nand_get_controller_data(chip);
389 	u8 ecc_bit_mask, err_limit;
390 	unsigned int max_bitflips = 0;
391 	int no_subpages, err;
392 
393 	ecc_bit_mask = (host->eccsize == 4) ? 0x7 : 0xf;
394 	err_limit = (host->eccsize == 4) ? 0x4 : 0x8;
395 
396 	no_subpages = mtd->writesize >> 9;
397 
398 	do {
399 		err = ecc_stat & ecc_bit_mask;
400 		if (err > err_limit) {
401 			mtd->ecc_stats.failed++;
402 		} else {
403 			mtd->ecc_stats.corrected += err;
404 			max_bitflips = max_t(unsigned int, max_bitflips, err);
405 		}
406 
407 		ecc_stat >>= 4;
408 	} while (--no_subpages);
409 
410 	return max_bitflips;
411 }
412 
get_ecc_status_v2(struct nand_chip * chip)413 static u32 get_ecc_status_v2(struct nand_chip *chip)
414 {
415 	struct mxc_nand_host *host = nand_get_controller_data(chip);
416 
417 	u32 ecc_stat = readl(NFC_V1_V2_ECC_STATUS_RESULT);
418 
419 	return get_ecc_status_v2_v3(chip, ecc_stat);
420 }
421 
get_ecc_status_v3(struct nand_chip * chip)422 static u32 get_ecc_status_v3(struct nand_chip *chip)
423 {
424 	struct mxc_nand_host *host = nand_get_controller_data(chip);
425 
426 	u32 ecc_stat = readl(NFC_V3_ECC_STATUS_RESULT);
427 
428 	return get_ecc_status_v2_v3(chip, ecc_stat);
429 }
430 
mxc_nfc_irq(int irq,void * dev_id)431 static irqreturn_t mxc_nfc_irq(int irq, void *dev_id)
432 {
433 	struct mxc_nand_host *host = dev_id;
434 
435 	if (!host->devtype_data->check_int(host))
436 		return IRQ_NONE;
437 
438 	irq_control(host, 0);
439 
440 	complete(&host->op_completion);
441 
442 	return IRQ_HANDLED;
443 }
444 
445 /* This function polls the NANDFC to wait for the basic operation to
446  * complete by checking the INT bit of config2 register.
447  */
wait_op_done(struct mxc_nand_host * host,int useirq)448 static int wait_op_done(struct mxc_nand_host *host, int useirq)
449 {
450 	int ret = 0;
451 
452 	/*
453 	 * If operation is already complete, don't bother to setup an irq or a
454 	 * loop.
455 	 */
456 	if (host->devtype_data->check_int(host))
457 		return 0;
458 
459 	if (useirq) {
460 		unsigned long time_left;
461 
462 		reinit_completion(&host->op_completion);
463 
464 		irq_control(host, 1);
465 
466 		time_left = wait_for_completion_timeout(&host->op_completion, HZ);
467 		if (!time_left && !host->devtype_data->check_int(host)) {
468 			dev_dbg(host->dev, "timeout waiting for irq\n");
469 			ret = -ETIMEDOUT;
470 		}
471 	} else {
472 		int max_retries = 8000;
473 		int done;
474 
475 		do {
476 			udelay(1);
477 
478 			done = host->devtype_data->check_int(host);
479 			if (done)
480 				break;
481 
482 		} while (--max_retries);
483 
484 		if (!done) {
485 			dev_dbg(host->dev, "timeout polling for completion\n");
486 			ret = -ETIMEDOUT;
487 		}
488 	}
489 
490 	WARN_ONCE(ret < 0, "timeout! useirq=%d\n", useirq);
491 
492 	return ret;
493 }
494 
send_cmd_v3(struct mxc_nand_host * host,uint16_t cmd,int useirq)495 static void send_cmd_v3(struct mxc_nand_host *host, uint16_t cmd, int useirq)
496 {
497 	/* fill command */
498 	writel(cmd, NFC_V3_FLASH_CMD);
499 
500 	/* send out command */
501 	writel(NFC_CMD, NFC_V3_LAUNCH);
502 
503 	/* Wait for operation to complete */
504 	wait_op_done(host, useirq);
505 }
506 
507 /* This function issues the specified command to the NAND device and
508  * waits for completion. */
send_cmd_v1_v2(struct mxc_nand_host * host,uint16_t cmd,int useirq)509 static void send_cmd_v1_v2(struct mxc_nand_host *host, uint16_t cmd, int useirq)
510 {
511 	dev_dbg(host->dev, "send_cmd(host, 0x%x, %d)\n", cmd, useirq);
512 
513 	writew(cmd, NFC_V1_V2_FLASH_CMD);
514 	writew(NFC_CMD, NFC_V1_V2_CONFIG2);
515 
516 	if (host->devtype_data->irqpending_quirk && (cmd == NAND_CMD_RESET)) {
517 		int max_retries = 100;
518 		/* Reset completion is indicated by NFC_CONFIG2 */
519 		/* being set to 0 */
520 		while (max_retries-- > 0) {
521 			if (readw(NFC_V1_V2_CONFIG2) == 0) {
522 				break;
523 			}
524 			udelay(1);
525 		}
526 		if (max_retries < 0)
527 			dev_dbg(host->dev, "%s: RESET failed\n", __func__);
528 	} else {
529 		/* Wait for operation to complete */
530 		wait_op_done(host, useirq);
531 	}
532 }
533 
send_addr_v3(struct mxc_nand_host * host,uint16_t addr,int islast)534 static void send_addr_v3(struct mxc_nand_host *host, uint16_t addr, int islast)
535 {
536 	/* fill address */
537 	writel(addr, NFC_V3_FLASH_ADDR0);
538 
539 	/* send out address */
540 	writel(NFC_ADDR, NFC_V3_LAUNCH);
541 
542 	wait_op_done(host, 0);
543 }
544 
545 /* This function sends an address (or partial address) to the
546  * NAND device. The address is used to select the source/destination for
547  * a NAND command. */
send_addr_v1_v2(struct mxc_nand_host * host,uint16_t addr,int islast)548 static void send_addr_v1_v2(struct mxc_nand_host *host, uint16_t addr, int islast)
549 {
550 	dev_dbg(host->dev, "send_addr(host, 0x%x %d)\n", addr, islast);
551 
552 	writew(addr, NFC_V1_V2_FLASH_ADDR);
553 	writew(NFC_ADDR, NFC_V1_V2_CONFIG2);
554 
555 	/* Wait for operation to complete */
556 	wait_op_done(host, islast);
557 }
558 
send_page_v3(struct mtd_info * mtd,unsigned int ops)559 static void send_page_v3(struct mtd_info *mtd, unsigned int ops)
560 {
561 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
562 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
563 	uint32_t tmp;
564 
565 	tmp = readl(NFC_V3_CONFIG1);
566 	tmp &= ~(7 << 4);
567 	writel(tmp, NFC_V3_CONFIG1);
568 
569 	/* transfer data from NFC ram to nand */
570 	writel(ops, NFC_V3_LAUNCH);
571 
572 	wait_op_done(host, false);
573 }
574 
send_page_v2(struct mtd_info * mtd,unsigned int ops)575 static void send_page_v2(struct mtd_info *mtd, unsigned int ops)
576 {
577 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
578 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
579 
580 	/* NANDFC buffer 0 is used for page read/write */
581 	writew(host->active_cs << 4, NFC_V1_V2_BUF_ADDR);
582 
583 	writew(ops, NFC_V1_V2_CONFIG2);
584 
585 	/* Wait for operation to complete */
586 	wait_op_done(host, true);
587 }
588 
send_page_v1(struct mtd_info * mtd,unsigned int ops)589 static void send_page_v1(struct mtd_info *mtd, unsigned int ops)
590 {
591 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
592 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
593 	int bufs, i;
594 
595 	if (mtd->writesize > 512)
596 		bufs = 4;
597 	else
598 		bufs = 1;
599 
600 	for (i = 0; i < bufs; i++) {
601 
602 		/* NANDFC buffer 0 is used for page read/write */
603 		writew((host->active_cs << 4) | i, NFC_V1_V2_BUF_ADDR);
604 
605 		writew(ops, NFC_V1_V2_CONFIG2);
606 
607 		/* Wait for operation to complete */
608 		wait_op_done(host, true);
609 	}
610 }
611 
send_read_id_v3(struct mxc_nand_host * host)612 static void send_read_id_v3(struct mxc_nand_host *host)
613 {
614 	/* Read ID into main buffer */
615 	writel(NFC_ID, NFC_V3_LAUNCH);
616 
617 	wait_op_done(host, true);
618 
619 	memcpy32_fromio(host->data_buf, host->main_area0, 16);
620 }
621 
622 /* Request the NANDFC to perform a read of the NAND device ID. */
send_read_id_v1_v2(struct mxc_nand_host * host)623 static void send_read_id_v1_v2(struct mxc_nand_host *host)
624 {
625 	/* NANDFC buffer 0 is used for device ID output */
626 	writew(host->active_cs << 4, NFC_V1_V2_BUF_ADDR);
627 
628 	writew(NFC_ID, NFC_V1_V2_CONFIG2);
629 
630 	/* Wait for operation to complete */
631 	wait_op_done(host, true);
632 
633 	memcpy32_fromio(host->data_buf, host->main_area0, 16);
634 }
635 
get_dev_status_v3(struct mxc_nand_host * host)636 static uint16_t get_dev_status_v3(struct mxc_nand_host *host)
637 {
638 	writew(NFC_STATUS, NFC_V3_LAUNCH);
639 	wait_op_done(host, true);
640 
641 	return readl(NFC_V3_CONFIG1) >> 16;
642 }
643 
644 /* This function requests the NANDFC to perform a read of the
645  * NAND device status and returns the current status. */
get_dev_status_v1_v2(struct mxc_nand_host * host)646 static uint16_t get_dev_status_v1_v2(struct mxc_nand_host *host)
647 {
648 	void __iomem *main_buf = host->main_area0;
649 	uint32_t store;
650 	uint16_t ret;
651 
652 	writew(host->active_cs << 4, NFC_V1_V2_BUF_ADDR);
653 
654 	/*
655 	 * The device status is stored in main_area0. To
656 	 * prevent corruption of the buffer save the value
657 	 * and restore it afterwards.
658 	 */
659 	store = readl(main_buf);
660 
661 	writew(NFC_STATUS, NFC_V1_V2_CONFIG2);
662 	wait_op_done(host, true);
663 
664 	ret = readw(main_buf);
665 
666 	writel(store, main_buf);
667 
668 	return ret;
669 }
670 
mxc_nand_enable_hwecc_v1_v2(struct nand_chip * chip,bool enable)671 static void mxc_nand_enable_hwecc_v1_v2(struct nand_chip *chip, bool enable)
672 {
673 	struct mxc_nand_host *host = nand_get_controller_data(chip);
674 	uint16_t config1;
675 
676 	if (chip->ecc.engine_type != NAND_ECC_ENGINE_TYPE_ON_HOST)
677 		return;
678 
679 	config1 = readw(NFC_V1_V2_CONFIG1);
680 
681 	if (enable)
682 		config1 |= NFC_V1_V2_CONFIG1_ECC_EN;
683 	else
684 		config1 &= ~NFC_V1_V2_CONFIG1_ECC_EN;
685 
686 	writew(config1, NFC_V1_V2_CONFIG1);
687 }
688 
mxc_nand_enable_hwecc_v3(struct nand_chip * chip,bool enable)689 static void mxc_nand_enable_hwecc_v3(struct nand_chip *chip, bool enable)
690 {
691 	struct mxc_nand_host *host = nand_get_controller_data(chip);
692 	uint32_t config2;
693 
694 	if (chip->ecc.engine_type != NAND_ECC_ENGINE_TYPE_ON_HOST)
695 		return;
696 
697 	config2 = readl(NFC_V3_CONFIG2);
698 
699 	if (enable)
700 		config2 |= NFC_V3_CONFIG2_ECC_EN;
701 	else
702 		config2 &= ~NFC_V3_CONFIG2_ECC_EN;
703 
704 	writel(config2, NFC_V3_CONFIG2);
705 }
706 
mxc_nand_read_page_v1(struct nand_chip * chip)707 static int mxc_nand_read_page_v1(struct nand_chip *chip)
708 {
709 	struct mtd_info *mtd = nand_to_mtd(chip);
710 	struct mxc_nand_host *host = nand_get_controller_data(chip);
711 	int no_subpages;
712 	int i;
713 	unsigned int ecc_stats = 0;
714 
715 	if (mtd->writesize)
716 		no_subpages = mtd->writesize >> 9;
717 	else
718 		/* READ PARAMETER PAGE is called when mtd->writesize is not yet set */
719 		no_subpages = 1;
720 
721 	for (i = 0; i < no_subpages; i++) {
722 		/* NANDFC buffer 0 is used for page read/write */
723 		writew((host->active_cs << 4) | i, NFC_V1_V2_BUF_ADDR);
724 
725 		writew(NFC_OUTPUT, NFC_V1_V2_CONFIG2);
726 
727 		/* Wait for operation to complete */
728 		wait_op_done(host, true);
729 
730 		ecc_stats |= FIELD_GET(NFC_V1_V2_ECC_STATUS_RESULT_ERM,
731 				       readw(NFC_V1_V2_ECC_STATUS_RESULT)) << i * 2;
732 	}
733 
734 	host->ecc_stats_v1 = ecc_stats;
735 
736 	return 0;
737 }
738 
mxc_nand_read_page_v2_v3(struct nand_chip * chip)739 static int mxc_nand_read_page_v2_v3(struct nand_chip *chip)
740 {
741 	struct mtd_info *mtd = nand_to_mtd(chip);
742 	struct mxc_nand_host *host = nand_get_controller_data(chip);
743 
744 	host->devtype_data->send_page(mtd, NFC_OUTPUT);
745 
746 	return 0;
747 }
748 
mxc_nand_read_page(struct nand_chip * chip,uint8_t * buf,int oob_required,int page)749 static int mxc_nand_read_page(struct nand_chip *chip, uint8_t *buf,
750 			      int oob_required, int page)
751 {
752 	struct mtd_info *mtd = nand_to_mtd(chip);
753 	struct mxc_nand_host *host = nand_get_controller_data(chip);
754 	int ret;
755 
756 	host->devtype_data->enable_hwecc(chip, true);
757 
758 	ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize);
759 
760 	host->devtype_data->enable_hwecc(chip, false);
761 
762 	if (ret)
763 		return ret;
764 
765 	if (oob_required)
766 		copy_spare(mtd, true, chip->oob_poi);
767 
768 	return host->devtype_data->get_ecc_status(chip);
769 }
770 
mxc_nand_read_page_raw(struct nand_chip * chip,uint8_t * buf,int oob_required,int page)771 static int mxc_nand_read_page_raw(struct nand_chip *chip, uint8_t *buf,
772 				  int oob_required, int page)
773 {
774 	struct mtd_info *mtd = nand_to_mtd(chip);
775 	int ret;
776 
777 	ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize);
778 	if (ret)
779 		return ret;
780 
781 	if (oob_required)
782 		copy_spare(mtd, true, chip->oob_poi);
783 
784 	return 0;
785 }
786 
mxc_nand_read_oob(struct nand_chip * chip,int page)787 static int mxc_nand_read_oob(struct nand_chip *chip, int page)
788 {
789 	struct mtd_info *mtd = nand_to_mtd(chip);
790 	struct mxc_nand_host *host = nand_get_controller_data(chip);
791 	int ret;
792 
793 	ret = nand_read_page_op(chip, page, 0, host->data_buf, mtd->writesize);
794 	if (ret)
795 		return ret;
796 
797 	copy_spare(mtd, true, chip->oob_poi);
798 
799 	return 0;
800 }
801 
mxc_nand_write_page_ecc(struct nand_chip * chip,const uint8_t * buf,int oob_required,int page)802 static int mxc_nand_write_page_ecc(struct nand_chip *chip, const uint8_t *buf,
803 				   int oob_required, int page)
804 {
805 	struct mtd_info *mtd = nand_to_mtd(chip);
806 	struct mxc_nand_host *host = nand_get_controller_data(chip);
807 	int ret;
808 
809 	copy_spare(mtd, false, chip->oob_poi);
810 
811 	host->devtype_data->enable_hwecc(chip, true);
812 
813 	ret = nand_prog_page_op(chip, page, 0, buf, mtd->writesize);
814 
815 	host->devtype_data->enable_hwecc(chip, false);
816 
817 	return ret;
818 }
819 
mxc_nand_write_page_raw(struct nand_chip * chip,const uint8_t * buf,int oob_required,int page)820 static int mxc_nand_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
821 				   int oob_required, int page)
822 {
823 	struct mtd_info *mtd = nand_to_mtd(chip);
824 
825 	copy_spare(mtd, false, chip->oob_poi);
826 
827 	return nand_prog_page_op(chip, page, 0, buf, mtd->writesize);
828 }
829 
mxc_nand_write_oob(struct nand_chip * chip,int page)830 static int mxc_nand_write_oob(struct nand_chip *chip, int page)
831 {
832 	struct mtd_info *mtd = nand_to_mtd(chip);
833 	struct mxc_nand_host *host = nand_get_controller_data(chip);
834 
835 	memset(host->data_buf, 0xff, mtd->writesize);
836 	copy_spare(mtd, false, chip->oob_poi);
837 
838 	return nand_prog_page_op(chip, page, 0, host->data_buf, mtd->writesize);
839 }
840 
841 /* This function is used by upper layer for select and
842  * deselect of the NAND chip */
mxc_nand_select_chip_v1_v3(struct nand_chip * nand_chip,int chip)843 static void mxc_nand_select_chip_v1_v3(struct nand_chip *nand_chip, int chip)
844 {
845 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
846 
847 	if (chip == -1) {
848 		/* Disable the NFC clock */
849 		if (host->clk_act) {
850 			clk_disable_unprepare(host->clk);
851 			host->clk_act = 0;
852 		}
853 		return;
854 	}
855 
856 	if (!host->clk_act) {
857 		/* Enable the NFC clock */
858 		clk_prepare_enable(host->clk);
859 		host->clk_act = 1;
860 	}
861 }
862 
mxc_nand_select_chip_v2(struct nand_chip * nand_chip,int chip)863 static void mxc_nand_select_chip_v2(struct nand_chip *nand_chip, int chip)
864 {
865 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
866 
867 	if (chip == -1) {
868 		/* Disable the NFC clock */
869 		if (host->clk_act) {
870 			clk_disable_unprepare(host->clk);
871 			host->clk_act = 0;
872 		}
873 		return;
874 	}
875 
876 	if (!host->clk_act) {
877 		/* Enable the NFC clock */
878 		clk_prepare_enable(host->clk);
879 		host->clk_act = 1;
880 	}
881 
882 	host->active_cs = chip;
883 	writew(host->active_cs << 4, NFC_V1_V2_BUF_ADDR);
884 }
885 
886 #define MXC_V1_ECCBYTES		5
887 
mxc_v1_ooblayout_ecc(struct mtd_info * mtd,int section,struct mtd_oob_region * oobregion)888 static int mxc_v1_ooblayout_ecc(struct mtd_info *mtd, int section,
889 				struct mtd_oob_region *oobregion)
890 {
891 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
892 
893 	if (section >= nand_chip->ecc.steps)
894 		return -ERANGE;
895 
896 	oobregion->offset = (section * 16) + 6;
897 	oobregion->length = MXC_V1_ECCBYTES;
898 
899 	return 0;
900 }
901 
mxc_v1_ooblayout_free(struct mtd_info * mtd,int section,struct mtd_oob_region * oobregion)902 static int mxc_v1_ooblayout_free(struct mtd_info *mtd, int section,
903 				 struct mtd_oob_region *oobregion)
904 {
905 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
906 
907 	if (section > nand_chip->ecc.steps)
908 		return -ERANGE;
909 
910 	if (!section) {
911 		if (mtd->writesize <= 512) {
912 			oobregion->offset = 0;
913 			oobregion->length = 5;
914 		} else {
915 			oobregion->offset = 2;
916 			oobregion->length = 4;
917 		}
918 	} else {
919 		oobregion->offset = ((section - 1) * 16) + MXC_V1_ECCBYTES + 6;
920 		if (section < nand_chip->ecc.steps)
921 			oobregion->length = (section * 16) + 6 -
922 					    oobregion->offset;
923 		else
924 			oobregion->length = mtd->oobsize - oobregion->offset;
925 	}
926 
927 	return 0;
928 }
929 
930 static const struct mtd_ooblayout_ops mxc_v1_ooblayout_ops = {
931 	.ecc = mxc_v1_ooblayout_ecc,
932 	.free = mxc_v1_ooblayout_free,
933 };
934 
mxc_v2_ooblayout_ecc(struct mtd_info * mtd,int section,struct mtd_oob_region * oobregion)935 static int mxc_v2_ooblayout_ecc(struct mtd_info *mtd, int section,
936 				struct mtd_oob_region *oobregion)
937 {
938 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
939 	int stepsize = nand_chip->ecc.bytes == 9 ? 16 : 26;
940 
941 	if (section >= nand_chip->ecc.steps)
942 		return -ERANGE;
943 
944 	oobregion->offset = (section * stepsize) + 7;
945 	oobregion->length = nand_chip->ecc.bytes;
946 
947 	return 0;
948 }
949 
mxc_v2_ooblayout_free(struct mtd_info * mtd,int section,struct mtd_oob_region * oobregion)950 static int mxc_v2_ooblayout_free(struct mtd_info *mtd, int section,
951 				 struct mtd_oob_region *oobregion)
952 {
953 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
954 	int stepsize = nand_chip->ecc.bytes == 9 ? 16 : 26;
955 
956 	if (section >= nand_chip->ecc.steps)
957 		return -ERANGE;
958 
959 	if (!section) {
960 		if (mtd->writesize <= 512) {
961 			oobregion->offset = 0;
962 			oobregion->length = 5;
963 		} else {
964 			oobregion->offset = 2;
965 			oobregion->length = 4;
966 		}
967 	} else {
968 		oobregion->offset = section * stepsize;
969 		oobregion->length = 7;
970 	}
971 
972 	return 0;
973 }
974 
975 static const struct mtd_ooblayout_ops mxc_v2_ooblayout_ops = {
976 	.ecc = mxc_v2_ooblayout_ecc,
977 	.free = mxc_v2_ooblayout_free,
978 };
979 
980 /*
981  * v2 and v3 type controllers can do 4bit or 8bit ecc depending
982  * on how much oob the nand chip has. For 8bit ecc we need at least
983  * 26 bytes of oob data per 512 byte block.
984  */
get_eccsize(struct mtd_info * mtd)985 static int get_eccsize(struct mtd_info *mtd)
986 {
987 	int oobbytes_per_512 = 0;
988 
989 	oobbytes_per_512 = mtd->oobsize * 512 / mtd->writesize;
990 
991 	if (oobbytes_per_512 < 26)
992 		return 4;
993 	else
994 		return 8;
995 }
996 
preset_v1(struct mtd_info * mtd)997 static void preset_v1(struct mtd_info *mtd)
998 {
999 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
1000 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
1001 	uint16_t config1 = 0;
1002 
1003 	if (nand_chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST &&
1004 	    mtd->writesize)
1005 		config1 |= NFC_V1_V2_CONFIG1_ECC_EN;
1006 
1007 	if (!host->devtype_data->irqpending_quirk)
1008 		config1 |= NFC_V1_V2_CONFIG1_INT_MSK;
1009 
1010 	host->eccsize = 1;
1011 
1012 	writew(config1, NFC_V1_V2_CONFIG1);
1013 	/* preset operation */
1014 
1015 	/* Unlock the internal RAM Buffer */
1016 	writew(0x2, NFC_V1_V2_CONFIG);
1017 
1018 	/* Blocks to be unlocked */
1019 	writew(0x0, NFC_V1_UNLOCKSTART_BLKADDR);
1020 	writew(0xffff, NFC_V1_UNLOCKEND_BLKADDR);
1021 
1022 	/* Unlock Block Command for given address range */
1023 	writew(0x4, NFC_V1_V2_WRPROT);
1024 }
1025 
mxc_nand_v2_setup_interface(struct nand_chip * chip,int csline,const struct nand_interface_config * conf)1026 static int mxc_nand_v2_setup_interface(struct nand_chip *chip, int csline,
1027 				       const struct nand_interface_config *conf)
1028 {
1029 	struct mxc_nand_host *host = nand_get_controller_data(chip);
1030 	int tRC_min_ns, tRC_ps, ret;
1031 	unsigned long rate, rate_round;
1032 	const struct nand_sdr_timings *timings;
1033 	u16 config1;
1034 
1035 	timings = nand_get_sdr_timings(conf);
1036 	if (IS_ERR(timings))
1037 		return -ENOTSUPP;
1038 
1039 	config1 = readw(NFC_V1_V2_CONFIG1);
1040 
1041 	tRC_min_ns = timings->tRC_min / 1000;
1042 	rate = 1000000000 / tRC_min_ns;
1043 
1044 	/*
1045 	 * For tRC < 30ns we have to use EDO mode. In this case the controller
1046 	 * does one access per clock cycle. Otherwise the controller does one
1047 	 * access in two clock cycles, thus we have to double the rate to the
1048 	 * controller.
1049 	 */
1050 	if (tRC_min_ns < 30) {
1051 		rate_round = clk_round_rate(host->clk, rate);
1052 		config1 |= NFC_V2_CONFIG1_ONE_CYCLE;
1053 		tRC_ps = 1000000000 / (rate_round / 1000);
1054 	} else {
1055 		rate *= 2;
1056 		rate_round = clk_round_rate(host->clk, rate);
1057 		config1 &= ~NFC_V2_CONFIG1_ONE_CYCLE;
1058 		tRC_ps = 1000000000 / (rate_round / 1000 / 2);
1059 	}
1060 
1061 	/*
1062 	 * The timing values compared against are from the i.MX25 Automotive
1063 	 * datasheet, Table 50. NFC Timing Parameters
1064 	 */
1065 	if (timings->tCLS_min > tRC_ps - 1000 ||
1066 	    timings->tCLH_min > tRC_ps - 2000 ||
1067 	    timings->tCS_min > tRC_ps - 1000 ||
1068 	    timings->tCH_min > tRC_ps - 2000 ||
1069 	    timings->tWP_min > tRC_ps - 1500 ||
1070 	    timings->tALS_min > tRC_ps ||
1071 	    timings->tALH_min > tRC_ps - 3000 ||
1072 	    timings->tDS_min > tRC_ps ||
1073 	    timings->tDH_min > tRC_ps - 5000 ||
1074 	    timings->tWC_min > 2 * tRC_ps ||
1075 	    timings->tWH_min > tRC_ps - 2500 ||
1076 	    timings->tRR_min > 6 * tRC_ps ||
1077 	    timings->tRP_min > 3 * tRC_ps / 2 ||
1078 	    timings->tRC_min > 2 * tRC_ps ||
1079 	    timings->tREH_min > (tRC_ps / 2) - 2500) {
1080 		dev_dbg(host->dev, "Timing out of bounds\n");
1081 		return -EINVAL;
1082 	}
1083 
1084 	if (csline == NAND_DATA_IFACE_CHECK_ONLY)
1085 		return 0;
1086 
1087 	ret = clk_set_rate(host->clk, rate);
1088 	if (ret)
1089 		return ret;
1090 
1091 	writew(config1, NFC_V1_V2_CONFIG1);
1092 
1093 	dev_dbg(host->dev, "Setting rate to %ldHz, %s mode\n", rate_round,
1094 		config1 & NFC_V2_CONFIG1_ONE_CYCLE ? "One cycle (EDO)" :
1095 		"normal");
1096 
1097 	return 0;
1098 }
1099 
preset_v2(struct mtd_info * mtd)1100 static void preset_v2(struct mtd_info *mtd)
1101 {
1102 	struct nand_chip *nand_chip = mtd_to_nand(mtd);
1103 	struct mxc_nand_host *host = nand_get_controller_data(nand_chip);
1104 	uint16_t config1 = 0;
1105 
1106 	config1 |= NFC_V2_CONFIG1_FP_INT;
1107 
1108 	if (!host->devtype_data->irqpending_quirk)
1109 		config1 |= NFC_V1_V2_CONFIG1_INT_MSK;
1110 
1111 	if (mtd->writesize) {
1112 		uint16_t pages_per_block = mtd->erasesize / mtd->writesize;
1113 
1114 		if (nand_chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST)
1115 			config1 |= NFC_V1_V2_CONFIG1_ECC_EN;
1116 
1117 		host->eccsize = get_eccsize(mtd);
1118 		if (host->eccsize == 4)
1119 			config1 |= NFC_V2_CONFIG1_ECC_MODE_4;
1120 
1121 		config1 |= NFC_V2_CONFIG1_PPB(ffs(pages_per_block) - 6);
1122 	} else {
1123 		host->eccsize = 1;
1124 	}
1125 
1126 	writew(config1, NFC_V1_V2_CONFIG1);
1127 	/* preset operation */
1128 
1129 	/* spare area size in 16-bit half-words */
1130 	writew(mtd->oobsize / 2, NFC_V21_RSLTSPARE_AREA);
1131 
1132 	/* Unlock the internal RAM Buffer */
1133 	writew(0x2, NFC_V1_V2_CONFIG);
1134 
1135 	/* Blocks to be unlocked */
1136 	writew(0x0, NFC_V21_UNLOCKSTART_BLKADDR0);
1137 	writew(0x0, NFC_V21_UNLOCKSTART_BLKADDR1);
1138 	writew(0x0, NFC_V21_UNLOCKSTART_BLKADDR2);
1139 	writew(0x0, NFC_V21_UNLOCKSTART_BLKADDR3);
1140 	writew(0xffff, NFC_V21_UNLOCKEND_BLKADDR0);
1141 	writew(0xffff, NFC_V21_UNLOCKEND_BLKADDR1);
1142 	writew(0xffff, NFC_V21_UNLOCKEND_BLKADDR2);
1143 	writew(0xffff, NFC_V21_UNLOCKEND_BLKADDR3);
1144 
1145 	/* Unlock Block Command for given address range */
1146 	writew(0x4, NFC_V1_V2_WRPROT);
1147 }
1148 
preset_v3(struct mtd_info * mtd)1149 static void preset_v3(struct mtd_info *mtd)
1150 {
1151 	struct nand_chip *chip = mtd_to_nand(mtd);
1152 	struct mxc_nand_host *host = nand_get_controller_data(chip);
1153 	uint32_t config2, config3;
1154 	int i, addr_phases;
1155 
1156 	writel(NFC_V3_CONFIG1_RBA(0), NFC_V3_CONFIG1);
1157 	writel(NFC_V3_IPC_CREQ, NFC_V3_IPC);
1158 
1159 	/* Unlock the internal RAM Buffer */
1160 	writel(NFC_V3_WRPROT_BLS_UNLOCK | NFC_V3_WRPROT_UNLOCK,
1161 			NFC_V3_WRPROT);
1162 
1163 	/* Blocks to be unlocked */
1164 	for (i = 0; i < NAND_MAX_CHIPS; i++)
1165 		writel(0xffff << 16, NFC_V3_WRPROT_UNLOCK_BLK_ADD0 + (i << 2));
1166 
1167 	writel(0, NFC_V3_IPC);
1168 
1169 	config2 = NFC_V3_CONFIG2_ONE_CYCLE |
1170 		NFC_V3_CONFIG2_2CMD_PHASES |
1171 		NFC_V3_CONFIG2_SPAS(mtd->oobsize >> 1) |
1172 		NFC_V3_CONFIG2_ST_CMD(0x70) |
1173 		NFC_V3_CONFIG2_INT_MSK |
1174 		NFC_V3_CONFIG2_NUM_ADDR_PHASE0;
1175 
1176 	addr_phases = fls(chip->pagemask) >> 3;
1177 
1178 	if (mtd->writesize == 2048) {
1179 		config2 |= NFC_V3_CONFIG2_PS_2048;
1180 		config2 |= NFC_V3_CONFIG2_NUM_ADDR_PHASE1(addr_phases);
1181 	} else if (mtd->writesize == 4096) {
1182 		config2 |= NFC_V3_CONFIG2_PS_4096;
1183 		config2 |= NFC_V3_CONFIG2_NUM_ADDR_PHASE1(addr_phases);
1184 	} else {
1185 		config2 |= NFC_V3_CONFIG2_PS_512;
1186 		config2 |= NFC_V3_CONFIG2_NUM_ADDR_PHASE1(addr_phases - 1);
1187 	}
1188 
1189 	if (mtd->writesize) {
1190 		if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST)
1191 			config2 |= NFC_V3_CONFIG2_ECC_EN;
1192 
1193 		config2 |= NFC_V3_CONFIG2_PPB(
1194 				ffs(mtd->erasesize / mtd->writesize) - 6,
1195 				host->devtype_data->ppb_shift);
1196 		host->eccsize = get_eccsize(mtd);
1197 		if (host->eccsize == 8)
1198 			config2 |= NFC_V3_CONFIG2_ECC_MODE_8;
1199 	}
1200 
1201 	writel(config2, NFC_V3_CONFIG2);
1202 
1203 	config3 = NFC_V3_CONFIG3_NUM_OF_DEVICES(0) |
1204 			NFC_V3_CONFIG3_NO_SDMA |
1205 			NFC_V3_CONFIG3_RBB_MODE |
1206 			NFC_V3_CONFIG3_SBB(6) | /* Reset default */
1207 			NFC_V3_CONFIG3_ADD_OP(0);
1208 
1209 	if (!(chip->options & NAND_BUSWIDTH_16))
1210 		config3 |= NFC_V3_CONFIG3_FW8;
1211 
1212 	writel(config3, NFC_V3_CONFIG3);
1213 
1214 	writel(0, NFC_V3_DELAY_LINE);
1215 }
1216 
1217 /*
1218  * The generic flash bbt descriptors overlap with our ecc
1219  * hardware, so define some i.MX specific ones.
1220  */
1221 static uint8_t bbt_pattern[] = { 'B', 'b', 't', '0' };
1222 static uint8_t mirror_pattern[] = { '1', 't', 'b', 'B' };
1223 
1224 static struct nand_bbt_descr bbt_main_descr = {
1225 	.options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
1226 	    | NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
1227 	.offs = 0,
1228 	.len = 4,
1229 	.veroffs = 4,
1230 	.maxblocks = 4,
1231 	.pattern = bbt_pattern,
1232 };
1233 
1234 static struct nand_bbt_descr bbt_mirror_descr = {
1235 	.options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
1236 	    | NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
1237 	.offs = 0,
1238 	.len = 4,
1239 	.veroffs = 4,
1240 	.maxblocks = 4,
1241 	.pattern = mirror_pattern,
1242 };
1243 
1244 /* v1 + irqpending_quirk: i.MX21 */
1245 static const struct mxc_nand_devtype_data imx21_nand_devtype_data = {
1246 	.preset = preset_v1,
1247 	.read_page = mxc_nand_read_page_v1,
1248 	.send_cmd = send_cmd_v1_v2,
1249 	.send_addr = send_addr_v1_v2,
1250 	.send_page = send_page_v1,
1251 	.send_read_id = send_read_id_v1_v2,
1252 	.get_dev_status = get_dev_status_v1_v2,
1253 	.check_int = check_int_v1_v2,
1254 	.irq_control = irq_control_v1_v2,
1255 	.get_ecc_status = get_ecc_status_v1,
1256 	.ooblayout = &mxc_v1_ooblayout_ops,
1257 	.select_chip = mxc_nand_select_chip_v1_v3,
1258 	.enable_hwecc = mxc_nand_enable_hwecc_v1_v2,
1259 	.irqpending_quirk = 1,
1260 	.needs_ip = 0,
1261 	.regs_offset = 0xe00,
1262 	.spare0_offset = 0x800,
1263 	.spare_len = 16,
1264 	.eccbytes = 3,
1265 	.eccsize = 1,
1266 };
1267 
1268 /* v1 + !irqpending_quirk: i.MX27, i.MX31 */
1269 static const struct mxc_nand_devtype_data imx27_nand_devtype_data = {
1270 	.preset = preset_v1,
1271 	.read_page = mxc_nand_read_page_v1,
1272 	.send_cmd = send_cmd_v1_v2,
1273 	.send_addr = send_addr_v1_v2,
1274 	.send_page = send_page_v1,
1275 	.send_read_id = send_read_id_v1_v2,
1276 	.get_dev_status = get_dev_status_v1_v2,
1277 	.check_int = check_int_v1_v2,
1278 	.irq_control = irq_control_v1_v2,
1279 	.get_ecc_status = get_ecc_status_v1,
1280 	.ooblayout = &mxc_v1_ooblayout_ops,
1281 	.select_chip = mxc_nand_select_chip_v1_v3,
1282 	.enable_hwecc = mxc_nand_enable_hwecc_v1_v2,
1283 	.irqpending_quirk = 0,
1284 	.needs_ip = 0,
1285 	.regs_offset = 0xe00,
1286 	.spare0_offset = 0x800,
1287 	.axi_offset = 0,
1288 	.spare_len = 16,
1289 	.eccbytes = 3,
1290 	.eccsize = 1,
1291 };
1292 
1293 /* v21: i.MX25, i.MX35 */
1294 static const struct mxc_nand_devtype_data imx25_nand_devtype_data = {
1295 	.preset = preset_v2,
1296 	.read_page = mxc_nand_read_page_v2_v3,
1297 	.send_cmd = send_cmd_v1_v2,
1298 	.send_addr = send_addr_v1_v2,
1299 	.send_page = send_page_v2,
1300 	.send_read_id = send_read_id_v1_v2,
1301 	.get_dev_status = get_dev_status_v1_v2,
1302 	.check_int = check_int_v1_v2,
1303 	.irq_control = irq_control_v1_v2,
1304 	.get_ecc_status = get_ecc_status_v2,
1305 	.ooblayout = &mxc_v2_ooblayout_ops,
1306 	.select_chip = mxc_nand_select_chip_v2,
1307 	.setup_interface = mxc_nand_v2_setup_interface,
1308 	.enable_hwecc = mxc_nand_enable_hwecc_v1_v2,
1309 	.irqpending_quirk = 0,
1310 	.needs_ip = 0,
1311 	.regs_offset = 0x1e00,
1312 	.spare0_offset = 0x1000,
1313 	.axi_offset = 0,
1314 	.spare_len = 64,
1315 	.eccbytes = 9,
1316 	.eccsize = 0,
1317 };
1318 
1319 /* v3.2a: i.MX51 */
1320 static const struct mxc_nand_devtype_data imx51_nand_devtype_data = {
1321 	.preset = preset_v3,
1322 	.read_page = mxc_nand_read_page_v2_v3,
1323 	.send_cmd = send_cmd_v3,
1324 	.send_addr = send_addr_v3,
1325 	.send_page = send_page_v3,
1326 	.send_read_id = send_read_id_v3,
1327 	.get_dev_status = get_dev_status_v3,
1328 	.check_int = check_int_v3,
1329 	.irq_control = irq_control_v3,
1330 	.get_ecc_status = get_ecc_status_v3,
1331 	.ooblayout = &mxc_v2_ooblayout_ops,
1332 	.select_chip = mxc_nand_select_chip_v1_v3,
1333 	.enable_hwecc = mxc_nand_enable_hwecc_v3,
1334 	.irqpending_quirk = 0,
1335 	.needs_ip = 1,
1336 	.regs_offset = 0,
1337 	.spare0_offset = 0x1000,
1338 	.axi_offset = 0x1e00,
1339 	.spare_len = 64,
1340 	.eccbytes = 0,
1341 	.eccsize = 0,
1342 	.ppb_shift = 7,
1343 };
1344 
1345 /* v3.2b: i.MX53 */
1346 static const struct mxc_nand_devtype_data imx53_nand_devtype_data = {
1347 	.preset = preset_v3,
1348 	.read_page = mxc_nand_read_page_v2_v3,
1349 	.send_cmd = send_cmd_v3,
1350 	.send_addr = send_addr_v3,
1351 	.send_page = send_page_v3,
1352 	.send_read_id = send_read_id_v3,
1353 	.get_dev_status = get_dev_status_v3,
1354 	.check_int = check_int_v3,
1355 	.irq_control = irq_control_v3,
1356 	.get_ecc_status = get_ecc_status_v3,
1357 	.ooblayout = &mxc_v2_ooblayout_ops,
1358 	.select_chip = mxc_nand_select_chip_v1_v3,
1359 	.enable_hwecc = mxc_nand_enable_hwecc_v3,
1360 	.irqpending_quirk = 0,
1361 	.needs_ip = 1,
1362 	.regs_offset = 0,
1363 	.spare0_offset = 0x1000,
1364 	.axi_offset = 0x1e00,
1365 	.spare_len = 64,
1366 	.eccbytes = 0,
1367 	.eccsize = 0,
1368 	.ppb_shift = 8,
1369 };
1370 
is_imx21_nfc(struct mxc_nand_host * host)1371 static inline int is_imx21_nfc(struct mxc_nand_host *host)
1372 {
1373 	return host->devtype_data == &imx21_nand_devtype_data;
1374 }
1375 
is_imx27_nfc(struct mxc_nand_host * host)1376 static inline int is_imx27_nfc(struct mxc_nand_host *host)
1377 {
1378 	return host->devtype_data == &imx27_nand_devtype_data;
1379 }
1380 
is_imx25_nfc(struct mxc_nand_host * host)1381 static inline int is_imx25_nfc(struct mxc_nand_host *host)
1382 {
1383 	return host->devtype_data == &imx25_nand_devtype_data;
1384 }
1385 
1386 static const struct of_device_id mxcnd_dt_ids[] = {
1387 	{ .compatible = "fsl,imx21-nand", .data = &imx21_nand_devtype_data, },
1388 	{ .compatible = "fsl,imx27-nand", .data = &imx27_nand_devtype_data, },
1389 	{ .compatible = "fsl,imx25-nand", .data = &imx25_nand_devtype_data, },
1390 	{ .compatible = "fsl,imx51-nand", .data = &imx51_nand_devtype_data, },
1391 	{ .compatible = "fsl,imx53-nand", .data = &imx53_nand_devtype_data, },
1392 	{ /* sentinel */ }
1393 };
1394 MODULE_DEVICE_TABLE(of, mxcnd_dt_ids);
1395 
mxcnd_attach_chip(struct nand_chip * chip)1396 static int mxcnd_attach_chip(struct nand_chip *chip)
1397 {
1398 	struct mtd_info *mtd = nand_to_mtd(chip);
1399 	struct mxc_nand_host *host = nand_get_controller_data(chip);
1400 	struct device *dev = mtd->dev.parent;
1401 
1402 	chip->ecc.bytes = host->devtype_data->eccbytes;
1403 	host->eccsize = host->devtype_data->eccsize;
1404 	chip->ecc.size = 512;
1405 
1406 	switch (chip->ecc.engine_type) {
1407 	case NAND_ECC_ENGINE_TYPE_ON_HOST:
1408 		mtd_set_ooblayout(mtd, host->devtype_data->ooblayout);
1409 		chip->ecc.read_page = mxc_nand_read_page;
1410 		chip->ecc.read_page_raw = mxc_nand_read_page_raw;
1411 		chip->ecc.read_oob = mxc_nand_read_oob;
1412 		chip->ecc.write_page = mxc_nand_write_page_ecc;
1413 		chip->ecc.write_page_raw = mxc_nand_write_page_raw;
1414 		chip->ecc.write_oob = mxc_nand_write_oob;
1415 		break;
1416 
1417 	case NAND_ECC_ENGINE_TYPE_SOFT:
1418 		chip->ecc.write_page_raw = nand_monolithic_write_page_raw;
1419 		chip->ecc.read_page_raw = nand_monolithic_read_page_raw;
1420 		break;
1421 
1422 	default:
1423 		return -EINVAL;
1424 	}
1425 
1426 	if (chip->bbt_options & NAND_BBT_USE_FLASH) {
1427 		chip->bbt_td = &bbt_main_descr;
1428 		chip->bbt_md = &bbt_mirror_descr;
1429 	}
1430 
1431 	/* Allocate the right size buffer now */
1432 	devm_kfree(dev, (void *)host->data_buf);
1433 	host->data_buf = devm_kzalloc(dev, mtd->writesize + mtd->oobsize,
1434 				      GFP_KERNEL);
1435 	if (!host->data_buf)
1436 		return -ENOMEM;
1437 
1438 	/* Call preset again, with correct writesize chip time */
1439 	host->devtype_data->preset(mtd);
1440 
1441 	if (!chip->ecc.bytes) {
1442 		if (host->eccsize == 8)
1443 			chip->ecc.bytes = 18;
1444 		else if (host->eccsize == 4)
1445 			chip->ecc.bytes = 9;
1446 	}
1447 
1448 	/*
1449 	 * Experimentation shows that i.MX NFC can only handle up to 218 oob
1450 	 * bytes. Limit used_oobsize to 218 so as to not confuse copy_spare()
1451 	 * into copying invalid data to/from the spare IO buffer, as this
1452 	 * might cause ECC data corruption when doing sub-page write to a
1453 	 * partially written page.
1454 	 */
1455 	host->used_oobsize = min(mtd->oobsize, 218U);
1456 
1457 	if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST) {
1458 		if (is_imx21_nfc(host) || is_imx27_nfc(host))
1459 			chip->ecc.strength = 1;
1460 		else
1461 			chip->ecc.strength = (host->eccsize == 4) ? 4 : 8;
1462 	}
1463 
1464 	return 0;
1465 }
1466 
mxcnd_setup_interface(struct nand_chip * chip,int chipnr,const struct nand_interface_config * conf)1467 static int mxcnd_setup_interface(struct nand_chip *chip, int chipnr,
1468 				 const struct nand_interface_config *conf)
1469 {
1470 	struct mxc_nand_host *host = nand_get_controller_data(chip);
1471 
1472 	return host->devtype_data->setup_interface(chip, chipnr, conf);
1473 }
1474 
memff16_toio(void * buf,int n)1475 static void memff16_toio(void *buf, int n)
1476 {
1477 	__iomem u16 *t = buf;
1478 	int i;
1479 
1480 	for (i = 0; i < (n >> 1); i++)
1481 		__raw_writew(0xffff, t++);
1482 }
1483 
copy_page_to_sram(struct mtd_info * mtd,const void * buf,int buf_len)1484 static void copy_page_to_sram(struct mtd_info *mtd, const void *buf, int buf_len)
1485 {
1486 	struct nand_chip *this = mtd_to_nand(mtd);
1487 	struct mxc_nand_host *host = nand_get_controller_data(this);
1488 	unsigned int no_subpages = mtd->writesize / 512;
1489 	int oob_per_subpage, i;
1490 
1491 	oob_per_subpage = (mtd->oobsize / no_subpages) & ~1;
1492 
1493 	/*
1494 	 * During a page write the i.MX NAND controller will read 512b from
1495 	 * main_area0 SRAM, then oob_per_subpage bytes from spare0 SRAM, then
1496 	 * 512b from main_area1 SRAM and so on until the full page is written.
1497 	 * For software ECC we want to have a 1:1 mapping between the raw page
1498 	 * data on the NAND chip and the view of the NAND core. This is
1499 	 * necessary to make the NAND_CMD_RNDOUT read the data it expects.
1500 	 * To accomplish this we have to write the data in the order the controller
1501 	 * reads it. This is reversed in copy_page_from_sram() below.
1502 	 *
1503 	 * buf_len can either be the full page including the OOB or user data only.
1504 	 * When it's user data only make sure that we fill up the rest of the
1505 	 * SRAM with 0xff.
1506 	 */
1507 	for (i = 0; i < no_subpages; i++) {
1508 		int now = min(buf_len, 512);
1509 
1510 		if (now)
1511 			memcpy16_toio(host->main_area0 + i * 512, buf, now);
1512 
1513 		if (now < 512)
1514 			memff16_toio(host->main_area0 + i * 512 + now, 512 - now);
1515 
1516 		buf += 512;
1517 		buf_len -= now;
1518 
1519 		now = min(buf_len, oob_per_subpage);
1520 		if (now)
1521 			memcpy16_toio(host->spare0 + i * host->devtype_data->spare_len,
1522 				      buf, now);
1523 
1524 		if (now < oob_per_subpage)
1525 			memff16_toio(host->spare0 + i * host->devtype_data->spare_len + now,
1526 				     oob_per_subpage - now);
1527 
1528 		buf += oob_per_subpage;
1529 		buf_len -= now;
1530 	}
1531 }
1532 
copy_page_from_sram(struct mtd_info * mtd)1533 static void copy_page_from_sram(struct mtd_info *mtd)
1534 {
1535 	struct nand_chip *this = mtd_to_nand(mtd);
1536 	struct mxc_nand_host *host = nand_get_controller_data(this);
1537 	void *buf = host->data_buf;
1538 	unsigned int no_subpages = mtd->writesize / 512;
1539 	int oob_per_subpage, i;
1540 
1541 	/* mtd->writesize is not set during ident scanning */
1542 	if (!no_subpages)
1543 		no_subpages = 1;
1544 
1545 	oob_per_subpage = (mtd->oobsize / no_subpages) & ~1;
1546 
1547 	for (i = 0; i < no_subpages; i++) {
1548 		memcpy16_fromio(buf, host->main_area0 + i * 512, 512);
1549 		buf += 512;
1550 
1551 		memcpy16_fromio(buf, host->spare0 + i * host->devtype_data->spare_len,
1552 				oob_per_subpage);
1553 		buf += oob_per_subpage;
1554 	}
1555 }
1556 
mxcnd_do_exec_op(struct nand_chip * chip,const struct nand_subop * op)1557 static int mxcnd_do_exec_op(struct nand_chip *chip,
1558 			    const struct nand_subop *op)
1559 {
1560 	struct mxc_nand_host *host = nand_get_controller_data(chip);
1561 	struct mtd_info *mtd = nand_to_mtd(chip);
1562 	int i, j, buf_len;
1563 	void *buf_read = NULL;
1564 	const void *buf_write = NULL;
1565 	const struct nand_op_instr *instr;
1566 	bool readid = false;
1567 	bool statusreq = false;
1568 
1569 	for (i = 0; i < op->ninstrs; i++) {
1570 		instr = &op->instrs[i];
1571 
1572 		switch (instr->type) {
1573 		case NAND_OP_WAITRDY_INSTR:
1574 			/* NFC handles R/B internally, nothing to do here */
1575 			break;
1576 		case NAND_OP_CMD_INSTR:
1577 			host->devtype_data->send_cmd(host, instr->ctx.cmd.opcode, true);
1578 
1579 			if (instr->ctx.cmd.opcode == NAND_CMD_READID)
1580 				readid = true;
1581 			if (instr->ctx.cmd.opcode == NAND_CMD_STATUS)
1582 				statusreq = true;
1583 
1584 			break;
1585 		case NAND_OP_ADDR_INSTR:
1586 			for (j = 0; j < instr->ctx.addr.naddrs; j++) {
1587 				bool islast = j == instr->ctx.addr.naddrs - 1;
1588 				host->devtype_data->send_addr(host, instr->ctx.addr.addrs[j], islast);
1589 			}
1590 			break;
1591 		case NAND_OP_DATA_OUT_INSTR:
1592 			buf_write = instr->ctx.data.buf.out;
1593 			buf_len = instr->ctx.data.len;
1594 
1595 			if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST)
1596 				memcpy32_toio(host->main_area0, buf_write, buf_len);
1597 			else
1598 				copy_page_to_sram(mtd, buf_write, buf_len);
1599 
1600 			host->devtype_data->send_page(mtd, NFC_INPUT);
1601 
1602 			break;
1603 		case NAND_OP_DATA_IN_INSTR:
1604 
1605 			buf_read = instr->ctx.data.buf.in;
1606 			buf_len = instr->ctx.data.len;
1607 
1608 			if (readid) {
1609 				host->devtype_data->send_read_id(host);
1610 				readid = false;
1611 
1612 				memcpy32_fromio(host->data_buf, host->main_area0, buf_len * 2);
1613 
1614 				if (chip->options & NAND_BUSWIDTH_16) {
1615 					u8 *bufr = buf_read;
1616 					u16 *bufw = host->data_buf;
1617 					for (j = 0; j < buf_len; j++)
1618 						bufr[j] = bufw[j];
1619 				} else {
1620 					memcpy(buf_read, host->data_buf, buf_len);
1621 				}
1622 				break;
1623 			}
1624 
1625 			if (statusreq) {
1626 				*(u8*)buf_read = host->devtype_data->get_dev_status(host);
1627 				statusreq = false;
1628 				break;
1629 			}
1630 
1631 			host->devtype_data->read_page(chip);
1632 
1633 			if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST) {
1634 				if (IS_ALIGNED(buf_len, 4)) {
1635 					memcpy32_fromio(buf_read, host->main_area0, buf_len);
1636 				} else {
1637 					memcpy32_fromio(host->data_buf, host->main_area0, mtd->writesize);
1638 					memcpy(buf_read, host->data_buf, buf_len);
1639 				}
1640 			} else {
1641 				copy_page_from_sram(mtd);
1642 				memcpy(buf_read, host->data_buf, buf_len);
1643 			}
1644 
1645 			break;
1646 		}
1647 	}
1648 
1649 	return 0;
1650 }
1651 
1652 #define MAX_DATA_SIZE	(4096 + 512)
1653 
1654 static const struct nand_op_parser mxcnd_op_parser = NAND_OP_PARSER(
1655 	NAND_OP_PARSER_PATTERN(mxcnd_do_exec_op,
1656 			       NAND_OP_PARSER_PAT_CMD_ELEM(false),
1657 			       NAND_OP_PARSER_PAT_ADDR_ELEM(true, 7),
1658 			       NAND_OP_PARSER_PAT_CMD_ELEM(true),
1659 			       NAND_OP_PARSER_PAT_WAITRDY_ELEM(true),
1660 			       NAND_OP_PARSER_PAT_DATA_IN_ELEM(true, MAX_DATA_SIZE)),
1661 	NAND_OP_PARSER_PATTERN(mxcnd_do_exec_op,
1662 			       NAND_OP_PARSER_PAT_CMD_ELEM(false),
1663 			       NAND_OP_PARSER_PAT_ADDR_ELEM(false, 7),
1664 			       NAND_OP_PARSER_PAT_DATA_OUT_ELEM(false, MAX_DATA_SIZE),
1665 			       NAND_OP_PARSER_PAT_CMD_ELEM(false),
1666 			       NAND_OP_PARSER_PAT_WAITRDY_ELEM(true)),
1667 	NAND_OP_PARSER_PATTERN(mxcnd_do_exec_op,
1668 			       NAND_OP_PARSER_PAT_CMD_ELEM(false),
1669 			       NAND_OP_PARSER_PAT_ADDR_ELEM(false, 7),
1670 			       NAND_OP_PARSER_PAT_DATA_OUT_ELEM(false, MAX_DATA_SIZE),
1671 			       NAND_OP_PARSER_PAT_CMD_ELEM(true),
1672 			       NAND_OP_PARSER_PAT_WAITRDY_ELEM(true)),
1673 	);
1674 
mxcnd_exec_op(struct nand_chip * chip,const struct nand_operation * op,bool check_only)1675 static int mxcnd_exec_op(struct nand_chip *chip,
1676 			 const struct nand_operation *op, bool check_only)
1677 {
1678 	return nand_op_parser_exec_op(chip, &mxcnd_op_parser,
1679 				      op, check_only);
1680 }
1681 
1682 static const struct nand_controller_ops mxcnd_controller_ops = {
1683 	.attach_chip = mxcnd_attach_chip,
1684 	.setup_interface = mxcnd_setup_interface,
1685 	.exec_op = mxcnd_exec_op,
1686 };
1687 
mxcnd_probe(struct platform_device * pdev)1688 static int mxcnd_probe(struct platform_device *pdev)
1689 {
1690 	struct nand_chip *this;
1691 	struct mtd_info *mtd;
1692 	struct mxc_nand_host *host;
1693 	int err = 0;
1694 
1695 	/* Allocate memory for MTD device structure and private data */
1696 	host = devm_kzalloc(&pdev->dev, sizeof(struct mxc_nand_host),
1697 			GFP_KERNEL);
1698 	if (!host)
1699 		return -ENOMEM;
1700 
1701 	/* allocate a temporary buffer for the nand_scan_ident() */
1702 	host->data_buf = devm_kzalloc(&pdev->dev, PAGE_SIZE, GFP_KERNEL);
1703 	if (!host->data_buf)
1704 		return -ENOMEM;
1705 
1706 	host->dev = &pdev->dev;
1707 	/* structures must be linked */
1708 	this = &host->nand;
1709 	mtd = nand_to_mtd(this);
1710 	mtd->dev.parent = &pdev->dev;
1711 	mtd->name = DRIVER_NAME;
1712 
1713 	/* 50 us command delay time */
1714 	this->legacy.chip_delay = 5;
1715 
1716 	nand_set_controller_data(this, host);
1717 	nand_set_flash_node(this, pdev->dev.of_node);
1718 
1719 	host->clk = devm_clk_get(&pdev->dev, NULL);
1720 	if (IS_ERR(host->clk))
1721 		return PTR_ERR(host->clk);
1722 
1723 	host->devtype_data = device_get_match_data(&pdev->dev);
1724 
1725 	if (!host->devtype_data->setup_interface)
1726 		this->options |= NAND_KEEP_TIMINGS;
1727 
1728 	if (host->devtype_data->needs_ip) {
1729 		host->regs_ip = devm_platform_ioremap_resource(pdev, 0);
1730 		if (IS_ERR(host->regs_ip))
1731 			return PTR_ERR(host->regs_ip);
1732 
1733 		host->base = devm_platform_ioremap_resource(pdev, 1);
1734 	} else {
1735 		host->base = devm_platform_ioremap_resource(pdev, 0);
1736 	}
1737 
1738 	if (IS_ERR(host->base))
1739 		return PTR_ERR(host->base);
1740 
1741 	host->main_area0 = host->base;
1742 
1743 	if (host->devtype_data->regs_offset)
1744 		host->regs = host->base + host->devtype_data->regs_offset;
1745 	host->spare0 = host->base + host->devtype_data->spare0_offset;
1746 	if (host->devtype_data->axi_offset)
1747 		host->regs_axi = host->base + host->devtype_data->axi_offset;
1748 
1749 	this->legacy.select_chip = host->devtype_data->select_chip;
1750 
1751 	init_completion(&host->op_completion);
1752 
1753 	host->irq = platform_get_irq(pdev, 0);
1754 	if (host->irq < 0)
1755 		return host->irq;
1756 
1757 	/*
1758 	 * Use host->devtype_data->irq_control() here instead of irq_control()
1759 	 * because we must not disable_irq_nosync without having requested the
1760 	 * irq.
1761 	 */
1762 	host->devtype_data->irq_control(host, 0);
1763 
1764 	err = devm_request_irq(&pdev->dev, host->irq, mxc_nfc_irq,
1765 			0, DRIVER_NAME, host);
1766 	if (err)
1767 		return err;
1768 
1769 	err = clk_prepare_enable(host->clk);
1770 	if (err)
1771 		return err;
1772 	host->clk_act = 1;
1773 
1774 	/*
1775 	 * Now that we "own" the interrupt make sure the interrupt mask bit is
1776 	 * cleared on i.MX21. Otherwise we can't read the interrupt status bit
1777 	 * on this machine.
1778 	 */
1779 	if (host->devtype_data->irqpending_quirk) {
1780 		disable_irq_nosync(host->irq);
1781 		host->devtype_data->irq_control(host, 1);
1782 	}
1783 
1784 	/* Scan the NAND device */
1785 	this->legacy.dummy_controller.ops = &mxcnd_controller_ops;
1786 	err = nand_scan(this, is_imx25_nfc(host) ? 4 : 1);
1787 	if (err)
1788 		goto escan;
1789 
1790 	/* Register the partitions */
1791 	err = mtd_device_parse_register(mtd, part_probes, NULL, NULL, 0);
1792 	if (err)
1793 		goto cleanup_nand;
1794 
1795 	platform_set_drvdata(pdev, host);
1796 
1797 	return 0;
1798 
1799 cleanup_nand:
1800 	nand_cleanup(this);
1801 escan:
1802 	if (host->clk_act)
1803 		clk_disable_unprepare(host->clk);
1804 
1805 	return err;
1806 }
1807 
mxcnd_remove(struct platform_device * pdev)1808 static void mxcnd_remove(struct platform_device *pdev)
1809 {
1810 	struct mxc_nand_host *host = platform_get_drvdata(pdev);
1811 	struct nand_chip *chip = &host->nand;
1812 	int ret;
1813 
1814 	ret = mtd_device_unregister(nand_to_mtd(chip));
1815 	WARN_ON(ret);
1816 	nand_cleanup(chip);
1817 	if (host->clk_act)
1818 		clk_disable_unprepare(host->clk);
1819 }
1820 
1821 static struct platform_driver mxcnd_driver = {
1822 	.driver = {
1823 		   .name = DRIVER_NAME,
1824 		   .of_match_table = mxcnd_dt_ids,
1825 	},
1826 	.probe = mxcnd_probe,
1827 	.remove_new = mxcnd_remove,
1828 };
1829 module_platform_driver(mxcnd_driver);
1830 
1831 MODULE_AUTHOR("Freescale Semiconductor, Inc.");
1832 MODULE_DESCRIPTION("MXC NAND MTD driver");
1833 MODULE_LICENSE("GPL");
1834