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 = 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