Lines Matching refs:mtd

43 	struct mtd_info mtd;  member
231 static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob) in set_addr() argument
233 struct nand_chip *chip = mtd->priv; in set_addr()
246 ifc_nand_ctrl->addr = priv->vbase + buf_num * (mtd->writesize * 2); in set_addr()
251 ifc_nand_ctrl->index += mtd->writesize; in set_addr()
254 static int is_blank(struct mtd_info *mtd, unsigned int bufnum) in is_blank() argument
256 struct nand_chip *chip = mtd->priv; in is_blank()
258 u8 __iomem *addr = priv->vbase + bufnum * (mtd->writesize * 2); in is_blank()
260 u8 __iomem *oob = addr + mtd->writesize; in is_blank()
263 for (i = 0; i < mtd->writesize / 4; i++) { in is_blank()
279 static int check_read_ecc(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl, in check_read_ecc() argument
293 static void fsl_ifc_run_command(struct mtd_info *mtd) in fsl_ifc_run_command() argument
295 struct nand_chip *chip = mtd->priv; in fsl_ifc_run_command()
342 errors = check_read_ecc(mtd, ctrl, eccstat, i); in fsl_ifc_run_command()
353 if (!is_blank(mtd, bufnum)) in fsl_ifc_run_command()
359 mtd->ecc_stats.corrected += errors; in fsl_ifc_run_command()
371 struct mtd_info *mtd) in fsl_ifc_do_read() argument
378 if (mtd->writesize > 512) { in fsl_ifc_do_read()
410 static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command, in fsl_ifc_cmdfunc() argument
412 struct nand_chip *chip = mtd->priv; in fsl_ifc_cmdfunc()
426 set_addr(mtd, 0, page_addr, 0); in fsl_ifc_cmdfunc()
428 ifc_nand_ctrl->read_bytes = mtd->writesize + mtd->oobsize; in fsl_ifc_cmdfunc()
434 fsl_ifc_do_read(chip, 0, mtd); in fsl_ifc_cmdfunc()
435 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
440 ifc_out32(mtd->oobsize - column, &ifc->ifc_nand.nand_fbcr); in fsl_ifc_cmdfunc()
441 set_addr(mtd, column, page_addr, 1); in fsl_ifc_cmdfunc()
443 ifc_nand_ctrl->read_bytes = mtd->writesize + mtd->oobsize; in fsl_ifc_cmdfunc()
445 fsl_ifc_do_read(chip, 1, mtd); in fsl_ifc_cmdfunc()
446 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
471 set_addr(mtd, 0, 0, 0); in fsl_ifc_cmdfunc()
472 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
478 set_addr(mtd, 0, page_addr, 0); in fsl_ifc_cmdfunc()
494 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
503 if (mtd->writesize > 512) { in fsl_ifc_cmdfunc()
543 if (column >= mtd->writesize) in fsl_ifc_cmdfunc()
551 if (column >= mtd->writesize) { in fsl_ifc_cmdfunc()
553 column -= mtd->writesize; in fsl_ifc_cmdfunc()
557 set_addr(mtd, column, page_addr, ifc_nand_ctrl->oob); in fsl_ifc_cmdfunc()
571 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
584 set_addr(mtd, 0, 0, 0); in fsl_ifc_cmdfunc()
587 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
606 fsl_ifc_run_command(mtd); in fsl_ifc_cmdfunc()
615 static void fsl_ifc_select_chip(struct mtd_info *mtd, int chip) in fsl_ifc_select_chip() argument
625 static void fsl_ifc_write_buf(struct mtd_info *mtd, const u8 *buf, int len) in fsl_ifc_write_buf() argument
627 struct nand_chip *chip = mtd->priv; in fsl_ifc_write_buf()
629 unsigned int bufsize = mtd->writesize + mtd->oobsize; in fsl_ifc_write_buf()
651 static uint8_t fsl_ifc_read_byte(struct mtd_info *mtd) in fsl_ifc_read_byte() argument
653 struct nand_chip *chip = mtd->priv; in fsl_ifc_read_byte()
674 static uint8_t fsl_ifc_read_byte16(struct mtd_info *mtd) in fsl_ifc_read_byte16() argument
676 struct nand_chip *chip = mtd->priv; in fsl_ifc_read_byte16()
697 static void fsl_ifc_read_buf(struct mtd_info *mtd, u8 *buf, int len) in fsl_ifc_read_buf() argument
699 struct nand_chip *chip = mtd->priv; in fsl_ifc_read_buf()
723 static int fsl_ifc_wait(struct mtd_info *mtd, struct nand_chip *chip) in fsl_ifc_wait() argument
737 set_addr(mtd, 0, 0, 0); in fsl_ifc_wait()
740 fsl_ifc_run_command(mtd); in fsl_ifc_wait()
751 static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip, in fsl_ifc_read_page() argument
758 fsl_ifc_read_buf(mtd, buf, mtd->writesize); in fsl_ifc_read_page()
760 fsl_ifc_read_buf(mtd, chip->oob_poi, mtd->oobsize); in fsl_ifc_read_page()
766 mtd->ecc_stats.failed++; in fsl_ifc_read_page()
774 static int fsl_ifc_write_page(struct mtd_info *mtd, struct nand_chip *chip, in fsl_ifc_write_page() argument
777 fsl_ifc_write_buf(mtd, buf, mtd->writesize); in fsl_ifc_write_page()
778 fsl_ifc_write_buf(mtd, chip->oob_poi, mtd->oobsize); in fsl_ifc_write_page()
783 static int fsl_ifc_chip_init_tail(struct mtd_info *mtd) in fsl_ifc_chip_init_tail() argument
785 struct nand_chip *chip = mtd->priv; in fsl_ifc_chip_init_tail()
814 dev_dbg(priv->dev, "%s: mtd->flags = %08x\n", __func__, mtd->flags); in fsl_ifc_chip_init_tail()
815 dev_dbg(priv->dev, "%s: mtd->size = %lld\n", __func__, mtd->size); in fsl_ifc_chip_init_tail()
817 mtd->erasesize); in fsl_ifc_chip_init_tail()
819 mtd->writesize); in fsl_ifc_chip_init_tail()
821 mtd->oobsize); in fsl_ifc_chip_init_tail()
884 priv->mtd.priv = chip; in fsl_ifc_chip_init()
885 priv->mtd.dev.parent = priv->dev; in fsl_ifc_chip_init()
996 nand_release(&priv->mtd); in fsl_ifc_chip_remove()
998 kfree(priv->mtd.name); in fsl_ifc_chip_remove()
1107 priv->mtd.name = kasprintf(GFP_KERNEL, "%llx.flash", (u64)res.start); in fsl_ifc_nand_probe()
1108 if (!priv->mtd.name) { in fsl_ifc_nand_probe()
1117 ret = nand_scan_ident(&priv->mtd, 1, NULL); in fsl_ifc_nand_probe()
1121 ret = fsl_ifc_chip_init_tail(&priv->mtd); in fsl_ifc_nand_probe()
1125 ret = nand_scan_tail(&priv->mtd); in fsl_ifc_nand_probe()
1131 mtd_device_parse_register(&priv->mtd, part_probe_types, &ppdata, in fsl_ifc_nand_probe()