blob: 9d02fd8eb1133afbbccc6e8dd114413c1807a2a0 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0
Stefan Roese75659da2015-07-23 10:26:16 +02002/*
3 * drivers/mtd/nand/pxa3xx_nand.c
4 *
5 * Copyright © 2005 Intel Corporation
6 * Copyright © 2006 Marvell International Ltd.
Stefan Roese75659da2015-07-23 10:26:16 +02007 */
8
9#include <common.h>
10#include <malloc.h>
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +030011#include <fdtdec.h>
Stefan Roese75659da2015-07-23 10:26:16 +020012#include <nand.h>
Masahiro Yamada56a931c2016-09-21 11:28:55 +090013#include <linux/errno.h>
Stefan Roese75659da2015-07-23 10:26:16 +020014#include <asm/io.h>
15#include <asm/arch/cpu.h>
16#include <linux/mtd/mtd.h>
Masahiro Yamada2b7a8732017-11-30 13:45:24 +090017#include <linux/mtd/rawnand.h>
Stefan Roese75659da2015-07-23 10:26:16 +020018#include <linux/types.h>
19
20#include "pxa3xx_nand.h"
21
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +030022DECLARE_GLOBAL_DATA_PTR;
23
Stefan Roese75659da2015-07-23 10:26:16 +020024#define TIMEOUT_DRAIN_FIFO 5 /* in ms */
25#define CHIP_DELAY_TIMEOUT 200
26#define NAND_STOP_DELAY 40
27#define PAGE_CHUNK_SIZE (2048)
28
29/*
30 * Define a buffer size for the initial command that detects the flash device:
31 * STATUS, READID and PARAM. The largest of these is the PARAM command,
32 * needing 256 bytes.
33 */
34#define INIT_BUFFER_SIZE 256
35
36/* registers and bit definitions */
37#define NDCR (0x00) /* Control register */
38#define NDTR0CS0 (0x04) /* Timing Parameter 0 for CS0 */
39#define NDTR1CS0 (0x0C) /* Timing Parameter 1 for CS0 */
40#define NDSR (0x14) /* Status Register */
41#define NDPCR (0x18) /* Page Count Register */
42#define NDBDR0 (0x1C) /* Bad Block Register 0 */
43#define NDBDR1 (0x20) /* Bad Block Register 1 */
44#define NDECCCTRL (0x28) /* ECC control */
45#define NDDB (0x40) /* Data Buffer */
46#define NDCB0 (0x48) /* Command Buffer0 */
47#define NDCB1 (0x4C) /* Command Buffer1 */
48#define NDCB2 (0x50) /* Command Buffer2 */
49
50#define NDCR_SPARE_EN (0x1 << 31)
51#define NDCR_ECC_EN (0x1 << 30)
52#define NDCR_DMA_EN (0x1 << 29)
53#define NDCR_ND_RUN (0x1 << 28)
54#define NDCR_DWIDTH_C (0x1 << 27)
55#define NDCR_DWIDTH_M (0x1 << 26)
56#define NDCR_PAGE_SZ (0x1 << 24)
57#define NDCR_NCSX (0x1 << 23)
58#define NDCR_ND_MODE (0x3 << 21)
59#define NDCR_NAND_MODE (0x0)
60#define NDCR_CLR_PG_CNT (0x1 << 20)
61#define NDCR_STOP_ON_UNCOR (0x1 << 19)
62#define NDCR_RD_ID_CNT_MASK (0x7 << 16)
63#define NDCR_RD_ID_CNT(x) (((x) << 16) & NDCR_RD_ID_CNT_MASK)
64
65#define NDCR_RA_START (0x1 << 15)
66#define NDCR_PG_PER_BLK (0x1 << 14)
67#define NDCR_ND_ARB_EN (0x1 << 12)
68#define NDCR_INT_MASK (0xFFF)
69
70#define NDSR_MASK (0xfff)
71#define NDSR_ERR_CNT_OFF (16)
72#define NDSR_ERR_CNT_MASK (0x1f)
73#define NDSR_ERR_CNT(sr) ((sr >> NDSR_ERR_CNT_OFF) & NDSR_ERR_CNT_MASK)
74#define NDSR_RDY (0x1 << 12)
75#define NDSR_FLASH_RDY (0x1 << 11)
76#define NDSR_CS0_PAGED (0x1 << 10)
77#define NDSR_CS1_PAGED (0x1 << 9)
78#define NDSR_CS0_CMDD (0x1 << 8)
79#define NDSR_CS1_CMDD (0x1 << 7)
80#define NDSR_CS0_BBD (0x1 << 6)
81#define NDSR_CS1_BBD (0x1 << 5)
82#define NDSR_UNCORERR (0x1 << 4)
83#define NDSR_CORERR (0x1 << 3)
84#define NDSR_WRDREQ (0x1 << 2)
85#define NDSR_RDDREQ (0x1 << 1)
86#define NDSR_WRCMDREQ (0x1)
87
88#define NDCB0_LEN_OVRD (0x1 << 28)
89#define NDCB0_ST_ROW_EN (0x1 << 26)
90#define NDCB0_AUTO_RS (0x1 << 25)
91#define NDCB0_CSEL (0x1 << 24)
92#define NDCB0_EXT_CMD_TYPE_MASK (0x7 << 29)
93#define NDCB0_EXT_CMD_TYPE(x) (((x) << 29) & NDCB0_EXT_CMD_TYPE_MASK)
94#define NDCB0_CMD_TYPE_MASK (0x7 << 21)
95#define NDCB0_CMD_TYPE(x) (((x) << 21) & NDCB0_CMD_TYPE_MASK)
96#define NDCB0_NC (0x1 << 20)
97#define NDCB0_DBC (0x1 << 19)
98#define NDCB0_ADDR_CYC_MASK (0x7 << 16)
99#define NDCB0_ADDR_CYC(x) (((x) << 16) & NDCB0_ADDR_CYC_MASK)
100#define NDCB0_CMD2_MASK (0xff << 8)
101#define NDCB0_CMD1_MASK (0xff)
102#define NDCB0_ADDR_CYC_SHIFT (16)
103
104#define EXT_CMD_TYPE_DISPATCH 6 /* Command dispatch */
105#define EXT_CMD_TYPE_NAKED_RW 5 /* Naked read or Naked write */
106#define EXT_CMD_TYPE_READ 4 /* Read */
107#define EXT_CMD_TYPE_DISP_WR 4 /* Command dispatch with write */
108#define EXT_CMD_TYPE_FINAL 3 /* Final command */
109#define EXT_CMD_TYPE_LAST_RW 1 /* Last naked read/write */
110#define EXT_CMD_TYPE_MONO 0 /* Monolithic read/write */
111
112/* macros for registers read/write */
113#define nand_writel(info, off, val) \
114 writel((val), (info)->mmio_base + (off))
115
116#define nand_readl(info, off) \
117 readl((info)->mmio_base + (off))
118
119/* error code and state */
120enum {
121 ERR_NONE = 0,
122 ERR_DMABUSERR = -1,
123 ERR_SENDCMD = -2,
124 ERR_UNCORERR = -3,
125 ERR_BBERR = -4,
126 ERR_CORERR = -5,
127};
128
129enum {
130 STATE_IDLE = 0,
131 STATE_PREPARED,
132 STATE_CMD_HANDLE,
133 STATE_DMA_READING,
134 STATE_DMA_WRITING,
135 STATE_DMA_DONE,
136 STATE_PIO_READING,
137 STATE_PIO_WRITING,
138 STATE_CMD_DONE,
139 STATE_READY,
140};
141
142enum pxa3xx_nand_variant {
143 PXA3XX_NAND_VARIANT_PXA,
144 PXA3XX_NAND_VARIANT_ARMADA370,
145};
146
147struct pxa3xx_nand_host {
148 struct nand_chip chip;
149 struct mtd_info *mtd;
150 void *info_data;
151
152 /* page size of attached chip */
153 int use_ecc;
154 int cs;
155
156 /* calculated from pxa3xx_nand_flash data */
157 unsigned int col_addr_cycles;
158 unsigned int row_addr_cycles;
159 size_t read_id_bytes;
160
161};
162
163struct pxa3xx_nand_info {
164 struct nand_hw_control controller;
165 struct pxa3xx_nand_platform_data *pdata;
166
167 struct clk *clk;
168 void __iomem *mmio_base;
169 unsigned long mmio_phys;
170 int cmd_complete, dev_ready;
171
172 unsigned int buf_start;
173 unsigned int buf_count;
174 unsigned int buf_size;
175 unsigned int data_buff_pos;
176 unsigned int oob_buff_pos;
177
178 unsigned char *data_buff;
179 unsigned char *oob_buff;
180
181 struct pxa3xx_nand_host *host[NUM_CHIP_SELECT];
182 unsigned int state;
183
184 /*
185 * This driver supports NFCv1 (as found in PXA SoC)
186 * and NFCv2 (as found in Armada 370/XP SoC).
187 */
188 enum pxa3xx_nand_variant variant;
189
190 int cs;
191 int use_ecc; /* use HW ECC ? */
192 int ecc_bch; /* using BCH ECC? */
193 int use_spare; /* use spare ? */
194 int need_wait;
195
196 unsigned int data_size; /* data to be read from FIFO */
197 unsigned int chunk_size; /* split commands chunk size */
198 unsigned int oob_size;
199 unsigned int spare_size;
200 unsigned int ecc_size;
201 unsigned int ecc_err_cnt;
202 unsigned int max_bitflips;
203 int retcode;
204
205 /* cached register value */
206 uint32_t reg_ndcr;
207 uint32_t ndtr0cs0;
208 uint32_t ndtr1cs0;
209
210 /* generated NDCBx register values */
211 uint32_t ndcb0;
212 uint32_t ndcb1;
213 uint32_t ndcb2;
214 uint32_t ndcb3;
215};
216
217static struct pxa3xx_nand_timing timing[] = {
218 { 40, 80, 60, 100, 80, 100, 90000, 400, 40, },
219 { 10, 0, 20, 40, 30, 40, 11123, 110, 10, },
220 { 10, 25, 15, 25, 15, 30, 25000, 60, 10, },
221 { 10, 35, 15, 25, 15, 25, 25000, 60, 10, },
222};
223
224static struct pxa3xx_nand_flash builtin_flash_types[] = {
225 { 0x46ec, 16, 16, &timing[1] },
226 { 0xdaec, 8, 8, &timing[1] },
227 { 0xd7ec, 8, 8, &timing[1] },
228 { 0xa12c, 8, 8, &timing[2] },
229 { 0xb12c, 16, 16, &timing[2] },
230 { 0xdc2c, 8, 8, &timing[2] },
231 { 0xcc2c, 16, 16, &timing[2] },
232 { 0xba20, 16, 16, &timing[3] },
233};
234
Sean Nyekjaera12a8e82017-11-22 13:39:08 +0100235#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
Stefan Roese75659da2015-07-23 10:26:16 +0200236static u8 bbt_pattern[] = {'M', 'V', 'B', 'b', 't', '0' };
237static u8 bbt_mirror_pattern[] = {'1', 't', 'b', 'B', 'V', 'M' };
238
239static struct nand_bbt_descr bbt_main_descr = {
240 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
241 | NAND_BBT_2BIT | NAND_BBT_VERSION,
242 .offs = 8,
243 .len = 6,
244 .veroffs = 14,
245 .maxblocks = 8, /* Last 8 blocks in each chip */
246 .pattern = bbt_pattern
247};
248
249static struct nand_bbt_descr bbt_mirror_descr = {
250 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
251 | NAND_BBT_2BIT | NAND_BBT_VERSION,
252 .offs = 8,
253 .len = 6,
254 .veroffs = 14,
255 .maxblocks = 8, /* Last 8 blocks in each chip */
256 .pattern = bbt_mirror_pattern
257};
Sean Nyekjaera12a8e82017-11-22 13:39:08 +0100258#endif
Stefan Roese75659da2015-07-23 10:26:16 +0200259
260static struct nand_ecclayout ecc_layout_2KB_bch4bit = {
261 .eccbytes = 32,
262 .eccpos = {
263 32, 33, 34, 35, 36, 37, 38, 39,
264 40, 41, 42, 43, 44, 45, 46, 47,
265 48, 49, 50, 51, 52, 53, 54, 55,
266 56, 57, 58, 59, 60, 61, 62, 63},
267 .oobfree = { {2, 30} }
268};
269
270static struct nand_ecclayout ecc_layout_4KB_bch4bit = {
271 .eccbytes = 64,
272 .eccpos = {
273 32, 33, 34, 35, 36, 37, 38, 39,
274 40, 41, 42, 43, 44, 45, 46, 47,
275 48, 49, 50, 51, 52, 53, 54, 55,
276 56, 57, 58, 59, 60, 61, 62, 63,
277 96, 97, 98, 99, 100, 101, 102, 103,
278 104, 105, 106, 107, 108, 109, 110, 111,
279 112, 113, 114, 115, 116, 117, 118, 119,
280 120, 121, 122, 123, 124, 125, 126, 127},
281 /* Bootrom looks in bytes 0 & 5 for bad blocks */
282 .oobfree = { {6, 26}, { 64, 32} }
283};
284
285static struct nand_ecclayout ecc_layout_4KB_bch8bit = {
286 .eccbytes = 128,
287 .eccpos = {
288 32, 33, 34, 35, 36, 37, 38, 39,
289 40, 41, 42, 43, 44, 45, 46, 47,
290 48, 49, 50, 51, 52, 53, 54, 55,
291 56, 57, 58, 59, 60, 61, 62, 63},
292 .oobfree = { }
293};
294
295#define NDTR0_tCH(c) (min((c), 7) << 19)
296#define NDTR0_tCS(c) (min((c), 7) << 16)
297#define NDTR0_tWH(c) (min((c), 7) << 11)
298#define NDTR0_tWP(c) (min((c), 7) << 8)
299#define NDTR0_tRH(c) (min((c), 7) << 3)
300#define NDTR0_tRP(c) (min((c), 7) << 0)
301
302#define NDTR1_tR(c) (min((c), 65535) << 16)
303#define NDTR1_tWHR(c) (min((c), 15) << 4)
304#define NDTR1_tAR(c) (min((c), 15) << 0)
305
306/* convert nano-seconds to nand flash controller clock cycles */
307#define ns2cycle(ns, clk) (int)((ns) * (clk / 1000000) / 1000)
308
309static enum pxa3xx_nand_variant pxa3xx_nand_get_variant(void)
310{
311 /* We only support the Armada 370/XP/38x for now */
312 return PXA3XX_NAND_VARIANT_ARMADA370;
313}
314
315static void pxa3xx_nand_set_timing(struct pxa3xx_nand_host *host,
316 const struct pxa3xx_nand_timing *t)
317{
318 struct pxa3xx_nand_info *info = host->info_data;
319 unsigned long nand_clk = mvebu_get_nand_clock();
320 uint32_t ndtr0, ndtr1;
321
322 ndtr0 = NDTR0_tCH(ns2cycle(t->tCH, nand_clk)) |
323 NDTR0_tCS(ns2cycle(t->tCS, nand_clk)) |
324 NDTR0_tWH(ns2cycle(t->tWH, nand_clk)) |
325 NDTR0_tWP(ns2cycle(t->tWP, nand_clk)) |
326 NDTR0_tRH(ns2cycle(t->tRH, nand_clk)) |
327 NDTR0_tRP(ns2cycle(t->tRP, nand_clk));
328
329 ndtr1 = NDTR1_tR(ns2cycle(t->tR, nand_clk)) |
330 NDTR1_tWHR(ns2cycle(t->tWHR, nand_clk)) |
331 NDTR1_tAR(ns2cycle(t->tAR, nand_clk));
332
333 info->ndtr0cs0 = ndtr0;
334 info->ndtr1cs0 = ndtr1;
335 nand_writel(info, NDTR0CS0, ndtr0);
336 nand_writel(info, NDTR1CS0, ndtr1);
337}
338
339static void pxa3xx_nand_set_sdr_timing(struct pxa3xx_nand_host *host,
340 const struct nand_sdr_timings *t)
341{
342 struct pxa3xx_nand_info *info = host->info_data;
343 struct nand_chip *chip = &host->chip;
344 unsigned long nand_clk = mvebu_get_nand_clock();
345 uint32_t ndtr0, ndtr1;
346
347 u32 tCH_min = DIV_ROUND_UP(t->tCH_min, 1000);
348 u32 tCS_min = DIV_ROUND_UP(t->tCS_min, 1000);
349 u32 tWH_min = DIV_ROUND_UP(t->tWH_min, 1000);
350 u32 tWP_min = DIV_ROUND_UP(t->tWC_min - tWH_min, 1000);
351 u32 tREH_min = DIV_ROUND_UP(t->tREH_min, 1000);
352 u32 tRP_min = DIV_ROUND_UP(t->tRC_min - tREH_min, 1000);
353 u32 tR = chip->chip_delay * 1000;
354 u32 tWHR_min = DIV_ROUND_UP(t->tWHR_min, 1000);
355 u32 tAR_min = DIV_ROUND_UP(t->tAR_min, 1000);
356
357 /* fallback to a default value if tR = 0 */
358 if (!tR)
359 tR = 20000;
360
361 ndtr0 = NDTR0_tCH(ns2cycle(tCH_min, nand_clk)) |
362 NDTR0_tCS(ns2cycle(tCS_min, nand_clk)) |
363 NDTR0_tWH(ns2cycle(tWH_min, nand_clk)) |
364 NDTR0_tWP(ns2cycle(tWP_min, nand_clk)) |
365 NDTR0_tRH(ns2cycle(tREH_min, nand_clk)) |
366 NDTR0_tRP(ns2cycle(tRP_min, nand_clk));
367
368 ndtr1 = NDTR1_tR(ns2cycle(tR, nand_clk)) |
369 NDTR1_tWHR(ns2cycle(tWHR_min, nand_clk)) |
370 NDTR1_tAR(ns2cycle(tAR_min, nand_clk));
371
372 info->ndtr0cs0 = ndtr0;
373 info->ndtr1cs0 = ndtr1;
374 nand_writel(info, NDTR0CS0, ndtr0);
375 nand_writel(info, NDTR1CS0, ndtr1);
376}
377
378static int pxa3xx_nand_init_timings(struct pxa3xx_nand_host *host)
379{
380 const struct nand_sdr_timings *timings;
381 struct nand_chip *chip = &host->chip;
382 struct pxa3xx_nand_info *info = host->info_data;
383 const struct pxa3xx_nand_flash *f = NULL;
384 int mode, id, ntypes, i;
385
386 mode = onfi_get_async_timing_mode(chip);
387 if (mode == ONFI_TIMING_MODE_UNKNOWN) {
388 ntypes = ARRAY_SIZE(builtin_flash_types);
389
390 chip->cmdfunc(host->mtd, NAND_CMD_READID, 0x00, -1);
391
392 id = chip->read_byte(host->mtd);
393 id |= chip->read_byte(host->mtd) << 0x8;
394
395 for (i = 0; i < ntypes; i++) {
396 f = &builtin_flash_types[i];
397
398 if (f->chip_id == id)
399 break;
400 }
401
402 if (i == ntypes) {
403 dev_err(&info->pdev->dev, "Error: timings not found\n");
404 return -EINVAL;
405 }
406
407 pxa3xx_nand_set_timing(host, f->timing);
408
409 if (f->flash_width == 16) {
410 info->reg_ndcr |= NDCR_DWIDTH_M;
411 chip->options |= NAND_BUSWIDTH_16;
412 }
413
414 info->reg_ndcr |= (f->dfc_width == 16) ? NDCR_DWIDTH_C : 0;
415 } else {
416 mode = fls(mode) - 1;
417 if (mode < 0)
418 mode = 0;
419
420 timings = onfi_async_timing_mode_to_sdr_timings(mode);
421 if (IS_ERR(timings))
422 return PTR_ERR(timings);
423
424 pxa3xx_nand_set_sdr_timing(host, timings);
425 }
426
427 return 0;
428}
429
430/*
431 * Set the data and OOB size, depending on the selected
432 * spare and ECC configuration.
433 * Only applicable to READ0, READOOB and PAGEPROG commands.
434 */
435static void pxa3xx_set_datasize(struct pxa3xx_nand_info *info,
436 struct mtd_info *mtd)
437{
438 int oob_enable = info->reg_ndcr & NDCR_SPARE_EN;
439
440 info->data_size = mtd->writesize;
441 if (!oob_enable)
442 return;
443
444 info->oob_size = info->spare_size;
445 if (!info->use_ecc)
446 info->oob_size += info->ecc_size;
447}
448
449/**
Vagrant Cascadianbeb288b2015-11-24 14:46:24 -0800450 * NOTE: it is a must to set ND_RUN first, then write
Stefan Roese75659da2015-07-23 10:26:16 +0200451 * command buffer, otherwise, it does not work.
452 * We enable all the interrupt at the same time, and
453 * let pxa3xx_nand_irq to handle all logic.
454 */
455static void pxa3xx_nand_start(struct pxa3xx_nand_info *info)
456{
457 uint32_t ndcr;
458
459 ndcr = info->reg_ndcr;
460
461 if (info->use_ecc) {
462 ndcr |= NDCR_ECC_EN;
463 if (info->ecc_bch)
464 nand_writel(info, NDECCCTRL, 0x1);
465 } else {
466 ndcr &= ~NDCR_ECC_EN;
467 if (info->ecc_bch)
468 nand_writel(info, NDECCCTRL, 0x0);
469 }
470
471 ndcr &= ~NDCR_DMA_EN;
472
473 if (info->use_spare)
474 ndcr |= NDCR_SPARE_EN;
475 else
476 ndcr &= ~NDCR_SPARE_EN;
477
478 ndcr |= NDCR_ND_RUN;
479
480 /* clear status bits and run */
481 nand_writel(info, NDCR, 0);
482 nand_writel(info, NDSR, NDSR_MASK);
483 nand_writel(info, NDCR, ndcr);
484}
485
486static void disable_int(struct pxa3xx_nand_info *info, uint32_t int_mask)
487{
488 uint32_t ndcr;
489
490 ndcr = nand_readl(info, NDCR);
491 nand_writel(info, NDCR, ndcr | int_mask);
492}
493
494static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len)
495{
496 if (info->ecc_bch) {
497 u32 ts;
498
499 /*
500 * According to the datasheet, when reading from NDDB
501 * with BCH enabled, after each 32 bytes reads, we
502 * have to make sure that the NDSR.RDDREQ bit is set.
503 *
504 * Drain the FIFO 8 32 bits reads at a time, and skip
505 * the polling on the last read.
506 */
507 while (len > 8) {
508 readsl(info->mmio_base + NDDB, data, 8);
509
510 ts = get_timer(0);
511 while (!(nand_readl(info, NDSR) & NDSR_RDDREQ)) {
512 if (get_timer(ts) > TIMEOUT_DRAIN_FIFO) {
513 dev_err(&info->pdev->dev,
514 "Timeout on RDDREQ while draining the FIFO\n");
515 return;
516 }
517 }
518
519 data += 32;
520 len -= 8;
521 }
522 }
523
524 readsl(info->mmio_base + NDDB, data, len);
525}
526
527static void handle_data_pio(struct pxa3xx_nand_info *info)
528{
529 unsigned int do_bytes = min(info->data_size, info->chunk_size);
530
531 switch (info->state) {
532 case STATE_PIO_WRITING:
533 writesl(info->mmio_base + NDDB,
534 info->data_buff + info->data_buff_pos,
535 DIV_ROUND_UP(do_bytes, 4));
536
537 if (info->oob_size > 0)
538 writesl(info->mmio_base + NDDB,
539 info->oob_buff + info->oob_buff_pos,
540 DIV_ROUND_UP(info->oob_size, 4));
541 break;
542 case STATE_PIO_READING:
543 drain_fifo(info,
544 info->data_buff + info->data_buff_pos,
545 DIV_ROUND_UP(do_bytes, 4));
546
547 if (info->oob_size > 0)
548 drain_fifo(info,
549 info->oob_buff + info->oob_buff_pos,
550 DIV_ROUND_UP(info->oob_size, 4));
551 break;
552 default:
553 dev_err(&info->pdev->dev, "%s: invalid state %d\n", __func__,
554 info->state);
555 BUG();
556 }
557
558 /* Update buffer pointers for multi-page read/write */
559 info->data_buff_pos += do_bytes;
560 info->oob_buff_pos += info->oob_size;
561 info->data_size -= do_bytes;
562}
563
564static void pxa3xx_nand_irq_thread(struct pxa3xx_nand_info *info)
565{
566 handle_data_pio(info);
567
568 info->state = STATE_CMD_DONE;
569 nand_writel(info, NDSR, NDSR_WRDREQ | NDSR_RDDREQ);
570}
571
572static irqreturn_t pxa3xx_nand_irq(struct pxa3xx_nand_info *info)
573{
574 unsigned int status, is_completed = 0, is_ready = 0;
575 unsigned int ready, cmd_done;
576 irqreturn_t ret = IRQ_HANDLED;
577
578 if (info->cs == 0) {
579 ready = NDSR_FLASH_RDY;
580 cmd_done = NDSR_CS0_CMDD;
581 } else {
582 ready = NDSR_RDY;
583 cmd_done = NDSR_CS1_CMDD;
584 }
585
586 status = nand_readl(info, NDSR);
587
588 if (status & NDSR_UNCORERR)
589 info->retcode = ERR_UNCORERR;
590 if (status & NDSR_CORERR) {
591 info->retcode = ERR_CORERR;
592 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370 &&
593 info->ecc_bch)
594 info->ecc_err_cnt = NDSR_ERR_CNT(status);
595 else
596 info->ecc_err_cnt = 1;
597
598 /*
599 * Each chunk composing a page is corrected independently,
600 * and we need to store maximum number of corrected bitflips
601 * to return it to the MTD layer in ecc.read_page().
602 */
603 info->max_bitflips = max_t(unsigned int,
604 info->max_bitflips,
605 info->ecc_err_cnt);
606 }
607 if (status & (NDSR_RDDREQ | NDSR_WRDREQ)) {
608 info->state = (status & NDSR_RDDREQ) ?
609 STATE_PIO_READING : STATE_PIO_WRITING;
610 /* Call the IRQ thread in U-Boot directly */
611 pxa3xx_nand_irq_thread(info);
612 return 0;
613 }
614 if (status & cmd_done) {
615 info->state = STATE_CMD_DONE;
616 is_completed = 1;
617 }
618 if (status & ready) {
619 info->state = STATE_READY;
620 is_ready = 1;
621 }
622
623 if (status & NDSR_WRCMDREQ) {
624 nand_writel(info, NDSR, NDSR_WRCMDREQ);
625 status &= ~NDSR_WRCMDREQ;
626 info->state = STATE_CMD_HANDLE;
627
628 /*
629 * Command buffer registers NDCB{0-2} (and optionally NDCB3)
630 * must be loaded by writing directly either 12 or 16
631 * bytes directly to NDCB0, four bytes at a time.
632 *
633 * Direct write access to NDCB1, NDCB2 and NDCB3 is ignored
634 * but each NDCBx register can be read.
635 */
636 nand_writel(info, NDCB0, info->ndcb0);
637 nand_writel(info, NDCB0, info->ndcb1);
638 nand_writel(info, NDCB0, info->ndcb2);
639
640 /* NDCB3 register is available in NFCv2 (Armada 370/XP SoC) */
641 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370)
642 nand_writel(info, NDCB0, info->ndcb3);
643 }
644
645 /* clear NDSR to let the controller exit the IRQ */
646 nand_writel(info, NDSR, status);
647 if (is_completed)
648 info->cmd_complete = 1;
649 if (is_ready)
650 info->dev_ready = 1;
651
652 return ret;
653}
654
655static inline int is_buf_blank(uint8_t *buf, size_t len)
656{
657 for (; len > 0; len--)
658 if (*buf++ != 0xff)
659 return 0;
660 return 1;
661}
662
663static void set_command_address(struct pxa3xx_nand_info *info,
664 unsigned int page_size, uint16_t column, int page_addr)
665{
666 /* small page addr setting */
667 if (page_size < PAGE_CHUNK_SIZE) {
668 info->ndcb1 = ((page_addr & 0xFFFFFF) << 8)
669 | (column & 0xFF);
670
671 info->ndcb2 = 0;
672 } else {
673 info->ndcb1 = ((page_addr & 0xFFFF) << 16)
674 | (column & 0xFFFF);
675
676 if (page_addr & 0xFF0000)
677 info->ndcb2 = (page_addr & 0xFF0000) >> 16;
678 else
679 info->ndcb2 = 0;
680 }
681}
682
683static void prepare_start_command(struct pxa3xx_nand_info *info, int command)
684{
685 struct pxa3xx_nand_host *host = info->host[info->cs];
686 struct mtd_info *mtd = host->mtd;
687
688 /* reset data and oob column point to handle data */
689 info->buf_start = 0;
690 info->buf_count = 0;
691 info->oob_size = 0;
692 info->data_buff_pos = 0;
693 info->oob_buff_pos = 0;
694 info->use_ecc = 0;
695 info->use_spare = 1;
696 info->retcode = ERR_NONE;
697 info->ecc_err_cnt = 0;
698 info->ndcb3 = 0;
699 info->need_wait = 0;
700
701 switch (command) {
702 case NAND_CMD_READ0:
703 case NAND_CMD_PAGEPROG:
704 info->use_ecc = 1;
705 case NAND_CMD_READOOB:
706 pxa3xx_set_datasize(info, mtd);
707 break;
708 case NAND_CMD_PARAM:
709 info->use_spare = 0;
710 break;
711 default:
712 info->ndcb1 = 0;
713 info->ndcb2 = 0;
714 break;
715 }
716
717 /*
718 * If we are about to issue a read command, or about to set
719 * the write address, then clean the data buffer.
720 */
721 if (command == NAND_CMD_READ0 ||
722 command == NAND_CMD_READOOB ||
723 command == NAND_CMD_SEQIN) {
724 info->buf_count = mtd->writesize + mtd->oobsize;
725 memset(info->data_buff, 0xFF, info->buf_count);
726 }
727}
728
729static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
730 int ext_cmd_type, uint16_t column, int page_addr)
731{
732 int addr_cycle, exec_cmd;
733 struct pxa3xx_nand_host *host;
734 struct mtd_info *mtd;
735
736 host = info->host[info->cs];
737 mtd = host->mtd;
738 addr_cycle = 0;
739 exec_cmd = 1;
740
741 if (info->cs != 0)
742 info->ndcb0 = NDCB0_CSEL;
743 else
744 info->ndcb0 = 0;
745
746 if (command == NAND_CMD_SEQIN)
747 exec_cmd = 0;
748
749 addr_cycle = NDCB0_ADDR_CYC(host->row_addr_cycles
750 + host->col_addr_cycles);
751
752 switch (command) {
753 case NAND_CMD_READOOB:
754 case NAND_CMD_READ0:
755 info->buf_start = column;
756 info->ndcb0 |= NDCB0_CMD_TYPE(0)
757 | addr_cycle
758 | NAND_CMD_READ0;
759
760 if (command == NAND_CMD_READOOB)
761 info->buf_start += mtd->writesize;
762
763 /*
764 * Multiple page read needs an 'extended command type' field,
765 * which is either naked-read or last-read according to the
766 * state.
767 */
768 if (mtd->writesize == PAGE_CHUNK_SIZE) {
769 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8);
770 } else if (mtd->writesize > PAGE_CHUNK_SIZE) {
771 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8)
772 | NDCB0_LEN_OVRD
773 | NDCB0_EXT_CMD_TYPE(ext_cmd_type);
774 info->ndcb3 = info->chunk_size +
775 info->oob_size;
776 }
777
778 set_command_address(info, mtd->writesize, column, page_addr);
779 break;
780
781 case NAND_CMD_SEQIN:
782
783 info->buf_start = column;
784 set_command_address(info, mtd->writesize, 0, page_addr);
785
786 /*
787 * Multiple page programming needs to execute the initial
788 * SEQIN command that sets the page address.
789 */
790 if (mtd->writesize > PAGE_CHUNK_SIZE) {
791 info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
792 | NDCB0_EXT_CMD_TYPE(ext_cmd_type)
793 | addr_cycle
794 | command;
795 /* No data transfer in this case */
796 info->data_size = 0;
797 exec_cmd = 1;
798 }
799 break;
800
801 case NAND_CMD_PAGEPROG:
802 if (is_buf_blank(info->data_buff,
803 (mtd->writesize + mtd->oobsize))) {
804 exec_cmd = 0;
805 break;
806 }
807
808 /* Second command setting for large pages */
809 if (mtd->writesize > PAGE_CHUNK_SIZE) {
810 /*
811 * Multiple page write uses the 'extended command'
812 * field. This can be used to issue a command dispatch
813 * or a naked-write depending on the current stage.
814 */
815 info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
816 | NDCB0_LEN_OVRD
817 | NDCB0_EXT_CMD_TYPE(ext_cmd_type);
818 info->ndcb3 = info->chunk_size +
819 info->oob_size;
820
821 /*
822 * This is the command dispatch that completes a chunked
823 * page program operation.
824 */
825 if (info->data_size == 0) {
826 info->ndcb0 = NDCB0_CMD_TYPE(0x1)
827 | NDCB0_EXT_CMD_TYPE(ext_cmd_type)
828 | command;
829 info->ndcb1 = 0;
830 info->ndcb2 = 0;
831 info->ndcb3 = 0;
832 }
833 } else {
834 info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
835 | NDCB0_AUTO_RS
836 | NDCB0_ST_ROW_EN
837 | NDCB0_DBC
838 | (NAND_CMD_PAGEPROG << 8)
839 | NAND_CMD_SEQIN
840 | addr_cycle;
841 }
842 break;
843
844 case NAND_CMD_PARAM:
845 info->buf_count = 256;
846 info->ndcb0 |= NDCB0_CMD_TYPE(0)
847 | NDCB0_ADDR_CYC(1)
848 | NDCB0_LEN_OVRD
849 | command;
850 info->ndcb1 = (column & 0xFF);
851 info->ndcb3 = 256;
852 info->data_size = 256;
853 break;
854
855 case NAND_CMD_READID:
856 info->buf_count = host->read_id_bytes;
857 info->ndcb0 |= NDCB0_CMD_TYPE(3)
858 | NDCB0_ADDR_CYC(1)
859 | command;
860 info->ndcb1 = (column & 0xFF);
861
862 info->data_size = 8;
863 break;
864 case NAND_CMD_STATUS:
865 info->buf_count = 1;
866 info->ndcb0 |= NDCB0_CMD_TYPE(4)
867 | NDCB0_ADDR_CYC(1)
868 | command;
869
870 info->data_size = 8;
871 break;
872
873 case NAND_CMD_ERASE1:
874 info->ndcb0 |= NDCB0_CMD_TYPE(2)
875 | NDCB0_AUTO_RS
876 | NDCB0_ADDR_CYC(3)
877 | NDCB0_DBC
878 | (NAND_CMD_ERASE2 << 8)
879 | NAND_CMD_ERASE1;
880 info->ndcb1 = page_addr;
881 info->ndcb2 = 0;
882
883 break;
884 case NAND_CMD_RESET:
885 info->ndcb0 |= NDCB0_CMD_TYPE(5)
886 | command;
887
888 break;
889
890 case NAND_CMD_ERASE2:
891 exec_cmd = 0;
892 break;
893
894 default:
895 exec_cmd = 0;
896 dev_err(&info->pdev->dev, "non-supported command %x\n",
897 command);
898 break;
899 }
900
901 return exec_cmd;
902}
903
904static void nand_cmdfunc(struct mtd_info *mtd, unsigned command,
905 int column, int page_addr)
906{
Scott Wood17fed142016-05-30 13:57:56 -0500907 struct nand_chip *chip = mtd_to_nand(mtd);
908 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +0200909 struct pxa3xx_nand_info *info = host->info_data;
910 int exec_cmd;
911
912 /*
913 * if this is a x16 device ,then convert the input
914 * "byte" address into a "word" address appropriate
915 * for indexing a word-oriented device
916 */
917 if (info->reg_ndcr & NDCR_DWIDTH_M)
918 column /= 2;
919
920 /*
921 * There may be different NAND chip hooked to
922 * different chip select, so check whether
923 * chip select has been changed, if yes, reset the timing
924 */
925 if (info->cs != host->cs) {
926 info->cs = host->cs;
927 nand_writel(info, NDTR0CS0, info->ndtr0cs0);
928 nand_writel(info, NDTR1CS0, info->ndtr1cs0);
929 }
930
931 prepare_start_command(info, command);
932
933 info->state = STATE_PREPARED;
934 exec_cmd = prepare_set_command(info, command, 0, column, page_addr);
935
936 if (exec_cmd) {
937 u32 ts;
938
939 info->cmd_complete = 0;
940 info->dev_ready = 0;
941 info->need_wait = 1;
942 pxa3xx_nand_start(info);
943
944 ts = get_timer(0);
945 while (1) {
946 u32 status;
947
948 status = nand_readl(info, NDSR);
949 if (status)
950 pxa3xx_nand_irq(info);
951
952 if (info->cmd_complete)
953 break;
954
955 if (get_timer(ts) > CHIP_DELAY_TIMEOUT) {
956 dev_err(&info->pdev->dev, "Wait timeout!!!\n");
957 return;
958 }
959 }
960 }
961 info->state = STATE_IDLE;
962}
963
964static void nand_cmdfunc_extended(struct mtd_info *mtd,
965 const unsigned command,
966 int column, int page_addr)
967{
Scott Wood17fed142016-05-30 13:57:56 -0500968 struct nand_chip *chip = mtd_to_nand(mtd);
969 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +0200970 struct pxa3xx_nand_info *info = host->info_data;
971 int exec_cmd, ext_cmd_type;
972
973 /*
974 * if this is a x16 device then convert the input
975 * "byte" address into a "word" address appropriate
976 * for indexing a word-oriented device
977 */
978 if (info->reg_ndcr & NDCR_DWIDTH_M)
979 column /= 2;
980
981 /*
982 * There may be different NAND chip hooked to
983 * different chip select, so check whether
984 * chip select has been changed, if yes, reset the timing
985 */
986 if (info->cs != host->cs) {
987 info->cs = host->cs;
988 nand_writel(info, NDTR0CS0, info->ndtr0cs0);
989 nand_writel(info, NDTR1CS0, info->ndtr1cs0);
990 }
991
992 /* Select the extended command for the first command */
993 switch (command) {
994 case NAND_CMD_READ0:
995 case NAND_CMD_READOOB:
996 ext_cmd_type = EXT_CMD_TYPE_MONO;
997 break;
998 case NAND_CMD_SEQIN:
999 ext_cmd_type = EXT_CMD_TYPE_DISPATCH;
1000 break;
1001 case NAND_CMD_PAGEPROG:
1002 ext_cmd_type = EXT_CMD_TYPE_NAKED_RW;
1003 break;
1004 default:
1005 ext_cmd_type = 0;
1006 break;
1007 }
1008
1009 prepare_start_command(info, command);
1010
1011 /*
1012 * Prepare the "is ready" completion before starting a command
1013 * transaction sequence. If the command is not executed the
1014 * completion will be completed, see below.
1015 *
1016 * We can do that inside the loop because the command variable
1017 * is invariant and thus so is the exec_cmd.
1018 */
1019 info->need_wait = 1;
1020 info->dev_ready = 0;
1021
1022 do {
1023 u32 ts;
1024
1025 info->state = STATE_PREPARED;
1026 exec_cmd = prepare_set_command(info, command, ext_cmd_type,
1027 column, page_addr);
1028 if (!exec_cmd) {
1029 info->need_wait = 0;
1030 info->dev_ready = 1;
1031 break;
1032 }
1033
1034 info->cmd_complete = 0;
1035 pxa3xx_nand_start(info);
1036
1037 ts = get_timer(0);
1038 while (1) {
1039 u32 status;
1040
1041 status = nand_readl(info, NDSR);
1042 if (status)
1043 pxa3xx_nand_irq(info);
1044
1045 if (info->cmd_complete)
1046 break;
1047
1048 if (get_timer(ts) > CHIP_DELAY_TIMEOUT) {
1049 dev_err(&info->pdev->dev, "Wait timeout!!!\n");
1050 return;
1051 }
1052 }
1053
1054 /* Check if the sequence is complete */
1055 if (info->data_size == 0 && command != NAND_CMD_PAGEPROG)
1056 break;
1057
1058 /*
1059 * After a splitted program command sequence has issued
1060 * the command dispatch, the command sequence is complete.
1061 */
1062 if (info->data_size == 0 &&
1063 command == NAND_CMD_PAGEPROG &&
1064 ext_cmd_type == EXT_CMD_TYPE_DISPATCH)
1065 break;
1066
1067 if (command == NAND_CMD_READ0 || command == NAND_CMD_READOOB) {
1068 /* Last read: issue a 'last naked read' */
1069 if (info->data_size == info->chunk_size)
1070 ext_cmd_type = EXT_CMD_TYPE_LAST_RW;
1071 else
1072 ext_cmd_type = EXT_CMD_TYPE_NAKED_RW;
1073
1074 /*
1075 * If a splitted program command has no more data to transfer,
1076 * the command dispatch must be issued to complete.
1077 */
1078 } else if (command == NAND_CMD_PAGEPROG &&
1079 info->data_size == 0) {
1080 ext_cmd_type = EXT_CMD_TYPE_DISPATCH;
1081 }
1082 } while (1);
1083
1084 info->state = STATE_IDLE;
1085}
1086
1087static int pxa3xx_nand_write_page_hwecc(struct mtd_info *mtd,
Scott Wood46e13102016-05-30 13:57:57 -05001088 struct nand_chip *chip, const uint8_t *buf, int oob_required,
1089 int page)
Stefan Roese75659da2015-07-23 10:26:16 +02001090{
1091 chip->write_buf(mtd, buf, mtd->writesize);
1092 chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
1093
1094 return 0;
1095}
1096
1097static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
1098 struct nand_chip *chip, uint8_t *buf, int oob_required,
1099 int page)
1100{
Scott Wood17fed142016-05-30 13:57:56 -05001101 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001102 struct pxa3xx_nand_info *info = host->info_data;
1103
1104 chip->read_buf(mtd, buf, mtd->writesize);
1105 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
1106
1107 if (info->retcode == ERR_CORERR && info->use_ecc) {
1108 mtd->ecc_stats.corrected += info->ecc_err_cnt;
1109
1110 } else if (info->retcode == ERR_UNCORERR) {
1111 /*
1112 * for blank page (all 0xff), HW will calculate its ECC as
1113 * 0, which is different from the ECC information within
1114 * OOB, ignore such uncorrectable errors
1115 */
1116 if (is_buf_blank(buf, mtd->writesize))
1117 info->retcode = ERR_NONE;
1118 else
1119 mtd->ecc_stats.failed++;
1120 }
1121
1122 return info->max_bitflips;
1123}
1124
1125static uint8_t pxa3xx_nand_read_byte(struct mtd_info *mtd)
1126{
Scott Wood17fed142016-05-30 13:57:56 -05001127 struct nand_chip *chip = mtd_to_nand(mtd);
1128 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001129 struct pxa3xx_nand_info *info = host->info_data;
1130 char retval = 0xFF;
1131
1132 if (info->buf_start < info->buf_count)
1133 /* Has just send a new command? */
1134 retval = info->data_buff[info->buf_start++];
1135
1136 return retval;
1137}
1138
1139static u16 pxa3xx_nand_read_word(struct mtd_info *mtd)
1140{
Scott Wood17fed142016-05-30 13:57:56 -05001141 struct nand_chip *chip = mtd_to_nand(mtd);
1142 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001143 struct pxa3xx_nand_info *info = host->info_data;
1144 u16 retval = 0xFFFF;
1145
1146 if (!(info->buf_start & 0x01) && info->buf_start < info->buf_count) {
1147 retval = *((u16 *)(info->data_buff+info->buf_start));
1148 info->buf_start += 2;
1149 }
1150 return retval;
1151}
1152
1153static void pxa3xx_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
1154{
Scott Wood17fed142016-05-30 13:57:56 -05001155 struct nand_chip *chip = mtd_to_nand(mtd);
1156 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001157 struct pxa3xx_nand_info *info = host->info_data;
1158 int real_len = min_t(size_t, len, info->buf_count - info->buf_start);
1159
1160 memcpy(buf, info->data_buff + info->buf_start, real_len);
1161 info->buf_start += real_len;
1162}
1163
1164static void pxa3xx_nand_write_buf(struct mtd_info *mtd,
1165 const uint8_t *buf, int len)
1166{
Scott Wood17fed142016-05-30 13:57:56 -05001167 struct nand_chip *chip = mtd_to_nand(mtd);
1168 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001169 struct pxa3xx_nand_info *info = host->info_data;
1170 int real_len = min_t(size_t, len, info->buf_count - info->buf_start);
1171
1172 memcpy(info->data_buff + info->buf_start, buf, real_len);
1173 info->buf_start += real_len;
1174}
1175
1176static void pxa3xx_nand_select_chip(struct mtd_info *mtd, int chip)
1177{
1178 return;
1179}
1180
1181static int pxa3xx_nand_waitfunc(struct mtd_info *mtd, struct nand_chip *this)
1182{
Scott Wood17fed142016-05-30 13:57:56 -05001183 struct nand_chip *chip = mtd_to_nand(mtd);
1184 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001185 struct pxa3xx_nand_info *info = host->info_data;
1186
1187 if (info->need_wait) {
1188 u32 ts;
1189
1190 info->need_wait = 0;
1191
1192 ts = get_timer(0);
1193 while (1) {
1194 u32 status;
1195
1196 status = nand_readl(info, NDSR);
1197 if (status)
1198 pxa3xx_nand_irq(info);
1199
1200 if (info->dev_ready)
1201 break;
1202
1203 if (get_timer(ts) > CHIP_DELAY_TIMEOUT) {
1204 dev_err(&info->pdev->dev, "Ready timeout!!!\n");
1205 return NAND_STATUS_FAIL;
1206 }
1207 }
1208 }
1209
1210 /* pxa3xx_nand_send_command has waited for command complete */
1211 if (this->state == FL_WRITING || this->state == FL_ERASING) {
1212 if (info->retcode == ERR_NONE)
1213 return 0;
1214 else
1215 return NAND_STATUS_FAIL;
1216 }
1217
1218 return NAND_STATUS_READY;
1219}
1220
1221static int pxa3xx_nand_config_flash(struct pxa3xx_nand_info *info)
1222{
1223 struct pxa3xx_nand_host *host = info->host[info->cs];
1224 struct mtd_info *mtd = host->mtd;
Scott Wood17fed142016-05-30 13:57:56 -05001225 struct nand_chip *chip = mtd_to_nand(mtd);
Stefan Roese75659da2015-07-23 10:26:16 +02001226
1227 info->reg_ndcr |= (host->col_addr_cycles == 2) ? NDCR_RA_START : 0;
1228 info->reg_ndcr |= (chip->page_shift == 6) ? NDCR_PG_PER_BLK : 0;
1229 info->reg_ndcr |= (mtd->writesize == 2048) ? NDCR_PAGE_SZ : 0;
1230
1231 return 0;
1232}
1233
1234static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
1235{
1236 /*
1237 * We set 0 by hard coding here, for we don't support keep_config
1238 * when there is more than one chip attached to the controller
1239 */
1240 struct pxa3xx_nand_host *host = info->host[0];
1241 uint32_t ndcr = nand_readl(info, NDCR);
1242
1243 if (ndcr & NDCR_PAGE_SZ) {
1244 /* Controller's FIFO size */
1245 info->chunk_size = 2048;
1246 host->read_id_bytes = 4;
1247 } else {
1248 info->chunk_size = 512;
1249 host->read_id_bytes = 2;
1250 }
1251
1252 /* Set an initial chunk size */
1253 info->reg_ndcr = ndcr & ~NDCR_INT_MASK;
1254 info->ndtr0cs0 = nand_readl(info, NDTR0CS0);
1255 info->ndtr1cs0 = nand_readl(info, NDTR1CS0);
1256 return 0;
1257}
1258
1259static int pxa3xx_nand_init_buff(struct pxa3xx_nand_info *info)
1260{
1261 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL);
1262 if (info->data_buff == NULL)
1263 return -ENOMEM;
1264 return 0;
1265}
1266
1267static int pxa3xx_nand_sensing(struct pxa3xx_nand_host *host)
1268{
1269 struct pxa3xx_nand_info *info = host->info_data;
1270 struct pxa3xx_nand_platform_data *pdata = info->pdata;
1271 struct mtd_info *mtd;
1272 struct nand_chip *chip;
1273 const struct nand_sdr_timings *timings;
1274 int ret;
1275
1276 mtd = info->host[info->cs]->mtd;
Scott Wood17fed142016-05-30 13:57:56 -05001277 chip = mtd_to_nand(mtd);
Stefan Roese75659da2015-07-23 10:26:16 +02001278
1279 /* configure default flash values */
1280 info->reg_ndcr = 0x0; /* enable all interrupts */
1281 info->reg_ndcr |= (pdata->enable_arbiter) ? NDCR_ND_ARB_EN : 0;
1282 info->reg_ndcr |= NDCR_RD_ID_CNT(host->read_id_bytes);
1283 info->reg_ndcr |= NDCR_SPARE_EN; /* enable spare by default */
1284
1285 /* use the common timing to make a try */
1286 timings = onfi_async_timing_mode_to_sdr_timings(0);
1287 if (IS_ERR(timings))
1288 return PTR_ERR(timings);
1289
1290 pxa3xx_nand_set_sdr_timing(host, timings);
1291
1292 chip->cmdfunc(mtd, NAND_CMD_RESET, 0, 0);
1293 ret = chip->waitfunc(mtd, chip);
1294 if (ret & NAND_STATUS_FAIL)
1295 return -ENODEV;
1296
1297 return 0;
1298}
1299
1300static int pxa_ecc_init(struct pxa3xx_nand_info *info,
1301 struct nand_ecc_ctrl *ecc,
1302 int strength, int ecc_stepsize, int page_size)
1303{
1304 if (strength == 1 && ecc_stepsize == 512 && page_size == 2048) {
1305 info->chunk_size = 2048;
1306 info->spare_size = 40;
1307 info->ecc_size = 24;
1308 ecc->mode = NAND_ECC_HW;
1309 ecc->size = 512;
1310 ecc->strength = 1;
1311
1312 } else if (strength == 1 && ecc_stepsize == 512 && page_size == 512) {
1313 info->chunk_size = 512;
1314 info->spare_size = 8;
1315 info->ecc_size = 8;
1316 ecc->mode = NAND_ECC_HW;
1317 ecc->size = 512;
1318 ecc->strength = 1;
1319
1320 /*
1321 * Required ECC: 4-bit correction per 512 bytes
1322 * Select: 16-bit correction per 2048 bytes
1323 */
1324 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 2048) {
1325 info->ecc_bch = 1;
1326 info->chunk_size = 2048;
1327 info->spare_size = 32;
1328 info->ecc_size = 32;
1329 ecc->mode = NAND_ECC_HW;
1330 ecc->size = info->chunk_size;
1331 ecc->layout = &ecc_layout_2KB_bch4bit;
1332 ecc->strength = 16;
1333
1334 } else if (strength == 4 && ecc_stepsize == 512 && page_size == 4096) {
1335 info->ecc_bch = 1;
1336 info->chunk_size = 2048;
1337 info->spare_size = 32;
1338 info->ecc_size = 32;
1339 ecc->mode = NAND_ECC_HW;
1340 ecc->size = info->chunk_size;
1341 ecc->layout = &ecc_layout_4KB_bch4bit;
1342 ecc->strength = 16;
1343
1344 /*
1345 * Required ECC: 8-bit correction per 512 bytes
1346 * Select: 16-bit correction per 1024 bytes
1347 */
1348 } else if (strength == 8 && ecc_stepsize == 512 && page_size == 4096) {
1349 info->ecc_bch = 1;
1350 info->chunk_size = 1024;
1351 info->spare_size = 0;
1352 info->ecc_size = 32;
1353 ecc->mode = NAND_ECC_HW;
1354 ecc->size = info->chunk_size;
1355 ecc->layout = &ecc_layout_4KB_bch8bit;
1356 ecc->strength = 16;
1357 } else {
1358 dev_err(&info->pdev->dev,
1359 "ECC strength %d at page size %d is not supported\n",
1360 strength, page_size);
1361 return -ENODEV;
1362 }
1363
1364 return 0;
1365}
1366
1367static int pxa3xx_nand_scan(struct mtd_info *mtd)
1368{
Scott Wood17fed142016-05-30 13:57:56 -05001369 struct nand_chip *chip = mtd_to_nand(mtd);
1370 struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001371 struct pxa3xx_nand_info *info = host->info_data;
1372 struct pxa3xx_nand_platform_data *pdata = info->pdata;
Stefan Roese75659da2015-07-23 10:26:16 +02001373 int ret;
1374 uint16_t ecc_strength, ecc_step;
1375
1376 if (pdata->keep_config && !pxa3xx_nand_detect_config(info))
1377 goto KEEP_CONFIG;
1378
1379 /* Set a default chunk size */
1380 info->chunk_size = 512;
1381
1382 ret = pxa3xx_nand_sensing(host);
1383 if (ret) {
1384 dev_info(&info->pdev->dev, "There is no chip on cs %d!\n",
1385 info->cs);
1386
1387 return ret;
1388 }
1389
1390KEEP_CONFIG:
1391 /* Device detection must be done with ECC disabled */
1392 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370)
1393 nand_writel(info, NDECCCTRL, 0x0);
1394
1395 if (nand_scan_ident(mtd, 1, NULL))
1396 return -ENODEV;
1397
1398 if (!pdata->keep_config) {
1399 ret = pxa3xx_nand_init_timings(host);
1400 if (ret) {
1401 dev_err(&info->pdev->dev,
1402 "Failed to set timings: %d\n", ret);
1403 return ret;
1404 }
1405 }
1406
1407 ret = pxa3xx_nand_config_flash(info);
1408 if (ret)
1409 return ret;
1410
1411#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
1412 /*
1413 * We'll use a bad block table stored in-flash and don't
1414 * allow writing the bad block marker to the flash.
1415 */
1416 chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB_BBM;
1417 chip->bbt_td = &bbt_main_descr;
1418 chip->bbt_md = &bbt_mirror_descr;
1419#endif
1420
1421 /*
1422 * If the page size is bigger than the FIFO size, let's check
1423 * we are given the right variant and then switch to the extended
1424 * (aka splitted) command handling,
1425 */
1426 if (mtd->writesize > PAGE_CHUNK_SIZE) {
1427 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370) {
1428 chip->cmdfunc = nand_cmdfunc_extended;
1429 } else {
1430 dev_err(&info->pdev->dev,
1431 "unsupported page size on this variant\n");
1432 return -ENODEV;
1433 }
1434 }
1435
1436 if (pdata->ecc_strength && pdata->ecc_step_size) {
1437 ecc_strength = pdata->ecc_strength;
1438 ecc_step = pdata->ecc_step_size;
1439 } else {
1440 ecc_strength = chip->ecc_strength_ds;
1441 ecc_step = chip->ecc_step_ds;
1442 }
1443
1444 /* Set default ECC strength requirements on non-ONFI devices */
1445 if (ecc_strength < 1 && ecc_step < 1) {
1446 ecc_strength = 1;
1447 ecc_step = 512;
1448 }
1449
1450 ret = pxa_ecc_init(info, &chip->ecc, ecc_strength,
1451 ecc_step, mtd->writesize);
1452 if (ret)
1453 return ret;
1454
1455 /* calculate addressing information */
1456 if (mtd->writesize >= 2048)
1457 host->col_addr_cycles = 2;
1458 else
1459 host->col_addr_cycles = 1;
1460
1461 /* release the initial buffer */
1462 kfree(info->data_buff);
1463
1464 /* allocate the real data + oob buffer */
1465 info->buf_size = mtd->writesize + mtd->oobsize;
1466 ret = pxa3xx_nand_init_buff(info);
1467 if (ret)
1468 return ret;
1469 info->oob_buff = info->data_buff + mtd->writesize;
1470
1471 if ((mtd->size >> chip->page_shift) > 65536)
1472 host->row_addr_cycles = 3;
1473 else
1474 host->row_addr_cycles = 2;
1475 return nand_scan_tail(mtd);
1476}
1477
1478static int alloc_nand_resource(struct pxa3xx_nand_info *info)
1479{
1480 struct pxa3xx_nand_platform_data *pdata;
1481 struct pxa3xx_nand_host *host;
1482 struct nand_chip *chip = NULL;
1483 struct mtd_info *mtd;
1484 int ret, cs;
1485
1486 pdata = info->pdata;
1487 if (pdata->num_cs <= 0)
1488 return -ENODEV;
1489
1490 info->variant = pxa3xx_nand_get_variant();
1491 for (cs = 0; cs < pdata->num_cs; cs++) {
Kevin Smith4d21b592016-01-14 16:01:38 +00001492 chip = (struct nand_chip *)
1493 ((u8 *)&info[1] + sizeof(*host) * cs);
Scott Wood17fed142016-05-30 13:57:56 -05001494 mtd = nand_to_mtd(chip);
Stefan Roese75659da2015-07-23 10:26:16 +02001495 host = (struct pxa3xx_nand_host *)chip;
1496 info->host[cs] = host;
1497 host->mtd = mtd;
1498 host->cs = cs;
1499 host->info_data = info;
1500 host->read_id_bytes = 4;
Stefan Roese75659da2015-07-23 10:26:16 +02001501 mtd->owner = THIS_MODULE;
1502
Chris Packham3c2170a2016-08-29 15:20:52 +12001503 nand_set_controller_data(chip, host);
Stefan Roese75659da2015-07-23 10:26:16 +02001504 chip->ecc.read_page = pxa3xx_nand_read_page_hwecc;
1505 chip->ecc.write_page = pxa3xx_nand_write_page_hwecc;
1506 chip->controller = &info->controller;
1507 chip->waitfunc = pxa3xx_nand_waitfunc;
1508 chip->select_chip = pxa3xx_nand_select_chip;
1509 chip->read_word = pxa3xx_nand_read_word;
1510 chip->read_byte = pxa3xx_nand_read_byte;
1511 chip->read_buf = pxa3xx_nand_read_buf;
1512 chip->write_buf = pxa3xx_nand_write_buf;
1513 chip->options |= NAND_NO_SUBPAGE_WRITE;
1514 chip->cmdfunc = nand_cmdfunc;
1515 }
1516
Stefan Roese75659da2015-07-23 10:26:16 +02001517 /* Allocate a buffer to allow flash detection */
1518 info->buf_size = INIT_BUFFER_SIZE;
1519 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL);
1520 if (info->data_buff == NULL) {
1521 ret = -ENOMEM;
1522 goto fail_disable_clk;
1523 }
1524
1525 /* initialize all interrupts to be disabled */
1526 disable_int(info, NDSR_MASK);
1527
1528 return 0;
1529
1530 kfree(info->data_buff);
1531fail_disable_clk:
1532 return ret;
1533}
1534
1535static int pxa3xx_nand_probe_dt(struct pxa3xx_nand_info *info)
1536{
1537 struct pxa3xx_nand_platform_data *pdata;
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +03001538 const void *blob = gd->fdt_blob;
1539 int node = -1;
Stefan Roese75659da2015-07-23 10:26:16 +02001540
1541 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
1542 if (!pdata)
1543 return -ENOMEM;
1544
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +03001545 /* Get address decoding nodes from the FDT blob */
1546 do {
1547 node = fdt_node_offset_by_compatible(blob, node,
1548 "marvell,mvebu-pxa3xx-nand");
1549 if (node < 0)
1550 break;
1551
1552 /* Bypass disabeld nodes */
1553 if (!fdtdec_get_is_enabled(blob, node))
1554 continue;
Stefan Roese75659da2015-07-23 10:26:16 +02001555
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +03001556 /* Get the first enabled NAND controler base address */
1557 info->mmio_base =
1558 (void __iomem *)fdtdec_get_addr_size_auto_noparent(
1559 blob, node, "reg", 0, NULL, true);
Stefan Roese75659da2015-07-23 10:26:16 +02001560
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +03001561 pdata->num_cs = fdtdec_get_int(blob, node, "num-cs", 1);
1562 if (pdata->num_cs != 1) {
Masahiro Yamada81e10422017-09-16 14:10:41 +09001563 pr_err("pxa3xx driver supports single CS only\n");
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +03001564 break;
1565 }
1566
1567 if (fdtdec_get_bool(blob, node, "nand-enable-arbiter"))
1568 pdata->enable_arbiter = 1;
1569
1570 if (fdtdec_get_bool(blob, node, "nand-keep-config"))
1571 pdata->keep_config = 1;
1572
1573 /*
1574 * ECC parameters.
1575 * If these are not set, they will be selected according
1576 * to the detected flash type.
1577 */
1578 /* ECC strength */
1579 pdata->ecc_strength = fdtdec_get_int(blob, node,
1580 "nand-ecc-strength", 0);
1581
1582 /* ECC step size */
1583 pdata->ecc_step_size = fdtdec_get_int(blob, node,
1584 "nand-ecc-step-size", 0);
1585
1586 info->pdata = pdata;
1587
1588 /* Currently support only a single NAND controller */
1589 return 0;
1590
1591 } while (node >= 0);
1592
1593 return -EINVAL;
Stefan Roese75659da2015-07-23 10:26:16 +02001594}
1595
1596static int pxa3xx_nand_probe(struct pxa3xx_nand_info *info)
1597{
1598 struct pxa3xx_nand_platform_data *pdata;
1599 int ret, cs, probe_success;
1600
1601 ret = pxa3xx_nand_probe_dt(info);
1602 if (ret)
1603 return ret;
1604
1605 pdata = info->pdata;
1606
1607 ret = alloc_nand_resource(info);
1608 if (ret) {
1609 dev_err(&pdev->dev, "alloc nand resource failed\n");
1610 return ret;
1611 }
1612
1613 probe_success = 0;
1614 for (cs = 0; cs < pdata->num_cs; cs++) {
1615 struct mtd_info *mtd = info->host[cs]->mtd;
1616
1617 /*
1618 * The mtd name matches the one used in 'mtdparts' kernel
1619 * parameter. This name cannot be changed or otherwise
1620 * user's mtd partitions configuration would get broken.
1621 */
1622 mtd->name = "pxa3xx_nand-0";
1623 info->cs = cs;
1624 ret = pxa3xx_nand_scan(mtd);
1625 if (ret) {
1626 dev_info(&pdev->dev, "failed to scan nand at cs %d\n",
1627 cs);
1628 continue;
1629 }
1630
Scott Wood2c1b7e12016-05-30 13:57:55 -05001631 if (nand_register(cs, mtd))
1632 continue;
1633
1634 probe_success = 1;
Stefan Roese75659da2015-07-23 10:26:16 +02001635 }
1636
1637 if (!probe_success)
1638 return -ENODEV;
1639
1640 return 0;
1641}
1642
1643/*
1644 * Main initialization routine
1645 */
1646void board_nand_init(void)
1647{
1648 struct pxa3xx_nand_info *info;
1649 struct pxa3xx_nand_host *host;
1650 int ret;
1651
Kevin Smithf6ca2a62016-01-14 16:01:39 +00001652 info = kzalloc(sizeof(*info) +
Konstantin Porotchkin93c9f392017-03-28 18:16:54 +03001653 sizeof(*host) * CONFIG_SYS_MAX_NAND_DEVICE,
1654 GFP_KERNEL);
Stefan Roese75659da2015-07-23 10:26:16 +02001655 if (!info)
1656 return;
1657
Stefan Roese75659da2015-07-23 10:26:16 +02001658 ret = pxa3xx_nand_probe(info);
1659 if (ret)
1660 return;
Stefan Roese75659da2015-07-23 10:26:16 +02001661}