Lines Matching full:nfc
54 /* Addresses for NFC MAIN RAM BUFFER areas */
76 /* NFC ECC mode define */
200 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read() local
202 return readl(nfc->regs + reg); in vf610_nfc_read()
207 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write() local
209 writel(val, nfc->regs + reg); in vf610_nfc_write()
254 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_done() local
274 vf610_nfc_clear_status(nfc->regs); in vf610_nfc_done()
329 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_addr_cycle() local
330 if (nfc->chip.options & NAND_BUSWIDTH_16) in vf610_nfc_addr_cycle()
356 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_command() local
357 int trfr_sz = nfc->chip.options & NAND_BUSWIDTH_16 ? 1 : 0; in vf610_nfc_command()
359 nfc->buf_offset = max(column, 0); in vf610_nfc_command()
360 nfc->alt_buf = ALT_BUF_DATA; in vf610_nfc_command()
366 nfc->buf_offset = 0; in vf610_nfc_command()
374 trfr_sz += nfc->write_sz; in vf610_nfc_command()
376 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
377 vf610_nfc_send_commands(nfc->regs, NAND_CMD_SEQIN, in vf610_nfc_command()
382 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
383 vf610_nfc_send_command(nfc->regs, command, RESET_CMD_CODE); in vf610_nfc_command()
389 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
390 vf610_nfc_send_commands(nfc->regs, NAND_CMD_READ0, in vf610_nfc_command()
398 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
400 vf610_nfc_send_commands(nfc->regs, NAND_CMD_READ0, in vf610_nfc_command()
406 nfc->alt_buf = ALT_BUF_ONFI; in vf610_nfc_command()
408 vf610_nfc_transfer_size(nfc->regs, trfr_sz); in vf610_nfc_command()
409 vf610_nfc_send_command(nfc->regs, NAND_CMD_PARAM, in vf610_nfc_command()
417 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
418 vf610_nfc_send_commands(nfc->regs, command, in vf610_nfc_command()
424 nfc->alt_buf = ALT_BUF_ID; in vf610_nfc_command()
425 nfc->buf_offset = 0; in vf610_nfc_command()
426 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
427 vf610_nfc_send_command(nfc->regs, command, READ_ID_CMD_CODE); in vf610_nfc_command()
433 nfc->alt_buf = ALT_BUF_STAT; in vf610_nfc_command()
434 vf610_nfc_transfer_size(nfc->regs, 0); in vf610_nfc_command()
435 vf610_nfc_send_command(nfc->regs, command, STATUS_READ_CMD_CODE); in vf610_nfc_command()
443 nfc->write_sz = 0; in vf610_nfc_command()
446 /* Read data from NFC buffers */
449 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read_buf() local
450 uint c = nfc->buf_offset; in vf610_nfc_read_buf()
453 if (nfc->alt_buf) in vf610_nfc_read_buf()
456 vf610_nfc_memcpy(buf, nfc->regs + NFC_MAIN_AREA(0) + c, len); in vf610_nfc_read_buf()
458 nfc->buf_offset += len; in vf610_nfc_read_buf()
461 /* Write data to NFC buffers */
465 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write_buf() local
466 uint c = nfc->buf_offset; in vf610_nfc_write_buf()
470 vf610_nfc_memcpy(nfc->regs + NFC_MAIN_AREA(0) + c, buf, l); in vf610_nfc_write_buf()
472 nfc->write_sz += l; in vf610_nfc_write_buf()
473 nfc->buf_offset += l; in vf610_nfc_write_buf()
476 /* Read byte from NFC buffers */
479 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_read_byte() local
481 uint c = nfc->buf_offset; in vf610_nfc_read_byte()
483 switch (nfc->alt_buf) { in vf610_nfc_read_byte()
493 c = nfc->buf_offset ^ 0x3; in vf610_nfc_read_byte()
497 tmp = *((u8 *)(nfc->regs + NFC_MAIN_AREA(0) + c)); in vf610_nfc_read_byte()
500 nfc->buf_offset++; in vf610_nfc_read_byte()
504 /* Read word from NFC buffers */
516 /* NFC handles R/B internally; always ready. */ in vf610_nfc_dev_ready()
556 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_correct_data() local
561 int flips_threshold = nfc->chip.ecc.strength / 2; in vf610_nfc_correct_data()
577 flips = count_written_bits(dat, nfc->chip.ecc.size, flips_threshold); in vf610_nfc_correct_data()
584 memset(dat, 0xff, nfc->chip.ecc.size); in vf610_nfc_correct_data()
616 struct vf610_nfc *nfc = mtd_to_nfc(mtd); in vf610_nfc_write_page() local
623 nfc->write_sz = mtd->writesize + mtd->oobsize; in vf610_nfc_write_page()
638 struct vf610_nfc *nfc; in vf610_nfc_nand_init() local
650 nfc = calloc(1, sizeof(*nfc)); in vf610_nfc_nand_init()
651 if (!nfc) { in vf610_nfc_nand_init()
656 chip = &nfc->chip; in vf610_nfc_nand_init()
657 nfc->regs = addr; in vf610_nfc_nand_init()
660 nand_set_controller_data(chip, nfc); in vf610_nfc_nand_init()
705 dev_err(nfc->dev, "Unsupported flash page size\n"); in vf610_nfc_nand_init()
712 dev_err(nfc->dev, "Unsupported flash with hwecc\n"); in vf610_nfc_nand_init()
718 dev_err(nfc->dev, "ecc size: %d\n", chip->ecc.size); in vf610_nfc_nand_init()
719 dev_err(nfc->dev, "Step size needs to be page size\n"); in vf610_nfc_nand_init()
772 .compatible = "fsl,vf610-nfc",
791 .name = "vf610-nfc-dt",