Lines Matching full:nfc
22 * NFC Page Data Layout:
112 * @type: NFC version
226 struct rk_nfc *nfc = nand_get_controller_data(chip);
228 return nfc->page_buf + i * rk_nfc_data_len(chip);
233 struct rk_nfc *nfc = nand_get_controller_data(chip);
235 return nfc->page_buf + i * rk_nfc_data_len(chip) + chip->ecc.size;
240 struct rk_nfc *nfc = nand_get_controller_data(chip);
244 if (strength == nfc->cfg->ecc_strengths[i]) {
245 reg = nfc->cfg->ecc_cfgs[i];
253 writel(reg, nfc->regs + nfc->cfg->bchctl_off);
256 nfc->cur_ecc = strength;
263 struct rk_nfc *nfc = nand_get_controller_data(chip);
269 nfc->selected_bank = -1;
271 val = readl_relaxed(nfc->regs + NFC_FMCTL);
273 writel(val, nfc->regs + NFC_FMCTL);
277 nfc->selected_bank = rknand->sels[cs];
278 nfc->band_offset = NFC_BANK + nfc->selected_bank * NFC_BANK_STEP;
280 val = readl_relaxed(nfc->regs + NFC_FMCTL);
282 val |= FMCTL_CE_SEL(nfc->selected_bank);
284 writel(val, nfc->regs + NFC_FMCTL);
290 if (nfc->cur_timing != rknand->timing) {
291 writel(rknand->timing, nfc->regs + NFC_FMWAIT);
292 nfc->cur_timing = rknand->timing;
299 if (nfc->cur_ecc != ecc->strength)
303 static inline int rk_nfc_wait_ioready(struct rk_nfc *nfc)
308 rc = readl_relaxed_poll_timeout(nfc->regs + NFC_FMCTL, val,
314 static void rk_nfc_read_buf(struct rk_nfc *nfc, u8 *buf, int len)
319 buf[i] = readb_relaxed(nfc->regs + nfc->band_offset +
323 static void rk_nfc_write_buf(struct rk_nfc *nfc, const u8 *buf, int len)
328 writeb(buf[i], nfc->regs + nfc->band_offset + BANK_DATA);
334 struct rk_nfc *nfc = nand_get_controller_data(chip);
336 int reg_offset = nfc->band_offset;
348 nfc->regs + reg_offset + BANK_CMD);
357 nfc->regs + reg_offset + BANK_ADDR);
367 rk_nfc_write_buf(nfc, outbuf, cnt);
370 rk_nfc_read_buf(nfc, inbuf, cnt);
375 if (rk_nfc_wait_ioready(nfc) < 0) {
377 dev_err(nfc->dev, "IO not ready\n");
418 struct rk_nfc *nfc = nand_get_controller_data(chip);
430 if (IS_ERR(nfc->nfc_clk))
431 rate = clk_get_rate(nfc->ahb_clk);
433 rate = clk_get_rate(nfc->nfc_clk);
468 static void rk_nfc_xfer_start(struct rk_nfc *nfc, u8 rw, u8 n_KB,
479 if (nfc->cfg->type == NFC_V6 || nfc->cfg->type == NFC_V8) {
480 bch_reg = readl_relaxed(nfc->regs + nfc->cfg->bchctl_off);
482 (nfc->selected_bank << BCHCTL_BANK);
483 writel(bch_reg, nfc->regs + nfc->cfg->bchctl_off);
486 writel(dma_reg, nfc->regs + nfc->cfg->dma_cfg_off);
487 writel((u32)dma_data, nfc->regs + nfc->cfg->dma_data_buf_off);
488 writel((u32)dma_oob, nfc->regs + nfc->cfg->dma_oob_buf_off);
489 writel(fl_reg, nfc->regs + nfc->cfg->flctl_off);
491 writel(fl_reg, nfc->regs + nfc->cfg->flctl_off);
494 static int rk_nfc_wait_for_xfer_done(struct rk_nfc *nfc)
499 ptr = nfc->regs + nfc->cfg->flctl_off;
510 struct rk_nfc *nfc = nand_get_controller_data(chip);
527 memset(nfc->page_buf, 0xff, mtd->writesize + mtd->oobsize);
530 /* Copy data to the NFC buffer. */
548 * The OOB data layout on the NFC is:
577 /* Copy ECC data to the NFC buffer. */
584 rk_nfc_write_buf(nfc, buf, mtd->writesize + mtd->oobsize);
592 struct rk_nfc *nfc = nand_get_controller_data(chip);
606 memcpy(nfc->page_buf, buf, mtd->writesize);
608 memset(nfc->page_buf, 0xFF, mtd->writesize);
651 if (nfc->cfg->type == NFC_V9)
652 nfc->oob_buf[i] = tmp;
654 nfc->oob_buf[i * (oob_step / 4)] = tmp;
657 dma_data = dma_map_single(nfc->dev, (void *)nfc->page_buf,
659 if (dma_mapping_error(nfc->dev, dma_data))
662 dma_oob = dma_map_single(nfc->dev, nfc->oob_buf,
665 if (dma_mapping_error(nfc->dev, dma_oob)) {
666 dma_unmap_single(nfc->dev, dma_data, mtd->writesize, DMA_TO_DEVICE);
670 reinit_completion(&nfc->done);
671 writel(INT_DMA, nfc->regs + nfc->cfg->int_en_off);
673 rk_nfc_xfer_start(nfc, NFC_WRITE, ecc->steps, dma_data,
675 ret = wait_for_completion_timeout(&nfc->done,
678 dev_warn(nfc->dev, "write: wait dma done timeout.\n");
681 * needs to check the NFC`s status register to see if the data
684 ret = rk_nfc_wait_for_xfer_done(nfc);
686 dma_unmap_single(nfc->dev, dma_data, mtd->writesize,
688 dma_unmap_single(nfc->dev, dma_oob, ecc->steps * oob_step,
695 dev_err(nfc->dev, "write: wait transfer done timeout.\n");
711 struct rk_nfc *nfc = nand_get_controller_data(chip);
728 rk_nfc_read_buf(nfc, nfc->page_buf, mtd->writesize + mtd->oobsize);
746 /* Copy ECC data from the NFC buffer. */
751 /* Copy data from the NFC buffer. */
765 struct rk_nfc *nfc = nand_get_controller_data(chip);
779 dma_data = dma_map_single(nfc->dev, nfc->page_buf,
782 if (dma_mapping_error(nfc->dev, dma_data))
785 dma_oob = dma_map_single(nfc->dev, nfc->oob_buf,
788 if (dma_mapping_error(nfc->dev, dma_oob)) {
789 dma_unmap_single(nfc->dev, dma_data, mtd->writesize,
806 reinit_completion(&nfc->done);
807 writel(INT_DMA, nfc->regs + nfc->cfg->int_en_off);
808 rk_nfc_xfer_start(nfc, NFC_READ, ecc->steps, dma_data,
810 ret = wait_for_completion_timeout(&nfc->done,
813 dev_warn(nfc->dev, "read: wait dma done timeout.\n");
816 * needs to check the NFC`s status register to see if the data
819 ret = rk_nfc_wait_for_xfer_done(nfc);
821 dma_unmap_single(nfc->dev, dma_data, mtd->writesize,
823 dma_unmap_single(nfc->dev, dma_oob, ecc->steps * oob_step,
828 dev_err(nfc->dev, "read: wait transfer done timeout.\n");
838 if (nfc->cfg->type == NFC_V9)
839 tmp = nfc->oob_buf[i];
841 tmp = nfc->oob_buf[i * (oob_step / 4)];
850 bch_st = readl_relaxed(nfc->regs +
851 nfc->cfg->bch_st_off + i * 4);
852 if (bch_st & BIT(nfc->cfg->ecc0.err_flag_bit) ||
853 bch_st & BIT(nfc->cfg->ecc1.err_flag_bit)) {
857 cnt = ECC_ERR_CNT(bch_st, nfc->cfg->ecc0);
861 cnt = ECC_ERR_CNT(bch_st, nfc->cfg->ecc1);
868 memcpy(buf, nfc->page_buf, mtd->writesize);
878 dev_err(nfc->dev, "read page: %x ecc error!\n", page);
890 static inline void rk_nfc_hw_init(struct rk_nfc *nfc)
893 writel(FMCTL_WP, nfc->regs + NFC_FMCTL);
894 /* Config default timing 40ns at 150 Mhz NFC clock. */
895 writel(0x1081, nfc->regs + NFC_FMWAIT);
896 nfc->cur_timing = 0x1081;
898 writel(0, nfc->regs + nfc->cfg->randmz_off);
899 writel(0, nfc->regs + nfc->cfg->dma_cfg_off);
900 writel(FLCTL_RST, nfc->regs + nfc->cfg->flctl_off);
905 struct rk_nfc *nfc = id;
908 sta = readl_relaxed(nfc->regs + nfc->cfg->int_st_off);
909 ien = readl_relaxed(nfc->regs + nfc->cfg->int_en_off);
914 writel(sta, nfc->regs + nfc->cfg->int_clr_off);
915 writel(~sta & ien, nfc->regs + nfc->cfg->int_en_off);
917 complete(&nfc->done);
922 static int rk_nfc_enable_clks(struct device *dev, struct rk_nfc *nfc)
926 if (!IS_ERR(nfc->nfc_clk)) {
927 ret = clk_prepare_enable(nfc->nfc_clk);
929 dev_err(dev, "failed to enable NFC clk\n");
934 ret = clk_prepare_enable(nfc->ahb_clk);
937 clk_disable_unprepare(nfc->nfc_clk);
944 static void rk_nfc_disable_clks(struct rk_nfc *nfc)
946 clk_disable_unprepare(nfc->nfc_clk);
947 clk_disable_unprepare(nfc->ahb_clk);
988 struct rk_nfc *nfc = nand_get_controller_data(chip);
990 const u8 *strengths = nfc->cfg->ecc_strengths;
994 nfc_max_strength = nfc->cfg->ecc_strengths[0];
1016 dev_err(nfc->dev, "unsupported ECC strength\n");
1032 struct rk_nfc *nfc = nand_get_controller_data(chip);
1062 if (nfc->page_buf && new_page_len > nfc->page_buf_size) {
1063 buf = krealloc(nfc->page_buf, new_page_len,
1067 nfc->page_buf = buf;
1068 nfc->page_buf_size = new_page_len;
1072 if (nfc->oob_buf && new_oob_len > nfc->oob_buf_size) {
1073 buf = krealloc(nfc->oob_buf, new_oob_len,
1076 kfree(nfc->page_buf);
1077 nfc->page_buf = NULL;
1080 nfc->oob_buf = buf;
1081 nfc->oob_buf_size = new_oob_len;
1084 if (!nfc->page_buf) {
1085 nfc->page_buf = kzalloc(new_page_len, GFP_KERNEL | GFP_DMA);
1086 if (!nfc->page_buf)
1088 nfc->page_buf_size = new_page_len;
1091 if (!nfc->oob_buf) {
1092 nfc->oob_buf = kzalloc(new_oob_len, GFP_KERNEL | GFP_DMA);
1093 if (!nfc->oob_buf) {
1094 kfree(nfc->page_buf);
1095 nfc->page_buf = NULL;
1098 nfc->oob_buf_size = new_oob_len;
1118 static int rk_nfc_nand_chip_init(struct device *dev, struct rk_nfc *nfc,
1155 if (test_and_set_bit(tmp, &nfc->assigned_cs)) {
1164 chip->controller = &nfc->controller;
1168 nand_set_controller_data(chip, nfc);
1181 dev_err(nfc->dev, "NAND label property is mandatory\n");
1186 rk_nfc_hw_init(nfc);
1207 list_add_tail(&rknand->node, &nfc->chips);
1212 static void rk_nfc_chips_cleanup(struct rk_nfc *nfc)
1218 list_for_each_entry_safe(rknand, tmp, &nfc->chips, node) {
1227 static int rk_nfc_nand_chips_init(struct device *dev, struct rk_nfc *nfc)
1234 dev_err(nfc->dev, "incorrect number of NAND chips (%d)\n",
1240 ret = rk_nfc_nand_chip_init(dev, nfc, nand_np);
1242 rk_nfc_chips_cleanup(nfc);
1363 .compatible = "rockchip,px30-nfc",
1367 .compatible = "rockchip,rk2928-nfc",
1371 .compatible = "rockchip,rv1108-nfc",
1381 struct rk_nfc *nfc;
1384 nfc = devm_kzalloc(dev, sizeof(*nfc), GFP_KERNEL);
1385 if (!nfc)
1388 nand_controller_init(&nfc->controller);
1389 INIT_LIST_HEAD(&nfc->chips);
1390 nfc->controller.ops = &rk_nfc_controller_ops;
1392 nfc->cfg = of_device_get_match_data(dev);
1393 nfc->dev = dev;
1395 init_completion(&nfc->done);
1397 nfc->regs = devm_platform_ioremap_resource(pdev, 0);
1398 if (IS_ERR(nfc->regs)) {
1399 ret = PTR_ERR(nfc->regs);
1403 nfc->nfc_clk = devm_clk_get(dev, "nfc");
1404 if (IS_ERR(nfc->nfc_clk)) {
1405 dev_dbg(dev, "no NFC clk\n");
1406 /* Some earlier models, such as rk3066, have no NFC clk. */
1409 nfc->ahb_clk = devm_clk_get(dev, "ahb");
1410 if (IS_ERR(nfc->ahb_clk)) {
1412 ret = PTR_ERR(nfc->ahb_clk);
1416 ret = rk_nfc_enable_clks(dev, nfc);
1426 writel(0, nfc->regs + nfc->cfg->int_en_off);
1427 ret = devm_request_irq(dev, irq, rk_nfc_irq, 0x0, "rk-nand", nfc);
1429 dev_err(dev, "failed to request NFC irq\n");
1433 platform_set_drvdata(pdev, nfc);
1435 ret = rk_nfc_nand_chips_init(dev, nfc);
1443 rk_nfc_disable_clks(nfc);
1450 struct rk_nfc *nfc = platform_get_drvdata(pdev);
1452 kfree(nfc->page_buf);
1453 kfree(nfc->oob_buf);
1454 rk_nfc_chips_cleanup(nfc);
1455 rk_nfc_disable_clks(nfc);
1460 struct rk_nfc *nfc = dev_get_drvdata(dev);
1462 rk_nfc_disable_clks(nfc);
1469 struct rk_nfc *nfc = dev_get_drvdata(dev);
1475 ret = rk_nfc_enable_clks(dev, nfc);
1480 list_for_each_entry(rknand, &nfc->chips, node) {
1497 .name = "rockchip-nfc",