2 * (C) Copyright 2016 Xilinx, Inc.
4 * Xilinx Zynq NAND Flash Controller Driver
5 * This driver is based on plat_nand.c and mxc_nand.c drivers
7 * SPDX-License-Identifier: GPL-2.0+
13 #include <linux/errno.h>
15 #include <linux/mtd/mtd.h>
16 #include <linux/mtd/nand.h>
17 #include <linux/mtd/partitions.h>
18 #include <linux/mtd/nand_ecc.h>
19 #include <asm/arch/hardware.h>
21 /* The NAND flash driver defines */
22 #define ZYNQ_NAND_CMD_PHASE 1
23 #define ZYNQ_NAND_DATA_PHASE 2
24 #define ZYNQ_NAND_ECC_SIZE 512
25 #define ZYNQ_NAND_SET_OPMODE_8BIT (0 << 0)
26 #define ZYNQ_NAND_SET_OPMODE_16BIT (1 << 0)
27 #define ZYNQ_NAND_ECC_STATUS (1 << 6)
28 #define ZYNQ_MEMC_CLRCR_INT_CLR1 (1 << 4)
29 #define ZYNQ_MEMC_SR_RAW_INT_ST1 (1 << 6)
30 #define ZYNQ_MEMC_SR_INT_ST1 (1 << 4)
31 #define ZYNQ_MEMC_NAND_ECC_MODE_MASK 0xC
33 /* Flash memory controller operating parameters */
34 #define ZYNQ_NAND_CLR_CONFIG ((0x1 << 1) | /* Disable interrupt */ \
35 (0x1 << 4) | /* Clear interrupt */ \
36 (0x1 << 6)) /* Disable ECC interrupt */
38 #ifndef CONFIG_NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
40 /* Assuming 50MHz clock (20ns cycle time) and 3V operation */
41 #define ZYNQ_NAND_SET_CYCLES ((0x2 << 20) | /* t_rr from nand_cycles */ \
42 (0x2 << 17) | /* t_ar from nand_cycles */ \
43 (0x1 << 14) | /* t_clr from nand_cycles */ \
44 (0x3 << 11) | /* t_wp from nand_cycles */ \
45 (0x2 << 8) | /* t_rea from nand_cycles */ \
46 (0x5 << 4) | /* t_wc from nand_cycles */ \
47 (0x5 << 0)) /* t_rc from nand_cycles */
51 #define ZYNQ_NAND_DIRECT_CMD ((0x4 << 23) | /* Chip 0 from interface 1 */ \
52 (0x2 << 21)) /* UpdateRegs operation */
54 #define ZYNQ_NAND_ECC_CONFIG ((0x1 << 2) | /* ECC available on APB */ \
55 (0x1 << 4) | /* ECC read at end of page */ \
56 (0x0 << 5)) /* No Jumping */
58 #define ZYNQ_NAND_ECC_CMD1 ((0x80) | /* Write command */ \
59 (0x00 << 8) | /* Read command */ \
60 (0x30 << 16) | /* Read End command */ \
61 (0x1 << 24)) /* Read End command calid */
63 #define ZYNQ_NAND_ECC_CMD2 ((0x85) | /* Write col change cmd */ \
64 (0x05 << 8) | /* Read col change cmd */ \
65 (0xE0 << 16) | /* Read col change end cmd */ \
66 (0x1 << 24)) /* Read col change
68 /* AXI Address definitions */
69 #define START_CMD_SHIFT 3
70 #define END_CMD_SHIFT 11
71 #define END_CMD_VALID_SHIFT 20
72 #define ADDR_CYCLES_SHIFT 21
73 #define CLEAR_CS_SHIFT 21
74 #define ECC_LAST_SHIFT 10
75 #define COMMAND_PHASE (0 << 19)
76 #define DATA_PHASE (1 << 19)
77 #define ONDIE_ECC_FEATURE_ADDR 0x90
78 #define ONDIE_ECC_FEATURE_ENABLE 0x08
80 #define ZYNQ_NAND_ECC_LAST (1 << ECC_LAST_SHIFT) /* Set ECC_Last */
81 #define ZYNQ_NAND_CLEAR_CS (1 << CLEAR_CS_SHIFT) /* Clear chip select */
83 /* ECC block registers bit position and bit mask */
84 #define ZYNQ_NAND_ECC_BUSY (1 << 6) /* ECC block is busy */
85 #define ZYNQ_NAND_ECC_MASK 0x00FFFFFF /* ECC value mask */
88 /* SMC register set */
89 struct zynq_nand_smc_regs {
99 u32 emcmd1r; /* 0x408 */
100 u32 emcmd2r; /* 0x40C */
102 u32 eval0r; /* 0x418 */
104 #define zynq_nand_smc_base ((struct zynq_nand_smc_regs __iomem *)\
108 * struct zynq_nand_info - Defines the NAND flash driver instance
109 * @parts: Pointer to the mtd_partition structure
110 * @nand_base: Virtual address of the NAND flash device
111 * @end_cmd_pending: End command is pending
112 * @end_cmd: End command
114 struct zynq_nand_info {
115 void __iomem *nand_base;
121 * struct zynq_nand_command_format - Defines NAND flash command format
122 * @start_cmd: First cycle command (Start command)
123 * @end_cmd: Second cycle command (Last command)
124 * @addr_cycles: Number of address cycles required to send the address
125 * @end_cmd_valid: The second cycle command is valid for cmd or data phase
127 struct zynq_nand_command_format {
134 /* The NAND flash operations command format */
135 static const struct zynq_nand_command_format zynq_nand_commands[] = {
136 {NAND_CMD_READ0, NAND_CMD_READSTART, 5, ZYNQ_NAND_CMD_PHASE},
137 {NAND_CMD_RNDOUT, NAND_CMD_RNDOUTSTART, 2, ZYNQ_NAND_CMD_PHASE},
138 {NAND_CMD_READID, NAND_CMD_NONE, 1, 0},
139 {NAND_CMD_STATUS, NAND_CMD_NONE, 0, 0},
140 {NAND_CMD_SEQIN, NAND_CMD_PAGEPROG, 5, ZYNQ_NAND_DATA_PHASE},
141 {NAND_CMD_RNDIN, NAND_CMD_NONE, 2, 0},
142 {NAND_CMD_ERASE1, NAND_CMD_ERASE2, 3, ZYNQ_NAND_CMD_PHASE},
143 {NAND_CMD_RESET, NAND_CMD_NONE, 0, 0},
144 {NAND_CMD_PARAM, NAND_CMD_NONE, 1, 0},
145 {NAND_CMD_GET_FEATURES, NAND_CMD_NONE, 1, 0},
146 {NAND_CMD_SET_FEATURES, NAND_CMD_NONE, 1, 0},
147 {NAND_CMD_NONE, NAND_CMD_NONE, 0, 0},
148 /* Add all the flash commands supported by the flash device */
151 /* Define default oob placement schemes for large and small page devices */
152 static struct nand_ecclayout nand_oob_16 = {
156 { .offset = 8, .length = 8 }
160 static struct nand_ecclayout nand_oob_64 = {
163 52, 53, 54, 55, 56, 57,
164 58, 59, 60, 61, 62, 63},
166 { .offset = 2, .length = 50 }
170 static struct nand_ecclayout ondie_nand_oob_64 = {
174 8, 9, 10, 11, 12, 13, 14, 15,
175 24, 25, 26, 27, 28, 29, 30, 31,
176 40, 41, 42, 43, 44, 45, 46, 47,
177 56, 57, 58, 59, 60, 61, 62, 63
181 { .offset = 4, .length = 4 },
182 { .offset = 20, .length = 4 },
183 { .offset = 36, .length = 4 },
184 { .offset = 52, .length = 4 }
188 /* bbt decriptors for chips with on-die ECC and
189 chips with 64-byte OOB */
190 static u8 bbt_pattern[] = {'B', 'b', 't', '0' };
191 static u8 mirror_pattern[] = {'1', 't', 'b', 'B' };
193 static struct nand_bbt_descr bbt_main_descr = {
194 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
195 NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
200 .pattern = bbt_pattern
203 static struct nand_bbt_descr bbt_mirror_descr = {
204 .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
205 NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
210 .pattern = mirror_pattern
214 * zynq_nand_waitfor_ecc_completion - Wait for ECC completion
216 * returns: status for command completion, -1 for Timeout
218 static int zynq_nand_waitfor_ecc_completion(void)
220 unsigned long timeout;
225 status = readl(&zynq_nand_smc_base->esr);
226 while (status & ZYNQ_NAND_ECC_BUSY) {
227 status = readl(&zynq_nand_smc_base->esr);
238 * zynq_nand_init_nand_flash - Initialize NAND controller
239 * @option: Device property flags
241 * This function initializes the NAND flash interface on the NAND controller.
243 * returns: 0 on success or error value on failure
245 static int zynq_nand_init_nand_flash(int option)
249 /* disable interrupts */
250 writel(ZYNQ_NAND_CLR_CONFIG, &zynq_nand_smc_base->cfr);
251 #ifndef CONFIG_NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
252 /* Initialize the NAND interface by setting cycles and operation mode */
253 writel(ZYNQ_NAND_SET_CYCLES, &zynq_nand_smc_base->scr);
255 if (option & NAND_BUSWIDTH_16)
256 writel(ZYNQ_NAND_SET_OPMODE_16BIT, &zynq_nand_smc_base->sor);
258 writel(ZYNQ_NAND_SET_OPMODE_8BIT, &zynq_nand_smc_base->sor);
260 writel(ZYNQ_NAND_DIRECT_CMD, &zynq_nand_smc_base->dcr);
262 /* Wait till the ECC operation is complete */
263 status = zynq_nand_waitfor_ecc_completion();
265 printf("%s: Timeout\n", __func__);
269 /* Set the command1 and command2 register */
270 writel(ZYNQ_NAND_ECC_CMD1, &zynq_nand_smc_base->emcmd1r);
271 writel(ZYNQ_NAND_ECC_CMD2, &zynq_nand_smc_base->emcmd2r);
277 * zynq_nand_calculate_hwecc - Calculate Hardware ECC
278 * @mtd: Pointer to the mtd_info structure
279 * @data: Pointer to the page data
280 * @ecc_code: Pointer to the ECC buffer where ECC data needs to be stored
282 * This function retrieves the Hardware ECC data from the controller and returns
283 * ECC data back to the MTD subsystem.
285 * returns: 0 on success or error value on failure
287 static int zynq_nand_calculate_hwecc(struct mtd_info *mtd, const u8 *data,
291 u8 ecc_reg, ecc_byte;
294 /* Wait till the ECC operation is complete */
295 ecc_status = zynq_nand_waitfor_ecc_completion();
296 if (ecc_status < 0) {
297 printf("%s: Timeout\n", __func__);
301 for (ecc_reg = 0; ecc_reg < 4; ecc_reg++) {
302 /* Read ECC value for each block */
303 ecc_value = readl(&zynq_nand_smc_base->eval0r + ecc_reg);
305 /* Get the ecc status from ecc read value */
306 ecc_status = (ecc_value >> 24) & 0xFF;
308 /* ECC value valid */
309 if (ecc_status & ZYNQ_NAND_ECC_STATUS) {
310 for (ecc_byte = 0; ecc_byte < 3; ecc_byte++) {
311 /* Copy ECC bytes to MTD buffer */
312 *ecc_code = ecc_value & 0xFF;
313 ecc_value = ecc_value >> 8;
317 debug("%s: ecc status failed\n", __func__);
325 * onehot - onehot function
326 * @value: value to check for onehot
328 * This function checks whether a value is onehot or not.
329 * onehot is if and only if one bit is set.
331 * FIXME: Try to move this in common.h
333 static bool onehot(unsigned short value)
337 onehot = value && !(value & (value - 1));
342 * zynq_nand_correct_data - ECC correction function
343 * @mtd: Pointer to the mtd_info structure
344 * @buf: Pointer to the page data
345 * @read_ecc: Pointer to the ECC value read from spare data area
346 * @calc_ecc: Pointer to the calculated ECC value
348 * This function corrects the ECC single bit errors & detects 2-bit errors.
350 * returns: 0 if no ECC errors found
351 * 1 if single bit error found and corrected.
352 * -1 if multiple ECC errors found.
354 static int zynq_nand_correct_data(struct mtd_info *mtd, unsigned char *buf,
355 unsigned char *read_ecc, unsigned char *calc_ecc)
357 unsigned char bit_addr;
358 unsigned int byte_addr;
359 unsigned short ecc_odd, ecc_even;
360 unsigned short read_ecc_lower, read_ecc_upper;
361 unsigned short calc_ecc_lower, calc_ecc_upper;
363 read_ecc_lower = (read_ecc[0] | (read_ecc[1] << 8)) & 0xfff;
364 read_ecc_upper = ((read_ecc[1] >> 4) | (read_ecc[2] << 4)) & 0xfff;
366 calc_ecc_lower = (calc_ecc[0] | (calc_ecc[1] << 8)) & 0xfff;
367 calc_ecc_upper = ((calc_ecc[1] >> 4) | (calc_ecc[2] << 4)) & 0xfff;
369 ecc_odd = read_ecc_lower ^ calc_ecc_lower;
370 ecc_even = read_ecc_upper ^ calc_ecc_upper;
372 if ((ecc_odd == 0) && (ecc_even == 0))
373 return 0; /* no error */
375 if (ecc_odd == (~ecc_even & 0xfff)) {
376 /* bits [11:3] of error code is byte offset */
377 byte_addr = (ecc_odd >> 3) & 0x1ff;
378 /* bits [2:0] of error code is bit offset */
379 bit_addr = ecc_odd & 0x7;
380 /* Toggling error bit */
381 buf[byte_addr] ^= (1 << bit_addr);
385 if (onehot(ecc_odd | ecc_even))
386 return 1; /* one error in parity */
388 return -1; /* Uncorrectable error */
392 * zynq_nand_read_oob - [REPLACABLE] the most common OOB data read function
393 * @mtd: mtd info structure
394 * @chip: nand chip info structure
395 * @page: page number to read
396 * @sndcmd: flag whether to issue read command or not
398 static int zynq_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
401 unsigned long data_phase_addr = 0;
405 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
408 chip->read_buf(mtd, p, (mtd->oobsize - data_width));
409 p += mtd->oobsize - data_width;
411 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
412 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
413 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
414 chip->read_buf(mtd, p, data_width);
420 * zynq_nand_write_oob - [REPLACABLE] the most common OOB data write function
421 * @mtd: mtd info structure
422 * @chip: nand chip info structure
423 * @page: page number to write
425 static int zynq_nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
428 int status = 0, data_width = 4;
429 const u8 *buf = chip->oob_poi;
430 unsigned long data_phase_addr = 0;
432 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
434 chip->write_buf(mtd, buf, (mtd->oobsize - data_width));
435 buf += mtd->oobsize - data_width;
437 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
438 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
439 data_phase_addr |= (1 << END_CMD_VALID_SHIFT);
440 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
441 chip->write_buf(mtd, buf, data_width);
443 /* Send command to program the OOB data */
444 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
445 status = chip->waitfunc(mtd, chip);
447 return status & NAND_STATUS_FAIL ? -EIO : 0;
451 * zynq_nand_read_page_raw - [Intern] read raw page data without ecc
452 * @mtd: mtd info structure
453 * @chip: nand chip info structure
454 * @buf: buffer to store read data
455 * @oob_required: must write chip->oob_poi to OOB
456 * @page: page number to read
458 static int zynq_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
459 u8 *buf, int oob_required, int page)
461 unsigned long data_width = 4;
462 unsigned long data_phase_addr = 0;
465 chip->read_buf(mtd, buf, mtd->writesize);
468 chip->read_buf(mtd, p, (mtd->oobsize - data_width));
469 p += (mtd->oobsize - data_width);
471 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
472 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
473 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
475 chip->read_buf(mtd, p, data_width);
479 static int zynq_nand_read_page_raw_nooob(struct mtd_info *mtd,
480 struct nand_chip *chip, u8 *buf, int oob_required, int page)
482 chip->read_buf(mtd, buf, mtd->writesize);
486 static int zynq_nand_read_subpage_raw(struct mtd_info *mtd,
487 struct nand_chip *chip, u32 data_offs,
488 u32 readlen, u8 *buf, int page)
490 if (data_offs != 0) {
491 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_offs, -1);
494 chip->read_buf(mtd, buf, readlen);
500 * zynq_nand_write_page_raw - [Intern] raw page write function
501 * @mtd: mtd info structure
502 * @chip: nand chip info structure
504 * @oob_required: must write chip->oob_poi to OOB
506 static int zynq_nand_write_page_raw(struct mtd_info *mtd,
507 struct nand_chip *chip, const u8 *buf, int oob_required, int page)
509 unsigned long data_width = 4;
510 unsigned long data_phase_addr = 0;
513 chip->write_buf(mtd, buf, mtd->writesize);
516 chip->write_buf(mtd, p, (mtd->oobsize - data_width));
517 p += (mtd->oobsize - data_width);
519 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
520 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
521 data_phase_addr |= (1 << END_CMD_VALID_SHIFT);
522 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
524 chip->write_buf(mtd, p, data_width);
530 * nand_write_page_hwecc - Hardware ECC based page write function
531 * @mtd: Pointer to the mtd info structure
532 * @chip: Pointer to the NAND chip info structure
533 * @buf: Pointer to the data buffer
534 * @oob_required: must write chip->oob_poi to OOB
536 * This functions writes data and hardware generated ECC values in to the page.
538 static int zynq_nand_write_page_hwecc(struct mtd_info *mtd,
539 struct nand_chip *chip, const u8 *buf, int oob_required, int page)
541 int i, eccsteps, eccsize = chip->ecc.size;
542 u8 *ecc_calc = chip->buffers->ecccalc;
544 u32 *eccpos = chip->ecc.layout->eccpos;
545 unsigned long data_phase_addr = 0;
546 unsigned long data_width = 4;
549 for (eccsteps = chip->ecc.steps; (eccsteps - 1); eccsteps--) {
550 chip->write_buf(mtd, p, eccsize);
553 chip->write_buf(mtd, p, (eccsize - data_width));
554 p += eccsize - data_width;
556 /* Set ECC Last bit to 1 */
557 data_phase_addr = (unsigned long) chip->IO_ADDR_W;
558 data_phase_addr |= ZYNQ_NAND_ECC_LAST;
559 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
560 chip->write_buf(mtd, p, data_width);
562 /* Wait for ECC to be calculated and read the error values */
564 chip->ecc.calculate(mtd, p, &ecc_calc[0]);
566 for (i = 0; i < chip->ecc.total; i++)
567 chip->oob_poi[eccpos[i]] = ~(ecc_calc[i]);
569 /* Clear ECC last bit */
570 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
571 data_phase_addr &= ~ZYNQ_NAND_ECC_LAST;
572 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
574 /* Write the spare area with ECC bytes */
575 oob_ptr = chip->oob_poi;
576 chip->write_buf(mtd, oob_ptr, (mtd->oobsize - data_width));
578 data_phase_addr = (unsigned long)chip->IO_ADDR_W;
579 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
580 data_phase_addr |= (1 << END_CMD_VALID_SHIFT);
581 chip->IO_ADDR_W = (void __iomem *)data_phase_addr;
582 oob_ptr += (mtd->oobsize - data_width);
583 chip->write_buf(mtd, oob_ptr, data_width);
589 * zynq_nand_write_page_swecc - [REPLACABLE] software ecc based page
591 * @mtd: mtd info structure
592 * @chip: nand chip info structure
594 * @oob_required: must write chip->oob_poi to OOB
596 static int zynq_nand_write_page_swecc(struct mtd_info *mtd,
597 struct nand_chip *chip, const u8 *buf, int oob_required, int page)
599 int i, eccsize = chip->ecc.size;
600 int eccbytes = chip->ecc.bytes;
601 int eccsteps = chip->ecc.steps;
602 u8 *ecc_calc = chip->buffers->ecccalc;
604 u32 *eccpos = chip->ecc.layout->eccpos;
606 /* Software ecc calculation */
607 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
608 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
610 for (i = 0; i < chip->ecc.total; i++)
611 chip->oob_poi[eccpos[i]] = ecc_calc[i];
613 return chip->ecc.write_page_raw(mtd, chip, buf, 1, page);
617 * nand_read_page_hwecc - Hardware ECC based page read function
618 * @mtd: Pointer to the mtd info structure
619 * @chip: Pointer to the NAND chip info structure
620 * @buf: Pointer to the buffer to store read data
621 * @oob_required: must write chip->oob_poi to OOB
622 * @page: page number to read
624 * This functions reads data and checks the data integrity by comparing hardware
625 * generated ECC values and read ECC values from spare area.
627 * returns: 0 always and updates ECC operation status in to MTD structure
629 static int zynq_nand_read_page_hwecc(struct mtd_info *mtd,
630 struct nand_chip *chip, u8 *buf, int oob_required, int page)
632 int i, stat, eccsteps, eccsize = chip->ecc.size;
633 int eccbytes = chip->ecc.bytes;
635 u8 *ecc_calc = chip->buffers->ecccalc;
636 u8 *ecc_code = chip->buffers->ecccode;
637 u32 *eccpos = chip->ecc.layout->eccpos;
638 unsigned long data_phase_addr = 0;
639 unsigned long data_width = 4;
642 for (eccsteps = chip->ecc.steps; (eccsteps - 1); eccsteps--) {
643 chip->read_buf(mtd, p, eccsize);
646 chip->read_buf(mtd, p, (eccsize - data_width));
647 p += eccsize - data_width;
649 /* Set ECC Last bit to 1 */
650 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
651 data_phase_addr |= ZYNQ_NAND_ECC_LAST;
652 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
653 chip->read_buf(mtd, p, data_width);
655 /* Read the calculated ECC value */
657 chip->ecc.calculate(mtd, p, &ecc_calc[0]);
659 /* Clear ECC last bit */
660 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
661 data_phase_addr &= ~ZYNQ_NAND_ECC_LAST;
662 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
664 /* Read the stored ECC value */
665 oob_ptr = chip->oob_poi;
666 chip->read_buf(mtd, oob_ptr, (mtd->oobsize - data_width));
668 /* de-assert chip select */
669 data_phase_addr = (unsigned long)chip->IO_ADDR_R;
670 data_phase_addr |= ZYNQ_NAND_CLEAR_CS;
671 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
673 oob_ptr += (mtd->oobsize - data_width);
674 chip->read_buf(mtd, oob_ptr, data_width);
676 for (i = 0; i < chip->ecc.total; i++)
677 ecc_code[i] = ~(chip->oob_poi[eccpos[i]]);
679 eccsteps = chip->ecc.steps;
682 /* Check ECC error for all blocks and correct if it is correctable */
683 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
684 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
686 mtd->ecc_stats.failed++;
688 mtd->ecc_stats.corrected += stat;
694 * zynq_nand_read_page_swecc - [REPLACABLE] software ecc based page
696 * @mtd: mtd info structure
697 * @chip: nand chip info structure
698 * @buf: buffer to store read data
699 * @page: page number to read
701 static int zynq_nand_read_page_swecc(struct mtd_info *mtd,
702 struct nand_chip *chip, u8 *buf, int oob_required, int page)
704 int i, eccsize = chip->ecc.size;
705 int eccbytes = chip->ecc.bytes;
706 int eccsteps = chip->ecc.steps;
708 u8 *ecc_calc = chip->buffers->ecccalc;
709 u8 *ecc_code = chip->buffers->ecccode;
710 u32 *eccpos = chip->ecc.layout->eccpos;
712 chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
714 for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
715 chip->ecc.calculate(mtd, p, &ecc_calc[i]);
717 for (i = 0; i < chip->ecc.total; i++)
718 ecc_code[i] = chip->oob_poi[eccpos[i]];
720 eccsteps = chip->ecc.steps;
723 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_select_chip - Select the flash device
737 * @mtd: Pointer to the mtd_info structure
738 * @chip: Chip number to be selected
740 * This function is empty as the NAND controller handles chip select line
741 * internally based on the chip address passed in command and data phase.
743 static void zynq_nand_select_chip(struct mtd_info *mtd, int chip)
745 /* Not support multiple chips yet */
749 * zynq_nand_cmd_function - Send command to NAND device
750 * @mtd: Pointer to the mtd_info structure
751 * @command: The command to be sent to the flash device
752 * @column: The column address for this command, -1 if none
753 * @page_addr: The page address for this command, -1 if none
755 static void zynq_nand_cmd_function(struct mtd_info *mtd, unsigned int command,
756 int column, int page_addr)
758 struct nand_chip *chip = mtd->priv;
759 const struct zynq_nand_command_format *curr_cmd = NULL;
760 struct zynq_nand_info *xnand = (struct zynq_nand_info *)chip->priv;
762 unsigned long cmd_data = 0;
763 unsigned long cmd_phase_addr = 0;
764 unsigned long data_phase_addr = 0;
766 u8 end_cmd_valid = 0;
769 if (xnand->end_cmd_pending) {
770 /* Check for end command if this command request is same as the
771 * pending command then return
773 if (xnand->end_cmd == command) {
775 xnand->end_cmd_pending = 0;
780 /* Emulate NAND_CMD_READOOB for large page device */
781 if ((mtd->writesize > ZYNQ_NAND_ECC_SIZE) &&
782 (command == NAND_CMD_READOOB)) {
783 column += mtd->writesize;
784 command = NAND_CMD_READ0;
787 /* Get the command format */
788 for (index = 0; index < ARRAY_SIZE(zynq_nand_commands); index++)
789 if (command == zynq_nand_commands[index].start_cmd)
792 if (index == ARRAY_SIZE(zynq_nand_commands)) {
793 printf("%s: Unsupported start cmd %02x\n", __func__, command);
796 curr_cmd = &zynq_nand_commands[index];
798 /* Clear interrupt */
799 writel(ZYNQ_MEMC_CLRCR_INT_CLR1, &zynq_nand_smc_base->cfr);
801 /* Get the command phase address */
802 if (curr_cmd->end_cmd_valid == ZYNQ_NAND_CMD_PHASE)
805 if (curr_cmd->end_cmd == NAND_CMD_NONE)
808 end_cmd = curr_cmd->end_cmd;
810 cmd_phase_addr = (unsigned long)xnand->nand_base |
811 (curr_cmd->addr_cycles << ADDR_CYCLES_SHIFT) |
812 (end_cmd_valid << END_CMD_VALID_SHIFT) |
814 (end_cmd << END_CMD_SHIFT) |
815 (curr_cmd->start_cmd << START_CMD_SHIFT);
817 cmd_addr = (void __iomem *)cmd_phase_addr;
819 /* Get the data phase address */
822 data_phase_addr = (unsigned long)xnand->nand_base |
823 (0x0 << CLEAR_CS_SHIFT) |
824 (end_cmd_valid << END_CMD_VALID_SHIFT) |
826 (end_cmd << END_CMD_SHIFT) |
827 (0x0 << ECC_LAST_SHIFT);
829 chip->IO_ADDR_R = (void __iomem *)data_phase_addr;
830 chip->IO_ADDR_W = chip->IO_ADDR_R;
832 /* Command phase AXI Read & Write */
833 if (column != -1 && page_addr != -1) {
834 /* Adjust columns for 16 bit bus width */
835 if (chip->options & NAND_BUSWIDTH_16)
838 if (mtd->writesize > ZYNQ_NAND_ECC_SIZE) {
839 cmd_data |= page_addr << 16;
840 /* Another address cycle for devices > 128MiB */
841 if (chip->chipsize > (128 << 20)) {
842 writel(cmd_data, cmd_addr);
843 cmd_data = (page_addr >> 16);
846 cmd_data |= page_addr << 8;
848 } else if (page_addr != -1) { /* Erase */
849 cmd_data = page_addr;
850 } else if (column != -1) { /* Change read/write column, read id etc */
851 /* Adjust columns for 16 bit bus width */
852 if ((chip->options & NAND_BUSWIDTH_16) &&
853 ((command == NAND_CMD_READ0) ||
854 (command == NAND_CMD_SEQIN) ||
855 (command == NAND_CMD_RNDOUT) ||
856 (command == NAND_CMD_RNDIN)))
861 writel(cmd_data, cmd_addr);
863 if (curr_cmd->end_cmd_valid) {
864 xnand->end_cmd = curr_cmd->end_cmd;
865 xnand->end_cmd_pending = 1;
870 if ((command == NAND_CMD_READ0) ||
871 (command == NAND_CMD_RESET) ||
872 (command == NAND_CMD_PARAM) ||
873 (command == NAND_CMD_GET_FEATURES))
874 /* wait until command is processed */
875 nand_wait_ready(mtd);
879 * zynq_nand_read_buf - read chip data into buffer
880 * @mtd: MTD device structure
881 * @buf: buffer to store date
882 * @len: number of bytes to read
884 static void zynq_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
886 struct nand_chip *chip = mtd->priv;
888 /* Make sure that buf is 32 bit aligned */
889 if (((unsigned long)buf & 0x3) != 0) {
890 if (((unsigned long)buf & 0x1) != 0) {
892 *buf = readb(chip->IO_ADDR_R);
898 if (((unsigned long)buf & 0x3) != 0) {
900 *(u16 *)buf = readw(chip->IO_ADDR_R);
907 /* copy aligned data */
909 *(u32 *)buf = readl(chip->IO_ADDR_R);
914 /* mop up any remaining bytes */
917 *(u16 *)buf = readw(chip->IO_ADDR_R);
922 *buf = readb(chip->IO_ADDR_R);
927 * zynq_nand_write_buf - write buffer to chip
928 * @mtd: MTD device structure
930 * @len: number of bytes to write
932 static void zynq_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
934 struct nand_chip *chip = mtd->priv;
935 const u32 *nand = chip->IO_ADDR_W;
937 /* Make sure that buf is 32 bit aligned */
938 if (((unsigned long)buf & 0x3) != 0) {
939 if (((unsigned long)buf & 0x1) != 0) {
947 if (((unsigned long)buf & 0x3) != 0) {
949 writew(*(u16 *)buf, nand);
956 /* copy aligned data */
958 writel(*(u32 *)buf, nand);
963 /* mop up any remaining bytes */
966 writew(*(u16 *)buf, nand);
977 * zynq_nand_device_ready - Check device ready/busy line
978 * @mtd: Pointer to the mtd_info structure
980 * returns: 0 on busy or 1 on ready state
982 static int zynq_nand_device_ready(struct mtd_info *mtd)
986 csr_val = readl(&zynq_nand_smc_base->csr);
987 /* Check the raw_int_status1 bit */
988 if (csr_val & ZYNQ_MEMC_SR_RAW_INT_ST1) {
989 /* Clear the interrupt condition */
990 writel(ZYNQ_MEMC_SR_INT_ST1, &zynq_nand_smc_base->cfr);
997 int zynq_nand_init(struct nand_chip *nand_chip, int devnum)
999 struct zynq_nand_info *xnand;
1000 struct mtd_info *mtd;
1001 unsigned long ecc_page_size;
1002 u8 maf_id, dev_id, i;
1004 u8 set_feature[4] = {ONDIE_ECC_FEATURE_ENABLE, 0x00, 0x00, 0x00};
1005 unsigned long ecc_cfg;
1006 int ondie_ecc_enabled = 0;
1009 xnand = calloc(1, sizeof(struct zynq_nand_info));
1011 printf("%s: failed to allocate\n", __func__);
1015 xnand->nand_base = (void __iomem *)ZYNQ_NAND_BASEADDR;
1016 mtd = get_nand_dev_by_index(0);
1018 nand_chip->priv = xnand;
1019 mtd->priv = nand_chip;
1021 /* Set address of NAND IO lines */
1022 nand_chip->IO_ADDR_R = xnand->nand_base;
1023 nand_chip->IO_ADDR_W = xnand->nand_base;
1025 /* Set the driver entry points for MTD */
1026 nand_chip->cmdfunc = zynq_nand_cmd_function;
1027 nand_chip->dev_ready = zynq_nand_device_ready;
1028 nand_chip->select_chip = zynq_nand_select_chip;
1030 /* If we don't set this delay driver sets 20us by default */
1031 nand_chip->chip_delay = 30;
1033 /* Buffer read/write routines */
1034 nand_chip->read_buf = zynq_nand_read_buf;
1035 nand_chip->write_buf = zynq_nand_write_buf;
1037 nand_chip->bbt_options = NAND_BBT_USE_FLASH;
1039 /* Initialize the NAND flash interface on NAND controller */
1040 if (zynq_nand_init_nand_flash(nand_chip->options) < 0) {
1041 printf("%s: nand flash init failed\n", __func__);
1045 /* first scan to find the device and get the page size */
1046 if (nand_scan_ident(mtd, 1, NULL)) {
1047 printf("%s: nand_scan_ident failed\n", __func__);
1050 /* Send the command for reading device ID */
1051 nand_chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1052 nand_chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
1054 /* Read manufacturer and device IDs */
1055 maf_id = nand_chip->read_byte(mtd);
1056 dev_id = nand_chip->read_byte(mtd);
1058 if ((maf_id == 0x2c) && ((dev_id == 0xf1) ||
1059 (dev_id == 0xa1) || (dev_id == 0xb1) ||
1060 (dev_id == 0xaa) || (dev_id == 0xba) ||
1061 (dev_id == 0xda) || (dev_id == 0xca) ||
1062 (dev_id == 0xac) || (dev_id == 0xbc) ||
1063 (dev_id == 0xdc) || (dev_id == 0xcc) ||
1064 (dev_id == 0xa3) || (dev_id == 0xb3) ||
1065 (dev_id == 0xd3) || (dev_id == 0xc3))) {
1066 nand_chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES,
1067 ONDIE_ECC_FEATURE_ADDR, -1);
1068 for (i = 0; i < 4; i++)
1069 writeb(set_feature[i], nand_chip->IO_ADDR_W);
1071 /* Wait for 1us after writing data with SET_FEATURES command */
1074 nand_chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES,
1075 ONDIE_ECC_FEATURE_ADDR, -1);
1076 nand_chip->read_buf(mtd, get_feature, 4);
1078 if (get_feature[0] & ONDIE_ECC_FEATURE_ENABLE) {
1079 debug("%s: OnDie ECC flash\n", __func__);
1080 ondie_ecc_enabled = 1;
1082 printf("%s: Unable to detect OnDie ECC\n", __func__);
1086 if (ondie_ecc_enabled) {
1087 /* Bypass the controller ECC block */
1088 ecc_cfg = readl(&zynq_nand_smc_base->emcr);
1089 ecc_cfg &= ~ZYNQ_MEMC_NAND_ECC_MODE_MASK;
1090 writel(ecc_cfg, &zynq_nand_smc_base->emcr);
1092 /* The software ECC routines won't work
1093 * with the SMC controller
1095 nand_chip->ecc.mode = NAND_ECC_HW;
1096 nand_chip->ecc.strength = 1;
1097 nand_chip->ecc.read_page = zynq_nand_read_page_raw_nooob;
1098 nand_chip->ecc.read_subpage = zynq_nand_read_subpage_raw;
1099 nand_chip->ecc.write_page = zynq_nand_write_page_raw;
1100 nand_chip->ecc.read_page_raw = zynq_nand_read_page_raw;
1101 nand_chip->ecc.write_page_raw = zynq_nand_write_page_raw;
1102 nand_chip->ecc.read_oob = zynq_nand_read_oob;
1103 nand_chip->ecc.write_oob = zynq_nand_write_oob;
1104 nand_chip->ecc.size = mtd->writesize;
1105 nand_chip->ecc.bytes = 0;
1107 /* NAND with on-die ECC supports subpage reads */
1108 nand_chip->options |= NAND_SUBPAGE_READ;
1110 /* On-Die ECC spare bytes offset 8 is used for ECC codes */
1111 if (ondie_ecc_enabled) {
1112 nand_chip->ecc.layout = &ondie_nand_oob_64;
1113 /* Use the BBT pattern descriptors */
1114 nand_chip->bbt_td = &bbt_main_descr;
1115 nand_chip->bbt_md = &bbt_mirror_descr;
1118 /* Hardware ECC generates 3 bytes ECC code for each 512 bytes */
1119 nand_chip->ecc.mode = NAND_ECC_HW;
1120 nand_chip->ecc.strength = 1;
1121 nand_chip->ecc.size = ZYNQ_NAND_ECC_SIZE;
1122 nand_chip->ecc.bytes = 3;
1123 nand_chip->ecc.calculate = zynq_nand_calculate_hwecc;
1124 nand_chip->ecc.correct = zynq_nand_correct_data;
1125 nand_chip->ecc.hwctl = NULL;
1126 nand_chip->ecc.read_page = zynq_nand_read_page_hwecc;
1127 nand_chip->ecc.write_page = zynq_nand_write_page_hwecc;
1128 nand_chip->ecc.read_page_raw = zynq_nand_read_page_raw;
1129 nand_chip->ecc.write_page_raw = zynq_nand_write_page_raw;
1130 nand_chip->ecc.read_oob = zynq_nand_read_oob;
1131 nand_chip->ecc.write_oob = zynq_nand_write_oob;
1133 switch (mtd->writesize) {
1135 ecc_page_size = 0x1;
1136 /* Set the ECC memory config register */
1137 writel((ZYNQ_NAND_ECC_CONFIG | ecc_page_size),
1138 &zynq_nand_smc_base->emcr);
1141 ecc_page_size = 0x2;
1142 /* Set the ECC memory config register */
1143 writel((ZYNQ_NAND_ECC_CONFIG | ecc_page_size),
1144 &zynq_nand_smc_base->emcr);
1147 ecc_page_size = 0x3;
1148 /* Set the ECC memory config register */
1149 writel((ZYNQ_NAND_ECC_CONFIG | ecc_page_size),
1150 &zynq_nand_smc_base->emcr);
1153 nand_chip->ecc.mode = NAND_ECC_SOFT;
1154 nand_chip->ecc.calculate = nand_calculate_ecc;
1155 nand_chip->ecc.correct = nand_correct_data;
1156 nand_chip->ecc.read_page = zynq_nand_read_page_swecc;
1157 nand_chip->ecc.write_page = zynq_nand_write_page_swecc;
1158 nand_chip->ecc.size = 256;
1162 if (mtd->oobsize == 16)
1163 nand_chip->ecc.layout = &nand_oob_16;
1164 else if (mtd->oobsize == 64)
1165 nand_chip->ecc.layout = &nand_oob_64;
1167 printf("%s: No oob layout found\n", __func__);
1170 /* Second phase scan */
1171 if (nand_scan_tail(mtd)) {
1172 printf("%s: nand_scan_tail failed\n", __func__);
1175 if (nand_register(devnum, mtd))
1183 #ifdef CONFIG_SYS_NAND_SELF_INIT
1184 static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE];
1186 void __weak board_nand_init(void)
1188 struct nand_chip *nand = &nand_chip[0];
1190 if (zynq_nand_init(nand, 0))
1191 puts("ZYNQ NAND init failed\n");