Lines Matching refs:mtd

153 	void (*select_chip)(struct mtd_info *mtd, int chip);
154 int (*correct_data)(struct mtd_info *mtd, u_char *dat,
176 struct mtd_info mtd; member
533 static void send_page_v3(struct mtd_info *mtd, unsigned int ops) in send_page_v3() argument
535 struct nand_chip *nand_chip = mtd->priv; in send_page_v3()
549 static void send_page_v2(struct mtd_info *mtd, unsigned int ops) in send_page_v2() argument
551 struct nand_chip *nand_chip = mtd->priv; in send_page_v2()
563 static void send_page_v1(struct mtd_info *mtd, unsigned int ops) in send_page_v1() argument
565 struct nand_chip *nand_chip = mtd->priv; in send_page_v1()
569 if (mtd->writesize > 512) in send_page_v1()
646 static int mxc_nand_dev_ready(struct mtd_info *mtd) in mxc_nand_dev_ready() argument
655 static void mxc_nand_enable_hwecc(struct mtd_info *mtd, int mode) in mxc_nand_enable_hwecc() argument
663 static int mxc_nand_correct_data_v1(struct mtd_info *mtd, u_char *dat, in mxc_nand_correct_data_v1() argument
666 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_correct_data_v1()
684 static int mxc_nand_correct_data_v2_v3(struct mtd_info *mtd, u_char *dat, in mxc_nand_correct_data_v2_v3() argument
687 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_correct_data_v2_v3()
697 no_subpages = mtd->writesize >> 9; in mxc_nand_correct_data_v2_v3()
717 static int mxc_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, in mxc_nand_calculate_ecc() argument
723 static u_char mxc_nand_read_byte(struct mtd_info *mtd) in mxc_nand_read_byte() argument
725 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_read_byte()
747 static uint16_t mxc_nand_read_word(struct mtd_info *mtd) in mxc_nand_read_word() argument
749 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_read_word()
762 static void mxc_nand_write_buf(struct mtd_info *mtd, in mxc_nand_write_buf() argument
765 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_write_buf()
768 int n = mtd->oobsize + mtd->writesize - col; in mxc_nand_write_buf()
781 static void mxc_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) in mxc_nand_read_buf() argument
783 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_read_buf()
786 int n = mtd->oobsize + mtd->writesize - col; in mxc_nand_read_buf()
797 static void mxc_nand_select_chip_v1_v3(struct mtd_info *mtd, int chip) in mxc_nand_select_chip_v1_v3() argument
799 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_select_chip_v1_v3()
818 static void mxc_nand_select_chip_v2(struct mtd_info *mtd, int chip) in mxc_nand_select_chip_v2() argument
820 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_select_chip_v2()
851 static void copy_spare(struct mtd_info *mtd, bool bfrom) in copy_spare() argument
853 struct nand_chip *this = mtd->priv; in copy_spare()
856 u16 num_chunks = mtd->writesize / 512; in copy_spare()
858 u8 *d = host->data_buf + mtd->writesize; in copy_spare()
894 static void mxc_do_addr_cycle(struct mtd_info *mtd, int column, int page_addr) in mxc_do_addr_cycle() argument
896 struct nand_chip *nand_chip = mtd->priv; in mxc_do_addr_cycle()
903 if (mtd->writesize > 512) in mxc_do_addr_cycle()
915 if (mtd->writesize > 512) { in mxc_do_addr_cycle()
916 if (mtd->size >= 0x10000000) { in mxc_do_addr_cycle()
930 if (mtd->size >= 0x4000000) { in mxc_do_addr_cycle()
951 static int get_eccsize(struct mtd_info *mtd) in get_eccsize() argument
955 oobbytes_per_512 = mtd->oobsize * 512 / mtd->writesize; in get_eccsize()
980 static void preset_v1(struct mtd_info *mtd) in preset_v1() argument
982 struct nand_chip *nand_chip = mtd->priv; in preset_v1()
986 if (nand_chip->ecc.mode == NAND_ECC_HW && mtd->writesize) in preset_v1()
1008 static void preset_v2(struct mtd_info *mtd) in preset_v2() argument
1010 struct nand_chip *nand_chip = mtd->priv; in preset_v2()
1019 if (mtd->writesize) { in preset_v2()
1020 uint16_t pages_per_block = mtd->erasesize / mtd->writesize; in preset_v2()
1025 host->eccsize = get_eccsize(mtd); in preset_v2()
1054 static void preset_v3(struct mtd_info *mtd) in preset_v3() argument
1056 struct nand_chip *chip = mtd->priv; in preset_v3()
1077 NFC_V3_CONFIG2_SPAS(mtd->oobsize >> 1) | in preset_v3()
1084 if (mtd->writesize == 2048) { in preset_v3()
1087 } else if (mtd->writesize == 4096) { in preset_v3()
1095 if (mtd->writesize) { in preset_v3()
1100 ffs(mtd->erasesize / mtd->writesize) - 6, in preset_v3()
1102 host->eccsize = get_eccsize(mtd); in preset_v3()
1125 static void mxc_nand_command(struct mtd_info *mtd, unsigned command, in mxc_nand_command() argument
1128 struct nand_chip *nand_chip = mtd->priv; in mxc_nand_command()
1140 host->devtype_data->preset(mtd); in mxc_nand_command()
1152 mxc_do_addr_cycle(mtd, column, page_addr); in mxc_nand_command()
1160 host->buf_start = column + mtd->writesize; in mxc_nand_command()
1168 mxc_do_addr_cycle(mtd, 0, page_addr); in mxc_nand_command()
1170 if (mtd->writesize > 512) in mxc_nand_command()
1174 host->devtype_data->send_page(mtd, NFC_OUTPUT); in mxc_nand_command()
1177 mtd->writesize); in mxc_nand_command()
1178 copy_spare(mtd, true); in mxc_nand_command()
1182 if (column >= mtd->writesize) in mxc_nand_command()
1184 mxc_nand_command(mtd, NAND_CMD_READ0, 0, page_addr); in mxc_nand_command()
1192 mxc_do_addr_cycle(mtd, 0, page_addr); in mxc_nand_command()
1196 memcpy32_toio(host->main_area0, host->data_buf, mtd->writesize); in mxc_nand_command()
1197 copy_spare(mtd, false); in mxc_nand_command()
1198 host->devtype_data->send_page(mtd, NFC_INPUT); in mxc_nand_command()
1203 mxc_do_addr_cycle(mtd, column, page_addr); in mxc_nand_command()
1208 mxc_do_addr_cycle(mtd, column, page_addr); in mxc_nand_command()
1219 mxc_do_addr_cycle(mtd, column, page_addr); in mxc_nand_command()
1224 mxc_do_addr_cycle(mtd, column, page_addr); in mxc_nand_command()
1225 host->devtype_data->send_page(mtd, NFC_OUTPUT); in mxc_nand_command()
1499 struct mtd_info *mtd; in mxcnd_probe() local
1518 mtd = &host->mtd; in mxcnd_probe()
1519 mtd->priv = this; in mxcnd_probe()
1520 mtd->dev.parent = &pdev->dev; in mxcnd_probe()
1521 mtd->name = DRIVER_NAME; in mxcnd_probe()
1637 if (nand_scan_ident(mtd, is_imx25_nfc(host) ? 4 : 1, NULL)) { in mxcnd_probe()
1644 host->data_buf = devm_kzalloc(&pdev->dev, mtd->writesize + mtd->oobsize, in mxcnd_probe()
1652 host->devtype_data->preset(mtd); in mxcnd_probe()
1654 if (mtd->writesize == 2048) in mxcnd_probe()
1656 else if (mtd->writesize == 4096) { in mxcnd_probe()
1658 if (get_eccsize(mtd) == 8) in mxcnd_probe()
1669 host->used_oobsize = min(mtd->oobsize, 218U); in mxcnd_probe()
1679 if (nand_scan_tail(mtd)) { in mxcnd_probe()
1685 mtd_device_parse_register(mtd, part_probes, in mxcnd_probe()
1707 nand_release(&host->mtd); in mxcnd_remove()