Lines Matching full:nfc
53 /* Addresses for NFC MAIN RAM BUFFER areas */
75 /* NFC ECC mode define */
199 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read() local
201 return readl(nfc->regs + reg); in vf610_nfc_read()
206 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write() local
208 writel(val, nfc->regs + reg); in vf610_nfc_write()
253 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_done() local
273 vf610_nfc_clear_status(nfc->regs); in vf610_nfc_done()
328 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_addr_cycle() local
329 if (nfc->chip.options & NAND_BUSWIDTH_16) in vf610_nfc_addr_cycle()
355 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_command() local
356 int trfr_sz = nfc->chip.options & NAND_BUSWIDTH_16 ? 1 : 0; in vf610_nfc_command()
358 nfc->buf_offset = max(column, 0); in vf610_nfc_command()
359 nfc->alt_buf = ALT_BUF_DATA; in vf610_nfc_command()
365 nfc->buf_offset = 0; in vf610_nfc_command()
373 trfr_sz += nfc->write_sz; in vf610_nfc_command()
375 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
376 vf610_nfc_send_commands(nfc->regs, NAND_CMD_SEQIN, in vf610_nfc_command()
381 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
382 vf610_nfc_send_command(nfc->regs, command, RESET_CMD_CODE); in vf610_nfc_command()
388 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
389 vf610_nfc_send_commands(nfc->regs, NAND_CMD_READ0, in vf610_nfc_command()
397 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
399 vf610_nfc_send_commands(nfc->regs, NAND_CMD_READ0, in vf610_nfc_command()
405 nfc->alt_buf = ALT_BUF_ONFI; in vf610_nfc_command()
407 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
408 vf610_nfc_send_command(nfc->regs, NAND_CMD_PARAM, in vf610_nfc_command()
416 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
417 vf610_nfc_send_commands(nfc->regs, command, in vf610_nfc_command()
423 nfc->alt_buf = ALT_BUF_ID; in vf610_nfc_command()
424 nfc->buf_offset = 0; in vf610_nfc_command()
425 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
426 vf610_nfc_send_command(nfc->regs, command, READ_ID_CMD_CODE); in vf610_nfc_command()
432 nfc->alt_buf = ALT_BUF_STAT; in vf610_nfc_command()
433 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
434 vf610_nfc_send_command(nfc->regs, command, STATUS_READ_CMD_CODE); in vf610_nfc_command()
442 nfc->write_sz = 0; in vf610_nfc_command()
445 /* Read data from NFC buffers */
448 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read_buf() local
449 uint c = nfc->buf_offset; in vf610_nfc_read_buf()
452 if (nfc->alt_buf) in vf610_nfc_read_buf()
455 vf610_nfc_memcpy(buf, nfc->regs + NFC_MAIN_AREA(0) + c, len); in vf610_nfc_read_buf()
457 nfc->buf_offset += len; in vf610_nfc_read_buf()
460 /* Write data to NFC buffers */
464 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write_buf() local
465 uint c = nfc->buf_offset; in vf610_nfc_write_buf()
469 vf610_nfc_memcpy(nfc->regs + NFC_MAIN_AREA(0) + c, buf, l); in vf610_nfc_write_buf()
471 nfc->write_sz += l; in vf610_nfc_write_buf()
472 nfc->buf_offset += l; in vf610_nfc_write_buf()
475 /* Read byte from NFC buffers */
478 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read_byte() local
480 uint c = nfc->buf_offset; in vf610_nfc_read_byte()
482 switch (nfc->alt_buf) { in vf610_nfc_read_byte()
492 c = nfc->buf_offset ^ 0x3; in vf610_nfc_read_byte()
496 tmp = *((u8 *)(nfc->regs + NFC_MAIN_AREA(0) + c)); in vf610_nfc_read_byte()
499 nfc->buf_offset++; in vf610_nfc_read_byte()
503 /* Read word from NFC buffers */
515 /* NFC handles R/B internally; always ready. */ in vf610_nfc_dev_ready()
555 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_correct_data() local
560 int flips_threshold = nfc->chip.ecc.strength / 2; in vf610_nfc_correct_data()
576 flips = count_written_bits(dat, nfc->chip.ecc.size, flips_threshold); in vf610_nfc_correct_data()
583 memset(dat, 0xff, nfc->chip.ecc.size); in vf610_nfc_correct_data()
615 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write_page() local
622 nfc->write_sz = mtd->writesize + mtd->oobsize; in vf610_nfc_write_page()
637 struct vf610_nfc *nfc; in vf610_nfc_nand_init() local
649 nfc = calloc(1, sizeof(*nfc)); in vf610_nfc_nand_init()
650 if (!nfc) { in vf610_nfc_nand_init()
655 chip = &nfc->chip; in vf610_nfc_nand_init()
656 nfc->regs = addr; in vf610_nfc_nand_init()
659 nand_set_controller_data(chip, nfc); in vf610_nfc_nand_init()
704 dev_err(nfc->dev, "Unsupported flash page size\n"); in vf610_nfc_nand_init()
711 dev_err(nfc->dev, "Unsupported flash with hwecc\n"); in vf610_nfc_nand_init()
717 dev_err(nfc->dev, "ecc size: %d\n", chip->ecc.size); in vf610_nfc_nand_init()
718 dev_err(nfc->dev, "Step size needs to be page size\n"); in vf610_nfc_nand_init()
771 .compatible = "fsl,vf610-nfc",
790 .name = "vf610-nfc-dt",