Lines Matching refs:mtd

200 static inline u32 vf610_nfc_read(struct mtd_info *mtd, uint reg)  in vf610_nfc_read()  argument
202 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read()
207 static inline void vf610_nfc_write(struct mtd_info *mtd, uint reg, u32 val) in vf610_nfc_write() argument
209 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write()
214 static inline void vf610_nfc_set(struct mtd_info *mtd, uint reg, u32 bits) in vf610_nfc_set() argument
216 vf610_nfc_write(mtd, reg, vf610_nfc_read(mtd, reg) | bits); in vf610_nfc_set()
219 static inline void vf610_nfc_clear(struct mtd_info *mtd, uint reg, u32 bits) in vf610_nfc_clear() argument
221 vf610_nfc_write(mtd, reg, vf610_nfc_read(mtd, reg) & ~bits); in vf610_nfc_clear()
224 static inline void vf610_nfc_set_field(struct mtd_info *mtd, u32 reg, in vf610_nfc_set_field() argument
227 vf610_nfc_write(mtd, reg, in vf610_nfc_set_field()
228 (vf610_nfc_read(mtd, reg) & (~mask)) | val << shift); in vf610_nfc_set_field()
254 static void vf610_nfc_done(struct mtd_info *mtd) in vf610_nfc_done() argument
256 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_done()
266 vf610_nfc_set(mtd, NFC_FLASH_CMD2, START_BIT); in vf610_nfc_done()
270 while (!(vf610_nfc_read(mtd, NFC_IRQ_STATUS) & IDLE_IRQ_BIT)) { in vf610_nfc_done()
279 static u8 vf610_nfc_get_id(struct mtd_info *mtd, int col) in vf610_nfc_get_id() argument
284 flash_id = vf610_nfc_read(mtd, NFC_FLASH_STATUS1); in vf610_nfc_get_id()
287 flash_id = vf610_nfc_read(mtd, NFC_FLASH_STATUS2); in vf610_nfc_get_id()
294 static u8 vf610_nfc_get_status(struct mtd_info *mtd) in vf610_nfc_get_status() argument
296 return vf610_nfc_read(mtd, NFC_FLASH_STATUS2) & STATUS_BYTE1_MASK; in vf610_nfc_get_status()
328 static void vf610_nfc_addr_cycle(struct mtd_info *mtd, int column, int page) in vf610_nfc_addr_cycle() argument
331 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_addr_cycle()
334 vf610_nfc_set_field(mtd, NFC_COL_ADDR, COL_ADDR_MASK, in vf610_nfc_addr_cycle()
338 vf610_nfc_set_field(mtd, NFC_ROW_ADDR, ROW_ADDR_MASK, in vf610_nfc_addr_cycle()
342 static inline void vf610_nfc_ecc_mode(struct mtd_info *mtd, int ecc_mode) in vf610_nfc_ecc_mode() argument
344 vf610_nfc_set_field(mtd, NFC_FLASH_CONFIG, in vf610_nfc_ecc_mode()
355 static void vf610_nfc_command(struct mtd_info *mtd, unsigned command, in vf610_nfc_command() argument
358 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_command()
367 vf610_nfc_addr_cycle(mtd, column, page); in vf610_nfc_command()
377 vf610_nfc_ecc_mode(mtd, ECC_HW_MODE); in vf610_nfc_command()
389 trfr_sz += mtd->oobsize; in vf610_nfc_command()
390 column = mtd->writesize; in vf610_nfc_command()
394 vf610_nfc_addr_cycle(mtd, column, page); in vf610_nfc_command()
395 vf610_nfc_ecc_mode(mtd, ECC_BYPASS); in vf610_nfc_command()
399 trfr_sz += mtd->writesize + mtd->oobsize; in vf610_nfc_command()
401 vf610_nfc_ecc_mode(mtd, ECC_HW_MODE); in vf610_nfc_command()
404 vf610_nfc_addr_cycle(mtd, column, page); in vf610_nfc_command()
413 vf610_nfc_set_field(mtd, NFC_ROW_ADDR, ROW_ADDR_MASK, in vf610_nfc_command()
415 vf610_nfc_ecc_mode(mtd, ECC_BYPASS); in vf610_nfc_command()
422 vf610_nfc_addr_cycle(mtd, column, page); in vf610_nfc_command()
430 vf610_nfc_set_field(mtd, NFC_ROW_ADDR, ROW_ADDR_MASK, in vf610_nfc_command()
443 vf610_nfc_done(mtd); in vf610_nfc_command()
449 static void vf610_nfc_read_buf(struct mtd_info *mtd, u_char *buf, int len) in vf610_nfc_read_buf() argument
451 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read_buf()
464 static void vf610_nfc_write_buf(struct mtd_info *mtd, const uint8_t *buf, in vf610_nfc_write_buf() argument
467 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write_buf()
471 l = min_t(uint, len, mtd->writesize + mtd->oobsize - c); in vf610_nfc_write_buf()
479 static uint8_t vf610_nfc_read_byte(struct mtd_info *mtd) in vf610_nfc_read_byte() argument
481 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read_byte()
487 tmp = vf610_nfc_get_id(mtd, c); in vf610_nfc_read_byte()
490 tmp = vf610_nfc_get_status(mtd); in vf610_nfc_read_byte()
507 static u16 vf610_nfc_read_word(struct mtd_info *mtd) in vf610_nfc_read_word() argument
511 vf610_nfc_read_buf(mtd, (u_char *)&tmp, sizeof(tmp)); in vf610_nfc_read_word()
516 static int vf610_nfc_dev_ready(struct mtd_info *mtd) in vf610_nfc_dev_ready() argument
525 static void vf610_nfc_select_chip(struct mtd_info *mtd, int chip) in vf610_nfc_select_chip() argument
528 u32 tmp = vf610_nfc_read(mtd, NFC_ROW_ADDR); in vf610_nfc_select_chip()
536 vf610_nfc_write(mtd, NFC_ROW_ADDR, tmp); in vf610_nfc_select_chip()
555 static inline int vf610_nfc_correct_data(struct mtd_info *mtd, uint8_t *dat, in vf610_nfc_correct_data() argument
558 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_correct_data()
565 ecc_status = vf610_nfc_read(mtd, ecc_status_off) & 0xff; in vf610_nfc_correct_data()
572 vf610_nfc_command(mtd, NAND_CMD_READOOB, 0, page); in vf610_nfc_correct_data()
573 vf610_nfc_read_buf(mtd, oob, mtd->oobsize); in vf610_nfc_correct_data()
580 flips += count_written_bits(oob, mtd->oobsize, flips_threshold); in vf610_nfc_correct_data()
587 memset(oob, 0xff, mtd->oobsize); in vf610_nfc_correct_data()
591 static int vf610_nfc_read_page(struct mtd_info *mtd, struct nand_chip *chip, in vf610_nfc_read_page() argument
597 vf610_nfc_read_buf(mtd, buf, eccsize); in vf610_nfc_read_page()
599 vf610_nfc_read_buf(mtd, chip->oob_poi, mtd->oobsize); in vf610_nfc_read_page()
601 stat = vf610_nfc_correct_data(mtd, buf, chip->oob_poi, page); in vf610_nfc_read_page()
604 mtd->ecc_stats.failed++; in vf610_nfc_read_page()
607 mtd->ecc_stats.corrected += stat; in vf610_nfc_read_page()
615 static int vf610_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip, in vf610_nfc_write_page() argument
618 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write_page()
620 vf610_nfc_write_buf(mtd, buf, mtd->writesize); in vf610_nfc_write_page()
622 vf610_nfc_write_buf(mtd, chip->oob_poi, mtd->oobsize); in vf610_nfc_write_page()
625 nfc->write_sz = mtd->writesize + mtd->oobsize; in vf610_nfc_write_page()
639 struct mtd_info *mtd = nand_to_mtd(chip); in vf610_nfc_nand_init() local
669 vf610_nfc_clear(mtd, NFC_FLASH_CONFIG, CONFIG_16BIT); in vf610_nfc_nand_init()
670 vf610_nfc_clear(mtd, NFC_FLASH_CONFIG, CONFIG_ADDR_AUTO_INCR_BIT); in vf610_nfc_nand_init()
671 vf610_nfc_clear(mtd, NFC_FLASH_CONFIG, CONFIG_BUFNO_AUTO_INCR_BIT); in vf610_nfc_nand_init()
672 vf610_nfc_clear(mtd, NFC_FLASH_CONFIG, CONFIG_BOOT_MODE_BIT); in vf610_nfc_nand_init()
673 vf610_nfc_clear(mtd, NFC_FLASH_CONFIG, CONFIG_DMA_REQ_BIT); in vf610_nfc_nand_init()
674 vf610_nfc_set(mtd, NFC_FLASH_CONFIG, CONFIG_FAST_FLASH_BIT); in vf610_nfc_nand_init()
677 vf610_nfc_set_field(mtd, NFC_FLASH_CONFIG, CONFIG_PAGE_CNT_MASK, in vf610_nfc_nand_init()
681 if (nand_scan_ident(mtd, CONFIG_SYS_MAX_NAND_DEVICE, NULL)) { in vf610_nfc_nand_init()
687 vf610_nfc_set(mtd, NFC_FLASH_CONFIG, CONFIG_16BIT); in vf610_nfc_nand_init()
695 if (mtd->writesize + mtd->oobsize > PAGE_2K + OOB_MAX - 8) { in vf610_nfc_nand_init()
702 if (mtd->writesize != PAGE_2K && mtd->oobsize < 64) { in vf610_nfc_nand_init()
708 if (chip->ecc.size != mtd->writesize) { in vf610_nfc_nand_init()
716 if (mtd->oobsize > 64) in vf610_nfc_nand_init()
717 mtd->oobsize = 64; in vf610_nfc_nand_init()
720 mtd->ecclayout = chip->ecc.layout; in vf610_nfc_nand_init()
736 vf610_nfc_set_field(mtd, NFC_FLASH_CONFIG, in vf610_nfc_nand_init()
742 vf610_nfc_set(mtd, NFC_FLASH_CONFIG, CONFIG_ECC_SRAM_REQ_BIT); in vf610_nfc_nand_init()
746 err = nand_scan_tail(mtd); in vf610_nfc_nand_init()
750 err = nand_register(devnum, mtd); in vf610_nfc_nand_init()