1
2
3
4
5
6
7
8
9#include <common.h>
10#include <malloc.h>
11#include <fdtdec.h>
12#include <nand.h>
13#include <asm/global_data.h>
14#include <dm/device_compat.h>
15#include <dm/devres.h>
16#include <linux/bitops.h>
17#include <linux/bug.h>
18#include <linux/delay.h>
19#include <linux/err.h>
20#include <linux/errno.h>
21#include <asm/io.h>
22#include <asm/arch/cpu.h>
23#include <linux/mtd/mtd.h>
24#include <linux/mtd/rawnand.h>
25#include <linux/types.h>
26#include <syscon.h>
27#include <regmap.h>
28#include <dm/uclass.h>
29#include <dm/read.h>
30
31#include "pxa3xx_nand.h"
32
33DECLARE_GLOBAL_DATA_PTR;
34
35#define TIMEOUT_DRAIN_FIFO 5
36#define CHIP_DELAY_TIMEOUT 200
37#define NAND_STOP_DELAY 40
38
39
40
41
42
43
44
45
46
47#define INIT_BUFFER_SIZE 2048
48
49
50#define NDCR (0x00)
51#define NDTR0CS0 (0x04)
52#define NDTR1CS0 (0x0C)
53#define NDSR (0x14)
54#define NDPCR (0x18)
55#define NDBDR0 (0x1C)
56#define NDBDR1 (0x20)
57#define NDECCCTRL (0x28)
58#define NDDB (0x40)
59#define NDCB0 (0x48)
60#define NDCB1 (0x4C)
61#define NDCB2 (0x50)
62
63#define NDCR_SPARE_EN (0x1 << 31)
64#define NDCR_ECC_EN (0x1 << 30)
65#define NDCR_DMA_EN (0x1 << 29)
66#define NDCR_ND_RUN (0x1 << 28)
67#define NDCR_DWIDTH_C (0x1 << 27)
68#define NDCR_DWIDTH_M (0x1 << 26)
69#define NDCR_PAGE_SZ (0x1 << 24)
70#define NDCR_NCSX (0x1 << 23)
71#define NDCR_ND_MODE (0x3 << 21)
72#define NDCR_NAND_MODE (0x0)
73#define NDCR_CLR_PG_CNT (0x1 << 20)
74#define NFCV1_NDCR_ARB_CNTL (0x1 << 19)
75#define NDCR_RD_ID_CNT_MASK (0x7 << 16)
76#define NDCR_RD_ID_CNT(x) (((x) << 16) & NDCR_RD_ID_CNT_MASK)
77
78#define NDCR_RA_START (0x1 << 15)
79#define NDCR_PG_PER_BLK (0x1 << 14)
80#define NDCR_ND_ARB_EN (0x1 << 12)
81#define NDCR_INT_MASK (0xFFF)
82
83#define NDSR_MASK (0xfff)
84#define NDSR_ERR_CNT_OFF (16)
85#define NDSR_ERR_CNT_MASK (0x1f)
86#define NDSR_ERR_CNT(sr) ((sr >> NDSR_ERR_CNT_OFF) & NDSR_ERR_CNT_MASK)
87#define NDSR_RDY (0x1 << 12)
88#define NDSR_FLASH_RDY (0x1 << 11)
89#define NDSR_CS0_PAGED (0x1 << 10)
90#define NDSR_CS1_PAGED (0x1 << 9)
91#define NDSR_CS0_CMDD (0x1 << 8)
92#define NDSR_CS1_CMDD (0x1 << 7)
93#define NDSR_CS0_BBD (0x1 << 6)
94#define NDSR_CS1_BBD (0x1 << 5)
95#define NDSR_UNCORERR (0x1 << 4)
96#define NDSR_CORERR (0x1 << 3)
97#define NDSR_WRDREQ (0x1 << 2)
98#define NDSR_RDDREQ (0x1 << 1)
99#define NDSR_WRCMDREQ (0x1)
100
101#define NDCB0_LEN_OVRD (0x1 << 28)
102#define NDCB0_ST_ROW_EN (0x1 << 26)
103#define NDCB0_AUTO_RS (0x1 << 25)
104#define NDCB0_CSEL (0x1 << 24)
105#define NDCB0_EXT_CMD_TYPE_MASK (0x7 << 29)
106#define NDCB0_EXT_CMD_TYPE(x) (((x) << 29) & NDCB0_EXT_CMD_TYPE_MASK)
107#define NDCB0_CMD_TYPE_MASK (0x7 << 21)
108#define NDCB0_CMD_TYPE(x) (((x) << 21) & NDCB0_CMD_TYPE_MASK)
109#define NDCB0_NC (0x1 << 20)
110#define NDCB0_DBC (0x1 << 19)
111#define NDCB0_ADDR_CYC_MASK (0x7 << 16)
112#define NDCB0_ADDR_CYC(x) (((x) << 16) & NDCB0_ADDR_CYC_MASK)
113#define NDCB0_CMD2_MASK (0xff << 8)
114#define NDCB0_CMD1_MASK (0xff)
115#define NDCB0_ADDR_CYC_SHIFT (16)
116
117#define EXT_CMD_TYPE_DISPATCH 6
118#define EXT_CMD_TYPE_NAKED_RW 5
119#define EXT_CMD_TYPE_READ 4
120#define EXT_CMD_TYPE_DISP_WR 4
121#define EXT_CMD_TYPE_FINAL 3
122#define EXT_CMD_TYPE_LAST_RW 1
123#define EXT_CMD_TYPE_MONO 0
124
125
126#define GENCONF_SOC_DEVICE_MUX 0x208
127#define GENCONF_SOC_DEVICE_MUX_NFC_EN BIT(0)
128
129
130
131
132
133
134#define READ_ID_BYTES 7
135
136
137#define nand_writel(info, off, val) \
138 writel((val), (info)->mmio_base + (off))
139
140#define nand_readl(info, off) \
141 readl((info)->mmio_base + (off))
142
143
144enum {
145 ERR_NONE = 0,
146 ERR_DMABUSERR = -1,
147 ERR_SENDCMD = -2,
148 ERR_UNCORERR = -3,
149 ERR_BBERR = -4,
150 ERR_CORERR = -5,
151};
152
153enum {
154 STATE_IDLE = 0,
155 STATE_PREPARED,
156 STATE_CMD_HANDLE,
157 STATE_DMA_READING,
158 STATE_DMA_WRITING,
159 STATE_DMA_DONE,
160 STATE_PIO_READING,
161 STATE_PIO_WRITING,
162 STATE_CMD_DONE,
163 STATE_READY,
164};
165
166enum pxa3xx_nand_variant {
167 PXA3XX_NAND_VARIANT_PXA,
168 PXA3XX_NAND_VARIANT_ARMADA370,
169 PXA3XX_NAND_VARIANT_ARMADA_8K,
170};
171
172struct pxa3xx_nand_host {
173 struct nand_chip chip;
174 void *info_data;
175
176
177 int use_ecc;
178 int cs;
179
180
181 unsigned int col_addr_cycles;
182 unsigned int row_addr_cycles;
183};
184
185struct pxa3xx_nand_info {
186 struct nand_hw_control controller;
187 struct pxa3xx_nand_platform_data *pdata;
188
189 struct clk *clk;
190 void __iomem *mmio_base;
191 unsigned long mmio_phys;
192 int cmd_complete, dev_ready;
193
194 unsigned int buf_start;
195 unsigned int buf_count;
196 unsigned int buf_size;
197 unsigned int data_buff_pos;
198 unsigned int oob_buff_pos;
199
200 unsigned char *data_buff;
201 unsigned char *oob_buff;
202
203 struct pxa3xx_nand_host *host[NUM_CHIP_SELECT];
204 unsigned int state;
205
206
207
208
209
210 enum pxa3xx_nand_variant variant;
211
212 int cs;
213 int use_ecc;
214 int force_raw;
215 int ecc_bch;
216 int use_spare;
217 int need_wait;
218
219
220 unsigned int chunk_size;
221
222
223 unsigned int spare_size;
224
225
226 unsigned int nfullchunks;
227
228
229
230
231
232
233 unsigned int ntotalchunks;
234
235
236 unsigned int last_chunk_size;
237
238
239 unsigned int last_spare_size;
240
241 unsigned int ecc_size;
242 unsigned int ecc_err_cnt;
243 unsigned int max_bitflips;
244 int retcode;
245
246
247
248
249
250
251
252
253 unsigned int step_chunk_size;
254 unsigned int step_spare_size;
255 unsigned int cur_chunk;
256
257
258 uint32_t reg_ndcr;
259 uint32_t ndtr0cs0;
260 uint32_t ndtr1cs0;
261
262
263 uint32_t ndcb0;
264 uint32_t ndcb1;
265 uint32_t ndcb2;
266 uint32_t ndcb3;
267};
268
269static struct pxa3xx_nand_timing timing[] = {
270
271
272
273
274
275
276
277
278
279
280
281
282 { 40, 80, 60, 100, 80, 100, 90000, 400, 40, },
283 { 10, 0, 20, 40, 30, 40, 11123, 110, 10, },
284 { 10, 25, 15, 25, 15, 30, 25000, 60, 10, },
285 { 10, 35, 15, 25, 15, 25, 25000, 60, 10, },
286 { 5, 20, 10, 12, 10, 12, 25000, 60, 10, },
287};
288
289static struct pxa3xx_nand_flash builtin_flash_types[] = {
290
291
292
293
294
295
296
297 { 0x46ec, 16, 16, &timing[1] },
298 { 0xdaec, 8, 8, &timing[1] },
299 { 0xd7ec, 8, 8, &timing[1] },
300 { 0xa12c, 8, 8, &timing[2] },
301 { 0xb12c, 16, 16, &timing[2] },
302 { 0xdc2c, 8, 8, &timing[2] },
303 { 0xcc2c, 16, 16, &timing[2] },
304 { 0xba20, 16, 16, &timing[3] },
305 { 0xda98, 8, 8, &timing[4] },
306};
307
308#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
309static u8 bbt_pattern[] = {'M', 'V', 'B', 'b', 't', '0' };
310static u8 bbt_mirror_pattern[] = {'1', 't', 'b', 'B', 'V', 'M' };
311
312static struct nand_bbt_descr bbt_main_descr = {
313 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
314 | NAND_BBT_2BIT | NAND_BBT_VERSION,
315 .offs = 8,
316 .len = 6,
317 .veroffs = 14,
318 .maxblocks = 8,
319 .pattern = bbt_pattern
320};
321
322static struct nand_bbt_descr bbt_mirror_descr = {
323 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
324 | NAND_BBT_2BIT | NAND_BBT_VERSION,
325 .offs = 8,
326 .len = 6,
327 .veroffs = 14,
328 .maxblocks = 8,
329 .pattern = bbt_mirror_pattern
330};
331#endif
332
333static struct nand_ecclayout ecc_layout_2KB_bch4bit = {
334 .eccbytes = 32,
335 .eccpos = {
336 32, 33, 34, 35, 36, 37, 38, 39,
337 40, 41, 42, 43, 44, 45, 46, 47,
338 48, 49, 50, 51, 52, 53, 54, 55,
339 56, 57, 58, 59, 60, 61, 62, 63},
340 .oobfree = { {2, 30} }
341};
342
343static struct nand_ecclayout ecc_layout_2KB_bch8bit = {
344 .eccbytes = 64,
345 .eccpos = {
346 32, 33, 34, 35, 36, 37, 38, 39,
347 40, 41, 42, 43, 44, 45, 46, 47,
348 48, 49, 50, 51, 52, 53, 54, 55,
349 56, 57, 58, 59, 60, 61, 62, 63,
350 64, 65, 66, 67, 68, 69, 70, 71,
351 72, 73, 74, 75, 76, 77, 78, 79,
352 80, 81, 82, 83, 84, 85, 86, 87,
353 88, 89, 90, 91, 92, 93, 94, 95},
354 .oobfree = { {1, 4}, {6, 26} }
355};
356
357static struct nand_ecclayout ecc_layout_4KB_bch4bit = {
358 .eccbytes = 64,
359 .eccpos = {
360 32, 33, 34, 35, 36, 37, 38, 39,
361 40, 41, 42, 43, 44, 45, 46, 47,
362 48, 49, 50, 51, 52, 53, 54, 55,
363 56, 57, 58, 59, 60, 61, 62, 63,
364 96, 97, 98, 99, 100, 101, 102, 103,
365 104, 105, 106, 107, 108, 109, 110, 111,
366 112, 113, 114, 115, 116, 117, 118, 119,
367 120, 121, 122, 123, 124, 125, 126, 127},
368
369 .oobfree = { {6, 26}, { 64, 32} }
370};
371
372static struct nand_ecclayout ecc_layout_8KB_bch4bit = {
373 .eccbytes = 128,
374 .eccpos = {
375 32, 33, 34, 35, 36, 37, 38, 39,
376 40, 41, 42, 43, 44, 45, 46, 47,
377 48, 49, 50, 51, 52, 53, 54, 55,
378 56, 57, 58, 59, 60, 61, 62, 63,
379
380 96, 97, 98, 99, 100, 101, 102, 103,
381 104, 105, 106, 107, 108, 109, 110, 111,
382 112, 113, 114, 115, 116, 117, 118, 119,
383 120, 121, 122, 123, 124, 125, 126, 127,
384
385 160, 161, 162, 163, 164, 165, 166, 167,
386 168, 169, 170, 171, 172, 173, 174, 175,
387 176, 177, 178, 179, 180, 181, 182, 183,
388 184, 185, 186, 187, 188, 189, 190, 191,
389
390 224, 225, 226, 227, 228, 229, 230, 231,
391 232, 233, 234, 235, 236, 237, 238, 239,
392 240, 241, 242, 243, 244, 245, 246, 247,
393 248, 249, 250, 251, 252, 253, 254, 255},
394
395
396 .oobfree = { {1, 4}, {6, 26}, { 64, 32}, {128, 32}, {192, 32} }
397};
398
399static struct nand_ecclayout ecc_layout_4KB_bch8bit = {
400 .eccbytes = 128,
401 .eccpos = {
402 32, 33, 34, 35, 36, 37, 38, 39,
403 40, 41, 42, 43, 44, 45, 46, 47,
404 48, 49, 50, 51, 52, 53, 54, 55,
405 56, 57, 58, 59, 60, 61, 62, 63},
406 .oobfree = { }
407};
408
409static struct nand_ecclayout ecc_layout_8KB_bch8bit = {
410 .eccbytes = 256,
411 .eccpos = {},
412
413 .oobfree = {{0, 160} }
414};
415
416#define NDTR0_tCH(c) (min((c), 7) << 19)
417#define NDTR0_tCS(c) (min((c), 7) << 16)
418#define NDTR0_tWH(c) (min((c), 7) << 11)
419#define NDTR0_tWP(c) (min((c), 7) << 8)
420#define NDTR0_tRH(c) (min((c), 7) << 3)
421#define NDTR0_tRP(c) (min((c), 7) << 0)
422
423#define NDTR1_tR(c) (min((c), 65535) << 16)
424#define NDTR1_tWHR(c) (min((c), 15) << 4)
425#define NDTR1_tAR(c) (min((c), 15) << 0)
426
427
428#define ns2cycle(ns, clk) (int)((ns) * (clk / 1000000) / 1000)
429
430static const struct udevice_id pxa3xx_nand_dt_ids[] = {
431 {
432 .compatible = "marvell,armada370-nand-controller",
433 .data = PXA3XX_NAND_VARIANT_ARMADA370,
434 },
435 {
436 .compatible = "marvell,armada-8k-nand-controller",
437 .data = PXA3XX_NAND_VARIANT_ARMADA_8K,
438 },
439 {}
440};
441
442static enum pxa3xx_nand_variant pxa3xx_nand_get_variant(struct udevice *dev)
443{
444 return dev_get_driver_data(dev);
445}
446
447static void pxa3xx_nand_set_timing(struct pxa3xx_nand_host *host,
448 const struct pxa3xx_nand_timing *t)
449{
450 struct pxa3xx_nand_info *info = host->info_data;
451 unsigned long nand_clk = mvebu_get_nand_clock();
452 uint32_t ndtr0, ndtr1;
453
454 ndtr0 = NDTR0_tCH(ns2cycle(t->tCH, nand_clk)) |
455 NDTR0_tCS(ns2cycle(t->tCS, nand_clk)) |
456 NDTR0_tWH(ns2cycle(t->tWH, nand_clk)) |
457 NDTR0_tWP(ns2cycle(t->tWP, nand_clk)) |
458 NDTR0_tRH(ns2cycle(t->tRH, nand_clk)) |
459 NDTR0_tRP(ns2cycle(t->tRP, nand_clk));
460
461 ndtr1 = NDTR1_tR(ns2cycle(t->tR, nand_clk)) |
462 NDTR1_tWHR(ns2cycle(t->tWHR, nand_clk)) |
463 NDTR1_tAR(ns2cycle(t->tAR, nand_clk));
464
465 info->ndtr0cs0 = ndtr0;
466 info->ndtr1cs0 = ndtr1;
467 nand_writel(info, NDTR0CS0, ndtr0);
468 nand_writel(info, NDTR1CS0, ndtr1);
469}
470
471static void pxa3xx_nand_set_sdr_timing(struct pxa3xx_nand_host *host,
472 const struct nand_sdr_timings *t)
473{
474 struct pxa3xx_nand_info *info = host->info_data;
475 struct nand_chip *chip = &host->chip;
476 unsigned long nand_clk = mvebu_get_nand_clock();
477 uint32_t ndtr0, ndtr1;
478
479 u32 tCH_min = DIV_ROUND_UP(t->tCH_min, 1000);
480 u32 tCS_min = DIV_ROUND_UP(t->tCS_min, 1000);
481 u32 tWH_min = DIV_ROUND_UP(t->tWH_min, 1000);
482 u32 tWP_min = DIV_ROUND_UP(t->tWC_min - t->tWH_min, 1000);
483 u32 tREH_min = DIV_ROUND_UP(t->tREH_min, 1000);
484 u32 tRP_min = DIV_ROUND_UP(t->tRC_min - t->tREH_min, 1000);
485 u32 tR = chip->chip_delay * 1000;
486 u32 tWHR_min = DIV_ROUND_UP(t->tWHR_min, 1000);
487 u32 tAR_min = DIV_ROUND_UP(t->tAR_min, 1000);
488
489
490 if (!tR)
491 tR = 20000;
492
493 ndtr0 = NDTR0_tCH(ns2cycle(tCH_min, nand_clk)) |
494 NDTR0_tCS(ns2cycle(tCS_min, nand_clk)) |
495 NDTR0_tWH(ns2cycle(tWH_min, nand_clk)) |
496 NDTR0_tWP(ns2cycle(tWP_min, nand_clk)) |
497 NDTR0_tRH(ns2cycle(tREH_min, nand_clk)) |
498 NDTR0_tRP(ns2cycle(tRP_min, nand_clk));
499
500 ndtr1 = NDTR1_tR(ns2cycle(tR, nand_clk)) |
501 NDTR1_tWHR(ns2cycle(tWHR_min, nand_clk)) |
502 NDTR1_tAR(ns2cycle(tAR_min, nand_clk));
503
504 info->ndtr0cs0 = ndtr0;
505 info->ndtr1cs0 = ndtr1;
506 nand_writel(info, NDTR0CS0, ndtr0);
507 nand_writel(info, NDTR1CS0, ndtr1);
508}
509
510static int pxa3xx_nand_init_timings(struct pxa3xx_nand_host *host)
511{
512 const struct nand_sdr_timings *timings;
513 struct nand_chip *chip = &host->chip;
514 struct pxa3xx_nand_info *info = host->info_data;
515 const struct pxa3xx_nand_flash *f = NULL;
516 struct mtd_info *mtd = nand_to_mtd(&host->chip);
517 int mode, id, ntypes, i;
518
519 mode = onfi_get_async_timing_mode(chip);
520 if (mode == ONFI_TIMING_MODE_UNKNOWN) {
521 ntypes = ARRAY_SIZE(builtin_flash_types);
522
523 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
524
525 id = chip->read_byte(mtd);
526 id |= chip->read_byte(mtd) << 0x8;
527
528 for (i = 0; i < ntypes; i++) {
529 f = &builtin_flash_types[i];
530
531 if (f->chip_id == id)
532 break;
533 }
534
535 if (i == ntypes) {
536 dev_err(mtd->dev, "Error: timings not found\n");
537 return -EINVAL;
538 }
539
540 pxa3xx_nand_set_timing(host, f->timing);
541
542 if (f->flash_width == 16) {
543 info->reg_ndcr |= NDCR_DWIDTH_M;
544 chip->options |= NAND_BUSWIDTH_16;
545 }
546
547 info->reg_ndcr |= (f->dfc_width == 16) ? NDCR_DWIDTH_C : 0;
548 } else {
549 mode = fls(mode) - 1;
550 if (mode < 0)
551 mode = 0;
552
553 timings = onfi_async_timing_mode_to_sdr_timings(mode);
554 if (IS_ERR(timings))
555 return PTR_ERR(timings);
556
557 pxa3xx_nand_set_sdr_timing(host, timings);
558 }
559
560 return 0;
561}
562
563
564
565
566
567
568
569static void pxa3xx_nand_start(struct pxa3xx_nand_info *info)
570{
571 uint32_t ndcr;
572
573 ndcr = info->reg_ndcr;
574
575 if (info->use_ecc) {
576 ndcr |= NDCR_ECC_EN;
577 if (info->ecc_bch)
578 nand_writel(info, NDECCCTRL, 0x1);
579 } else {
580 ndcr &= ~NDCR_ECC_EN;
581 if (info->ecc_bch)
582 nand_writel(info, NDECCCTRL, 0x0);
583 }
584
585 ndcr &= ~NDCR_DMA_EN;
586
587 if (info->use_spare)
588 ndcr |= NDCR_SPARE_EN;
589 else
590 ndcr &= ~NDCR_SPARE_EN;
591
592 ndcr |= NDCR_ND_RUN;
593
594
595 nand_writel(info, NDSR, NDSR_MASK);
596 nand_writel(info, NDCR, 0);
597 nand_writel(info, NDCR, ndcr);
598}
599
600static void disable_int(struct pxa3xx_nand_info *info, uint32_t int_mask)
601{
602 uint32_t ndcr;
603
604 ndcr = nand_readl(info, NDCR);
605 nand_writel(info, NDCR, ndcr | int_mask);
606}
607
608static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len)
609{
610 if (info->ecc_bch && !info->force_raw) {
611 u32 ts;
612
613
614
615
616
617
618
619
620
621 while (len > 8) {
622 readsl(info->mmio_base + NDDB, data, 8);
623
624 ts = get_timer(0);
625 while (!(nand_readl(info, NDSR) & NDSR_RDDREQ)) {
626 if (get_timer(ts) > TIMEOUT_DRAIN_FIFO) {
627 dev_err(info->controller.active->mtd.dev,
628 "Timeout on RDDREQ while draining the FIFO\n");
629 return;
630 }
631 }
632
633 data += 32;
634 len -= 8;
635 }
636 }
637
638 readsl(info->mmio_base + NDDB, data, len);
639}
640
641static void handle_data_pio(struct pxa3xx_nand_info *info)
642{
643 int data_len = info->step_chunk_size;
644
645
646
647
648
649
650 if (info->force_raw)
651 data_len += info->step_spare_size + info->ecc_size;
652
653 switch (info->state) {
654 case STATE_PIO_WRITING:
655 if (info->step_chunk_size)
656 writesl(info->mmio_base + NDDB,
657 info->data_buff + info->data_buff_pos,
658 DIV_ROUND_UP(data_len, 4));
659
660 if (info->step_spare_size)
661 writesl(info->mmio_base + NDDB,
662 info->oob_buff + info->oob_buff_pos,
663 DIV_ROUND_UP(info->step_spare_size, 4));
664 break;
665 case STATE_PIO_READING:
666 if (data_len)
667 drain_fifo(info,
668 info->data_buff + info->data_buff_pos,
669 DIV_ROUND_UP(data_len, 4));
670
671 if (info->force_raw)
672 break;
673
674 if (info->step_spare_size)
675 drain_fifo(info,
676 info->oob_buff + info->oob_buff_pos,
677 DIV_ROUND_UP(info->step_spare_size, 4));
678 break;
679 default:
680 dev_err(info->controller.active->mtd.dev,
681 "%s: invalid state %d\n", __func__, info->state);
682 BUG();
683 }
684
685
686 info->data_buff_pos += data_len;
687 info->oob_buff_pos += info->step_spare_size;
688}
689
690static void pxa3xx_nand_irq_thread(struct pxa3xx_nand_info *info)
691{
692 handle_data_pio(info);
693
694 info->state = STATE_CMD_DONE;
695 nand_writel(info, NDSR, NDSR_WRDREQ | NDSR_RDDREQ);
696}
697
698static irqreturn_t pxa3xx_nand_irq(struct pxa3xx_nand_info *info)
699{
700 unsigned int status, is_completed = 0, is_ready = 0;
701 unsigned int ready, cmd_done;
702 irqreturn_t ret = IRQ_HANDLED;
703
704 if (info->cs == 0) {
705 ready = NDSR_FLASH_RDY;
706 cmd_done = NDSR_CS0_CMDD;
707 } else {
708 ready = NDSR_RDY;
709 cmd_done = NDSR_CS1_CMDD;
710 }
711
712
713 ndelay(1);
714
715 status = nand_readl(info, NDSR);
716
717 if (status & NDSR_UNCORERR)
718 info->retcode = ERR_UNCORERR;
719 if (status & NDSR_CORERR) {
720 info->retcode = ERR_CORERR;
721 if ((info->variant == PXA3XX_NAND_VARIANT_ARMADA370 ||
722 info->variant == PXA3XX_NAND_VARIANT_ARMADA_8K) &&
723 info->ecc_bch)
724 info->ecc_err_cnt = NDSR_ERR_CNT(status);
725 else
726 info->ecc_err_cnt = 1;
727
728
729
730
731
732
733 info->max_bitflips = max_t(unsigned int,
734 info->max_bitflips,
735 info->ecc_err_cnt);
736 }
737 if (status & (NDSR_RDDREQ | NDSR_WRDREQ)) {
738 info->state = (status & NDSR_RDDREQ) ?
739 STATE_PIO_READING : STATE_PIO_WRITING;
740
741 pxa3xx_nand_irq_thread(info);
742 return 0;
743 }
744 if (status & cmd_done) {
745 info->state = STATE_CMD_DONE;
746 is_completed = 1;
747 }
748 if (status & ready) {
749 info->state = STATE_READY;
750 is_ready = 1;
751 }
752
753
754
755
756
757
758 nand_writel(info, NDSR, status);
759
760 if (status & NDSR_WRCMDREQ) {
761 status &= ~NDSR_WRCMDREQ;
762 info->state = STATE_CMD_HANDLE;
763
764
765
766
767
768
769
770
771
772 nand_writel(info, NDCB0, info->ndcb0);
773 nand_writel(info, NDCB0, info->ndcb1);
774 nand_writel(info, NDCB0, info->ndcb2);
775
776
777 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370 ||
778 info->variant == PXA3XX_NAND_VARIANT_ARMADA_8K)
779 nand_writel(info, NDCB0, info->ndcb3);
780 }
781
782 if (is_completed)
783 info->cmd_complete = 1;
784 if (is_ready)
785 info->dev_ready = 1;
786
787 return ret;
788}
789
790static inline int is_buf_blank(uint8_t *buf, size_t len)
791{
792 for (; len > 0; len--)
793 if (*buf++ != 0xff)
794 return 0;
795 return 1;
796}
797
798static void set_command_address(struct pxa3xx_nand_info *info,
799 unsigned int page_size, uint16_t column, int page_addr)
800{
801
802 if (page_size < info->chunk_size) {
803 info->ndcb1 = ((page_addr & 0xFFFFFF) << 8)
804 | (column & 0xFF);
805
806 info->ndcb2 = 0;
807 } else {
808 info->ndcb1 = ((page_addr & 0xFFFF) << 16)
809 | (column & 0xFFFF);
810
811 if (page_addr & 0xFF0000)
812 info->ndcb2 = (page_addr & 0xFF0000) >> 16;
813 else
814 info->ndcb2 = 0;
815 }
816}
817
818static void prepare_start_command(struct pxa3xx_nand_info *info, int command)
819{
820 struct pxa3xx_nand_host *host = info->host[info->cs];
821 struct mtd_info *mtd = nand_to_mtd(&host->chip);
822
823
824 info->buf_start = 0;
825 info->buf_count = 0;
826 info->data_buff_pos = 0;
827 info->oob_buff_pos = 0;
828 info->step_chunk_size = 0;
829 info->step_spare_size = 0;
830 info->cur_chunk = 0;
831 info->use_ecc = 0;
832 info->use_spare = 1;
833 info->retcode = ERR_NONE;
834 info->ecc_err_cnt = 0;
835 info->ndcb3 = 0;
836 info->need_wait = 0;
837
838 switch (command) {
839 case NAND_CMD_READ0:
840 case NAND_CMD_READOOB:
841 case NAND_CMD_PAGEPROG:
842 if (!info->force_raw)
843 info->use_ecc = 1;
844 break;
845 case NAND_CMD_PARAM:
846 info->use_spare = 0;
847 break;
848 default:
849 info->ndcb1 = 0;
850 info->ndcb2 = 0;
851 break;
852 }
853
854
855
856
857
858 if (command == NAND_CMD_READ0 ||
859 command == NAND_CMD_READOOB ||
860 command == NAND_CMD_SEQIN) {
861 info->buf_count = mtd->writesize + mtd->oobsize;
862 memset(info->data_buff, 0xFF, info->buf_count);
863 }
864}
865
866static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
867 int ext_cmd_type, uint16_t column, int page_addr)
868{
869 int addr_cycle, exec_cmd;
870 struct pxa3xx_nand_host *host;
871 struct mtd_info *mtd;
872
873 host = info->host[info->cs];
874 mtd = nand_to_mtd(&host->chip);
875 addr_cycle = 0;
876 exec_cmd = 1;
877
878 if (info->cs != 0)
879 info->ndcb0 = NDCB0_CSEL;
880 else
881 info->ndcb0 = 0;
882
883 if (command == NAND_CMD_SEQIN)
884 exec_cmd = 0;
885
886 addr_cycle = NDCB0_ADDR_CYC(host->row_addr_cycles
887 + host->col_addr_cycles);
888
889 switch (command) {
890 case NAND_CMD_READOOB:
891 case NAND_CMD_READ0:
892 info->buf_start = column;
893 info->ndcb0 |= NDCB0_CMD_TYPE(0)
894 | addr_cycle
895 | NAND_CMD_READ0;
896
897 if (command == NAND_CMD_READOOB)
898 info->buf_start += mtd->writesize;
899
900 if (info->cur_chunk < info->nfullchunks) {
901 info->step_chunk_size = info->chunk_size;
902 info->step_spare_size = info->spare_size;
903 } else {
904 info->step_chunk_size = info->last_chunk_size;
905 info->step_spare_size = info->last_spare_size;
906 }
907
908
909
910
911
912
913 if (info->force_raw) {
914 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8) |
915 NDCB0_LEN_OVRD |
916 NDCB0_EXT_CMD_TYPE(ext_cmd_type);
917 info->ndcb3 = info->step_chunk_size +
918 info->step_spare_size + info->ecc_size;
919 } else if (mtd->writesize == info->chunk_size) {
920 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8);
921 } else if (mtd->writesize > info->chunk_size) {
922 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8)
923 | NDCB0_LEN_OVRD
924 | NDCB0_EXT_CMD_TYPE(ext_cmd_type);
925 info->ndcb3 = info->step_chunk_size +
926 info->step_spare_size;
927 }
928
929 set_command_address(info, mtd->writesize, column, page_addr);
930 break;
931
932 case NAND_CMD_SEQIN:
933
934 info->buf_start = column;
935 set_command_address(info, mtd->writesize, 0, page_addr);
936
937
938
939
940
941 if (mtd->writesize > info->chunk_size) {
942 info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
943 | NDCB0_EXT_CMD_TYPE(ext_cmd_type)
944 | addr_cycle
945 | command;
946 exec_cmd = 1;
947 }
948 break;
949
950 case NAND_CMD_PAGEPROG:
951 if (is_buf_blank(info->data_buff,
952 (mtd->writesize + mtd->oobsize))) {
953 exec_cmd = 0;
954 break;
955 }
956
957 if (info->cur_chunk < info->nfullchunks) {
958 info->step_chunk_size = info->chunk_size;
959 info->step_spare_size = info->spare_size;
960 } else {
961 info->step_chunk_size = info->last_chunk_size;
962 info->step_spare_size = info->last_spare_size;
963 }
964
965
966 if (mtd->writesize > info->chunk_size) {
967
968
969
970
971
972 info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
973 | NDCB0_LEN_OVRD
974 | NDCB0_EXT_CMD_TYPE(ext_cmd_type);
975 info->ndcb3 = info->step_chunk_size +
976 info->step_spare_size;
977
978
979
980
981
982 if (info->cur_chunk == info->ntotalchunks) {
983 info->ndcb0 = NDCB0_CMD_TYPE(0x1)
984 | NDCB0_EXT_CMD_TYPE(ext_cmd_type)
985 | command;
986 info->ndcb1 = 0;
987 info->ndcb2 = 0;
988 info->ndcb3 = 0;
989 }
990 } else {
991 info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
992 | NDCB0_AUTO_RS
993 | NDCB0_ST_ROW_EN
994 | NDCB0_DBC
995 | (NAND_CMD_PAGEPROG << 8)
996 | NAND_CMD_SEQIN
997 | addr_cycle;
998 }
999 break;
1000
1001 case NAND_CMD_PARAM:
1002 info->buf_count = INIT_BUFFER_SIZE;
1003 info->ndcb0 |= NDCB0_CMD_TYPE(0)
1004 | NDCB0_ADDR_CYC(1)
1005 | NDCB0_LEN_OVRD
1006 | command;
1007 info->ndcb1 = (column & 0xFF);
1008 info->ndcb3 = INIT_BUFFER_SIZE;
1009 info->step_chunk_size = INIT_BUFFER_SIZE;
1010 break;
1011
1012 case NAND_CMD_READID:
1013 info->buf_count = READ_ID_BYTES;
1014 info->ndcb0 |= NDCB0_CMD_TYPE(3)
1015 | NDCB0_ADDR_CYC(1)
1016 | command;
1017 info->ndcb1 = (column & 0xFF);
1018
1019 info->step_chunk_size = 8;
1020 break;
1021 case NAND_CMD_STATUS:
1022 info->buf_count = 1;
1023 info->ndcb0 |= NDCB0_CMD_TYPE(4)
1024 | NDCB0_ADDR_CYC(1)
1025 | command;
1026
1027 info->step_chunk_size = 8;
1028 break;
1029
1030 case NAND_CMD_ERASE1:
1031 info->ndcb0 |= NDCB0_CMD_TYPE(2)
1032 | NDCB0_AUTO_RS
1033 | NDCB0_ADDR_CYC(3)
1034 | NDCB0_DBC
1035 | (NAND_CMD_ERASE2 << 8)
1036 | NAND_CMD_ERASE1;
1037 info->ndcb1 = page_addr;
1038 info->ndcb2 = 0;
1039
1040 break;
1041 case NAND_CMD_RESET:
1042 info->ndcb0 |= NDCB0_CMD_TYPE(5)
1043 | command;
1044
1045 break;
1046
1047 case NAND_CMD_ERASE2:
1048 exec_cmd = 0;
1049 break;
1050
1051 default:
1052 exec_cmd = 0;
1053 dev_err(mtd->dev, "non-supported command %x\n",
1054 command);
1055 break;
1056 }
1057
1058 return exec_cmd;
1059}
1060
1061static void nand_cmdfunc(struct mtd_info *mtd, unsigned command,
1062 int column, int page_addr)
1063{
1064 struct nand_chip *chip = mtd_to_nand(mtd);
1065 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1066 struct pxa3xx_nand_info *info = host->info_data;
1067 int exec_cmd;
1068
1069
1070
1071
1072
1073
1074 if (info->reg_ndcr & NDCR_DWIDTH_M)
1075 column /= 2;
1076
1077
1078
1079
1080
1081
1082 if (info->cs != host->cs) {
1083 info->cs = host->cs;
1084 nand_writel(info, NDTR0CS0, info->ndtr0cs0);
1085 nand_writel(info, NDTR1CS0, info->ndtr1cs0);
1086 }
1087
1088 prepare_start_command(info, command);
1089
1090 info->state = STATE_PREPARED;
1091 exec_cmd = prepare_set_command(info, command, 0, column, page_addr);
1092
1093 if (exec_cmd) {
1094 u32 ts;
1095
1096 info->cmd_complete = 0;
1097 info->dev_ready = 0;
1098 info->need_wait = 1;
1099 pxa3xx_nand_start(info);
1100
1101 ts = get_timer(0);
1102 while (1) {
1103 u32 status;
1104
1105 status = nand_readl(info, NDSR);
1106 if (status)
1107 pxa3xx_nand_irq(info);
1108
1109 if (info->cmd_complete)
1110 break;
1111
1112 if (get_timer(ts) > CHIP_DELAY_TIMEOUT) {
1113 dev_err(mtd->dev, "Wait timeout!!!\n");
1114 return;
1115 }
1116 }
1117 }
1118 info->state = STATE_IDLE;
1119}
1120
1121static void nand_cmdfunc_extended(struct mtd_info *mtd,
1122 const unsigned command,
1123 int column, int page_addr)
1124{
1125 struct nand_chip *chip = mtd_to_nand(mtd);
1126 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1127 struct pxa3xx_nand_info *info = host->info_data;
1128 int exec_cmd, ext_cmd_type;
1129
1130
1131
1132
1133
1134
1135 if (info->reg_ndcr & NDCR_DWIDTH_M)
1136 column /= 2;
1137
1138
1139
1140
1141
1142
1143 if (info->cs != host->cs) {
1144 info->cs = host->cs;
1145 nand_writel(info, NDTR0CS0, info->ndtr0cs0);
1146 nand_writel(info, NDTR1CS0, info->ndtr1cs0);
1147 }
1148
1149
1150 switch (command) {
1151 case NAND_CMD_READ0:
1152 case NAND_CMD_READOOB:
1153 ext_cmd_type = EXT_CMD_TYPE_MONO;
1154 break;
1155 case NAND_CMD_SEQIN:
1156 ext_cmd_type = EXT_CMD_TYPE_DISPATCH;
1157 break;
1158 case NAND_CMD_PAGEPROG:
1159 ext_cmd_type = EXT_CMD_TYPE_NAKED_RW;
1160 break;
1161 default:
1162 ext_cmd_type = 0;
1163 break;
1164 }
1165
1166 prepare_start_command(info, command);
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176 info->need_wait = 1;
1177 info->dev_ready = 0;
1178
1179 do {
1180 u32 ts;
1181
1182 info->state = STATE_PREPARED;
1183 exec_cmd = prepare_set_command(info, command, ext_cmd_type,
1184 column, page_addr);
1185 if (!exec_cmd) {
1186 info->need_wait = 0;
1187 info->dev_ready = 1;
1188 break;
1189 }
1190
1191 info->cmd_complete = 0;
1192 pxa3xx_nand_start(info);
1193
1194 ts = get_timer(0);
1195 while (1) {
1196 u32 status;
1197
1198 status = nand_readl(info, NDSR);
1199 if (status)
1200 pxa3xx_nand_irq(info);
1201
1202 if (info->cmd_complete)
1203 break;
1204
1205 if (get_timer(ts) > CHIP_DELAY_TIMEOUT) {
1206 dev_err(mtd->dev, "Wait timeout!!!\n");
1207 return;
1208 }
1209 }
1210
1211
1212 if (command != NAND_CMD_PAGEPROG &&
1213 command != NAND_CMD_READ0 &&
1214 command != NAND_CMD_READOOB)
1215 break;
1216
1217 info->cur_chunk++;
1218
1219
1220 if (info->cur_chunk == info->ntotalchunks &&
1221 command != NAND_CMD_PAGEPROG)
1222 break;
1223
1224
1225
1226
1227
1228 if (info->cur_chunk == (info->ntotalchunks + 1) &&
1229 command == NAND_CMD_PAGEPROG &&
1230 ext_cmd_type == EXT_CMD_TYPE_DISPATCH)
1231 break;
1232
1233 if (command == NAND_CMD_READ0 || command == NAND_CMD_READOOB) {
1234
1235 if (info->cur_chunk == info->ntotalchunks - 1)
1236 ext_cmd_type = EXT_CMD_TYPE_LAST_RW;
1237 else
1238 ext_cmd_type = EXT_CMD_TYPE_NAKED_RW;
1239
1240
1241
1242
1243
1244 } else if (command == NAND_CMD_PAGEPROG &&
1245 info->cur_chunk == info->ntotalchunks) {
1246 ext_cmd_type = EXT_CMD_TYPE_DISPATCH;
1247 }
1248 } while (1);
1249
1250 info->state = STATE_IDLE;
1251}
1252
1253static int pxa3xx_nand_write_page_hwecc(struct mtd_info *mtd,
1254 struct nand_chip *chip, const uint8_t *buf, int oob_required,
1255 int page)
1256{
1257 chip->write_buf(mtd, buf, mtd->writesize);
1258 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
1259
1260 return 0;
1261}
1262
1263static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
1264 struct nand_chip *chip, uint8_t *buf, int oob_required,
1265 int page)
1266{
1267 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1268 struct pxa3xx_nand_info *info = host->info_data;
1269 int bf;
1270
1271 chip->read_buf(mtd, buf, mtd->writesize);
1272 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1273
1274 if (info->retcode == ERR_CORERR && info->use_ecc) {
1275 mtd->ecc_stats.corrected += info->ecc_err_cnt;
1276
1277 } else if (info->retcode == ERR_UNCORERR && info->ecc_bch) {
1278
1279
1280
1281
1282
1283
1284 chip->ecc.read_page_raw(mtd, chip, buf, oob_required, page);
1285 bf = nand_check_erased_ecc_chunk(buf, mtd->writesize,
1286 chip->oob_poi, mtd->oobsize,
1287 NULL, 0, chip->ecc.strength);
1288 if (bf < 0) {
1289 mtd->ecc_stats.failed++;
1290 } else if (bf) {
1291 mtd->ecc_stats.corrected += bf;
1292 info->max_bitflips = max_t(unsigned int,
1293 info->max_bitflips, bf);
1294 info->retcode = ERR_CORERR;
1295 } else {
1296 info->retcode = ERR_NONE;
1297 }
1298
1299 } else if (info->retcode == ERR_UNCORERR && !info->ecc_bch) {
1300
1301 if (is_buf_blank(buf, mtd->writesize))
1302 info->retcode = ERR_NONE;
1303 else
1304 mtd->ecc_stats.failed++;
1305 }
1306
1307 return info->max_bitflips;
1308}
1309
1310static int pxa3xx_nand_read_page_raw(struct mtd_info *mtd,
1311 struct nand_chip *chip, uint8_t *buf,
1312 int oob_required, int page)
1313{
1314 struct pxa3xx_nand_host *host = chip->priv;
1315 struct pxa3xx_nand_info *info = host->info_data;
1316 int chunk, ecc_off_buf;
1317
1318 if (!info->ecc_bch)
1319 return -ENOTSUPP;
1320
1321
1322
1323
1324
1325 info->force_raw = true;
1326 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
1327
1328 ecc_off_buf = (info->nfullchunks * info->spare_size) +
1329 info->last_spare_size;
1330 for (chunk = 0; chunk < info->nfullchunks; chunk++) {
1331 chip->read_buf(mtd,
1332 buf + (chunk * info->chunk_size),
1333 info->chunk_size);
1334 chip->read_buf(mtd,
1335 chip->oob_poi +
1336 (chunk * (info->spare_size)),
1337 info->spare_size);
1338 chip->read_buf(mtd,
1339 chip->oob_poi + ecc_off_buf +
1340 (chunk * (info->ecc_size)),
1341 info->ecc_size - 2);
1342 }
1343
1344 if (info->ntotalchunks > info->nfullchunks) {
1345 chip->read_buf(mtd,
1346 buf + (info->nfullchunks * info->chunk_size),
1347 info->last_chunk_size);
1348 chip->read_buf(mtd,
1349 chip->oob_poi +
1350 (info->nfullchunks * (info->spare_size)),
1351 info->last_spare_size);
1352 chip->read_buf(mtd,
1353 chip->oob_poi + ecc_off_buf +
1354 (info->nfullchunks * (info->ecc_size)),
1355 info->ecc_size - 2);
1356 }
1357
1358 info->force_raw = false;
1359
1360 return 0;
1361}
1362
1363static int pxa3xx_nand_read_oob_raw(struct mtd_info *mtd,
1364 struct nand_chip *chip, int page)
1365{
1366
1367 chip->pagebuf = -1;
1368
1369 return chip->ecc.read_page_raw(mtd, chip, chip->buffers->databuf, true,
1370 page);
1371}
1372
1373static uint8_t pxa3xx_nand_read_byte(struct mtd_info *mtd)
1374{
1375 struct nand_chip *chip = mtd_to_nand(mtd);
1376 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1377 struct pxa3xx_nand_info *info = host->info_data;
1378 char retval = 0xFF;
1379
1380 if (info->buf_start < info->buf_count)
1381
1382 retval = info->data_buff[info->buf_start++];
1383
1384 return retval;
1385}
1386
1387static u16 pxa3xx_nand_read_word(struct mtd_info *mtd)
1388{
1389 struct nand_chip *chip = mtd_to_nand(mtd);
1390 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1391 struct pxa3xx_nand_info *info = host->info_data;
1392 u16 retval = 0xFFFF;
1393
1394 if (!(info->buf_start & 0x01) && info->buf_start < info->buf_count) {
1395 retval = *((u16 *)(info->data_buff+info->buf_start));
1396 info->buf_start += 2;
1397 }
1398 return retval;
1399}
1400
1401static void pxa3xx_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
1402{
1403 struct nand_chip *chip = mtd_to_nand(mtd);
1404 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1405 struct pxa3xx_nand_info *info = host->info_data;
1406 int real_len = min_t(size_t, len, info->buf_count - info->buf_start);
1407
1408 memcpy(buf, info->data_buff + info->buf_start, real_len);
1409 info->buf_start += real_len;
1410}
1411
1412static void pxa3xx_nand_write_buf(struct mtd_info *mtd,
1413 const uint8_t *buf, int len)
1414{
1415 struct nand_chip *chip = mtd_to_nand(mtd);
1416 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1417 struct pxa3xx_nand_info *info = host->info_data;
1418 int real_len = min_t(size_t, len, info->buf_count - info->buf_start);
1419
1420 memcpy(info->data_buff + info->buf_start, buf, real_len);
1421 info->buf_start += real_len;
1422}
1423
1424static void pxa3xx_nand_select_chip(struct mtd_info *mtd, int chip)
1425{
1426 return;
1427}
1428
1429static int pxa3xx_nand_waitfunc(struct mtd_info *mtd, struct nand_chip *this)
1430{
1431 struct nand_chip *chip = mtd_to_nand(mtd);
1432 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1433 struct pxa3xx_nand_info *info = host->info_data;
1434
1435 if (info->need_wait) {
1436 u32 ts;
1437
1438 info->need_wait = 0;
1439
1440 ts = get_timer(0);
1441 while (1) {
1442 u32 status;
1443
1444 status = nand_readl(info, NDSR);
1445 if (status)
1446 pxa3xx_nand_irq(info);
1447
1448 if (info->dev_ready)
1449 break;
1450
1451 if (get_timer(ts) > CHIP_DELAY_TIMEOUT) {
1452 dev_err(mtd->dev, "Ready timeout!!!\n");
1453 return NAND_STATUS_FAIL;
1454 }
1455 }
1456 }
1457
1458
1459 if (this->state == FL_WRITING || this->state == FL_ERASING) {
1460 if (info->retcode == ERR_NONE)
1461 return 0;
1462 else
1463 return NAND_STATUS_FAIL;
1464 }
1465
1466 return NAND_STATUS_READY;
1467}
1468
1469static int pxa3xx_nand_config_ident(struct pxa3xx_nand_info *info)
1470{
1471 struct pxa3xx_nand_platform_data *pdata = info->pdata;
1472
1473
1474 info->reg_ndcr = 0x0;
1475 info->reg_ndcr |= (pdata->enable_arbiter) ? NDCR_ND_ARB_EN : 0;
1476 info->reg_ndcr |= NDCR_RD_ID_CNT(READ_ID_BYTES);
1477 info->reg_ndcr |= NDCR_SPARE_EN;
1478
1479 return 0;
1480}
1481
1482static void pxa3xx_nand_config_tail(struct pxa3xx_nand_info *info)
1483{
1484 struct pxa3xx_nand_host *host = info->host[info->cs];
1485 struct mtd_info *mtd = nand_to_mtd(&info->host[info->cs]->chip);
1486 struct nand_chip *chip = mtd_to_nand(mtd);
1487
1488 info->reg_ndcr |= (host->col_addr_cycles == 2) ? NDCR_RA_START : 0;
1489 info->reg_ndcr |= (chip->page_shift == 6) ? NDCR_PG_PER_BLK : 0;
1490 info->reg_ndcr |= (mtd->writesize == 2048) ? NDCR_PAGE_SZ : 0;
1491}
1492
1493static void pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
1494{
1495 struct pxa3xx_nand_platform_data *pdata = info->pdata;
1496 uint32_t ndcr = nand_readl(info, NDCR);
1497
1498
1499 info->chunk_size = ndcr & NDCR_PAGE_SZ ? 2048 : 512;
1500 info->reg_ndcr = ndcr &
1501 ~(NDCR_INT_MASK | NDCR_ND_ARB_EN | NFCV1_NDCR_ARB_CNTL);
1502 info->reg_ndcr |= (pdata->enable_arbiter) ? NDCR_ND_ARB_EN : 0;
1503 info->ndtr0cs0 = nand_readl(info, NDTR0CS0);
1504 info->ndtr1cs0 = nand_readl(info, NDTR1CS0);
1505}
1506
1507static int pxa3xx_nand_init_buff(struct pxa3xx_nand_info *info)
1508{
1509 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL);
1510 if (info->data_buff == NULL)
1511 return -ENOMEM;
1512 return 0;
1513}
1514
1515static int pxa3xx_nand_sensing(struct pxa3xx_nand_host *host)
1516{
1517 struct pxa3xx_nand_info *info = host->info_data;
1518 struct pxa3xx_nand_platform_data *pdata = info->pdata;
1519 struct mtd_info *mtd;
1520 struct nand_chip *chip;
1521 const struct nand_sdr_timings *timings;
1522 int ret;
1523
1524 mtd = nand_to_mtd(&info->host[info->cs]->chip);
1525 chip = mtd_to_nand(mtd);
1526
1527
1528 info->reg_ndcr = 0x0;
1529 info->reg_ndcr |= (pdata->enable_arbiter) ? NDCR_ND_ARB_EN : 0;
1530 info->reg_ndcr |= NDCR_RD_ID_CNT(READ_ID_BYTES);
1531 info->reg_ndcr |= NDCR_SPARE_EN;
1532
1533
1534 timings = onfi_async_timing_mode_to_sdr_timings(0);
1535 if (IS_ERR(timings))
1536 return PTR_ERR(timings);
1537
1538 pxa3xx_nand_set_sdr_timing(host, timings);
1539
1540 chip->cmdfunc(mtd, NAND_CMD_RESET, 0, 0);
1541 ret = chip->waitfunc(mtd, chip);
1542 if (ret & NAND_STATUS_FAIL)
1543 return -ENODEV;
1544
1545 return 0;
1546}
1547
1548static int pxa_ecc_init(struct pxa3xx_nand_info *info,
1549 struct nand_ecc_ctrl *ecc,
1550 int strength, int ecc_stepsize, int page_size)
1551{
1552 if (strength == 1 && ecc_stepsize == 512 && page_size == 2048) {
1553 info->nfullchunks = 1;
1554 info->ntotalchunks = 1;
1555 info->chunk_size = 2048;
1556 info->spare_size = 40;
1557 info->ecc_size = 24;
1558 ecc->mode = NAND_ECC_HW;
1559 ecc->size = 512;
1560 ecc->strength = 1;
1561
1562 } else if (strength == 1 && ecc_stepsize == 512 && page_size == 512) {
1563 info->nfullchunks = 1;
1564 info->ntotalchunks = 1;
1565 info->chunk_size = 512;
1566 info->spare_size = 8;
1567 info->ecc_size = 8;
1568 ecc->mode = NAND_ECC_HW;
1569 ecc->size = 512;
1570 ecc->strength = 1;
1571
1572
1573
1574
1575
1576 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 2048) {
1577 info->ecc_bch = 1;
1578 info->nfullchunks = 1;
1579 info->ntotalchunks = 1;
1580 info->chunk_size = 2048;
1581 info->spare_size = 32;
1582 info->ecc_size = 32;
1583 ecc->mode = NAND_ECC_HW;
1584 ecc->size = info->chunk_size;
1585 ecc->layout = &ecc_layout_2KB_bch4bit;
1586 ecc->strength = 16;
1587
1588 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) {
1589 info->ecc_bch = 1;
1590 info->nfullchunks = 2;
1591 info->ntotalchunks = 2;
1592 info->chunk_size = 2048;
1593 info->spare_size = 32;
1594 info->ecc_size = 32;
1595 ecc->mode = NAND_ECC_HW;
1596 ecc->size = info->chunk_size;
1597 ecc->layout = &ecc_layout_4KB_bch4bit;
1598 ecc->strength = 16;
1599
1600 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 8192) {
1601 info->ecc_bch = 1;
1602 info->nfullchunks = 4;
1603 info->ntotalchunks = 4;
1604 info->chunk_size = 2048;
1605 info->spare_size = 32;
1606 info->ecc_size = 32;
1607 ecc->mode = NAND_ECC_HW;
1608 ecc->size = info->chunk_size;
1609 ecc->layout = &ecc_layout_8KB_bch4bit;
1610 ecc->strength = 16;
1611
1612
1613
1614
1615
1616 } else if (strength == 8 && ecc_stepsize == 512 && page_size == 2048) {
1617 info->ecc_bch = 1;
1618 info->nfullchunks = 1;
1619 info->ntotalchunks = 2;
1620 info->chunk_size = 1024;
1621 info->spare_size = 0;
1622 info->last_chunk_size = 1024;
1623 info->last_spare_size = 32;
1624 info->ecc_size = 32;
1625 ecc->mode = NAND_ECC_HW;
1626 ecc->size = info->chunk_size;
1627 ecc->layout = &ecc_layout_2KB_bch8bit;
1628 ecc->strength = 16;
1629
1630 } else if (strength == 8 && ecc_stepsize == 512 && page_size == 4096) {
1631 info->ecc_bch = 1;
1632 info->nfullchunks = 4;
1633 info->ntotalchunks = 5;
1634 info->chunk_size = 1024;
1635 info->spare_size = 0;
1636 info->last_chunk_size = 0;
1637 info->last_spare_size = 64;
1638 info->ecc_size = 32;
1639 ecc->mode = NAND_ECC_HW;
1640 ecc->size = info->chunk_size;
1641 ecc->layout = &ecc_layout_4KB_bch8bit;
1642 ecc->strength = 16;
1643
1644 } else if (strength == 8 && ecc_stepsize == 512 && page_size == 8192) {
1645 info->ecc_bch = 1;
1646 info->nfullchunks = 8;
1647 info->ntotalchunks = 9;
1648 info->chunk_size = 1024;
1649 info->spare_size = 0;
1650 info->last_chunk_size = 0;
1651 info->last_spare_size = 160;
1652 info->ecc_size = 32;
1653 ecc->mode = NAND_ECC_HW;
1654 ecc->size = info->chunk_size;
1655 ecc->layout = &ecc_layout_8KB_bch8bit;
1656 ecc->strength = 16;
1657
1658 } else {
1659 dev_err(info->controller.active->mtd.dev,
1660 "ECC strength %d at page size %d is not supported\n",
1661 strength, page_size);
1662 return -ENODEV;
1663 }
1664
1665 return 0;
1666}
1667
1668static int pxa3xx_nand_scan(struct mtd_info *mtd)
1669{
1670 struct nand_chip *chip = mtd_to_nand(mtd);
1671 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
1672 struct pxa3xx_nand_info *info = host->info_data;
1673 struct pxa3xx_nand_platform_data *pdata = info->pdata;
1674 int ret;
1675 uint16_t ecc_strength, ecc_step;
1676
1677 if (pdata->keep_config) {
1678 pxa3xx_nand_detect_config(info);
1679 } else {
1680 ret = pxa3xx_nand_config_ident(info);
1681 if (ret)
1682 return ret;
1683 ret = pxa3xx_nand_sensing(host);
1684 if (ret) {
1685 dev_info(mtd->dev, "There is no chip on cs %d!\n",
1686 info->cs);
1687 return ret;
1688 }
1689 }
1690
1691
1692 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370 ||
1693 info->variant == PXA3XX_NAND_VARIANT_ARMADA_8K)
1694 nand_writel(info, NDECCCTRL, 0x0);
1695
1696 if (nand_scan_ident(mtd, 1, NULL))
1697 return -ENODEV;
1698
1699 if (!pdata->keep_config) {
1700 ret = pxa3xx_nand_init_timings(host);
1701 if (ret) {
1702 dev_err(mtd->dev,
1703 "Failed to set timings: %d\n", ret);
1704 return ret;
1705 }
1706 }
1707
1708#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
1709
1710
1711
1712
1713 chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB_BBM;
1714 chip->bbt_td = &bbt_main_descr;
1715 chip->bbt_md = &bbt_mirror_descr;
1716#endif
1717
1718 if (pdata->ecc_strength && pdata->ecc_step_size) {
1719 ecc_strength = pdata->ecc_strength;
1720 ecc_step = pdata->ecc_step_size;
1721 } else {
1722 ecc_strength = chip->ecc_strength_ds;
1723 ecc_step = chip->ecc_step_ds;
1724 }
1725
1726
1727 if (ecc_strength < 1 && ecc_step < 1) {
1728 ecc_strength = 1;
1729 ecc_step = 512;
1730 }
1731
1732 ret = pxa_ecc_init(info, &chip->ecc, ecc_strength,
1733 ecc_step, mtd->writesize);
1734 if (ret)
1735 return ret;
1736
1737
1738
1739
1740
1741
1742 if (mtd->writesize > info->chunk_size) {
1743 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370 ||
1744 info->variant == PXA3XX_NAND_VARIANT_ARMADA_8K) {
1745 chip->cmdfunc = nand_cmdfunc_extended;
1746 } else {
1747 dev_err(mtd->dev,
1748 "unsupported page size on this variant\n");
1749 return -ENODEV;
1750 }
1751 }
1752
1753
1754 if (mtd->writesize >= 2048)
1755 host->col_addr_cycles = 2;
1756 else
1757 host->col_addr_cycles = 1;
1758
1759
1760 kfree(info->data_buff);
1761
1762
1763 info->buf_size = mtd->writesize + mtd->oobsize;
1764 ret = pxa3xx_nand_init_buff(info);
1765 if (ret)
1766 return ret;
1767 info->oob_buff = info->data_buff + mtd->writesize;
1768
1769 if ((mtd->size >> chip->page_shift) > 65536)
1770 host->row_addr_cycles = 3;
1771 else
1772 host->row_addr_cycles = 2;
1773
1774 if (!pdata->keep_config)
1775 pxa3xx_nand_config_tail(info);
1776
1777 return nand_scan_tail(mtd);
1778}
1779
1780static int alloc_nand_resource(struct udevice *dev, struct pxa3xx_nand_info *info)
1781{
1782 struct pxa3xx_nand_platform_data *pdata;
1783 struct pxa3xx_nand_host *host;
1784 struct nand_chip *chip = NULL;
1785 struct mtd_info *mtd;
1786 int cs;
1787
1788 pdata = info->pdata;
1789 if (pdata->num_cs <= 0)
1790 return -ENODEV;
1791
1792 info->variant = pxa3xx_nand_get_variant(dev);
1793 for (cs = 0; cs < pdata->num_cs; cs++) {
1794 chip = (struct nand_chip *)
1795 ((u8 *)&info[1] + sizeof(*host) * cs);
1796 mtd = nand_to_mtd(chip);
1797 host = (struct pxa3xx_nand_host *)chip;
1798 info->host[cs] = host;
1799 host->cs = cs;
1800 host->info_data = info;
1801 mtd->owner = THIS_MODULE;
1802
1803 nand_set_controller_data(chip, host);
1804 chip->ecc.read_page = pxa3xx_nand_read_page_hwecc;
1805 chip->ecc.read_page_raw = pxa3xx_nand_read_page_raw;
1806 chip->ecc.read_oob_raw = pxa3xx_nand_read_oob_raw;
1807 chip->ecc.write_page = pxa3xx_nand_write_page_hwecc;
1808 chip->controller = &info->controller;
1809 chip->waitfunc = pxa3xx_nand_waitfunc;
1810 chip->select_chip = pxa3xx_nand_select_chip;
1811 chip->read_word = pxa3xx_nand_read_word;
1812 chip->read_byte = pxa3xx_nand_read_byte;
1813 chip->read_buf = pxa3xx_nand_read_buf;
1814 chip->write_buf = pxa3xx_nand_write_buf;
1815 chip->options |= NAND_NO_SUBPAGE_WRITE;
1816 chip->cmdfunc = nand_cmdfunc;
1817 }
1818
1819
1820 info->buf_size = INIT_BUFFER_SIZE;
1821 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL);
1822 if (info->data_buff == NULL)
1823 return -ENOMEM;
1824
1825
1826 disable_int(info, NDSR_MASK);
1827
1828
1829
1830
1831
1832
1833 if (pxa3xx_nand_get_variant(dev) == PXA3XX_NAND_VARIANT_ARMADA_8K) {
1834 struct regmap *sysctrl_base = syscon_regmap_lookup_by_phandle(
1835 dev, "marvell,system-controller");
1836 u32 reg;
1837
1838 if (IS_ERR(sysctrl_base))
1839 return PTR_ERR(sysctrl_base);
1840
1841 regmap_read(sysctrl_base, GENCONF_SOC_DEVICE_MUX, ®);
1842 reg |= GENCONF_SOC_DEVICE_MUX_NFC_EN;
1843 regmap_write(sysctrl_base, GENCONF_SOC_DEVICE_MUX, reg);
1844 }
1845
1846 return 0;
1847}
1848
1849static int pxa3xx_nand_probe_dt(struct udevice *dev, struct pxa3xx_nand_info *info)
1850{
1851 struct pxa3xx_nand_platform_data *pdata;
1852
1853 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
1854 if (!pdata)
1855 return -ENOMEM;
1856
1857 info->mmio_base = dev_read_addr_ptr(dev);
1858
1859 pdata->num_cs = dev_read_u32_default(dev, "num-cs", 1);
1860 if (pdata->num_cs != 1) {
1861 pr_err("pxa3xx driver supports single CS only\n");
1862 return -EINVAL;
1863 }
1864
1865 if (dev_read_bool(dev, "marvell,nand-enable-arbiter"))
1866 pdata->enable_arbiter = 1;
1867
1868 if (dev_read_bool(dev, "marvell,nand-keep-config"))
1869 pdata->keep_config = 1;
1870
1871
1872
1873
1874
1875
1876
1877 pdata->ecc_strength = dev_read_u32_default(dev, "nand-ecc-strength", 0);
1878
1879
1880 pdata->ecc_step_size = dev_read_u32_default(dev, "nand-ecc-step-size",
1881 0);
1882
1883 info->pdata = pdata;
1884
1885 return 0;
1886}
1887
1888static int pxa3xx_nand_probe(struct udevice *dev)
1889{
1890 struct pxa3xx_nand_platform_data *pdata;
1891 int ret, cs, probe_success;
1892 struct pxa3xx_nand_info *info = dev_get_priv(dev);
1893
1894 ret = pxa3xx_nand_probe_dt(dev, info);
1895 if (ret)
1896 return ret;
1897
1898 pdata = info->pdata;
1899
1900 ret = alloc_nand_resource(dev, info);
1901 if (ret) {
1902 dev_err(dev, "alloc nand resource failed\n");
1903 return ret;
1904 }
1905
1906 probe_success = 0;
1907 for (cs = 0; cs < pdata->num_cs; cs++) {
1908 struct mtd_info *mtd = nand_to_mtd(&info->host[cs]->chip);
1909
1910
1911
1912
1913
1914
1915 mtd->name = "pxa3xx_nand-0";
1916 mtd->dev = dev;
1917 info->cs = cs;
1918 ret = pxa3xx_nand_scan(mtd);
1919 if (ret) {
1920 dev_info(mtd->dev, "failed to scan nand at cs %d\n",
1921 cs);
1922 continue;
1923 }
1924
1925 if (nand_register(cs, mtd))
1926 continue;
1927
1928 probe_success = 1;
1929 }
1930
1931 if (!probe_success)
1932 return -ENODEV;
1933
1934 return 0;
1935}
1936
1937U_BOOT_DRIVER(pxa3xx_nand) = {
1938 .name = "pxa3xx-nand",
1939 .id = UCLASS_MTD,
1940 .of_match = pxa3xx_nand_dt_ids,
1941 .probe = pxa3xx_nand_probe,
1942 .priv_auto = sizeof(struct pxa3xx_nand_info) +
1943 sizeof(struct pxa3xx_nand_host) * CONFIG_SYS_MAX_NAND_DEVICE,
1944};
1945
1946void board_nand_init(void)
1947{
1948 struct udevice *dev;
1949 int ret;
1950
1951 ret = uclass_get_device_by_driver(UCLASS_MTD,
1952 DM_DRIVER_GET(pxa3xx_nand), &dev);
1953 if (ret && ret != -ENODEV) {
1954 pr_err("Failed to initialize %s. (error %d)\n", dev->name,
1955 ret);
1956 }
1957}
1958