Lines Matching refs:mtd

312 static int zynq_nand_calculate_hwecc(struct mtd_info *mtd, const u8 *data,  in zynq_nand_calculate_hwecc()  argument
379 static int zynq_nand_correct_data(struct mtd_info *mtd, unsigned char *buf, in zynq_nand_correct_data() argument
423 static int zynq_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, in zynq_nand_read_oob() argument
430 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page); in zynq_nand_read_oob()
433 chip->read_buf(mtd, p, (mtd->oobsize - data_width)); in zynq_nand_read_oob()
434 p += mtd->oobsize - data_width; in zynq_nand_read_oob()
439 chip->read_buf(mtd, p, data_width); in zynq_nand_read_oob()
450 static int zynq_nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip, in zynq_nand_write_oob() argument
457 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page); in zynq_nand_write_oob()
459 chip->write_buf(mtd, buf, (mtd->oobsize - data_width)); in zynq_nand_write_oob()
460 buf += mtd->oobsize - data_width; in zynq_nand_write_oob()
466 chip->write_buf(mtd, buf, data_width); in zynq_nand_write_oob()
469 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); in zynq_nand_write_oob()
470 status = chip->waitfunc(mtd, chip); in zynq_nand_write_oob()
483 static int zynq_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, in zynq_nand_read_page_raw() argument
490 chip->read_buf(mtd, buf, mtd->writesize); in zynq_nand_read_page_raw()
493 chip->read_buf(mtd, p, (mtd->oobsize - data_width)); in zynq_nand_read_page_raw()
494 p += (mtd->oobsize - data_width); in zynq_nand_read_page_raw()
500 chip->read_buf(mtd, p, data_width); in zynq_nand_read_page_raw()
504 static int zynq_nand_read_page_raw_nooob(struct mtd_info *mtd, in zynq_nand_read_page_raw_nooob() argument
507 chip->read_buf(mtd, buf, mtd->writesize); in zynq_nand_read_page_raw_nooob()
511 static int zynq_nand_read_subpage_raw(struct mtd_info *mtd, in zynq_nand_read_subpage_raw() argument
516 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_offs, -1); in zynq_nand_read_subpage_raw()
519 chip->read_buf(mtd, buf, readlen); in zynq_nand_read_subpage_raw()
531 static int zynq_nand_write_page_raw(struct mtd_info *mtd, in zynq_nand_write_page_raw() argument
538 chip->write_buf(mtd, buf, mtd->writesize); in zynq_nand_write_page_raw()
541 chip->write_buf(mtd, p, (mtd->oobsize - data_width)); in zynq_nand_write_page_raw()
542 p += (mtd->oobsize - data_width); in zynq_nand_write_page_raw()
549 chip->write_buf(mtd, p, data_width); in zynq_nand_write_page_raw()
563 static int zynq_nand_write_page_hwecc(struct mtd_info *mtd, in zynq_nand_write_page_hwecc() argument
575 chip->write_buf(mtd, p, eccsize); in zynq_nand_write_page_hwecc()
578 chip->write_buf(mtd, p, (eccsize - data_width)); in zynq_nand_write_page_hwecc()
585 chip->write_buf(mtd, p, data_width); in zynq_nand_write_page_hwecc()
589 chip->ecc.calculate(mtd, p, &ecc_calc[0]); in zynq_nand_write_page_hwecc()
601 chip->write_buf(mtd, oob_ptr, (mtd->oobsize - data_width)); in zynq_nand_write_page_hwecc()
607 oob_ptr += (mtd->oobsize - data_width); in zynq_nand_write_page_hwecc()
608 chip->write_buf(mtd, oob_ptr, data_width); in zynq_nand_write_page_hwecc()
621 static int zynq_nand_write_page_swecc(struct mtd_info *mtd, in zynq_nand_write_page_swecc() argument
633 chip->ecc.calculate(mtd, p, &ecc_calc[i]); in zynq_nand_write_page_swecc()
638 return chip->ecc.write_page_raw(mtd, chip, buf, 1, page); in zynq_nand_write_page_swecc()
654 static int zynq_nand_read_page_hwecc(struct mtd_info *mtd, in zynq_nand_read_page_hwecc() argument
668 chip->read_buf(mtd, p, eccsize); in zynq_nand_read_page_hwecc()
671 chip->read_buf(mtd, p, (eccsize - data_width)); in zynq_nand_read_page_hwecc()
678 chip->read_buf(mtd, p, data_width); in zynq_nand_read_page_hwecc()
682 chip->ecc.calculate(mtd, p, &ecc_calc[0]); in zynq_nand_read_page_hwecc()
691 chip->read_buf(mtd, oob_ptr, (mtd->oobsize - data_width)); in zynq_nand_read_page_hwecc()
698 oob_ptr += (mtd->oobsize - data_width); in zynq_nand_read_page_hwecc()
699 chip->read_buf(mtd, oob_ptr, data_width); in zynq_nand_read_page_hwecc()
709 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); in zynq_nand_read_page_hwecc()
711 mtd->ecc_stats.failed++; in zynq_nand_read_page_hwecc()
713 mtd->ecc_stats.corrected += stat; in zynq_nand_read_page_hwecc()
726 static int zynq_nand_read_page_swecc(struct mtd_info *mtd, in zynq_nand_read_page_swecc() argument
737 chip->ecc.read_page_raw(mtd, chip, buf, 1, page); in zynq_nand_read_page_swecc()
740 chip->ecc.calculate(mtd, p, &ecc_calc[i]); in zynq_nand_read_page_swecc()
751 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); in zynq_nand_read_page_swecc()
753 mtd->ecc_stats.failed++; in zynq_nand_read_page_swecc()
755 mtd->ecc_stats.corrected += stat; in zynq_nand_read_page_swecc()
768 static void zynq_nand_select_chip(struct mtd_info *mtd, int chip) in zynq_nand_select_chip() argument
780 static void zynq_nand_cmd_function(struct mtd_info *mtd, unsigned int command, in zynq_nand_cmd_function() argument
783 struct nand_chip *chip = mtd->priv; in zynq_nand_cmd_function()
807 if ((mtd->writesize > ZYNQ_NAND_ECC_SIZE) && in zynq_nand_cmd_function()
809 column += mtd->writesize; in zynq_nand_cmd_function()
874 if (mtd->writesize > ZYNQ_NAND_ECC_SIZE) { in zynq_nand_cmd_function()
911 nand_wait_ready(mtd); in zynq_nand_cmd_function()
920 static void zynq_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len) in zynq_nand_read_buf() argument
922 struct nand_chip *chip = mtd->priv; in zynq_nand_read_buf()
968 static void zynq_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len) in zynq_nand_write_buf() argument
970 struct nand_chip *chip = mtd->priv; in zynq_nand_write_buf()
1018 static int zynq_nand_device_ready(struct mtd_info *mtd) in zynq_nand_device_ready() argument
1053 struct mtd_info *mtd; in zynq_nand_init() local
1070 mtd = nand_to_mtd(nand_chip); in zynq_nand_init()
1073 mtd->priv = nand_chip; in zynq_nand_init()
1110 if (nand_scan_ident(mtd, 1, NULL)) { in zynq_nand_init()
1115 nand_chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1); in zynq_nand_init()
1116 nand_chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1); in zynq_nand_init()
1119 maf_id = nand_chip->read_byte(mtd); in zynq_nand_init()
1120 dev_id = nand_chip->read_byte(mtd); in zynq_nand_init()
1130 nand_chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, in zynq_nand_init()
1138 nand_chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES, in zynq_nand_init()
1140 nand_chip->read_buf(mtd, get_feature, 4); in zynq_nand_init()
1168 nand_chip->ecc.size = mtd->writesize; in zynq_nand_init()
1197 switch (mtd->writesize) { in zynq_nand_init()
1226 if (mtd->oobsize == 16) in zynq_nand_init()
1228 else if (mtd->oobsize == 64) in zynq_nand_init()
1235 if (nand_scan_tail(mtd)) { in zynq_nand_init()
1239 if (nand_register(devnum, mtd)) in zynq_nand_init()