1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (c) 2020, Cortina Access Inc..
7 #include <linux/delay.h>
8 #include <linux/bitops.h>
9 #include <linux/sizes.h>
14 #include <dm/device_compat.h>
15 #include <linux/bug.h>
16 #include <linux/delay.h>
17 #include <linux/iopoll.h>
18 #include <linux/errno.h>
19 #include <linux/mtd/rawnand.h>
22 #include <bouncebuf.h>
24 #include "cortina_nand.h"
26 static unsigned int *pread, *pwrite;
28 static const struct udevice_id cortina_nand_dt_ids[] = {
30 .compatible = "cortina,ca-nand",
35 static struct nand_ecclayout eccoob;
37 /* Information about an attached NAND chip */
39 int enabled; /* 1 to enable, 0 to disable */
40 s32 width; /* bit width, must be 8 */
41 u32 nand_ecc_strength;
46 struct nand_ctlr *reg;
47 struct dma_global *dma_glb;
48 struct dma_ssp *dma_nand;
49 struct tx_descriptor_t *tx_desc;
50 struct rx_descriptor_t *rx_desc;
51 struct fdt_nand config;
52 unsigned int flash_base;
57 struct nand_drv nand_ctrl;
58 struct nand_chip nand_chip;
62 * Wait for command completion
64 * @param reg nand_ctlr structure
66 * 1 - Command completed
69 static int nand_waitfor_cmd_completion(struct nand_ctlr *reg, unsigned int mask)
71 unsigned int reg_v = 0;
73 if (readl_poll_timeout(®->flash_flash_access_start, reg_v,
74 !(reg_v & mask), (FLASH_LONG_DELAY << 2))) {
75 pr_err("Nand CMD timeout!\n");
83 * Read one byte from the chip
85 * @param mtd MTD device structure
88 * Read function for 8bit bus-width
90 static uint8_t read_byte(struct mtd_info *mtd)
92 struct nand_chip *chip = mtd_to_nand(mtd);
93 struct nand_drv *info;
96 info = (struct nand_drv *)nand_get_controller_data(chip);
98 clrsetbits_le32(&info->reg->flash_flash_access_start, GENMASK(31, 0),
99 NFLASH_GO | NFLASH_RD);
101 if (!nand_waitfor_cmd_completion(info->reg, NFLASH_GO))
102 printf("%s: Command timeout\n", __func__);
104 ret_v = readl(&info->reg->flash_nf_data) >> (8 * info->fifo_index++);
105 info->fifo_index %= 4;
107 return (uint8_t)ret_v;
111 * Read len bytes from the chip into a buffer
113 * @param mtd MTD device structure
114 * @param buf buffer to store data to
115 * @param len number of bytes to read
117 * Read function for 8bit bus-width
119 static void read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
123 struct nand_chip *chip = mtd_to_nand(mtd);
124 struct nand_drv *info =
125 (struct nand_drv *)nand_get_controller_data(chip);
127 for (i = 0; i < len; i++) {
128 clrsetbits_le32(&info->reg->flash_flash_access_start,
129 GENMASK(31, 0), NFLASH_GO | NFLASH_RD);
131 if (!nand_waitfor_cmd_completion(info->reg, NFLASH_GO))
132 printf("%s: Command timeout\n", __func__);
134 reg = readl(&info->reg->flash_nf_data) >>
135 (8 * info->fifo_index++);
136 memcpy(buf + i, ®, 1);
137 info->fifo_index %= 4;
142 * Check READY pin status to see if it is ready or not
144 * @param mtd MTD device structure
149 static int nand_dev_ready(struct mtd_info *mtd)
151 struct nand_chip *chip = mtd_to_nand(mtd);
153 struct nand_drv *info =
154 (struct nand_drv *)nand_get_controller_data(chip);
156 reg_val = readl(&info->reg->flash_status);
157 if (reg_val & NFLASH_READY)
163 /* Dummy implementation: we don't support multiple chips */
164 static void nand_select_chip(struct mtd_info *mtd, int chipnr)
176 int init_nand_dma(struct nand_chip *nand)
179 struct nand_drv *info =
180 (struct nand_drv *)nand_get_controller_data(nand);
182 setbits_le32(&info->dma_glb->dma_glb_dma_lso_ctrl, TX_DMA_ENABLE);
183 setbits_le32(&info->dma_glb->dma_glb_dma_ssp_rx_ctrl,
184 TX_DMA_ENABLE | DMA_CHECK_OWNER);
185 setbits_le32(&info->dma_glb->dma_glb_dma_ssp_tx_ctrl,
186 RX_DMA_ENABLE | DMA_CHECK_OWNER);
188 info->tx_desc = malloc_cache_aligned((sizeof(struct tx_descriptor_t) *
190 info->rx_desc = malloc_cache_aligned((sizeof(struct rx_descriptor_t) *
193 if (!info->rx_desc && info->tx_desc) {
194 printf("Fail to alloc DMA descript!\n");
195 kfree(info->tx_desc);
197 } else if (info->rx_desc && !info->tx_desc) {
198 printf("Fail to alloc DMA descript!\n");
199 kfree(info->tx_desc);
203 /* set RX DMA base address and depth */
204 clrsetbits_le32(&info->dma_nand->dma_q_rxq_base_depth,
205 GENMASK(31, 4), (uintptr_t)info->rx_desc);
206 clrsetbits_le32(&info->dma_nand->dma_q_rxq_base_depth,
207 GENMASK(3, 0), CA_DMA_DEPTH);
209 /* set TX DMA base address and depth */
210 clrsetbits_le32(&info->dma_nand->dma_q_txq_base_depth,
211 GENMASK(31, 4), (uintptr_t)info->tx_desc);
212 clrsetbits_le32(&info->dma_nand->dma_q_txq_base_depth,
213 GENMASK(3, 0), CA_DMA_DEPTH);
215 memset((unsigned char *)info->tx_desc, 0,
216 (sizeof(struct tx_descriptor_t) * CA_DMA_DESC_NUM));
217 memset((unsigned char *)info->rx_desc, 0,
218 (sizeof(struct rx_descriptor_t) * CA_DMA_DESC_NUM));
220 for (i = 0; i < CA_DMA_DESC_NUM; i++) {
221 /* set owner bit as SW */
222 info->tx_desc[i].own = 1;
223 /* enable Scatter-Gather memory copy */
224 info->tx_desc[i].sgm = 0x1;
231 * Send command to NAND device
233 * @param mtd MTD device structure
234 * @param command the command to be sent
235 * @param column the column address for this command, -1 if none
236 * @param page_addr the page address for this command, -1 if none
238 static void ca_nand_command(struct mtd_info *mtd, unsigned int command,
239 int column, int page_addr)
241 struct nand_chip *chip = mtd_to_nand(mtd);
242 struct nand_drv *info;
243 unsigned int reg_v = 0;
244 u32 cmd = 0, cnt = 0, addr1 = 0, addr2 = 0;
247 info = (struct nand_drv *)nand_get_controller_data(chip);
249 * Write out the command to the device.
251 * Only command NAND_CMD_RESET or NAND_CMD_READID will come
252 * here before mtd->writesize is initialized.
255 /* Emulate NAND_CMD_READOOB */
256 if (command == NAND_CMD_READOOB) {
257 assert(mtd->writesize != 0);
258 column += mtd->writesize;
259 command = NAND_CMD_READ0;
262 /* Reset FIFO before issue new command */
263 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
266 readl_poll_timeout(&info->reg->flash_nf_ecc_reset, reg_v,
267 !(reg_v & RESET_NFLASH_FIFO), FLASH_SHORT_DELAY);
269 printf("FIFO reset timeout\n");
270 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
276 * Next read start from flash_nf_data[0]
278 info->fifo_index = 0;
280 clrsetbits_le32(&info->reg->flash_nf_access, GENMASK(11, 10),
284 * Program and erase have their own busy handlers
285 * status and sequential in needs no delay
288 case NAND_CMD_READID:
290 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
292 /* 1 byte CMD cycle */
293 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(1, 0),
294 REG_CMD_COUNT_1TOGO);
295 /* 1 byte CMD cycle */
296 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(6, 4),
299 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8),
300 REG_DATA_COUNT_DATA_4);
302 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
303 REG_OOB_COUNT_EMPTY);
306 clrsetbits_le32(&info->reg->flash_nf_address_1, GENMASK(31, 0),
307 column & ADDR1_MASK2);
308 clrsetbits_le32(&info->reg->flash_nf_address_2, GENMASK(31, 0),
311 /* clear FLASH_NF_ACCESS */
312 clrsetbits_le32(&info->reg->flash_nf_access, GENMASK(31, 0),
318 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
320 /* 1 byte CMD cycle */
321 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(1, 0),
322 REG_CMD_COUNT_1TOGO);
323 /* 1 byte ADDR cycle */
324 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(6, 4),
327 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8),
330 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
331 REG_OOB_COUNT_EMPTY);
334 clrsetbits_le32(&info->reg->flash_nf_address_1, GENMASK(31, 0),
335 column & ADDR1_MASK2);
336 clrsetbits_le32(&info->reg->flash_nf_address_2, GENMASK(31, 0),
341 if (chip->chipsize < SZ_32M) {
342 cmd = NAND_CMD_READ0;
343 cnt = REG_CMD_COUNT_1TOGO | REG_ADDR_COUNT_3;
344 addr1 = (((page_addr & ADDR1_MASK0) << 8));
345 addr2 = ((page_addr & ADDR2_MASK0) >> 24);
346 } else if (chip->chipsize >= SZ_32M &&
347 (chip->chipsize <= SZ_128M)) {
348 cmd = NAND_CMD_READ0;
349 cnt = REG_ADDR_COUNT_4;
350 if (mtd->writesize > (REG_DATA_COUNT_512_DATA >> 8)) {
351 cmd |= (NAND_CMD_READSTART << 8);
352 cnt |= REG_CMD_COUNT_2TOGO;
354 cnt |= REG_CMD_COUNT_1TOGO;
356 addr1 = ((page_addr << 16) | (column & ADDR1_MASK1));
357 addr2 = (page_addr >> 16);
359 cmd = NAND_CMD_READ0 | (NAND_CMD_READSTART << 8);
360 cnt = REG_CMD_COUNT_2TOGO | REG_ADDR_COUNT_5;
361 addr1 = ((page_addr << 16) | (column & ADDR1_MASK1));
362 addr2 = (page_addr >> 16);
366 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
368 /* CMD & ADDR cycle */
369 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(7, 0), cnt);
371 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8),
372 (mtd->writesize - 1) << 8);
374 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
375 (mtd->oobsize - 1) << 22);
378 clrsetbits_le32(&info->reg->flash_nf_address_1, GENMASK(31, 0),
380 clrsetbits_le32(&info->reg->flash_nf_address_2, GENMASK(31, 0),
385 if (chip->chipsize < SZ_32M) {
386 cnt = REG_CMD_COUNT_2TOGO | REG_ADDR_COUNT_3;
387 addr1 = (((page_addr & ADDR1_MASK0) << 8));
388 addr2 = ((page_addr & ADDR2_MASK0) >> 24);
389 } else if (chip->chipsize >= SZ_32M &&
390 (chip->chipsize <= SZ_128M)) {
391 cnt = REG_CMD_COUNT_2TOGO | REG_ADDR_COUNT_4;
392 addr1 = ((page_addr << 16) | (column & ADDR1_MASK1));
393 addr2 = (page_addr >> 16);
395 cnt = REG_CMD_COUNT_2TOGO | REG_ADDR_COUNT_5;
396 addr1 = ((page_addr << 16) | (column & ADDR1_MASK1));
397 addr2 = (page_addr >> 16);
401 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
402 NAND_CMD_SEQIN | (NAND_CMD_PAGEPROG << 8));
404 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(7, 0), cnt);
406 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8),
407 (mtd->writesize - 1) << 8);
409 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
410 (mtd->oobsize - 1) << 22);
413 clrsetbits_le32(&info->reg->flash_nf_address_1, GENMASK(31, 0),
415 clrsetbits_le32(&info->reg->flash_nf_address_2, GENMASK(31, 0),
419 case NAND_CMD_PAGEPROG:
421 case NAND_CMD_ERASE1:
423 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
424 NAND_CMD_ERASE1 | (NAND_CMD_ERASE2 << 8));
425 /* 2 byte CMD cycle */
426 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(1, 0),
427 REG_CMD_COUNT_2TOGO);
428 /* 3 byte ADDR cycle */
429 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(6, 4),
432 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8),
433 REG_DATA_COUNT_EMPTY);
435 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
436 REG_OOB_COUNT_EMPTY);
439 clrsetbits_le32(&info->reg->flash_nf_address_1, GENMASK(31, 0),
441 clrsetbits_le32(&info->reg->flash_nf_address_2, GENMASK(31, 0),
445 clrsetbits_le32(&info->reg->flash_flash_access_start,
446 GENMASK(31, 0), NFLASH_GO | NFLASH_RD);
448 case NAND_CMD_ERASE2:
450 case NAND_CMD_STATUS:
452 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
454 /* 1 byte CMD cycle */
455 clrbits_le32(&info->reg->flash_nf_count, GENMASK(1, 0));
456 /* 0 byte Addr cycle */
457 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(6, 4),
458 REG_ADDR_COUNT_EMPTY);
460 clrbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8));
462 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
463 REG_OOB_COUNT_EMPTY);
468 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
470 /* 1 byte CMD cycle */
471 clrbits_le32(&info->reg->flash_nf_count, GENMASK(1, 0));
472 /* 0 byte Addr cycle */
473 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(6, 4),
474 REG_ADDR_COUNT_EMPTY);
476 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(21, 8),
477 REG_DATA_COUNT_EMPTY);
479 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(31, 22),
480 REG_OOB_COUNT_EMPTY);
483 clrsetbits_le32(&info->reg->flash_nf_address_1, GENMASK(31, 0),
484 column & ADDR1_MASK2);
485 clrsetbits_le32(&info->reg->flash_nf_address_2, GENMASK(31, 0),
489 clrsetbits_le32(&info->reg->flash_flash_access_start,
490 GENMASK(31, 0), NFLASH_GO | NFLASH_WT);
493 case NAND_CMD_RNDOUT:
495 printf("%s: Unsupported command %d\n", __func__, command);
499 if (!nand_waitfor_cmd_completion(info->reg, NFLASH_GO))
500 printf("Command 0x%02X timeout\n", command);
504 * Set up NAND bus width and page size
506 * @param info nand_info structure
507 * @return 0 if ok, -1 on error
509 static int set_bus_width_page_size(struct mtd_info *mtd)
511 struct nand_chip *chip = mtd_to_nand(mtd);
512 struct nand_drv *info =
513 (struct nand_drv *)nand_get_controller_data(chip);
515 if (info->config.width == SZ_8) {
516 clrsetbits_le32(&info->reg->flash_nf_access, GENMASK(31, 0),
518 } else if (info->config.width == SZ_16) {
519 clrsetbits_le32(&info->reg->flash_nf_access, GENMASK(31, 0),
520 NFLASH_REG_WIDTH_16);
522 debug("%s: Unsupported bus width %d\n", __func__,
527 if (mtd->writesize == SZ_512) {
528 setbits_le32(&info->reg->flash_type, FLASH_TYPE_512);
529 } else if (mtd->writesize == SZ_2K) {
530 setbits_le32(&info->reg->flash_type, FLASH_TYPE_2K);
531 } else if (mtd->writesize == SZ_4K) {
532 setbits_le32(&info->reg->flash_type, FLASH_TYPE_4K);
533 } else if (mtd->writesize == SZ_8K) {
534 setbits_le32(&info->reg->flash_type, FLASH_TYPE_8K);
536 debug("%s: Unsupported page size %d\n", __func__,
544 static int ca_do_bch_correction(struct nand_chip *chip,
545 unsigned int err_num, u8 *buff_ptr, int i)
547 struct nand_drv *info =
548 (struct nand_drv *)nand_get_controller_data(chip);
549 unsigned int reg_v, err_loc0, err_loc1;
550 int k, max_bitflips = 0;
552 for (k = 0; k < (err_num + 1) / 2; k++) {
553 reg_v = readl(&info->reg->flash_nf_bch_error_loc01 + k);
554 err_loc0 = reg_v & BCH_ERR_LOC_MASK;
555 err_loc1 = (reg_v >> 16) & BCH_ERR_LOC_MASK;
557 if (err_loc0 / 8 < BCH_DATA_UNIT) {
558 printf("pdata[%x]:%x =>", ((i / chip->ecc.bytes) *
559 chip->ecc.size + ((reg_v & 0x1fff) >> 3)),
560 buff_ptr[(reg_v & 0x1fff) >> 3]);
562 buff_ptr[err_loc0 / 8] ^=
563 (1 << (reg_v & BCH_CORRECT_LOC_MASK));
565 printf("%x\n", buff_ptr[(reg_v & 0x1fff) >> 3]);
570 if (((k + 1) * 2) <= err_num && ((err_loc1 / 8) <
572 printf("pdata[%x]:%x =>", ((i / chip->ecc.bytes) *
573 chip->ecc.size + (((reg_v >> 16) & 0x1fff) >>
574 3)), buff_ptr[((reg_v >> 16) & 0x1fff) >> 3]);
576 buff_ptr[err_loc1 / 8] ^= (1 << ((reg_v >> 16) &
577 BCH_CORRECT_LOC_MASK));
579 printf("%x\n", buff_ptr[((reg_v >> 16) & 0x1fff) >> 3]);
588 static int ca_do_bch_decode(struct mtd_info *mtd, struct nand_chip *chip,
589 const u8 *buf, int page, unsigned int addr)
591 struct nand_drv *info =
592 (struct nand_drv *)nand_get_controller_data(chip);
593 unsigned int reg_v, err_num;
594 unsigned char *ecc_code = chip->buffers->ecccode;
595 unsigned char *ecc_end_pos;
596 int ret, i, j, k, n, step, eccsteps, max_bitflips = 0;
597 u8 *buff_ptr = (u8 *)buf;
599 for (i = 0; i < chip->ecc.total; i++)
600 ecc_code[i] = chip->oob_poi[eccoob.eccpos[i]];
602 for (i = 0, eccsteps = chip->ecc.steps; eccsteps;
603 i += chip->ecc.bytes, eccsteps--) {
604 ecc_end_pos = ecc_code + chip->ecc.bytes;
606 for (j = 0, k = 0; j < chip->ecc.bytes; j += 4, k++) {
608 for (n = 0; n < 4 && ecc_code != ecc_end_pos;
610 reg_v |= *ecc_code << (8 * n);
612 clrsetbits_le32(&info->reg->flash_nf_bch_oob0 + k,
613 GENMASK(31, 0), reg_v);
616 /* Clear ECC buffer */
617 setbits_le32(&info->reg->flash_nf_ecc_reset, RESET_NFLASH_ECC);
618 ret = readl_poll_timeout(&info->reg->flash_nf_ecc_reset, reg_v,
619 !(reg_v & RESET_NFLASH_ECC),
622 pr_err("Reset ECC buffer fail\n");
624 clrsetbits_le32(&info->reg->flash_nf_bch_control, GENMASK(8, 8),
628 step = i / chip->ecc.bytes;
629 clrsetbits_le32(&info->reg->flash_nf_bch_control,
630 GENMASK(6, 4), step << 4);
631 setbits_le32(&info->reg->flash_nf_bch_control, BCH_ENABLE);
633 setbits_le32(&info->reg->flash_nf_bch_control, BCH_COMPARE);
635 ret = readl_poll_timeout(&info->reg->flash_nf_bch_status, reg_v,
636 (reg_v & BCH_DECO_DONE),
639 pr_err("ECC Decode timeout\n");
642 clrbits_le32(&info->reg->flash_nf_bch_control, BCH_COMPARE);
644 reg_v = readl(&info->reg->flash_nf_bch_status);
645 err_num = (reg_v >> 8) & BCH_ERR_NUM_MASK;
646 reg_v &= BCH_ERR_MASK;
649 if (reg_v == BCH_UNCORRECTABLE) {
651 nand_check_erased_ecc_chunk(buff_ptr,
653 &chip->buffers->ecccode[i],
659 mtd->ecc_stats.failed++;
660 pr_err("Uncorrectable error\n");
661 pr_err(" Page:%x step:%d\n", page, step);
665 } else if (reg_v == BCH_CORRECTABLE_ERR) {
666 printf("Correctable error(%x)!! addr:%lx\n",
667 err_num, (unsigned long)addr - mtd->writesize);
668 printf("Dst buf: %p [ColSel:%x ]\n",
669 buff_ptr + reg_v * BCH_DATA_UNIT, step);
672 ca_do_bch_correction(chip, err_num, buff_ptr, i);
675 buff_ptr += BCH_DATA_UNIT;
679 clrsetbits_le32(&info->reg->flash_nf_bch_control, GENMASK(31, 0),
685 static int ca_do_bch_encode(struct mtd_info *mtd, struct nand_chip *chip,
688 struct nand_drv *info;
690 int i, j, n, eccsteps, gen_index;
692 info = (struct nand_drv *)nand_get_controller_data(chip);
694 for (i = 0, n = 0, eccsteps = chip->ecc.steps; eccsteps;
695 i += chip->ecc.bytes, eccsteps--, n++) {
697 for (j = 0; j < chip->ecc.bytes; j += 4, gen_index++) {
699 readl(&info->reg->flash_nf_bch_gen0_0 + gen_index +
701 chip->oob_poi[eccoob.eccpos[i + j]] = reg_v & OOB_MASK;
702 chip->oob_poi[eccoob.eccpos[i + j + 1]] =
703 (reg_v >> 8) & OOB_MASK;
704 chip->oob_poi[eccoob.eccpos[i + j + 2]] =
705 (reg_v >> 16) & OOB_MASK;
706 chip->oob_poi[eccoob.eccpos[i + j + 3]] =
707 (reg_v >> 24) & OOB_MASK;
712 clrsetbits_le32(&info->reg->flash_nf_bch_control, GENMASK(8, 8),
719 * Page read/write function
721 * @param mtd mtd info structure
722 * @param chip nand chip info structure
723 * @param buf data buffer
724 * @param page page number
725 * @param with_ecc 1 to enable ECC, 0 to disable ECC
726 * @param is_writing 0 for read, 1 for write
727 * @return 0 when successfully completed
728 * -ETIMEDOUT when command timeout
730 static int nand_rw_page(struct mtd_info *mtd, struct nand_chip *chip,
731 const u8 *buf, int page, int with_ecc, int is_writing)
733 unsigned int reg_v, ext_addr, addr, dma_index;
734 struct tx_descriptor_t *tx_desc;
735 struct rx_descriptor_t *rx_desc;
736 struct nand_drv *info =
737 (struct nand_drv *)nand_get_controller_data(chip);
740 /* reset ecc control */
741 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
744 /* flash interrupt */
745 clrsetbits_le32(&info->reg->flash_flash_interrupt, GENMASK(0, 0),
748 /* reset ecc control */
749 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
753 clrbits_le32(&info->dma_nand->dma_q_txq_control, GENMASK(0, 0));
755 /* Clear interrupt */
756 setbits_le32(&info->dma_nand->dma_q_rxq_coal_interrupt, GENMASK(0, 0));
757 setbits_le32(&info->dma_nand->dma_q_txq_coal_interrupt, GENMASK(0, 0));
760 switch (info->config.nand_ecc_strength) {
762 reg_v = BCH_ERR_CAP_8;
764 case ECC_STRENGTH_16:
765 reg_v = BCH_ERR_CAP_16;
767 case ECC_STRENGTH_24:
768 reg_v = BCH_ERR_CAP_24;
770 case ECC_STRENGTH_40:
771 reg_v = BCH_ERR_CAP_40;
774 reg_v = BCH_ERR_CAP_16;
779 /* BCH decode for flash read */
782 clrsetbits_le32(&info->reg->flash_nf_bch_control,
783 GENMASK(31, 0), reg_v);
785 clrsetbits_le32(&info->reg->flash_nf_bch_control,
789 /* Fill Extend address */
790 ext_addr = ((page << chip->page_shift) / EXT_ADDR_MASK);
792 clrsetbits_le32(&info->reg->flash_nf_access,
793 GENMASK(7, 0), (uintptr_t)ext_addr);
795 addr = (uintptr_t)((page << chip->page_shift) % EXT_ADDR_MASK);
796 addr = (uintptr_t)(addr + info->flash_base);
798 dma_index = readl(&info->dma_nand->dma_q_txq_wptr) & CA_DMA_Q_PTR_MASK;
800 tx_desc = info->tx_desc;
801 rx_desc = info->rx_desc;
803 /* TX/RX descriptor for page data */
804 tx_desc[dma_index].own = OWN_DMA;
805 tx_desc[dma_index].buf_len = mtd->writesize;
806 rx_desc[dma_index].own = OWN_DMA;
807 rx_desc[dma_index].buf_len = mtd->writesize;
808 if (is_writing == 0) {
809 tx_desc[dma_index].buf_adr = (uintptr_t)addr;
810 rx_desc[dma_index].buf_adr = (uintptr_t)(buf);
812 tx_desc[dma_index].buf_adr = (uintptr_t)buf;
813 rx_desc[dma_index].buf_adr = (uintptr_t)(addr);
817 dma_index %= CA_DMA_DESC_NUM;
819 /* TX/RX descriptor for OOB area */
820 addr = (uintptr_t)(addr + mtd->writesize);
821 tx_desc[dma_index].own = OWN_DMA;
822 tx_desc[dma_index].buf_len = mtd->oobsize;
823 rx_desc[dma_index].own = OWN_DMA;
824 rx_desc[dma_index].buf_len = mtd->oobsize;
826 tx_desc[dma_index].buf_adr = (uintptr_t)(chip->oob_poi);
827 rx_desc[dma_index].buf_adr = (uintptr_t)addr;
829 tx_desc[dma_index].buf_adr = (uintptr_t)addr;
830 rx_desc[dma_index].buf_adr = (uintptr_t)(chip->oob_poi);
832 dma_index %= CA_DMA_DESC_NUM;
835 if (is_writing == 1) {
836 clrsetbits_le32(&info->reg->flash_fifo_control, GENMASK(1, 0),
839 clrsetbits_le32(&info->reg->flash_fifo_control, GENMASK(1, 0),
843 /* Start FIFO request */
844 clrsetbits_le32(&info->reg->flash_flash_access_start, GENMASK(2, 2),
847 /* Update DMA write pointer */
848 clrsetbits_le32(&info->dma_nand->dma_q_txq_wptr, GENMASK(12, 0),
852 clrsetbits_le32(&info->dma_nand->dma_q_txq_control, GENMASK(0, 0),
855 /* Wait TX DMA done */
857 readl_poll_timeout(&info->dma_nand->dma_q_txq_coal_interrupt,
858 reg_v, (reg_v & 1), FLASH_LONG_DELAY);
860 pr_err("TX DMA timeout\n");
863 /* clear tx interrupt */
864 setbits_le32(&info->dma_nand->dma_q_txq_coal_interrupt, 1);
866 /* Wait RX DMA done */
868 readl_poll_timeout(&info->dma_nand->dma_q_rxq_coal_interrupt, reg_v,
869 (reg_v & 1), FLASH_LONG_DELAY);
871 pr_err("RX DMA timeout\n");
874 /* clear rx interrupt */
875 setbits_le32(&info->dma_nand->dma_q_rxq_coal_interrupt, 1);
877 /* wait NAND CMD done */
878 if (is_writing == 0) {
879 if (!nand_waitfor_cmd_completion(info->reg, NFLASH_FIFO_REQ))
880 printf("%s: Command timeout\n", __func__);
883 /* Update DMA read pointer */
884 clrsetbits_le32(&info->dma_nand->dma_q_rxq_rptr, GENMASK(12, 0),
890 readl_poll_timeout(&info->reg->flash_nf_bch_status,
891 reg_v, (reg_v & BCH_GEN_DONE),
895 pr_err("BCH_GEN timeout! flash_nf_bch_status=[0x%x]\n",
901 ca_do_bch_decode(mtd, chip, buf, page, addr);
903 ca_do_bch_encode(mtd, chip, page);
908 dma_index %= CA_DMA_DESC_NUM;
910 /* Update DMA R/W pointer */
911 clrsetbits_le32(&info->dma_nand->dma_q_txq_wptr, GENMASK(12, 0),
914 /* Wait TX DMA done */
916 readl_poll_timeout(&info->dma_nand->dma_q_txq_coal_interrupt,
917 reg_v, (reg_v & 1), FLASH_LONG_DELAY);
919 pr_err("TX DMA timeout\n");
922 /* clear tx interrupt */
923 setbits_le32(&info->dma_nand->dma_q_txq_coal_interrupt, 1);
925 /* Wait RX DMA done */
927 readl_poll_timeout(&info->dma_nand->dma_q_rxq_coal_interrupt,
928 reg_v, (reg_v & 1), FLASH_LONG_DELAY);
930 pr_err("RX DMA timeout\n");
933 /* clear rx interrupt */
934 setbits_le32(&info->dma_nand->dma_q_rxq_coal_interrupt, 1);
936 /* wait NAND CMD done */
937 if (!nand_waitfor_cmd_completion(info->reg, NFLASH_FIFO_REQ))
938 printf("%s: Command timeout\n", __func__);
940 /* Update DMA R/W pointer */
941 clrsetbits_le32(&info->dma_nand->dma_q_rxq_rptr, GENMASK(12, 0),
949 * Hardware ecc based page read function
951 * @param mtd mtd info structure
952 * @param chip nand chip info structure
953 * @param buf buffer to store read data
954 * @param page page number to read
955 * @return 0 when successfully completed
956 * -ETIMEDOUT when command timeout
958 static int nand_read_page_hwecc(struct mtd_info *mtd,
959 struct nand_chip *chip, uint8_t *buf,
960 int oob_required, int page)
962 struct nand_drv *info =
963 (struct nand_drv *)nand_get_controller_data(chip);
966 ret = nand_rw_page(mtd, chip, buf, page, 1, 0);
971 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
978 * Hardware ecc based page write function
980 * @param mtd mtd info structure
981 * @param chip nand chip info structure
982 * @param buf data buffer
983 * @return 0 when successfully completed
984 * -ETIMEDOUT when command timeout
986 static int nand_write_page_hwecc(struct mtd_info *mtd,
987 struct nand_chip *chip, const uint8_t *buf,
988 int oob_required, int page)
990 struct nand_drv *info =
991 (struct nand_drv *)nand_get_controller_data(chip);
994 ret = nand_rw_page(mtd, chip, (uint8_t *)buf, page, 1, 1);
999 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
1006 * Read raw page data without ecc
1008 * @param mtd mtd info structure
1009 * @param chip nand chip info structure
1010 * @param buf buffer to store read data
1011 * @param page page number to read
1012 * @return 0 when successfully completed
1013 * -ETIMEDOUT when command timeout
1015 static int nand_read_page_raw(struct mtd_info *mtd,
1016 struct nand_chip *chip, uint8_t *buf,
1017 int oob_required, int page)
1019 struct nand_drv *info =
1020 (struct nand_drv *)nand_get_controller_data(chip);
1023 ret = nand_rw_page(mtd, chip, buf, page, 0, 0);
1028 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
1035 * Raw page write function
1037 * @param mtd mtd info structure
1038 * @param chip nand chip info structure
1039 * @param buf data buffer
1040 * @return 0 when successfully completed
1041 * -ETIMEDOUT when command timeout
1043 static int nand_write_page_raw(struct mtd_info *mtd,
1044 struct nand_chip *chip, const uint8_t *buf,
1045 int oob_required, int page)
1047 struct nand_drv *info =
1048 (struct nand_drv *)nand_get_controller_data(chip);
1051 ret = nand_rw_page(mtd, chip, buf, page, 0, 1);
1056 clrsetbits_le32(&info->reg->flash_nf_ecc_reset, GENMASK(31, 0),
1063 * OOB data read/write function
1065 * @param mtd mtd info structure
1066 * @param chip nand chip info structure
1067 * @param page page number to read
1068 * @param with_ecc 1 to enable ECC, 0 to disable ECC
1069 * @param is_writing 0 for read, 1 for write
1070 * @return 0 when successfully completed
1071 * -ETIMEDOUT when command timeout
1073 static int nand_rw_oob(struct mtd_info *mtd, struct nand_chip *chip,
1074 int page, int with_ecc, int is_writing)
1076 struct nand_drv *info =
1077 (struct nand_drv *)nand_get_controller_data(chip);
1082 reg_val = NFLASH_GO | NFLASH_WT;
1083 pwrite = (unsigned int *)chip->oob_poi;
1085 reg_val = NFLASH_GO | NFLASH_RD;
1086 pread = (unsigned int *)chip->oob_poi;
1089 for (rw_index = 0; rw_index < mtd->oobsize / 4; rw_index++) {
1090 clrsetbits_le32(&info->reg->flash_nf_access, GENMASK(31, 0),
1091 NFLASH_REG_WIDTH_32);
1093 clrsetbits_le32(&info->reg->flash_nf_data,
1094 GENMASK(31, 0), pwrite[rw_index]);
1096 clrsetbits_le32(&info->reg->flash_flash_access_start,
1097 GENMASK(11, 10), reg_val);
1099 if (!nand_waitfor_cmd_completion(info->reg, NFLASH_GO))
1100 printf("%s: Command timeout\n", __func__);
1103 pread[rw_index] = readl(&info->reg->flash_nf_data);
1109 * OOB data read function
1111 * @param mtd mtd info structure
1112 * @param chip nand chip info structure
1113 * @param page page number to read
1115 static int nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, int page)
1117 struct nand_drv *info =
1118 (struct nand_drv *)nand_get_controller_data(chip);
1121 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
1122 if (mtd->writesize <= (REG_DATA_COUNT_512_DATA >> 8))
1123 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(7, 0),
1125 ret = nand_rw_oob(mtd, chip, page, 0, 0);
1128 clrsetbits_le32(&info->reg->flash_nf_ecc_reset,
1129 GENMASK(31, 0), ECC_RESET_ALL);
1135 * OOB data write function
1137 * @param mtd mtd info structure
1138 * @param chip nand chip info structure
1139 * @param page page number to write
1140 * @return 0 when successfully completed
1141 * -ETIMEDOUT when command timeout
1143 static int nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
1146 struct nand_drv *info =
1147 (struct nand_drv *)nand_get_controller_data(chip);
1150 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
1151 if (mtd->writesize <= (REG_DATA_COUNT_512_DATA >> 8)) {
1152 clrsetbits_le32(&info->reg->flash_nf_command, GENMASK(31, 0),
1153 NAND_CMD_READOOB | (NAND_CMD_SEQIN << 8) |
1154 (NAND_CMD_PAGEPROG << 16));
1155 clrsetbits_le32(&info->reg->flash_nf_count, GENMASK(1, 0),
1156 REG_CMD_COUNT_3TOGO);
1158 ret = nand_rw_oob(mtd, chip, page, 1, 1);
1161 clrsetbits_le32(&info->reg->flash_nf_ecc_reset,
1162 GENMASK(31, 0), ECC_RESET_ALL);
1168 * Decode NAND parameters from the device tree
1170 * @param dev Driver model device
1171 * @param config Device tree NAND configuration
1173 static int fdt_decode_nand(struct udevice *dev, struct nand_drv *info)
1177 info->reg = (struct nand_ctlr *)dev_read_addr(dev);
1178 info->dma_glb = (struct dma_global *)dev_read_addr_index(dev, 1);
1179 info->dma_nand = (struct dma_ssp *)dev_read_addr_index(dev, 2);
1180 info->config.enabled = dev_read_enabled(dev);
1181 ecc_strength = dev_read_u32_default(dev, "nand-ecc-strength", 16);
1183 dev_read_u32_default(dev, "nand_flash_base_addr", NAND_BASE_ADDR);
1185 switch (ecc_strength) {
1186 case ECC_STRENGTH_8:
1187 info->config.nand_ecc_strength = ECC_STRENGTH_8;
1189 case ECC_STRENGTH_16:
1190 info->config.nand_ecc_strength = ECC_STRENGTH_16;
1192 case ECC_STRENGTH_24:
1193 info->config.nand_ecc_strength = ECC_STRENGTH_24;
1195 case ECC_STRENGTH_40:
1196 info->config.nand_ecc_strength = ECC_STRENGTH_40;
1199 info->config.nand_ecc_strength = ECC_STRENGTH_16;
1208 * @param chip nand chip info structure
1210 static void nand_config_flash_type(struct nand_chip *nand)
1212 struct nand_drv *info =
1213 (struct nand_drv *)nand_get_controller_data(nand);
1214 struct mtd_info *mtd = nand_to_mtd(nand);
1216 switch (mtd->writesize) {
1217 case WRITE_SIZE_512:
1218 clrsetbits_le32(&info->reg->flash_type, GENMASK(31, 0),
1219 FLASH_PIN | FLASH_TYPE_512);
1221 case WRITE_SIZE_2048:
1222 clrsetbits_le32(&info->reg->flash_type, GENMASK(31, 0),
1223 FLASH_PIN | FLASH_TYPE_2K);
1225 case WRITE_SIZE_4096:
1226 clrsetbits_le32(&info->reg->flash_type, GENMASK(31, 0),
1227 FLASH_PIN | FLASH_TYPE_4K);
1229 case WRITE_SIZE_8192:
1230 clrsetbits_le32(&info->reg->flash_type, GENMASK(31, 0),
1231 FLASH_PIN | FLASH_TYPE_8K);
1234 pr_err("Unsupported page size(0x%x)!", nand->ecc.size);
1241 * @param chip nand chip info structure
1242 * @return 0 when successfully completed
1243 * -EINVAL when ECC bytes exceed OOB size
1245 static int nand_config_oob_layout(struct nand_chip *nand)
1247 int i, ecc_start_offset;
1248 struct mtd_info *mtd = nand_to_mtd(nand);
1250 /* Calculate byte count for ECC */
1251 eccoob.eccbytes = mtd->writesize / nand->ecc.size * nand->ecc.bytes;
1253 if (mtd->oobsize < eccoob.eccbytes) {
1254 pr_err("Spare area(%d) too small for BCH%d\n", nand->ecc.bytes,
1255 nand->ecc.strength / 8);
1256 pr_err("page_sz: %d\n", nand->ecc.size);
1257 pr_err("oob_sz: %d\n", nand->ecc.bytes);
1261 /* Update OOB layout */
1262 ecc_start_offset = mtd->oobsize - eccoob.eccbytes;
1263 memset(eccoob.eccpos, 0, sizeof(eccoob.eccpos));
1264 for (i = 0; i < eccoob.eccbytes; ++i)
1265 eccoob.eccpos[i] = i + ecc_start_offset;
1267 /* Unused spare area
1268 * OOB[0] is bad block marker.
1269 * Extra two byte is reserved as
1270 * erase marker just right before ECC code.
1272 eccoob.oobavail = nand->ecc.bytes - eccoob.eccbytes - 2;
1273 eccoob.oobfree[0].offset = 2;
1274 eccoob.oobfree[0].length =
1275 mtd->oobsize - eccoob.eccbytes - eccoob.oobfree[0].offset - 1;
1280 static int ca_nand_probe(struct udevice *dev)
1282 struct ca_nand_info *ca_nand = dev_get_priv(dev);
1283 struct nand_chip *nand = &ca_nand->nand_chip;
1284 struct nand_drv *info = &ca_nand->nand_ctrl;
1285 struct fdt_nand *config = &info->config;
1286 struct mtd_info *our_mtd;
1289 if (fdt_decode_nand(dev, info)) {
1290 printf("Could not decode nand-flash in device tree\n");
1293 if (!config->enabled)
1296 nand->ecc.mode = NAND_ECC_HW;
1297 nand->ecc.layout = &eccoob;
1299 nand->cmdfunc = ca_nand_command;
1300 nand->read_byte = read_byte;
1301 nand->read_buf = read_buf;
1302 nand->ecc.read_page = nand_read_page_hwecc;
1303 nand->ecc.write_page = nand_write_page_hwecc;
1304 nand->ecc.read_page_raw = nand_read_page_raw;
1305 nand->ecc.write_page_raw = nand_write_page_raw;
1306 nand->ecc.read_oob = nand_read_oob;
1307 nand->ecc.write_oob = nand_write_oob;
1308 nand->ecc.strength = config->nand_ecc_strength;
1309 nand->select_chip = nand_select_chip;
1310 nand->dev_ready = nand_dev_ready;
1311 nand_set_controller_data(nand, &ca_nand->nand_ctrl);
1313 /* Disable subpage writes as we do not provide ecc->hwctl */
1314 nand->options |= NAND_NO_SUBPAGE_WRITE | NAND_SKIP_BBTSCAN;
1316 /* Configure flash type as P-NAND */
1317 clrsetbits_le32(&info->reg->flash_type, FLASH_PIN,
1318 FLASH_TYPE_4K | FLASH_SIZE_436OOB);
1319 config->width = FLASH_WIDTH;
1321 our_mtd = nand_to_mtd(nand);
1322 ret = nand_scan_ident(our_mtd, CONFIG_SYS_NAND_MAX_CHIPS, NULL);
1326 nand->ecc.size = BCH_DATA_UNIT;
1327 nand->ecc.bytes = BCH_GF_PARAM_M * (nand->ecc.strength / 8);
1329 /* Reconfig flash type according to ONFI */
1330 nand_config_flash_type(nand);
1332 ret = set_bus_width_page_size(our_mtd);
1336 /* Set the bad block position */
1338 our_mtd->writesize >
1339 512 ? NAND_LARGE_BADBLOCK_POS : NAND_SMALL_BADBLOCK_POS;
1341 /* Arrange OOB layout */
1342 ret = nand_config_oob_layout(nand);
1346 /* Init DMA descriptor ring */
1347 ret = init_nand_dma(nand);
1351 ret = nand_scan_tail(our_mtd);
1355 ret = nand_register(0, our_mtd);
1357 dev_err(dev, "Failed to register MTD: %d\n", ret);
1361 ret = set_bus_width_page_size(our_mtd);
1365 printf("P-NAND : %s\n", our_mtd->name);
1366 printf("Chip Size: %lldMB\n", nand->chipsize / (1024 * 1024));
1367 printf("Block Size: %dKB\n", our_mtd->erasesize / 1024);
1368 printf("Page Size: %dB\n", our_mtd->writesize);
1369 printf("OOB Size: %dB\n", our_mtd->oobsize);
1374 U_BOOT_DRIVER(cortina_nand) = {
1377 .of_match = cortina_nand_dt_ids,
1378 .probe = ca_nand_probe,
1379 .priv_auto = sizeof(struct ca_nand_info),
1382 void board_nand_init(void)
1384 struct udevice *dev;
1387 ret = uclass_get_device_by_driver(UCLASS_MTD,
1388 DM_DRIVER_GET(cortina_nand), &dev);
1389 if (ret && ret != -ENODEV)
1390 pr_err("Failed to initialize %s. (error %d)\n", dev->name, ret);