1 // SPDX-License-Identifier: GPL-2.0+
3 * (C) Copyright 2016 Xilinx, Inc.
5 * Xilinx Zynq NAND Flash Controller Driver
6 * This driver is based on plat_nand.c and mxc_nand.c drivers
13 #include <linux/errno.h>
15 #include <linux/ioport.h>
16 #include <linux/mtd/mtd.h>
17 #include <linux/mtd/rawnand.h>
18 #include <linux/mtd/partitions.h>
19 #include <linux/mtd/nand_ecc.h>
20 #include <asm/arch/hardware.h>
21 #include <asm/arch/sys_proto.h>
24 /* The NAND flash driver defines */
25 #define ZYNQ_NAND_CMD_PHASE 1
26 #define ZYNQ_NAND_DATA_PHASE 2
27 #define ZYNQ_NAND_ECC_SIZE 512
28 #define ZYNQ_NAND_SET_OPMODE_8BIT (0 << 0)
29 #define ZYNQ_NAND_SET_OPMODE_16BIT (1 << 0)
30 #define ZYNQ_NAND_ECC_STATUS (1 << 6)
31 #define ZYNQ_MEMC_CLRCR_INT_CLR1 (1 << 4)
32 #define ZYNQ_MEMC_SR_RAW_INT_ST1 (1 << 6)
33 #define ZYNQ_MEMC_SR_INT_ST1 (1 << 4)
34 #define ZYNQ_MEMC_NAND_ECC_MODE_MASK 0xC
36 /* Flash memory controller operating parameters */
37 #define ZYNQ_NAND_CLR_CONFIG ((0x1 << 1) | /* Disable interrupt */ \
38 (0x1 << 4) | /* Clear interrupt */ \
39 (0x1 << 6)) /* Disable ECC interrupt */
41 #ifndef CONFIG_NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
43 /* Assuming 50MHz clock (20ns cycle time) and 3V operation */
44 #define ZYNQ_NAND_SET_CYCLES ((0x2 << 20) | /* t_rr from nand_cycles */ \
45 (0x2 << 17) | /* t_ar from nand_cycles */ \
46 (0x1 << 14) | /* t_clr from nand_cycles */ \
47 (0x3 << 11) | /* t_wp from nand_cycles */ \
48 (0x2 << 8) | /* t_rea from nand_cycles */ \
49 (0x5 << 4) | /* t_wc from nand_cycles */ \
50 (0x5 << 0)) /* t_rc from nand_cycles */
54 #define ZYNQ_NAND_DIRECT_CMD ((0x4 << 23) | /* Chip 0 from interface 1 */ \
55 (0x2 << 21)) /* UpdateRegs operation */
57 #define ZYNQ_NAND_ECC_CONFIG ((0x1 << 2) | /* ECC available on APB */ \
58 (0x1 << 4) | /* ECC read at end of page */ \
59 (0x0 << 5)) /* No Jumping */
61 #define ZYNQ_NAND_ECC_CMD1 ((0x80) | /* Write command */ \
62 (0x00 << 8) | /* Read command */ \
63 (0x30 << 16) | /* Read End command */ \
64 (0x1 << 24)) /* Read End command calid */
66 #define ZYNQ_NAND_ECC_CMD2 ((0x85) | /* Write col change cmd */ \
67 (0x05 << 8) | /* Read col change cmd */ \
68 (0xE0 << 16) | /* Read col change end cmd */ \
69 (0x1 << 24)) /* Read col change
71 /* AXI Address definitions */
72 #define START_CMD_SHIFT 3
73 #define END_CMD_SHIFT 11
74 #define END_CMD_VALID_SHIFT 20
75 #define ADDR_CYCLES_SHIFT 21
76 #define CLEAR_CS_SHIFT 21
77 #define ECC_LAST_SHIFT 10
78 #define COMMAND_PHASE (0 << 19)
79 #define DATA_PHASE (1 << 19)
80 #define ONDIE_ECC_FEATURE_ADDR 0x90
81 #define ONDIE_ECC_FEATURE_ENABLE 0x08
83 #define ZYNQ_NAND_ECC_LAST (1 << ECC_LAST_SHIFT) /* Set ECC_Last */
84 #define ZYNQ_NAND_CLEAR_CS (1 << CLEAR_CS_SHIFT) /* Clear chip select */
86 /* ECC block registers bit position and bit mask */
87 #define ZYNQ_NAND_ECC_BUSY (1 << 6) /* ECC block is busy */
88 #define ZYNQ_NAND_ECC_MASK 0x00FFFFFF /* ECC value mask */
90 #define ZYNQ_NAND_ROW_ADDR_CYCL_MASK 0x0F
91 #define ZYNQ_NAND_COL_ADDR_CYCL_MASK 0xF0
93 #define ZYNQ_NAND_MIO_NUM_NAND_8BIT 13
94 #define ZYNQ_NAND_MIO_NUM_NAND_16BIT 8
96 enum zynq_nand_bus_width {
102 #ifndef NAND_CMD_LOCK_TIGHT
103 #define NAND_CMD_LOCK_TIGHT 0x2c
106 #ifndef NAND_CMD_LOCK_STATUS
107 #define NAND_CMD_LOCK_STATUS 0x7a
110 /* SMC register set */
111 struct zynq_nand_smc_regs {
120 u32 emcr; /* 0x404 */
121 u32 emcmd1r; /* 0x408 */
122 u32 emcmd2r; /* 0x40C */
124 u32 eval0r; /* 0x418 */
128 * struct nand_config - Defines the NAND flash driver instance
129 * @parts: Pointer to the mtd_partition structure
130 * @nand_base: Virtual address of the NAND flash device
131 * @end_cmd_pending: End command is pending
132 * @end_cmd: End command
135 void __iomem *nand_base;
141 struct zynq_nand_smc_regs *reg;
142 struct nand_config config;
145 struct zynq_nand_info {
147 struct nand_drv nand_ctrl;
148 struct nand_chip nand_chip;
152 * struct zynq_nand_command_format - Defines NAND flash command format
153 * @start_cmd: First cycle command (Start command)
154 * @end_cmd: Second cycle command (Last command)
155 * @addr_cycles: Number of address cycles required to send the address
156 * @end_cmd_valid: The second cycle command is valid for cmd or data phase
158 struct zynq_nand_command_format {
165 /* The NAND flash operations command format */
166 static const struct zynq_nand_command_format zynq_nand_commands[] = {
167 {NAND_CMD_READ0, NAND_CMD_READSTART, 5, ZYNQ_NAND_CMD_PHASE},
168 {NAND_CMD_RNDOUT, NAND_CMD_RNDOUTSTART, 2, ZYNQ_NAND_CMD_PHASE},
169 {NAND_CMD_READID, NAND_CMD_NONE, 1, 0},
170 {NAND_CMD_STATUS, NAND_CMD_NONE, 0, 0},
171 {NAND_CMD_SEQIN, NAND_CMD_PAGEPROG, 5, ZYNQ_NAND_DATA_PHASE},
172 {NAND_CMD_RNDIN, NAND_CMD_NONE, 2, 0},
173 {NAND_CMD_ERASE1, NAND_CMD_ERASE2, 3, ZYNQ_NAND_CMD_PHASE},
174 {NAND_CMD_RESET, NAND_CMD_NONE, 0, 0},
175 {NAND_CMD_PARAM, NAND_CMD_NONE, 1, 0},
176 {NAND_CMD_GET_FEATURES, NAND_CMD_NONE, 1, 0},
177 {NAND_CMD_SET_FEATURES, NAND_CMD_NONE, 1, 0},
178 {NAND_CMD_LOCK, NAND_CMD_NONE, 0, 0},
179 {NAND_CMD_LOCK_TIGHT, NAND_CMD_NONE, 0, 0},
180 {NAND_CMD_UNLOCK1, NAND_CMD_NONE, 3, 0},
181 {NAND_CMD_UNLOCK2, NAND_CMD_NONE, 3, 0},
182 {NAND_CMD_LOCK_STATUS, NAND_CMD_NONE, 3, 0},
183 {NAND_CMD_NONE, NAND_CMD_NONE, 0, 0},
184 /* Add all the flash commands supported by the flash device */
187 /* Define default oob placement schemes for large and small page devices */
188 static struct nand_ecclayout nand_oob_16 = {
192 { .offset = 8, .length = 8 }
196 static struct nand_ecclayout nand_oob_64 = {
199 52, 53, 54, 55, 56, 57,
200 58, 59, 60, 61, 62, 63},
202 { .offset = 2, .length = 50 }
206 static struct nand_ecclayout ondie_nand_oob_64 = {
210 8, 9, 10, 11, 12, 13, 14, 15,
211 24, 25, 26, 27, 28, 29, 30, 31,
212 40, 41, 42, 43, 44, 45, 46, 47,
213 56, 57, 58, 59, 60, 61, 62, 63
217 { .offset = 4, .length = 4 },
218 { .offset = 20, .length = 4 },
219 { .offset = 36, .length = 4 },
220 { .offset = 52, .length = 4 }
224 /* bbt decriptors for chips with on-die ECC and
225 chips with 64-byte OOB */
226 static u8 bbt_pattern[] = {'B', 'b', 't', '0' };
227 static u8 mirror_pattern[] = {'1', 't', 'b', 'B' };
229 static struct nand_bbt_descr bbt_main_descr = {
230 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
231 NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
236 .pattern = bbt_pattern
239 static struct nand_bbt_descr bbt_mirror_descr = {
240 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
241 NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
246 .pattern = mirror_pattern
250 * zynq_nand_waitfor_ecc_completion - Wait for ECC completion
252 * returns: status for command completion, -1 for Timeout
254 static int zynq_nand_waitfor_ecc_completion(struct mtd_info *mtd)
256 struct nand_chip *nand_chip = mtd_to_nand(mtd);
257 struct nand_drv *smc = nand_get_controller_data(nand_chip);
258 unsigned long timeout;
263 status = readl(&smc->reg->esr);
264 while (status & ZYNQ_NAND_ECC_BUSY) {
265 status = readl(&smc->reg->esr);
276 * zynq_nand_init_nand_flash - Initialize NAND controller
277 * @option: Device property flags
279 * This function initializes the NAND flash interface on the NAND controller.
281 * returns: 0 on success or error value on failure
283 static int zynq_nand_init_nand_flash(struct mtd_info *mtd, int option)
285 struct nand_chip *nand_chip = mtd_to_nand(mtd);
286 struct nand_drv *smc = nand_get_controller_data(nand_chip);
289 /* disable interrupts */
290 writel(ZYNQ_NAND_CLR_CONFIG, &smc->reg->cfr);
291 #ifndef CONFIG_NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
292 /* Initialize the NAND interface by setting cycles and operation mode */
293 writel(ZYNQ_NAND_SET_CYCLES, &smc->reg->scr);
295 if (option & NAND_BUSWIDTH_16)
296 writel(ZYNQ_NAND_SET_OPMODE_16BIT, &smc->reg->sor);
298 writel(ZYNQ_NAND_SET_OPMODE_8BIT, &smc->reg->sor);
300 writel(ZYNQ_NAND_DIRECT_CMD, &smc->reg->dcr);
302 /* Wait till the ECC operation is complete */
303 status = zynq_nand_waitfor_ecc_completion(mtd);
305 printf("%s: Timeout\n", __func__);
309 /* Set the command1 and command2 register */
310 writel(ZYNQ_NAND_ECC_CMD1, &smc->reg->emcmd1r);
311 writel(ZYNQ_NAND_ECC_CMD2, &smc->reg->emcmd2r);
317 * zynq_nand_calculate_hwecc - Calculate Hardware ECC
318 * @mtd: Pointer to the mtd_info structure
319 * @data: Pointer to the page data
320 * @ecc_code: Pointer to the ECC buffer where ECC data needs to be stored
322 * This function retrieves the Hardware ECC data from the controller and returns
323 * ECC data back to the MTD subsystem.
325 * returns: 0 on success or error value on failure
327 static int zynq_nand_calculate_hwecc(struct mtd_info *mtd, const u8 *data,
330 struct nand_chip *nand_chip = mtd_to_nand(mtd);
331 struct nand_drv *smc = nand_get_controller_data(nand_chip);
333 u8 ecc_reg, ecc_byte;
336 /* Wait till the ECC operation is complete */
337 ecc_status = zynq_nand_waitfor_ecc_completion(mtd);
338 if (ecc_status < 0) {
339 printf("%s: Timeout\n", __func__);
343 for (ecc_reg = 0; ecc_reg < 4; ecc_reg++) {
344 /* Read ECC value for each block */
345 ecc_value = readl(&smc->reg->eval0r + ecc_reg);
347 /* Get the ecc status from ecc read value */
348 ecc_status = (ecc_value >> 24) & 0xFF;
350 /* ECC value valid */
351 if (ecc_status & ZYNQ_NAND_ECC_STATUS) {
352 for (ecc_byte = 0; ecc_byte < 3; ecc_byte++) {
353 /* Copy ECC bytes to MTD buffer */
354 *ecc_code = ecc_value & 0xFF;
355 ecc_value = ecc_value >> 8;
359 debug("%s: ecc status failed\n", __func__);
367 * onehot - onehot function
368 * @value: value to check for onehot
370 * This function checks whether a value is onehot or not.
371 * onehot is if and only if one bit is set.
373 * FIXME: Try to move this in common.h
375 static bool onehot(unsigned short value)
379 onehot = value && !(value & (value - 1));
384 * zynq_nand_correct_data - ECC correction function
385 * @mtd: Pointer to the mtd_info structure
386 * @buf: Pointer to the page data
387 * @read_ecc: Pointer to the ECC value read from spare data area
388 * @calc_ecc: Pointer to the calculated ECC value
390 * This function corrects the ECC single bit errors & detects 2-bit errors.
392 * returns: 0 if no ECC errors found
393 * 1 if single bit error found and corrected.
394 * -1 if multiple ECC errors found.
396 static int zynq_nand_correct_data(struct mtd_info *mtd, unsigned char *buf,
397 unsigned char *read_ecc, unsigned char *calc_ecc)
399 unsigned char bit_addr;
400 unsigned int byte_addr;
401 unsigned short ecc_odd, ecc_even;
402 unsigned short read_ecc_lower, read_ecc_upper;
403 unsigned short calc_ecc_lower, calc_ecc_upper;
405 read_ecc_lower = (read_ecc[0] | (read_ecc[1] << 8)) & 0xfff;
406 read_ecc_upper = ((read_ecc[1] >> 4) | (read_ecc[2] << 4)) & 0xfff;
408 calc_ecc_lower = (calc_ecc[0] | (calc_ecc[1] << 8)) & 0xfff;
409 calc_ecc_upper = ((calc_ecc[1] >> 4) | (calc_ecc[2] << 4)) & 0xfff;
411 ecc_odd = read_ecc_lower ^ calc_ecc_lower;
412 ecc_even = read_ecc_upper ^ calc_ecc_upper;
414 if ((ecc_odd == 0) && (ecc_even == 0))
415 return 0; /* no error */
417 if (ecc_odd == (~ecc_even & 0xfff)) {
418 /* bits [11:3] of error code is byte offset */
419 byte_addr = (ecc_odd >> 3) & 0x1ff;
420 /* bits [2:0] of error code is bit offset */
421 bit_addr = ecc_odd & 0x7;
422 /* Toggling error bit */
423 buf[byte_addr] ^= (1 << bit_addr);
427 if (onehot(ecc_odd | ecc_even))
428 return 1; /* one error in parity */
430 return -1; /* Uncorrectable error */
434 * zynq_nand_read_oob - [REPLACABLE] the most common OOB data read function
435 * @mtd: mtd info structure
436 * @chip: nand chip info structure
437 * @page: page number to read
438 * @sndcmd: flag whether to issue read command or not
440 static int zynq_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
443 unsigned long data_phase_addr = 0;
447 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
450 chip->read_buf(mtd, p, (mtd->oobsize - data_width));
451 p += mtd->oobsize - data_width;
453 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
454 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
455 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
456 chip->read_buf(mtd, p, data_width);
462 * zynq_nand_write_oob - [REPLACABLE] the most common OOB data write function
463 * @mtd: mtd info structure
464 * @chip: nand chip info structure
465 * @page: page number to write
467 static int zynq_nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
470 int status = 0, data_width = 4;
471 const u8 *buf = chip->oob_poi;
472 unsigned long data_phase_addr = 0;
474 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
476 chip->write_buf(mtd, buf, (mtd->oobsize - data_width));
477 buf += mtd->oobsize - data_width;
479 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
480 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
481 data_phase_addr |= (1 << END_CMD_VALID_SHIFT);
482 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
483 chip->write_buf(mtd, buf, data_width);
485 /* Send command to program the OOB data */
486 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
487 status = chip->waitfunc(mtd, chip);
489 return status & NAND_STATUS_FAIL ? -EIO : 0;
493 * zynq_nand_read_page_raw - [Intern] read raw page data without ecc
494 * @mtd: mtd info structure
495 * @chip: nand chip info structure
496 * @buf: buffer to store read data
497 * @oob_required: must write chip->oob_poi to OOB
498 * @page: page number to read
500 static int zynq_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
501 u8 *buf, int oob_required, int page)
503 unsigned long data_width = 4;
504 unsigned long data_phase_addr = 0;
507 chip->read_buf(mtd, buf, mtd->writesize);
510 chip->read_buf(mtd, p, (mtd->oobsize - data_width));
511 p += (mtd->oobsize - data_width);
513 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
514 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
515 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
517 chip->read_buf(mtd, p, data_width);
521 static int zynq_nand_read_page_raw_nooob(struct mtd_info *mtd,
522 struct nand_chip *chip, u8 *buf, int oob_required, int page)
524 chip->read_buf(mtd, buf, mtd->writesize);
528 static int zynq_nand_read_subpage_raw(struct mtd_info *mtd,
529 struct nand_chip *chip, u32 data_offs,
530 u32 readlen, u8 *buf, int page)
532 if (data_offs != 0) {
533 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_offs, -1);
536 chip->read_buf(mtd, buf, readlen);
542 * zynq_nand_write_page_raw - [Intern] raw page write function
543 * @mtd: mtd info structure
544 * @chip: nand chip info structure
546 * @oob_required: must write chip->oob_poi to OOB
548 static int zynq_nand_write_page_raw(struct mtd_info *mtd,
549 struct nand_chip *chip, const u8 *buf, int oob_required, int page)
551 unsigned long data_width = 4;
552 unsigned long data_phase_addr = 0;
555 chip->write_buf(mtd, buf, mtd->writesize);
558 chip->write_buf(mtd, p, (mtd->oobsize - data_width));
559 p += (mtd->oobsize - data_width);
561 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
562 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
563 data_phase_addr |= (1 << END_CMD_VALID_SHIFT);
564 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
566 chip->write_buf(mtd, p, data_width);
572 * nand_write_page_hwecc - Hardware ECC based page write function
573 * @mtd: Pointer to the mtd info structure
574 * @chip: Pointer to the NAND chip info structure
575 * @buf: Pointer to the data buffer
576 * @oob_required: must write chip->oob_poi to OOB
578 * This functions writes data and hardware generated ECC values in to the page.
580 static int zynq_nand_write_page_hwecc(struct mtd_info *mtd,
581 struct nand_chip *chip, const u8 *buf, int oob_required, int page)
583 int i, eccsteps, eccsize = chip->ecc.size;
584 u8 *ecc_calc = chip->buffers->ecccalc;
586 u32 *eccpos = chip->ecc.layout->eccpos;
587 unsigned long data_phase_addr = 0;
588 unsigned long data_width = 4;
591 for (eccsteps = chip->ecc.steps; (eccsteps - 1); eccsteps--) {
592 chip->write_buf(mtd, p, eccsize);
595 chip->write_buf(mtd, p, (eccsize - data_width));
596 p += eccsize - data_width;
598 /* Set ECC Last bit to 1 */
599 data_phase_addr = (unsigned long) chip->IO_ADDR_W;
600 data_phase_addr |= ZYNQ_NAND_ECC_LAST;
601 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
602 chip->write_buf(mtd, p, data_width);
604 /* Wait for ECC to be calculated and read the error values */
606 chip->ecc.calculate(mtd, p, &ecc_calc[0]);
608 for (i = 0; i < chip->ecc.total; i++)
609 chip->oob_poi[eccpos[i]] = ~(ecc_calc[i]);
611 /* Clear ECC last bit */
612 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
613 data_phase_addr &= ~ZYNQ_NAND_ECC_LAST;
614 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
616 /* Write the spare area with ECC bytes */
617 oob_ptr = chip->oob_poi;
618 chip->write_buf(mtd, oob_ptr, (mtd->oobsize - data_width));
620 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
621 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
622 data_phase_addr |= (1 << END_CMD_VALID_SHIFT);
623 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
624 oob_ptr += (mtd->oobsize - data_width);
625 chip->write_buf(mtd, oob_ptr, data_width);
631 * zynq_nand_write_page_swecc - [REPLACABLE] software ecc based page
633 * @mtd: mtd info structure
634 * @chip: nand chip info structure
636 * @oob_required: must write chip->oob_poi to OOB
638 static int zynq_nand_write_page_swecc(struct mtd_info *mtd,
639 struct nand_chip *chip, const u8 *buf, int oob_required, int page)
641 int i, eccsize = chip->ecc.size;
642 int eccbytes = chip->ecc.bytes;
643 int eccsteps = chip->ecc.steps;
644 u8 *ecc_calc = chip->buffers->ecccalc;
646 u32 *eccpos = chip->ecc.layout->eccpos;
648 /* Software ecc calculation */
649 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
650 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
652 for (i = 0; i < chip->ecc.total; i++)
653 chip->oob_poi[eccpos[i]] = ecc_calc[i];
655 return chip->ecc.write_page_raw(mtd, chip, buf, 1, page);
659 * nand_read_page_hwecc - Hardware ECC based page read function
660 * @mtd: Pointer to the mtd info structure
661 * @chip: Pointer to the NAND chip info structure
662 * @buf: Pointer to the buffer to store read data
663 * @oob_required: must write chip->oob_poi to OOB
664 * @page: page number to read
666 * This functions reads data and checks the data integrity by comparing hardware
667 * generated ECC values and read ECC values from spare area.
669 * returns: 0 always and updates ECC operation status in to MTD structure
671 static int zynq_nand_read_page_hwecc(struct mtd_info *mtd,
672 struct nand_chip *chip, u8 *buf, int oob_required, int page)
674 int i, stat, eccsteps, eccsize = chip->ecc.size;
675 int eccbytes = chip->ecc.bytes;
677 u8 *ecc_calc = chip->buffers->ecccalc;
678 u8 *ecc_code = chip->buffers->ecccode;
679 u32 *eccpos = chip->ecc.layout->eccpos;
680 unsigned long data_phase_addr = 0;
681 unsigned long data_width = 4;
684 for (eccsteps = chip->ecc.steps; (eccsteps - 1); eccsteps--) {
685 chip->read_buf(mtd, p, eccsize);
688 chip->read_buf(mtd, p, (eccsize - data_width));
689 p += eccsize - data_width;
691 /* Set ECC Last bit to 1 */
692 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
693 data_phase_addr |= ZYNQ_NAND_ECC_LAST;
694 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
695 chip->read_buf(mtd, p, data_width);
697 /* Read the calculated ECC value */
699 chip->ecc.calculate(mtd, p, &ecc_calc[0]);
701 /* Clear ECC last bit */
702 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
703 data_phase_addr &= ~ZYNQ_NAND_ECC_LAST;
704 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
706 /* Read the stored ECC value */
707 oob_ptr = chip->oob_poi;
708 chip->read_buf(mtd, oob_ptr, (mtd->oobsize - data_width));
710 /* de-assert chip select */
711 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
712 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
713 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
715 oob_ptr += (mtd->oobsize - data_width);
716 chip->read_buf(mtd, oob_ptr, data_width);
718 for (i = 0; i < chip->ecc.total; i++)
719 ecc_code[i] = ~(chip->oob_poi[eccpos[i]]);
721 eccsteps = chip->ecc.steps;
724 /* Check ECC error for all blocks and correct if it is correctable */
725 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
726 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
728 mtd->ecc_stats.failed++;
730 mtd->ecc_stats.corrected += stat;
736 * zynq_nand_read_page_swecc - [REPLACABLE] software ecc based page
738 * @mtd: mtd info structure
739 * @chip: nand chip info structure
740 * @buf: buffer to store read data
741 * @page: page number to read
743 static int zynq_nand_read_page_swecc(struct mtd_info *mtd,
744 struct nand_chip *chip, u8 *buf, int oob_required, int page)
746 int i, eccsize = chip->ecc.size;
747 int eccbytes = chip->ecc.bytes;
748 int eccsteps = chip->ecc.steps;
750 u8 *ecc_calc = chip->buffers->ecccalc;
751 u8 *ecc_code = chip->buffers->ecccode;
752 u32 *eccpos = chip->ecc.layout->eccpos;
754 chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
756 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
757 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
759 for (i = 0; i < chip->ecc.total; i++)
760 ecc_code[i] = chip->oob_poi[eccpos[i]];
762 eccsteps = chip->ecc.steps;
765 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
768 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
770 mtd->ecc_stats.failed++;
772 mtd->ecc_stats.corrected += stat;
778 * zynq_nand_select_chip - Select the flash device
779 * @mtd: Pointer to the mtd_info structure
780 * @chip: Chip number to be selected
782 * This function is empty as the NAND controller handles chip select line
783 * internally based on the chip address passed in command and data phase.
785 static void zynq_nand_select_chip(struct mtd_info *mtd, int chip)
787 /* Not support multiple chips yet */
791 * zynq_nand_cmd_function - Send command to NAND device
792 * @mtd: Pointer to the mtd_info structure
793 * @command: The command to be sent to the flash device
794 * @column: The column address for this command, -1 if none
795 * @page_addr: The page address for this command, -1 if none
797 static void zynq_nand_cmd_function(struct mtd_info *mtd, unsigned int command,
798 int column, int page_addr)
800 struct nand_chip *chip = mtd_to_nand(mtd);
801 struct nand_drv *smc = nand_get_controller_data(chip);
802 const struct zynq_nand_command_format *curr_cmd = NULL;
804 struct nand_config *xnand = &smc->config;
806 unsigned long cmd_data = 0;
807 unsigned long cmd_phase_addr = 0;
808 unsigned long data_phase_addr = 0;
810 u8 end_cmd_valid = 0;
813 if (xnand->end_cmd_pending) {
814 /* Check for end command if this command request is same as the
815 * pending command then return
817 if (xnand->end_cmd == command) {
819 xnand->end_cmd_pending = 0;
824 /* Emulate NAND_CMD_READOOB for large page device */
825 if ((mtd->writesize > ZYNQ_NAND_ECC_SIZE) &&
826 (command == NAND_CMD_READOOB)) {
827 column += mtd->writesize;
828 command = NAND_CMD_READ0;
831 /* Get the command format */
832 for (index = 0; index < ARRAY_SIZE(zynq_nand_commands); index++)
833 if (command == zynq_nand_commands[index].start_cmd)
836 if (index == ARRAY_SIZE(zynq_nand_commands)) {
837 printf("%s: Unsupported start cmd %02x\n", __func__, command);
840 curr_cmd = &zynq_nand_commands[index];
842 /* Clear interrupt */
843 writel(ZYNQ_MEMC_CLRCR_INT_CLR1, &smc->reg->cfr);
845 /* Get the command phase address */
846 if (curr_cmd->end_cmd_valid == ZYNQ_NAND_CMD_PHASE)
849 if (curr_cmd->end_cmd == (u8)NAND_CMD_NONE)
852 end_cmd = curr_cmd->end_cmd;
854 if (command == NAND_CMD_READ0 ||
855 command == NAND_CMD_SEQIN) {
856 addr_cycles = chip->onfi_params.addr_cycles &
857 ZYNQ_NAND_ROW_ADDR_CYCL_MASK;
858 addr_cycles += ((chip->onfi_params.addr_cycles &
859 ZYNQ_NAND_COL_ADDR_CYCL_MASK) >> 4);
861 addr_cycles = curr_cmd->addr_cycles;
864 cmd_phase_addr = (unsigned long)xnand->nand_base |
865 (addr_cycles << ADDR_CYCLES_SHIFT) |
866 (end_cmd_valid << END_CMD_VALID_SHIFT) |
868 (end_cmd << END_CMD_SHIFT) |
869 (curr_cmd->start_cmd << START_CMD_SHIFT);
871 cmd_addr = (void __iomem *)cmd_phase_addr;
873 /* Get the data phase address */
876 data_phase_addr = (unsigned long)xnand->nand_base |
877 (0x0 << CLEAR_CS_SHIFT) |
878 (end_cmd_valid << END_CMD_VALID_SHIFT) |
880 (end_cmd << END_CMD_SHIFT) |
881 (0x0 << ECC_LAST_SHIFT);
883 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
884 chip->IO_ADDR_W = chip->IO_ADDR_R;
886 /* Command phase AXI Read & Write */
887 if (column != -1 && page_addr != -1) {
888 /* Adjust columns for 16 bit bus width */
889 if (chip->options & NAND_BUSWIDTH_16)
892 if (mtd->writesize > ZYNQ_NAND_ECC_SIZE) {
893 cmd_data |= page_addr << 16;
894 /* Another address cycle for devices > 128MiB */
895 if (chip->chipsize > (128 << 20)) {
896 writel(cmd_data, cmd_addr);
897 cmd_data = (page_addr >> 16);
900 cmd_data |= page_addr << 8;
902 } else if (page_addr != -1) { /* Erase */
903 cmd_data = page_addr;
904 } else if (column != -1) { /* Change read/write column, read id etc */
905 /* Adjust columns for 16 bit bus width */
906 if ((chip->options & NAND_BUSWIDTH_16) &&
907 ((command == NAND_CMD_READ0) ||
908 (command == NAND_CMD_SEQIN) ||
909 (command == NAND_CMD_RNDOUT) ||
910 (command == NAND_CMD_RNDIN)))
915 writel(cmd_data, cmd_addr);
917 if (curr_cmd->end_cmd_valid) {
918 xnand->end_cmd = curr_cmd->end_cmd;
919 xnand->end_cmd_pending = 1;
924 if ((command == NAND_CMD_READ0) ||
925 (command == NAND_CMD_RESET) ||
926 (command == NAND_CMD_PARAM) ||
927 (command == NAND_CMD_GET_FEATURES))
928 /* wait until command is processed */
929 nand_wait_ready(mtd);
933 * zynq_nand_read_buf - read chip data into buffer
934 * @mtd: MTD device structure
935 * @buf: buffer to store date
936 * @len: number of bytes to read
938 static void zynq_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
940 struct nand_chip *chip = mtd_to_nand(mtd);
942 /* Make sure that buf is 32 bit aligned */
943 if (((unsigned long)buf & 0x3) != 0) {
944 if (((unsigned long)buf & 0x1) != 0) {
946 *buf = readb(chip->IO_ADDR_R);
952 if (((unsigned long)buf & 0x3) != 0) {
954 *(u16 *)buf = readw(chip->IO_ADDR_R);
961 /* copy aligned data */
963 *(u32 *)buf = readl(chip->IO_ADDR_R);
968 /* mop up any remaining bytes */
971 *(u16 *)buf = readw(chip->IO_ADDR_R);
976 *buf = readb(chip->IO_ADDR_R);
981 * zynq_nand_write_buf - write buffer to chip
982 * @mtd: MTD device structure
984 * @len: number of bytes to write
986 static void zynq_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
988 struct nand_chip *chip = mtd_to_nand(mtd);
989 const u32 *nand = chip->IO_ADDR_W;
991 /* Make sure that buf is 32 bit aligned */
992 if (((unsigned long)buf & 0x3) != 0) {
993 if (((unsigned long)buf & 0x1) != 0) {
1001 if (((unsigned long)buf & 0x3) != 0) {
1003 writew(*(u16 *)buf, nand);
1010 /* copy aligned data */
1012 writel(*(u32 *)buf, nand);
1017 /* mop up any remaining bytes */
1020 writew(*(u16 *)buf, nand);
1031 * zynq_nand_device_ready - Check device ready/busy line
1032 * @mtd: Pointer to the mtd_info structure
1034 * returns: 0 on busy or 1 on ready state
1036 static int zynq_nand_device_ready(struct mtd_info *mtd)
1038 struct nand_chip *nand_chip = mtd_to_nand(mtd);
1039 struct nand_drv *smc = nand_get_controller_data(nand_chip);
1042 csr_val = readl(&smc->reg->csr);
1043 /* Check the raw_int_status1 bit */
1044 if (csr_val & ZYNQ_MEMC_SR_RAW_INT_ST1) {
1045 /* Clear the interrupt condition */
1046 writel(ZYNQ_MEMC_SR_INT_ST1, &smc->reg->cfr);
1053 static int zynq_nand_check_is_16bit_bw_flash(void)
1055 int is_16bit_bw = NAND_BW_UNKNOWN;
1056 int mio_num_8bit = 0, mio_num_16bit = 0;
1058 mio_num_8bit = zynq_slcr_get_mio_pin_status("nand8");
1059 if (mio_num_8bit == ZYNQ_NAND_MIO_NUM_NAND_8BIT)
1060 is_16bit_bw = NAND_BW_8BIT;
1062 mio_num_16bit = zynq_slcr_get_mio_pin_status("nand16");
1063 if (mio_num_8bit == ZYNQ_NAND_MIO_NUM_NAND_8BIT &&
1064 mio_num_16bit == ZYNQ_NAND_MIO_NUM_NAND_16BIT)
1065 is_16bit_bw = NAND_BW_16BIT;
1070 static int zynq_nand_probe(struct udevice *dev)
1072 struct zynq_nand_info *zynq = dev_get_priv(dev);
1073 struct nand_chip *nand_chip = &zynq->nand_chip;
1074 struct nand_drv *smc = &zynq->nand_ctrl;
1075 struct nand_config *xnand = &smc->config;
1076 struct mtd_info *mtd;
1077 struct resource res;
1079 unsigned long ecc_page_size;
1080 u8 maf_id, dev_id, i;
1082 u8 set_feature[4] = {ONDIE_ECC_FEATURE_ENABLE, 0x00, 0x00, 0x00};
1083 unsigned long ecc_cfg;
1084 int ondie_ecc_enabled = 0;
1087 smc->reg = (struct zynq_nand_smc_regs *)dev_read_addr(dev);
1088 of_nand = dev_read_subnode(dev, "flash@e1000000");
1089 if (!ofnode_valid(of_nand)) {
1090 printf("Failed to find nand node in dt\n");
1094 if (!ofnode_is_available(of_nand)) {
1095 debug("Nand node in dt disabled\n");
1096 return dm_scan_fdt_dev(dev);
1099 if (ofnode_read_resource(of_nand, 0, &res)) {
1100 printf("Failed to get nand resource\n");
1104 xnand->nand_base = (void __iomem *)res.start;
1105 mtd = nand_to_mtd(nand_chip);
1106 nand_set_controller_data(nand_chip, &zynq->nand_ctrl);
1108 /* Set address of NAND IO lines */
1109 nand_chip->IO_ADDR_R = xnand->nand_base;
1110 nand_chip->IO_ADDR_W = xnand->nand_base;
1112 /* Set the driver entry points for MTD */
1113 nand_chip->cmdfunc = zynq_nand_cmd_function;
1114 nand_chip->dev_ready = zynq_nand_device_ready;
1115 nand_chip->select_chip = zynq_nand_select_chip;
1117 /* If we don't set this delay driver sets 20us by default */
1118 nand_chip->chip_delay = 30;
1120 /* Buffer read/write routines */
1121 nand_chip->read_buf = zynq_nand_read_buf;
1122 nand_chip->write_buf = zynq_nand_write_buf;
1124 is_16bit_bw = zynq_nand_check_is_16bit_bw_flash();
1125 if (is_16bit_bw == NAND_BW_UNKNOWN) {
1126 printf("%s: Unable detect NAND based on MIO settings\n",
1131 if (is_16bit_bw == NAND_BW_16BIT)
1132 nand_chip->options = NAND_BUSWIDTH_16;
1134 nand_chip->bbt_options = NAND_BBT_USE_FLASH;
1136 /* Initialize the NAND flash interface on NAND controller */
1137 if (zynq_nand_init_nand_flash(mtd, nand_chip->options) < 0) {
1138 printf("%s: nand flash init failed\n", __func__);
1142 /* first scan to find the device and get the page size */
1143 if (nand_scan_ident(mtd, 1, NULL)) {
1144 printf("%s: nand_scan_ident failed\n", __func__);
1147 /* Send the command for reading device ID */
1148 nand_chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1149 nand_chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
1151 /* Read manufacturer and device IDs */
1152 maf_id = nand_chip->read_byte(mtd);
1153 dev_id = nand_chip->read_byte(mtd);
1155 if ((maf_id == 0x2c) && ((dev_id == 0xf1) ||
1156 (dev_id == 0xa1) || (dev_id == 0xb1) ||
1157 (dev_id == 0xaa) || (dev_id == 0xba) ||
1158 (dev_id == 0xda) || (dev_id == 0xca) ||
1159 (dev_id == 0xac) || (dev_id == 0xbc) ||
1160 (dev_id == 0xdc) || (dev_id == 0xcc) ||
1161 (dev_id == 0xa3) || (dev_id == 0xb3) ||
1162 (dev_id == 0xd3) || (dev_id == 0xc3))) {
1163 nand_chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES,
1164 ONDIE_ECC_FEATURE_ADDR, -1);
1165 for (i = 0; i < 4; i++)
1166 writeb(set_feature[i], nand_chip->IO_ADDR_W);
1168 /* Wait for 1us after writing data with SET_FEATURES command */
1171 nand_chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES,
1172 ONDIE_ECC_FEATURE_ADDR, -1);
1173 nand_chip->read_buf(mtd, get_feature, 4);
1175 if (get_feature[0] & ONDIE_ECC_FEATURE_ENABLE) {
1176 debug("%s: OnDie ECC flash\n", __func__);
1177 ondie_ecc_enabled = 1;
1179 printf("%s: Unable to detect OnDie ECC\n", __func__);
1183 if (ondie_ecc_enabled) {
1184 /* Bypass the controller ECC block */
1185 ecc_cfg = readl(&smc->reg->emcr);
1186 ecc_cfg &= ~ZYNQ_MEMC_NAND_ECC_MODE_MASK;
1187 writel(ecc_cfg, &smc->reg->emcr);
1189 /* The software ECC routines won't work
1190 * with the SMC controller
1192 nand_chip->ecc.mode = NAND_ECC_HW;
1193 nand_chip->ecc.strength = 1;
1194 nand_chip->ecc.read_page = zynq_nand_read_page_raw_nooob;
1195 nand_chip->ecc.read_subpage = zynq_nand_read_subpage_raw;
1196 nand_chip->ecc.write_page = zynq_nand_write_page_raw;
1197 nand_chip->ecc.read_page_raw = zynq_nand_read_page_raw;
1198 nand_chip->ecc.write_page_raw = zynq_nand_write_page_raw;
1199 nand_chip->ecc.read_oob = zynq_nand_read_oob;
1200 nand_chip->ecc.write_oob = zynq_nand_write_oob;
1201 nand_chip->ecc.size = mtd->writesize;
1202 nand_chip->ecc.bytes = 0;
1204 /* NAND with on-die ECC supports subpage reads */
1205 nand_chip->options |= NAND_SUBPAGE_READ;
1207 /* On-Die ECC spare bytes offset 8 is used for ECC codes */
1208 if (ondie_ecc_enabled) {
1209 nand_chip->ecc.layout = &ondie_nand_oob_64;
1210 /* Use the BBT pattern descriptors */
1211 nand_chip->bbt_td = &bbt_main_descr;
1212 nand_chip->bbt_md = &bbt_mirror_descr;
1215 /* Hardware ECC generates 3 bytes ECC code for each 512 bytes */
1216 nand_chip->ecc.mode = NAND_ECC_HW;
1217 nand_chip->ecc.strength = 1;
1218 nand_chip->ecc.size = ZYNQ_NAND_ECC_SIZE;
1219 nand_chip->ecc.bytes = 3;
1220 nand_chip->ecc.calculate = zynq_nand_calculate_hwecc;
1221 nand_chip->ecc.correct = zynq_nand_correct_data;
1222 nand_chip->ecc.hwctl = NULL;
1223 nand_chip->ecc.read_page = zynq_nand_read_page_hwecc;
1224 nand_chip->ecc.write_page = zynq_nand_write_page_hwecc;
1225 nand_chip->ecc.read_page_raw = zynq_nand_read_page_raw;
1226 nand_chip->ecc.write_page_raw = zynq_nand_write_page_raw;
1227 nand_chip->ecc.read_oob = zynq_nand_read_oob;
1228 nand_chip->ecc.write_oob = zynq_nand_write_oob;
1230 switch (mtd->writesize) {
1232 ecc_page_size = 0x1;
1233 /* Set the ECC memory config register */
1234 writel((ZYNQ_NAND_ECC_CONFIG | ecc_page_size),
1238 ecc_page_size = 0x2;
1239 /* Set the ECC memory config register */
1240 writel((ZYNQ_NAND_ECC_CONFIG | ecc_page_size),
1244 ecc_page_size = 0x3;
1245 /* Set the ECC memory config register */
1246 writel((ZYNQ_NAND_ECC_CONFIG | ecc_page_size),
1250 nand_chip->ecc.mode = NAND_ECC_SOFT;
1251 nand_chip->ecc.calculate = nand_calculate_ecc;
1252 nand_chip->ecc.correct = nand_correct_data;
1253 nand_chip->ecc.read_page = zynq_nand_read_page_swecc;
1254 nand_chip->ecc.write_page = zynq_nand_write_page_swecc;
1255 nand_chip->ecc.size = 256;
1259 if (mtd->oobsize == 16)
1260 nand_chip->ecc.layout = &nand_oob_16;
1261 else if (mtd->oobsize == 64)
1262 nand_chip->ecc.layout = &nand_oob_64;
1264 printf("%s: No oob layout found\n", __func__);
1267 /* Second phase scan */
1268 if (nand_scan_tail(mtd)) {
1269 printf("%s: nand_scan_tail failed\n", __func__);
1272 if (nand_register(0, mtd))
1278 static const struct udevice_id zynq_nand_dt_ids[] = {
1279 {.compatible = "arm,pl353-smc-r2p1",},
1283 U_BOOT_DRIVER(zynq_nand) = {
1284 .name = "zynq-nand",
1286 .of_match = zynq_nand_dt_ids,
1287 .probe = zynq_nand_probe,
1288 .priv_auto_alloc_size = sizeof(struct zynq_nand_info),
1291 void board_nand_init(void)
1293 struct udevice *dev;
1296 ret = uclass_get_device_by_driver(UCLASS_MTD,
1297 DM_GET_DRIVER(zynq_nand), &dev);
1298 if (ret && ret != -ENODEV)
1299 pr_err("Failed to initialize %s. (error %d)\n", dev->name, ret);