Lines Matching refs:mtd

255 static int zynq_nand_waitfor_ecc_completion(struct mtd_info *mtd)  in zynq_nand_waitfor_ecc_completion()  argument
257 struct nand_chip *nand_chip = mtd_to_nand(mtd); in zynq_nand_waitfor_ecc_completion()
284 static int zynq_nand_init_nand_flash(struct mtd_info *mtd, int option) in zynq_nand_init_nand_flash() argument
286 struct nand_chip *nand_chip = mtd_to_nand(mtd); in zynq_nand_init_nand_flash()
304 status = zynq_nand_waitfor_ecc_completion(mtd); in zynq_nand_init_nand_flash()
328 static int zynq_nand_calculate_hwecc(struct mtd_info *mtd, const u8 *data, in zynq_nand_calculate_hwecc() argument
331 struct nand_chip *nand_chip = mtd_to_nand(mtd); in zynq_nand_calculate_hwecc()
338 ecc_status = zynq_nand_waitfor_ecc_completion(mtd); in zynq_nand_calculate_hwecc()
397 static int zynq_nand_correct_data(struct mtd_info *mtd, unsigned char *buf, in zynq_nand_correct_data() argument
441 static int zynq_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, in zynq_nand_read_oob() argument
448 chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page); in zynq_nand_read_oob()
451 chip->read_buf(mtd, p, (mtd->oobsize - data_width)); in zynq_nand_read_oob()
452 p += mtd->oobsize - data_width; in zynq_nand_read_oob()
457 chip->read_buf(mtd, p, data_width); in zynq_nand_read_oob()
468 static int zynq_nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip, in zynq_nand_write_oob() argument
475 chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page); in zynq_nand_write_oob()
477 chip->write_buf(mtd, buf, (mtd->oobsize - data_width)); in zynq_nand_write_oob()
478 buf += mtd->oobsize - data_width; in zynq_nand_write_oob()
484 chip->write_buf(mtd, buf, data_width); in zynq_nand_write_oob()
487 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); in zynq_nand_write_oob()
488 status = chip->waitfunc(mtd, chip); in zynq_nand_write_oob()
501 static int zynq_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, in zynq_nand_read_page_raw() argument
508 chip->read_buf(mtd, buf, mtd->writesize); in zynq_nand_read_page_raw()
511 chip->read_buf(mtd, p, (mtd->oobsize - data_width)); in zynq_nand_read_page_raw()
512 p += (mtd->oobsize - data_width); in zynq_nand_read_page_raw()
518 chip->read_buf(mtd, p, data_width); in zynq_nand_read_page_raw()
522 static int zynq_nand_read_page_raw_nooob(struct mtd_info *mtd, in zynq_nand_read_page_raw_nooob() argument
525 chip->read_buf(mtd, buf, mtd->writesize); in zynq_nand_read_page_raw_nooob()
529 static int zynq_nand_read_subpage_raw(struct mtd_info *mtd, in zynq_nand_read_subpage_raw() argument
534 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_offs, -1); in zynq_nand_read_subpage_raw()
537 chip->read_buf(mtd, buf, readlen); in zynq_nand_read_subpage_raw()
549 static int zynq_nand_write_page_raw(struct mtd_info *mtd, in zynq_nand_write_page_raw() argument
556 chip->write_buf(mtd, buf, mtd->writesize); in zynq_nand_write_page_raw()
559 chip->write_buf(mtd, p, (mtd->oobsize - data_width)); in zynq_nand_write_page_raw()
560 p += (mtd->oobsize - data_width); in zynq_nand_write_page_raw()
567 chip->write_buf(mtd, p, data_width); in zynq_nand_write_page_raw()
581 static int zynq_nand_write_page_hwecc(struct mtd_info *mtd, in zynq_nand_write_page_hwecc() argument
593 chip->write_buf(mtd, p, eccsize); in zynq_nand_write_page_hwecc()
596 chip->write_buf(mtd, p, (eccsize - data_width)); in zynq_nand_write_page_hwecc()
603 chip->write_buf(mtd, p, data_width); in zynq_nand_write_page_hwecc()
607 chip->ecc.calculate(mtd, p, &ecc_calc[0]); in zynq_nand_write_page_hwecc()
619 chip->write_buf(mtd, oob_ptr, (mtd->oobsize - data_width)); in zynq_nand_write_page_hwecc()
625 oob_ptr += (mtd->oobsize - data_width); in zynq_nand_write_page_hwecc()
626 chip->write_buf(mtd, oob_ptr, data_width); in zynq_nand_write_page_hwecc()
639 static int zynq_nand_write_page_swecc(struct mtd_info *mtd, in zynq_nand_write_page_swecc() argument
651 chip->ecc.calculate(mtd, p, &ecc_calc[i]); in zynq_nand_write_page_swecc()
656 return chip->ecc.write_page_raw(mtd, chip, buf, 1, page); in zynq_nand_write_page_swecc()
672 static int zynq_nand_read_page_hwecc(struct mtd_info *mtd, in zynq_nand_read_page_hwecc() argument
686 chip->read_buf(mtd, p, eccsize); in zynq_nand_read_page_hwecc()
689 chip->read_buf(mtd, p, (eccsize - data_width)); in zynq_nand_read_page_hwecc()
696 chip->read_buf(mtd, p, data_width); in zynq_nand_read_page_hwecc()
700 chip->ecc.calculate(mtd, p, &ecc_calc[0]); in zynq_nand_read_page_hwecc()
709 chip->read_buf(mtd, oob_ptr, (mtd->oobsize - data_width)); in zynq_nand_read_page_hwecc()
716 oob_ptr += (mtd->oobsize - data_width); in zynq_nand_read_page_hwecc()
717 chip->read_buf(mtd, oob_ptr, data_width); in zynq_nand_read_page_hwecc()
727 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); in zynq_nand_read_page_hwecc()
729 mtd->ecc_stats.failed++; in zynq_nand_read_page_hwecc()
731 mtd->ecc_stats.corrected += stat; in zynq_nand_read_page_hwecc()
744 static int zynq_nand_read_page_swecc(struct mtd_info *mtd, in zynq_nand_read_page_swecc() argument
755 chip->ecc.read_page_raw(mtd, chip, buf, 1, page); in zynq_nand_read_page_swecc()
758 chip->ecc.calculate(mtd, p, &ecc_calc[i]); in zynq_nand_read_page_swecc()
769 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); in zynq_nand_read_page_swecc()
771 mtd->ecc_stats.failed++; in zynq_nand_read_page_swecc()
773 mtd->ecc_stats.corrected += stat; in zynq_nand_read_page_swecc()
786 static void zynq_nand_select_chip(struct mtd_info *mtd, int chip) in zynq_nand_select_chip() argument
798 static void zynq_nand_cmd_function(struct mtd_info *mtd, unsigned int command, in zynq_nand_cmd_function() argument
801 struct nand_chip *chip = mtd_to_nand(mtd); in zynq_nand_cmd_function()
826 if ((mtd->writesize > ZYNQ_NAND_ECC_SIZE) && in zynq_nand_cmd_function()
828 column += mtd->writesize; in zynq_nand_cmd_function()
893 if (mtd->writesize > ZYNQ_NAND_ECC_SIZE) { in zynq_nand_cmd_function()
930 nand_wait_ready(mtd); in zynq_nand_cmd_function()
939 static void zynq_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len) in zynq_nand_read_buf() argument
941 struct nand_chip *chip = mtd_to_nand(mtd); in zynq_nand_read_buf()
987 static void zynq_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len) in zynq_nand_write_buf() argument
989 struct nand_chip *chip = mtd_to_nand(mtd); in zynq_nand_write_buf()
1037 static int zynq_nand_device_ready(struct mtd_info *mtd) in zynq_nand_device_ready() argument
1039 struct nand_chip *nand_chip = mtd_to_nand(mtd); in zynq_nand_device_ready()
1077 struct mtd_info *mtd; in zynq_nand_probe() local
1106 mtd = nand_to_mtd(nand_chip); in zynq_nand_probe()
1138 if (zynq_nand_init_nand_flash(mtd, nand_chip->options) < 0) { in zynq_nand_probe()
1144 if (nand_scan_ident(mtd, 1, NULL)) { in zynq_nand_probe()
1149 nand_chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1); in zynq_nand_probe()
1150 nand_chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1); in zynq_nand_probe()
1153 maf_id = nand_chip->read_byte(mtd); in zynq_nand_probe()
1154 dev_id = nand_chip->read_byte(mtd); in zynq_nand_probe()
1164 nand_chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, in zynq_nand_probe()
1172 nand_chip->cmdfunc(mtd, NAND_CMD_GET_FEATURES, in zynq_nand_probe()
1174 nand_chip->read_buf(mtd, get_feature, 4); in zynq_nand_probe()
1202 nand_chip->ecc.size = mtd->writesize; in zynq_nand_probe()
1229 switch (mtd->writesize) { in zynq_nand_probe()
1258 if (mtd->oobsize == 16) in zynq_nand_probe()
1260 else if (mtd->oobsize == 64) in zynq_nand_probe()
1267 if (nand_scan_tail(mtd)) { in zynq_nand_probe()
1271 if (nand_register(0, mtd)) in zynq_nand_probe()