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