1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2018 Stefan Agner <stefan@agner.ch>
4 * Copyright (C) 2014-2015 Lucas Stach <dev@lynxeye.de>
5 * Copyright (C) 2012 Avionic Design GmbH
9 #include <linux/completion.h>
10 #include <linux/dma-mapping.h>
11 #include <linux/err.h>
12 #include <linux/gpio/consumer.h>
13 #include <linux/interrupt.h>
15 #include <linux/module.h>
16 #include <linux/mtd/partitions.h>
17 #include <linux/mtd/rawnand.h>
19 #include <linux/platform_device.h>
20 #include <linux/reset.h>
23 #define COMMAND_GO BIT(31)
24 #define COMMAND_CLE BIT(30)
25 #define COMMAND_ALE BIT(29)
26 #define COMMAND_PIO BIT(28)
27 #define COMMAND_TX BIT(27)
28 #define COMMAND_RX BIT(26)
29 #define COMMAND_SEC_CMD BIT(25)
30 #define COMMAND_AFT_DAT BIT(24)
31 #define COMMAND_TRANS_SIZE(size) ((((size) - 1) & 0xf) << 20)
32 #define COMMAND_A_VALID BIT(19)
33 #define COMMAND_B_VALID BIT(18)
34 #define COMMAND_RD_STATUS_CHK BIT(17)
35 #define COMMAND_RBSY_CHK BIT(16)
36 #define COMMAND_CE(x) BIT(8 + ((x) & 0x7))
37 #define COMMAND_CLE_SIZE(size) ((((size) - 1) & 0x3) << 4)
38 #define COMMAND_ALE_SIZE(size) ((((size) - 1) & 0xf) << 0)
43 #define ISR_CORRFAIL_ERR BIT(24)
44 #define ISR_UND BIT(7)
45 #define ISR_OVR BIT(6)
46 #define ISR_CMD_DONE BIT(5)
47 #define ISR_ECC_ERR BIT(4)
50 #define IER_ERR_TRIG_VAL(x) (((x) & 0xf) << 16)
51 #define IER_UND BIT(7)
52 #define IER_OVR BIT(6)
53 #define IER_CMD_DONE BIT(5)
54 #define IER_ECC_ERR BIT(4)
55 #define IER_GIE BIT(0)
58 #define CONFIG_HW_ECC BIT(31)
59 #define CONFIG_ECC_SEL BIT(30)
60 #define CONFIG_ERR_COR BIT(29)
61 #define CONFIG_PIPE_EN BIT(28)
62 #define CONFIG_TVAL_4 (0 << 24)
63 #define CONFIG_TVAL_6 (1 << 24)
64 #define CONFIG_TVAL_8 (2 << 24)
65 #define CONFIG_SKIP_SPARE BIT(23)
66 #define CONFIG_BUS_WIDTH_16 BIT(21)
67 #define CONFIG_COM_BSY BIT(20)
68 #define CONFIG_PS_256 (0 << 16)
69 #define CONFIG_PS_512 (1 << 16)
70 #define CONFIG_PS_1024 (2 << 16)
71 #define CONFIG_PS_2048 (3 << 16)
72 #define CONFIG_PS_4096 (4 << 16)
73 #define CONFIG_SKIP_SPARE_SIZE_4 (0 << 14)
74 #define CONFIG_SKIP_SPARE_SIZE_8 (1 << 14)
75 #define CONFIG_SKIP_SPARE_SIZE_12 (2 << 14)
76 #define CONFIG_SKIP_SPARE_SIZE_16 (3 << 14)
77 #define CONFIG_TAG_BYTE_SIZE(x) ((x) & 0xff)
80 #define TIMING_TRP_RESP(x) (((x) & 0xf) << 28)
81 #define TIMING_TWB(x) (((x) & 0xf) << 24)
82 #define TIMING_TCR_TAR_TRR(x) (((x) & 0xf) << 20)
83 #define TIMING_TWHR(x) (((x) & 0xf) << 16)
84 #define TIMING_TCS(x) (((x) & 0x3) << 14)
85 #define TIMING_TWH(x) (((x) & 0x3) << 12)
86 #define TIMING_TWP(x) (((x) & 0xf) << 8)
87 #define TIMING_TRH(x) (((x) & 0x3) << 4)
88 #define TIMING_TRP(x) (((x) & 0xf) << 0)
93 #define TIMING_TADL(x) ((x) & 0xf)
97 #define ADDR_REG1 0x28
98 #define ADDR_REG2 0x2c
100 #define DMA_MST_CTRL 0x30
101 #define DMA_MST_CTRL_GO BIT(31)
102 #define DMA_MST_CTRL_IN (0 << 30)
103 #define DMA_MST_CTRL_OUT BIT(30)
104 #define DMA_MST_CTRL_PERF_EN BIT(29)
105 #define DMA_MST_CTRL_IE_DONE BIT(28)
106 #define DMA_MST_CTRL_REUSE BIT(27)
107 #define DMA_MST_CTRL_BURST_1 (2 << 24)
108 #define DMA_MST_CTRL_BURST_4 (3 << 24)
109 #define DMA_MST_CTRL_BURST_8 (4 << 24)
110 #define DMA_MST_CTRL_BURST_16 (5 << 24)
111 #define DMA_MST_CTRL_IS_DONE BIT(20)
112 #define DMA_MST_CTRL_EN_A BIT(2)
113 #define DMA_MST_CTRL_EN_B BIT(1)
115 #define DMA_CFG_A 0x34
116 #define DMA_CFG_B 0x38
118 #define FIFO_CTRL 0x3c
119 #define FIFO_CTRL_CLR_ALL BIT(3)
121 #define DATA_PTR 0x40
125 #define DEC_STATUS 0x4c
126 #define DEC_STATUS_A_ECC_FAIL BIT(1)
127 #define DEC_STATUS_ERR_COUNT_MASK 0x00ff0000
128 #define DEC_STATUS_ERR_COUNT_SHIFT 16
130 #define HWSTATUS_CMD 0x50
131 #define HWSTATUS_MASK 0x54
132 #define HWSTATUS_RDSTATUS_MASK(x) (((x) & 0xff) << 24)
133 #define HWSTATUS_RDSTATUS_VALUE(x) (((x) & 0xff) << 16)
134 #define HWSTATUS_RBSY_MASK(x) (((x) & 0xff) << 8)
135 #define HWSTATUS_RBSY_VALUE(x) (((x) & 0xff) << 0)
137 #define BCH_CONFIG 0xcc
138 #define BCH_ENABLE BIT(0)
139 #define BCH_TVAL_4 (0 << 4)
140 #define BCH_TVAL_8 (1 << 4)
141 #define BCH_TVAL_14 (2 << 4)
142 #define BCH_TVAL_16 (3 << 4)
144 #define DEC_STAT_RESULT 0xd0
145 #define DEC_STAT_BUF 0xd4
146 #define DEC_STAT_BUF_FAIL_SEC_FLAG_MASK 0xff000000
147 #define DEC_STAT_BUF_FAIL_SEC_FLAG_SHIFT 24
148 #define DEC_STAT_BUF_CORR_SEC_FLAG_MASK 0x00ff0000
149 #define DEC_STAT_BUF_CORR_SEC_FLAG_SHIFT 16
150 #define DEC_STAT_BUF_MAX_CORR_CNT_MASK 0x00001f00
151 #define DEC_STAT_BUF_MAX_CORR_CNT_SHIFT 8
153 #define OFFSET(val, off) ((val) < (off) ? 0 : (val) - (off))
155 #define SKIP_SPARE_BYTES 4
156 #define BITS_PER_STEP_RS 18
157 #define BITS_PER_STEP_BCH 13
159 #define INT_MASK (IER_UND | IER_OVR | IER_CMD_DONE | IER_GIE)
160 #define HWSTATUS_CMD_DEFAULT NAND_STATUS_READY
161 #define HWSTATUS_MASK_DEFAULT (HWSTATUS_RDSTATUS_MASK(1) | \
162 HWSTATUS_RDSTATUS_VALUE(0) | \
163 HWSTATUS_RBSY_MASK(NAND_STATUS_READY) | \
164 HWSTATUS_RBSY_VALUE(NAND_STATUS_READY))
166 struct tegra_nand_controller
{
167 struct nand_controller controller
;
172 struct completion command_complete
;
173 struct completion dma_complete
;
174 bool last_read_error
;
176 struct nand_chip
*chip
;
179 struct tegra_nand_chip
{
180 struct nand_chip chip
;
181 struct gpio_desc
*wp_gpio
;
182 struct mtd_oob_region ecc
;
189 static inline struct tegra_nand_controller
*
190 to_tegra_ctrl(struct nand_controller
*hw_ctrl
)
192 return container_of(hw_ctrl
, struct tegra_nand_controller
, controller
);
195 static inline struct tegra_nand_chip
*to_tegra_chip(struct nand_chip
*chip
)
197 return container_of(chip
, struct tegra_nand_chip
, chip
);
200 static int tegra_nand_ooblayout_rs_ecc(struct mtd_info
*mtd
, int section
,
201 struct mtd_oob_region
*oobregion
)
203 struct nand_chip
*chip
= mtd_to_nand(mtd
);
204 int bytes_per_step
= DIV_ROUND_UP(BITS_PER_STEP_RS
* chip
->ecc
.strength
,
210 oobregion
->offset
= SKIP_SPARE_BYTES
;
211 oobregion
->length
= round_up(bytes_per_step
* chip
->ecc
.steps
, 4);
216 static int tegra_nand_ooblayout_no_free(struct mtd_info
*mtd
, int section
,
217 struct mtd_oob_region
*oobregion
)
222 static const struct mtd_ooblayout_ops tegra_nand_oob_rs_ops
= {
223 .ecc
= tegra_nand_ooblayout_rs_ecc
,
224 .free
= tegra_nand_ooblayout_no_free
,
227 static int tegra_nand_ooblayout_bch_ecc(struct mtd_info
*mtd
, int section
,
228 struct mtd_oob_region
*oobregion
)
230 struct nand_chip
*chip
= mtd_to_nand(mtd
);
231 int bytes_per_step
= DIV_ROUND_UP(BITS_PER_STEP_BCH
* chip
->ecc
.strength
,
237 oobregion
->offset
= SKIP_SPARE_BYTES
;
238 oobregion
->length
= round_up(bytes_per_step
* chip
->ecc
.steps
, 4);
243 static const struct mtd_ooblayout_ops tegra_nand_oob_bch_ops
= {
244 .ecc
= tegra_nand_ooblayout_bch_ecc
,
245 .free
= tegra_nand_ooblayout_no_free
,
248 static irqreturn_t
tegra_nand_irq(int irq
, void *data
)
250 struct tegra_nand_controller
*ctrl
= data
;
253 isr
= readl_relaxed(ctrl
->regs
+ ISR
);
254 dma
= readl_relaxed(ctrl
->regs
+ DMA_MST_CTRL
);
255 dev_dbg(ctrl
->dev
, "isr %08x\n", isr
);
257 if (!isr
&& !(dma
& DMA_MST_CTRL_IS_DONE
))
261 * The bit name is somewhat missleading: This is also set when
262 * HW ECC was successful. The data sheet states:
263 * Correctable OR Un-correctable errors occurred in the DMA transfer...
265 if (isr
& ISR_CORRFAIL_ERR
)
266 ctrl
->last_read_error
= true;
268 if (isr
& ISR_CMD_DONE
)
269 complete(&ctrl
->command_complete
);
272 dev_err(ctrl
->dev
, "FIFO underrun\n");
275 dev_err(ctrl
->dev
, "FIFO overrun\n");
277 /* handle DMA interrupts */
278 if (dma
& DMA_MST_CTRL_IS_DONE
) {
279 writel_relaxed(dma
, ctrl
->regs
+ DMA_MST_CTRL
);
280 complete(&ctrl
->dma_complete
);
283 /* clear interrupts */
284 writel_relaxed(isr
, ctrl
->regs
+ ISR
);
289 static const char * const tegra_nand_reg_names
[] = {
308 static void tegra_nand_dump_reg(struct tegra_nand_controller
*ctrl
)
313 dev_err(ctrl
->dev
, "Tegra NAND controller register dump\n");
314 for (i
= 0; i
< ARRAY_SIZE(tegra_nand_reg_names
); i
++) {
315 const char *reg_name
= tegra_nand_reg_names
[i
];
320 reg
= readl_relaxed(ctrl
->regs
+ (i
* 4));
321 dev_err(ctrl
->dev
, "%s: 0x%08x\n", reg_name
, reg
);
325 static void tegra_nand_controller_abort(struct tegra_nand_controller
*ctrl
)
329 disable_irq(ctrl
->irq
);
331 /* Abort current command/DMA operation */
332 writel_relaxed(0, ctrl
->regs
+ DMA_MST_CTRL
);
333 writel_relaxed(0, ctrl
->regs
+ COMMAND
);
335 /* clear interrupts */
336 isr
= readl_relaxed(ctrl
->regs
+ ISR
);
337 writel_relaxed(isr
, ctrl
->regs
+ ISR
);
338 dma
= readl_relaxed(ctrl
->regs
+ DMA_MST_CTRL
);
339 writel_relaxed(dma
, ctrl
->regs
+ DMA_MST_CTRL
);
341 reinit_completion(&ctrl
->command_complete
);
342 reinit_completion(&ctrl
->dma_complete
);
344 enable_irq(ctrl
->irq
);
347 static int tegra_nand_cmd(struct nand_chip
*chip
,
348 const struct nand_subop
*subop
)
350 const struct nand_op_instr
*instr
;
351 const struct nand_op_instr
*instr_data_in
= NULL
;
352 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
353 unsigned int op_id
, size
= 0, offset
= 0;
354 bool first_cmd
= true;
358 for (op_id
= 0; op_id
< subop
->ninstrs
; op_id
++) {
359 unsigned int naddrs
, i
;
361 u32 addr1
= 0, addr2
= 0;
363 instr
= &subop
->instrs
[op_id
];
365 switch (instr
->type
) {
366 case NAND_OP_CMD_INSTR
:
369 writel_relaxed(instr
->ctx
.cmd
.opcode
,
370 ctrl
->regs
+ CMD_REG1
);
372 cmd
|= COMMAND_SEC_CMD
;
373 writel_relaxed(instr
->ctx
.cmd
.opcode
,
374 ctrl
->regs
+ CMD_REG2
);
379 case NAND_OP_ADDR_INSTR
:
380 offset
= nand_subop_get_addr_start_off(subop
, op_id
);
381 naddrs
= nand_subop_get_num_addr_cyc(subop
, op_id
);
382 addrs
= &instr
->ctx
.addr
.addrs
[offset
];
384 cmd
|= COMMAND_ALE
| COMMAND_ALE_SIZE(naddrs
);
385 for (i
= 0; i
< min_t(unsigned int, 4, naddrs
); i
++)
386 addr1
|= *addrs
++ << (BITS_PER_BYTE
* i
);
388 for (i
= 0; i
< min_t(unsigned int, 4, naddrs
); i
++)
389 addr2
|= *addrs
++ << (BITS_PER_BYTE
* i
);
391 writel_relaxed(addr1
, ctrl
->regs
+ ADDR_REG1
);
392 writel_relaxed(addr2
, ctrl
->regs
+ ADDR_REG2
);
395 case NAND_OP_DATA_IN_INSTR
:
396 size
= nand_subop_get_data_len(subop
, op_id
);
397 offset
= nand_subop_get_data_start_off(subop
, op_id
);
399 cmd
|= COMMAND_TRANS_SIZE(size
) | COMMAND_PIO
|
400 COMMAND_RX
| COMMAND_A_VALID
;
402 instr_data_in
= instr
;
405 case NAND_OP_DATA_OUT_INSTR
:
406 size
= nand_subop_get_data_len(subop
, op_id
);
407 offset
= nand_subop_get_data_start_off(subop
, op_id
);
409 cmd
|= COMMAND_TRANS_SIZE(size
) | COMMAND_PIO
|
410 COMMAND_TX
| COMMAND_A_VALID
;
411 memcpy(®
, instr
->ctx
.data
.buf
.out
+ offset
, size
);
413 writel_relaxed(reg
, ctrl
->regs
+ RESP
);
416 case NAND_OP_WAITRDY_INSTR
:
417 cmd
|= COMMAND_RBSY_CHK
;
422 cmd
|= COMMAND_GO
| COMMAND_CE(ctrl
->cur_cs
);
423 writel_relaxed(cmd
, ctrl
->regs
+ COMMAND
);
424 ret
= wait_for_completion_timeout(&ctrl
->command_complete
,
425 msecs_to_jiffies(500));
427 dev_err(ctrl
->dev
, "COMMAND timeout\n");
428 tegra_nand_dump_reg(ctrl
);
429 tegra_nand_controller_abort(ctrl
);
434 reg
= readl_relaxed(ctrl
->regs
+ RESP
);
435 memcpy(instr_data_in
->ctx
.data
.buf
.in
+ offset
, ®
, size
);
441 static const struct nand_op_parser tegra_nand_op_parser
= NAND_OP_PARSER(
442 NAND_OP_PARSER_PATTERN(tegra_nand_cmd
,
443 NAND_OP_PARSER_PAT_CMD_ELEM(true),
444 NAND_OP_PARSER_PAT_ADDR_ELEM(true, 8),
445 NAND_OP_PARSER_PAT_CMD_ELEM(true),
446 NAND_OP_PARSER_PAT_WAITRDY_ELEM(true)),
447 NAND_OP_PARSER_PATTERN(tegra_nand_cmd
,
448 NAND_OP_PARSER_PAT_DATA_OUT_ELEM(false, 4)),
449 NAND_OP_PARSER_PATTERN(tegra_nand_cmd
,
450 NAND_OP_PARSER_PAT_CMD_ELEM(true),
451 NAND_OP_PARSER_PAT_ADDR_ELEM(true, 8),
452 NAND_OP_PARSER_PAT_CMD_ELEM(true),
453 NAND_OP_PARSER_PAT_WAITRDY_ELEM(true),
454 NAND_OP_PARSER_PAT_DATA_IN_ELEM(true, 4)),
457 static int tegra_nand_exec_op(struct nand_chip
*chip
,
458 const struct nand_operation
*op
,
461 return nand_op_parser_exec_op(chip
, &tegra_nand_op_parser
, op
,
465 static void tegra_nand_select_chip(struct mtd_info
*mtd
, int die_nr
)
467 struct nand_chip
*chip
= mtd_to_nand(mtd
);
468 struct tegra_nand_chip
*nand
= to_tegra_chip(chip
);
469 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
471 WARN_ON(die_nr
>= (int)ARRAY_SIZE(nand
->cs
));
473 if (die_nr
< 0 || die_nr
> 0) {
478 ctrl
->cur_cs
= nand
->cs
[die_nr
];
481 static void tegra_nand_hw_ecc(struct tegra_nand_controller
*ctrl
,
482 struct nand_chip
*chip
, bool enable
)
484 struct tegra_nand_chip
*nand
= to_tegra_chip(chip
);
486 if (chip
->ecc
.algo
== NAND_ECC_BCH
&& enable
)
487 writel_relaxed(nand
->bch_config
, ctrl
->regs
+ BCH_CONFIG
);
489 writel_relaxed(0, ctrl
->regs
+ BCH_CONFIG
);
492 writel_relaxed(nand
->config_ecc
, ctrl
->regs
+ CONFIG
);
494 writel_relaxed(nand
->config
, ctrl
->regs
+ CONFIG
);
497 static int tegra_nand_page_xfer(struct mtd_info
*mtd
, struct nand_chip
*chip
,
498 void *buf
, void *oob_buf
, int oob_len
, int page
,
501 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
502 enum dma_data_direction dir
= read
? DMA_FROM_DEVICE
: DMA_TO_DEVICE
;
503 dma_addr_t dma_addr
= 0, dma_addr_oob
= 0;
504 u32 addr1
, cmd
, dma_ctrl
;
508 writel_relaxed(NAND_CMD_READ0
, ctrl
->regs
+ CMD_REG1
);
509 writel_relaxed(NAND_CMD_READSTART
, ctrl
->regs
+ CMD_REG2
);
511 writel_relaxed(NAND_CMD_SEQIN
, ctrl
->regs
+ CMD_REG1
);
512 writel_relaxed(NAND_CMD_PAGEPROG
, ctrl
->regs
+ CMD_REG2
);
514 cmd
= COMMAND_CLE
| COMMAND_SEC_CMD
;
516 /* Lower 16-bits are column, by default 0 */
520 addr1
|= mtd
->writesize
;
521 writel_relaxed(addr1
, ctrl
->regs
+ ADDR_REG1
);
523 if (chip
->options
& NAND_ROW_ADDR_3
) {
524 writel_relaxed(page
>> 16, ctrl
->regs
+ ADDR_REG2
);
525 cmd
|= COMMAND_ALE
| COMMAND_ALE_SIZE(5);
527 cmd
|= COMMAND_ALE
| COMMAND_ALE_SIZE(4);
531 dma_addr
= dma_map_single(ctrl
->dev
, buf
, mtd
->writesize
, dir
);
532 ret
= dma_mapping_error(ctrl
->dev
, dma_addr
);
534 dev_err(ctrl
->dev
, "dma mapping error\n");
538 writel_relaxed(mtd
->writesize
- 1, ctrl
->regs
+ DMA_CFG_A
);
539 writel_relaxed(dma_addr
, ctrl
->regs
+ DATA_PTR
);
543 dma_addr_oob
= dma_map_single(ctrl
->dev
, oob_buf
, mtd
->oobsize
,
545 ret
= dma_mapping_error(ctrl
->dev
, dma_addr_oob
);
547 dev_err(ctrl
->dev
, "dma mapping error\n");
549 goto err_unmap_dma_page
;
552 writel_relaxed(oob_len
- 1, ctrl
->regs
+ DMA_CFG_B
);
553 writel_relaxed(dma_addr_oob
, ctrl
->regs
+ TAG_PTR
);
556 dma_ctrl
= DMA_MST_CTRL_GO
| DMA_MST_CTRL_PERF_EN
|
557 DMA_MST_CTRL_IE_DONE
| DMA_MST_CTRL_IS_DONE
|
558 DMA_MST_CTRL_BURST_16
;
561 dma_ctrl
|= DMA_MST_CTRL_EN_A
;
563 dma_ctrl
|= DMA_MST_CTRL_EN_B
;
566 dma_ctrl
|= DMA_MST_CTRL_IN
| DMA_MST_CTRL_REUSE
;
568 dma_ctrl
|= DMA_MST_CTRL_OUT
;
570 writel_relaxed(dma_ctrl
, ctrl
->regs
+ DMA_MST_CTRL
);
572 cmd
|= COMMAND_GO
| COMMAND_RBSY_CHK
| COMMAND_TRANS_SIZE(9) |
573 COMMAND_CE(ctrl
->cur_cs
);
576 cmd
|= COMMAND_A_VALID
;
578 cmd
|= COMMAND_B_VALID
;
583 cmd
|= COMMAND_TX
| COMMAND_AFT_DAT
;
585 writel_relaxed(cmd
, ctrl
->regs
+ COMMAND
);
587 ret
= wait_for_completion_timeout(&ctrl
->command_complete
,
588 msecs_to_jiffies(500));
590 dev_err(ctrl
->dev
, "COMMAND timeout\n");
591 tegra_nand_dump_reg(ctrl
);
592 tegra_nand_controller_abort(ctrl
);
597 ret
= wait_for_completion_timeout(&ctrl
->dma_complete
,
598 msecs_to_jiffies(500));
600 dev_err(ctrl
->dev
, "DMA timeout\n");
601 tegra_nand_dump_reg(ctrl
);
602 tegra_nand_controller_abort(ctrl
);
610 dma_unmap_single(ctrl
->dev
, dma_addr_oob
, mtd
->oobsize
, dir
);
613 dma_unmap_single(ctrl
->dev
, dma_addr
, mtd
->writesize
, dir
);
618 static int tegra_nand_read_page_raw(struct mtd_info
*mtd
,
619 struct nand_chip
*chip
, u8
*buf
,
620 int oob_required
, int page
)
622 void *oob_buf
= oob_required
? chip
->oob_poi
: NULL
;
624 return tegra_nand_page_xfer(mtd
, chip
, buf
, oob_buf
,
625 mtd
->oobsize
, page
, true);
628 static int tegra_nand_write_page_raw(struct mtd_info
*mtd
,
629 struct nand_chip
*chip
, const u8
*buf
,
630 int oob_required
, int page
)
632 void *oob_buf
= oob_required
? chip
->oob_poi
: NULL
;
634 return tegra_nand_page_xfer(mtd
, chip
, (void *)buf
, oob_buf
,
635 mtd
->oobsize
, page
, false);
638 static int tegra_nand_read_oob(struct mtd_info
*mtd
, struct nand_chip
*chip
,
641 return tegra_nand_page_xfer(mtd
, chip
, NULL
, chip
->oob_poi
,
642 mtd
->oobsize
, page
, true);
645 static int tegra_nand_write_oob(struct mtd_info
*mtd
, struct nand_chip
*chip
,
648 return tegra_nand_page_xfer(mtd
, chip
, NULL
, chip
->oob_poi
,
649 mtd
->oobsize
, page
, false);
652 static int tegra_nand_read_page_hwecc(struct mtd_info
*mtd
,
653 struct nand_chip
*chip
, u8
*buf
,
654 int oob_required
, int page
)
656 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
657 struct tegra_nand_chip
*nand
= to_tegra_chip(chip
);
658 void *oob_buf
= oob_required
? chip
->oob_poi
: NULL
;
659 u32 dec_stat
, max_corr_cnt
;
660 unsigned long fail_sec_flag
;
663 tegra_nand_hw_ecc(ctrl
, chip
, true);
664 ret
= tegra_nand_page_xfer(mtd
, chip
, buf
, oob_buf
, 0, page
, true);
665 tegra_nand_hw_ecc(ctrl
, chip
, false);
669 /* No correctable or un-correctable errors, page must have 0 bitflips */
670 if (!ctrl
->last_read_error
)
674 * Correctable or un-correctable errors occurred. Use DEC_STAT_BUF
675 * which contains information for all ECC selections.
677 * Note that since we do not use Command Queues DEC_RESULT does not
678 * state the number of pages we can read from the DEC_STAT_BUF. But
679 * since CORRFAIL_ERR did occur during page read we do have a valid
680 * result in DEC_STAT_BUF.
682 ctrl
->last_read_error
= false;
683 dec_stat
= readl_relaxed(ctrl
->regs
+ DEC_STAT_BUF
);
685 fail_sec_flag
= (dec_stat
& DEC_STAT_BUF_FAIL_SEC_FLAG_MASK
) >>
686 DEC_STAT_BUF_FAIL_SEC_FLAG_SHIFT
;
688 max_corr_cnt
= (dec_stat
& DEC_STAT_BUF_MAX_CORR_CNT_MASK
) >>
689 DEC_STAT_BUF_MAX_CORR_CNT_SHIFT
;
692 int bit
, max_bitflips
= 0;
695 * Since we do not support subpage writes, a complete page
696 * is either written or not. We can take a shortcut here by
697 * checking wheather any of the sector has been successful
698 * read. If at least one sectors has been read successfully,
699 * the page must have been a written previously. It cannot
702 * E.g. controller might return fail_sec_flag with 0x4, which
703 * would mean only the third sector failed to correct. The
704 * page must have been written and the third sector is really
705 * not correctable anymore.
707 if (fail_sec_flag
^ GENMASK(chip
->ecc
.steps
- 1, 0)) {
708 mtd
->ecc_stats
.failed
+= hweight8(fail_sec_flag
);
713 * All sectors failed to correct, but the ECC isn't smart
714 * enough to figure out if a page is really just erased.
715 * Read OOB data and check whether data/OOB is completely
716 * erased or if error correction just failed for all sub-
719 ret
= tegra_nand_read_oob(mtd
, chip
, page
);
723 for_each_set_bit(bit
, &fail_sec_flag
, chip
->ecc
.steps
) {
724 u8
*data
= buf
+ (chip
->ecc
.size
* bit
);
725 u8
*oob
= chip
->oob_poi
+ nand
->ecc
.offset
+
726 (chip
->ecc
.bytes
* bit
);
728 ret
= nand_check_erased_ecc_chunk(data
, chip
->ecc
.size
,
729 oob
, chip
->ecc
.bytes
,
733 mtd
->ecc_stats
.failed
++;
735 mtd
->ecc_stats
.corrected
+= ret
;
736 max_bitflips
= max(ret
, max_bitflips
);
740 return max_t(unsigned int, max_corr_cnt
, max_bitflips
);
744 corr_sec_flag
= (dec_stat
& DEC_STAT_BUF_CORR_SEC_FLAG_MASK
) >>
745 DEC_STAT_BUF_CORR_SEC_FLAG_SHIFT
;
748 * The value returned in the register is the maximum of
749 * bitflips encountered in any of the ECC regions. As there is
750 * no way to get the number of bitflips in a specific regions
751 * we are not able to deliver correct stats but instead
752 * overestimate the number of corrected bitflips by assuming
753 * that all regions where errors have been corrected
754 * encountered the maximum number of bitflips.
756 mtd
->ecc_stats
.corrected
+= max_corr_cnt
* hweight8(corr_sec_flag
);
762 static int tegra_nand_write_page_hwecc(struct mtd_info
*mtd
,
763 struct nand_chip
*chip
, const u8
*buf
,
764 int oob_required
, int page
)
766 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
767 void *oob_buf
= oob_required
? chip
->oob_poi
: NULL
;
770 tegra_nand_hw_ecc(ctrl
, chip
, true);
771 ret
= tegra_nand_page_xfer(mtd
, chip
, (void *)buf
, oob_buf
,
773 tegra_nand_hw_ecc(ctrl
, chip
, false);
778 static void tegra_nand_setup_timing(struct tegra_nand_controller
*ctrl
,
779 const struct nand_sdr_timings
*timings
)
782 * The period (and all other timings in this function) is in ps,
783 * so need to take care here to avoid integer overflows.
785 unsigned int rate
= clk_get_rate(ctrl
->clk
) / 1000000;
786 unsigned int period
= DIV_ROUND_UP(1000000, rate
);
789 val
= DIV_ROUND_UP(max3(timings
->tAR_min
, timings
->tRR_min
,
790 timings
->tRC_min
), period
);
791 reg
|= TIMING_TCR_TAR_TRR(OFFSET(val
, 3));
793 val
= DIV_ROUND_UP(max(max(timings
->tCS_min
, timings
->tCH_min
),
794 max(timings
->tALS_min
, timings
->tALH_min
)),
796 reg
|= TIMING_TCS(OFFSET(val
, 2));
798 val
= DIV_ROUND_UP(max(timings
->tRP_min
, timings
->tREA_max
) + 6000,
800 reg
|= TIMING_TRP(OFFSET(val
, 1)) | TIMING_TRP_RESP(OFFSET(val
, 1));
802 reg
|= TIMING_TWB(OFFSET(DIV_ROUND_UP(timings
->tWB_max
, period
), 1));
803 reg
|= TIMING_TWHR(OFFSET(DIV_ROUND_UP(timings
->tWHR_min
, period
), 1));
804 reg
|= TIMING_TWH(OFFSET(DIV_ROUND_UP(timings
->tWH_min
, period
), 1));
805 reg
|= TIMING_TWP(OFFSET(DIV_ROUND_UP(timings
->tWP_min
, period
), 1));
806 reg
|= TIMING_TRH(OFFSET(DIV_ROUND_UP(timings
->tREH_min
, period
), 1));
808 writel_relaxed(reg
, ctrl
->regs
+ TIMING_1
);
810 val
= DIV_ROUND_UP(timings
->tADL_min
, period
);
811 reg
= TIMING_TADL(OFFSET(val
, 3));
813 writel_relaxed(reg
, ctrl
->regs
+ TIMING_2
);
816 static int tegra_nand_setup_data_interface(struct mtd_info
*mtd
, int csline
,
817 const struct nand_data_interface
*conf
)
819 struct nand_chip
*chip
= mtd_to_nand(mtd
);
820 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
821 const struct nand_sdr_timings
*timings
;
823 timings
= nand_get_sdr_timings(conf
);
825 return PTR_ERR(timings
);
827 if (csline
== NAND_DATA_IFACE_CHECK_ONLY
)
830 tegra_nand_setup_timing(ctrl
, timings
);
835 static const int rs_strength_bootable
[] = { 4 };
836 static const int rs_strength
[] = { 4, 6, 8 };
837 static const int bch_strength_bootable
[] = { 8, 16 };
838 static const int bch_strength
[] = { 4, 8, 14, 16 };
840 static int tegra_nand_get_strength(struct nand_chip
*chip
, const int *strength
,
841 int strength_len
, int bits_per_step
,
844 bool maximize
= chip
->ecc
.options
& NAND_ECC_MAXIMIZE
;
848 * Loop through available strengths. Backwards in case we try to
849 * maximize the BCH strength.
851 for (i
= 0; i
< strength_len
; i
++) {
852 int strength_sel
, bytes_per_step
, bytes_per_page
;
855 strength_sel
= strength
[strength_len
- i
- 1];
857 strength_sel
= strength
[i
];
859 if (strength_sel
< chip
->ecc_strength_ds
)
863 bytes_per_step
= DIV_ROUND_UP(bits_per_step
* strength_sel
,
865 bytes_per_page
= round_up(bytes_per_step
* chip
->ecc
.steps
, 4);
867 /* Check whether strength fits OOB */
868 if (bytes_per_page
< (oobsize
- SKIP_SPARE_BYTES
))
875 static int tegra_nand_select_strength(struct nand_chip
*chip
, int oobsize
)
878 int strength_len
, bits_per_step
;
880 switch (chip
->ecc
.algo
) {
882 bits_per_step
= BITS_PER_STEP_RS
;
883 if (chip
->options
& NAND_IS_BOOT_MEDIUM
) {
884 strength
= rs_strength_bootable
;
885 strength_len
= ARRAY_SIZE(rs_strength_bootable
);
887 strength
= rs_strength
;
888 strength_len
= ARRAY_SIZE(rs_strength
);
892 bits_per_step
= BITS_PER_STEP_BCH
;
893 if (chip
->options
& NAND_IS_BOOT_MEDIUM
) {
894 strength
= bch_strength_bootable
;
895 strength_len
= ARRAY_SIZE(bch_strength_bootable
);
897 strength
= bch_strength
;
898 strength_len
= ARRAY_SIZE(bch_strength
);
905 return tegra_nand_get_strength(chip
, strength
, strength_len
,
906 bits_per_step
, oobsize
);
909 static int tegra_nand_attach_chip(struct nand_chip
*chip
)
911 struct tegra_nand_controller
*ctrl
= to_tegra_ctrl(chip
->controller
);
912 struct tegra_nand_chip
*nand
= to_tegra_chip(chip
);
913 struct mtd_info
*mtd
= nand_to_mtd(chip
);
917 if (chip
->bbt_options
& NAND_BBT_USE_FLASH
)
918 chip
->bbt_options
|= NAND_BBT_NO_OOB
;
920 chip
->ecc
.mode
= NAND_ECC_HW
;
921 chip
->ecc
.size
= 512;
922 chip
->ecc
.steps
= mtd
->writesize
/ chip
->ecc
.size
;
923 if (chip
->ecc_step_ds
!= 512) {
924 dev_err(ctrl
->dev
, "Unsupported step size %d\n",
929 chip
->ecc
.read_page
= tegra_nand_read_page_hwecc
;
930 chip
->ecc
.write_page
= tegra_nand_write_page_hwecc
;
931 chip
->ecc
.read_page_raw
= tegra_nand_read_page_raw
;
932 chip
->ecc
.write_page_raw
= tegra_nand_write_page_raw
;
933 chip
->ecc
.read_oob
= tegra_nand_read_oob
;
934 chip
->ecc
.write_oob
= tegra_nand_write_oob
;
936 if (chip
->options
& NAND_BUSWIDTH_16
)
937 nand
->config
|= CONFIG_BUS_WIDTH_16
;
939 if (chip
->ecc
.algo
== NAND_ECC_UNKNOWN
) {
940 if (mtd
->writesize
< 2048)
941 chip
->ecc
.algo
= NAND_ECC_RS
;
943 chip
->ecc
.algo
= NAND_ECC_BCH
;
946 if (chip
->ecc
.algo
== NAND_ECC_BCH
&& mtd
->writesize
< 2048) {
947 dev_err(ctrl
->dev
, "BCH supports 2K or 4K page size only\n");
951 if (!chip
->ecc
.strength
) {
952 ret
= tegra_nand_select_strength(chip
, mtd
->oobsize
);
955 "No valid strength found, minimum %d\n",
956 chip
->ecc_strength_ds
);
960 chip
->ecc
.strength
= ret
;
963 nand
->config_ecc
= CONFIG_PIPE_EN
| CONFIG_SKIP_SPARE
|
964 CONFIG_SKIP_SPARE_SIZE_4
;
966 switch (chip
->ecc
.algo
) {
968 bits_per_step
= BITS_PER_STEP_RS
* chip
->ecc
.strength
;
969 mtd_set_ooblayout(mtd
, &tegra_nand_oob_rs_ops
);
970 nand
->config_ecc
|= CONFIG_HW_ECC
| CONFIG_ECC_SEL
|
972 switch (chip
->ecc
.strength
) {
974 nand
->config_ecc
|= CONFIG_TVAL_4
;
977 nand
->config_ecc
|= CONFIG_TVAL_6
;
980 nand
->config_ecc
|= CONFIG_TVAL_8
;
983 dev_err(ctrl
->dev
, "ECC strength %d not supported\n",
989 bits_per_step
= BITS_PER_STEP_BCH
* chip
->ecc
.strength
;
990 mtd_set_ooblayout(mtd
, &tegra_nand_oob_bch_ops
);
991 nand
->bch_config
= BCH_ENABLE
;
992 switch (chip
->ecc
.strength
) {
994 nand
->bch_config
|= BCH_TVAL_4
;
997 nand
->bch_config
|= BCH_TVAL_8
;
1000 nand
->bch_config
|= BCH_TVAL_14
;
1003 nand
->bch_config
|= BCH_TVAL_16
;
1006 dev_err(ctrl
->dev
, "ECC strength %d not supported\n",
1007 chip
->ecc
.strength
);
1012 dev_err(ctrl
->dev
, "ECC algorithm not supported\n");
1016 dev_info(ctrl
->dev
, "Using %s with strength %d per 512 byte step\n",
1017 chip
->ecc
.algo
== NAND_ECC_BCH
? "BCH" : "RS",
1018 chip
->ecc
.strength
);
1020 chip
->ecc
.bytes
= DIV_ROUND_UP(bits_per_step
, BITS_PER_BYTE
);
1022 switch (mtd
->writesize
) {
1024 nand
->config
|= CONFIG_PS_256
;
1027 nand
->config
|= CONFIG_PS_512
;
1030 nand
->config
|= CONFIG_PS_1024
;
1033 nand
->config
|= CONFIG_PS_2048
;
1036 nand
->config
|= CONFIG_PS_4096
;
1039 dev_err(ctrl
->dev
, "Unsupported writesize %d\n",
1044 /* Store complete configuration for HW ECC in config_ecc */
1045 nand
->config_ecc
|= nand
->config
;
1047 /* Non-HW ECC read/writes complete OOB */
1048 nand
->config
|= CONFIG_TAG_BYTE_SIZE(mtd
->oobsize
- 1);
1049 writel_relaxed(nand
->config
, ctrl
->regs
+ CONFIG
);
1054 static const struct nand_controller_ops tegra_nand_controller_ops
= {
1055 .attach_chip
= &tegra_nand_attach_chip
,
1058 static int tegra_nand_chips_init(struct device
*dev
,
1059 struct tegra_nand_controller
*ctrl
)
1061 struct device_node
*np
= dev
->of_node
;
1062 struct device_node
*np_nand
;
1063 int nsels
, nchips
= of_get_child_count(np
);
1064 struct tegra_nand_chip
*nand
;
1065 struct mtd_info
*mtd
;
1066 struct nand_chip
*chip
;
1071 dev_err(dev
, "Currently only one NAND chip supported\n");
1075 np_nand
= of_get_next_child(np
, NULL
);
1077 nsels
= of_property_count_elems_of_size(np_nand
, "reg", sizeof(u32
));
1079 dev_err(dev
, "Missing/invalid reg property\n");
1083 /* Retrieve CS id, currently only single die NAND supported */
1084 ret
= of_property_read_u32(np_nand
, "reg", &cs
);
1086 dev_err(dev
, "could not retrieve reg property: %d\n", ret
);
1090 nand
= devm_kzalloc(dev
, sizeof(*nand
), GFP_KERNEL
);
1096 nand
->wp_gpio
= devm_gpiod_get_optional(dev
, "wp", GPIOD_OUT_LOW
);
1098 if (IS_ERR(nand
->wp_gpio
)) {
1099 ret
= PTR_ERR(nand
->wp_gpio
);
1100 dev_err(dev
, "Failed to request WP GPIO: %d\n", ret
);
1105 chip
->controller
= &ctrl
->controller
;
1107 mtd
= nand_to_mtd(chip
);
1109 mtd
->dev
.parent
= dev
;
1110 mtd
->owner
= THIS_MODULE
;
1112 nand_set_flash_node(chip
, np_nand
);
1115 mtd
->name
= "tegra_nand";
1117 chip
->options
= NAND_NO_SUBPAGE_WRITE
| NAND_USE_BOUNCE_BUFFER
;
1118 chip
->exec_op
= tegra_nand_exec_op
;
1119 chip
->select_chip
= tegra_nand_select_chip
;
1120 chip
->setup_data_interface
= tegra_nand_setup_data_interface
;
1122 ret
= nand_scan(chip
, 1);
1126 mtd_ooblayout_ecc(mtd
, 0, &nand
->ecc
);
1128 ret
= mtd_device_register(mtd
, NULL
, 0);
1130 dev_err(dev
, "Failed to register mtd device: %d\n", ret
);
1140 static int tegra_nand_probe(struct platform_device
*pdev
)
1142 struct reset_control
*rst
;
1143 struct tegra_nand_controller
*ctrl
;
1144 struct resource
*res
;
1147 ctrl
= devm_kzalloc(&pdev
->dev
, sizeof(*ctrl
), GFP_KERNEL
);
1151 ctrl
->dev
= &pdev
->dev
;
1152 nand_controller_init(&ctrl
->controller
);
1153 ctrl
->controller
.ops
= &tegra_nand_controller_ops
;
1155 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1156 ctrl
->regs
= devm_ioremap_resource(&pdev
->dev
, res
);
1157 if (IS_ERR(ctrl
->regs
))
1158 return PTR_ERR(ctrl
->regs
);
1160 rst
= devm_reset_control_get(&pdev
->dev
, "nand");
1162 return PTR_ERR(rst
);
1164 ctrl
->clk
= devm_clk_get(&pdev
->dev
, "nand");
1165 if (IS_ERR(ctrl
->clk
))
1166 return PTR_ERR(ctrl
->clk
);
1168 err
= clk_prepare_enable(ctrl
->clk
);
1172 err
= reset_control_reset(rst
);
1174 dev_err(ctrl
->dev
, "Failed to reset HW: %d\n", err
);
1175 goto err_disable_clk
;
1178 writel_relaxed(HWSTATUS_CMD_DEFAULT
, ctrl
->regs
+ HWSTATUS_CMD
);
1179 writel_relaxed(HWSTATUS_MASK_DEFAULT
, ctrl
->regs
+ HWSTATUS_MASK
);
1180 writel_relaxed(INT_MASK
, ctrl
->regs
+ IER
);
1182 init_completion(&ctrl
->command_complete
);
1183 init_completion(&ctrl
->dma_complete
);
1185 ctrl
->irq
= platform_get_irq(pdev
, 0);
1186 err
= devm_request_irq(&pdev
->dev
, ctrl
->irq
, tegra_nand_irq
, 0,
1187 dev_name(&pdev
->dev
), ctrl
);
1189 dev_err(ctrl
->dev
, "Failed to get IRQ: %d\n", err
);
1190 goto err_disable_clk
;
1193 writel_relaxed(DMA_MST_CTRL_IS_DONE
, ctrl
->regs
+ DMA_MST_CTRL
);
1195 err
= tegra_nand_chips_init(ctrl
->dev
, ctrl
);
1197 goto err_disable_clk
;
1199 platform_set_drvdata(pdev
, ctrl
);
1204 clk_disable_unprepare(ctrl
->clk
);
1208 static int tegra_nand_remove(struct platform_device
*pdev
)
1210 struct tegra_nand_controller
*ctrl
= platform_get_drvdata(pdev
);
1211 struct nand_chip
*chip
= ctrl
->chip
;
1212 struct mtd_info
*mtd
= nand_to_mtd(chip
);
1215 ret
= mtd_device_unregister(mtd
);
1221 clk_disable_unprepare(ctrl
->clk
);
1226 static const struct of_device_id tegra_nand_of_match
[] = {
1227 { .compatible
= "nvidia,tegra20-nand" },
1230 MODULE_DEVICE_TABLE(of
, tegra_nand_of_match
);
1232 static struct platform_driver tegra_nand_driver
= {
1234 .name
= "tegra-nand",
1235 .of_match_table
= tegra_nand_of_match
,
1237 .probe
= tegra_nand_probe
,
1238 .remove
= tegra_nand_remove
,
1240 module_platform_driver(tegra_nand_driver
);
1242 MODULE_DESCRIPTION("NVIDIA Tegra NAND driver");
1243 MODULE_AUTHOR("Thierry Reding <thierry.reding@nvidia.com>");
1244 MODULE_AUTHOR("Lucas Stach <dev@lynxeye.de>");
1245 MODULE_AUTHOR("Stefan Agner <stefan@agner.ch>");
1246 MODULE_LICENSE("GPL v2");