Lines Matching full:qspi

31 /* QSPI NAND config reg bits */
174 struct qpic_spi_nand *qspi = ecceng_to_qspi(eng); in nand_to_qcom_snand() local
176 return qspi->snandc; in nand_to_qcom_snand()
218 struct qpic_ecc *qecc = snandc->qspi->ecc; in qcom_spi_ooblayout_ecc()
234 struct qpic_ecc *qecc = snandc->qspi->ecc; in qcom_spi_ooblayout_free()
259 snandc->qspi->num_cw = cwperpage; in qcom_spi_ecc_init_ctx_pipelined()
264 snandc->qspi->oob_buf = kzalloc(mtd->writesize + mtd->oobsize, in qcom_spi_ecc_init_ctx_pipelined()
266 if (!snandc->qspi->oob_buf) { in qcom_spi_ecc_init_ctx_pipelined()
271 memset(snandc->qspi->oob_buf, 0xff, mtd->writesize + mtd->oobsize); in qcom_spi_ecc_init_ctx_pipelined()
274 snandc->qspi->mtd = mtd; in qcom_spi_ecc_init_ctx_pipelined()
357 snandc->qspi->ecc = ecc_cfg; in qcom_spi_ecc_prepare_io_req_pipelined()
358 snandc->qspi->raw_rw = false; in qcom_spi_ecc_prepare_io_req_pipelined()
359 snandc->qspi->oob_rw = false; in qcom_spi_ecc_prepare_io_req_pipelined()
360 snandc->qspi->page_rw = false; in qcom_spi_ecc_prepare_io_req_pipelined()
363 snandc->qspi->page_rw = true; in qcom_spi_ecc_prepare_io_req_pipelined()
366 snandc->qspi->oob_rw = true; in qcom_spi_ecc_prepare_io_req_pipelined()
369 snandc->qspi->raw_rw = true; in qcom_spi_ecc_prepare_io_req_pipelined()
383 if (snandc->qspi->ecc_stats.failed) in qcom_spi_ecc_finish_io_req_pipelined()
384 mtd->ecc_stats.failed += snandc->qspi->ecc_stats.failed; in qcom_spi_ecc_finish_io_req_pipelined()
386 mtd->ecc_stats.corrected += snandc->qspi->ecc_stats.corrected; in qcom_spi_ecc_finish_io_req_pipelined()
388 if (snandc->qspi->ecc_stats.failed) in qcom_spi_ecc_finish_io_req_pipelined()
391 return snandc->qspi->ecc_stats.bitflips; in qcom_spi_ecc_finish_io_req_pipelined()
406 int num_cw = snandc->qspi->num_cw; in qcom_spi_set_read_loc()
425 int num_cw = snandc->qspi->num_cw; in qcom_spi_config_cw_read()
444 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_block_erase()
452 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_block_erase()
453 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_block_erase()
454 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_block_erase()
476 int num_cw = snandc->qspi->num_cw; in qcom_spi_config_single_cw_page_read()
499 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_last_cw()
500 struct mtd_info *mtd = snandc->qspi->mtd; in qcom_spi_read_last_cw()
504 u32 num_cw = snandc->qspi->num_cw; in qcom_spi_read_last_cw()
513 snandc->regs->addr0 = (snandc->qspi->addr1 | cpu_to_le32(col)); in qcom_spi_read_last_cw()
514 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_last_cw()
521 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_last_cw()
562 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_check_error()
563 int i, num_cw = snandc->qspi->num_cw; in qcom_spi_check_error()
568 snandc->qspi->ecc_stats.failed = 0; in qcom_spi_check_error()
569 snandc->qspi->ecc_stats.corrected = 0; in qcom_spi_check_error()
605 snandc->qspi->ecc_stats.corrected += stat; in qcom_spi_check_error()
619 snandc->qspi->ecc_stats.bitflips = max_bitflips; in qcom_spi_check_error()
621 snandc->qspi->ecc_stats.failed++; in qcom_spi_check_error()
645 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_cw_raw()
646 struct mtd_info *mtd = snandc->qspi->mtd; in qcom_spi_read_cw_raw()
650 u32 cfg0, cfg1, ecc_bch_cfg, num_cw = snandc->qspi->num_cw; in qcom_spi_read_cw_raw()
666 snandc->regs->addr0 = (snandc->qspi->addr1 | cpu_to_le32(col)); in qcom_spi_read_cw_raw()
667 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_cw_raw()
668 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_cw_raw()
737 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_page_raw()
740 u32 num_cw = snandc->qspi->num_cw; in qcom_spi_read_page_raw()
742 if (snandc->qspi->page_rw) in qcom_spi_read_page_raw()
745 oob_buf = snandc->qspi->oob_buf; in qcom_spi_read_page_raw()
765 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_page_ecc()
768 u32 cfg0, cfg1, ecc_bch_cfg, num_cw = snandc->qspi->num_cw; in qcom_spi_read_page_ecc()
773 oob_buf = snandc->qspi->oob_buf; in qcom_spi_read_page_ecc()
785 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_read_page_ecc()
786 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_page_ecc()
787 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_page_ecc()
861 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_page_oob()
864 u32 cfg0, cfg1, ecc_bch_cfg, num_cw = snandc->qspi->num_cw; in qcom_spi_read_page_oob()
881 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_read_page_oob()
882 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_page_oob()
883 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_page_oob()
943 if (snandc->qspi->page_rw && snandc->qspi->raw_rw) in qcom_spi_read_page()
946 if (snandc->qspi->page_rw) in qcom_spi_read_page()
949 if (snandc->qspi->oob_rw && snandc->qspi->raw_rw) in qcom_spi_read_page()
952 if (snandc->qspi->oob_rw) in qcom_spi_read_page()
980 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_program_raw()
981 struct mtd_info *mtd = snandc->qspi->mtd; in qcom_spi_program_raw()
984 int num_cw = snandc->qspi->num_cw; in qcom_spi_program_raw()
992 data_buf = snandc->qspi->data_buf; in qcom_spi_program_raw()
994 oob_buf = snandc->qspi->oob_buf; in qcom_spi_program_raw()
1002 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_program_raw()
1003 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_program_raw()
1004 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_program_raw()
1064 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_program_ecc()
1067 int num_cw = snandc->qspi->num_cw; in qcom_spi_program_ecc()
1076 if (snandc->qspi->data_buf) in qcom_spi_program_ecc()
1077 data_buf = snandc->qspi->data_buf; in qcom_spi_program_ecc()
1079 oob_buf = snandc->qspi->oob_buf; in qcom_spi_program_ecc()
1086 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_program_ecc()
1087 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_program_ecc()
1088 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_program_ecc()
1141 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_program_oob()
1144 int num_cw = snandc->qspi->num_cw; in qcom_spi_program_oob()
1155 oob_buf = snandc->qspi->data_buf; in qcom_spi_program_oob()
1161 snandc->regs->addr0 = (snandc->qspi->addr1 | cpu_to_le32(col)); in qcom_spi_program_oob()
1162 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_program_oob()
1163 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_program_oob()
1172 oob_size = snandc->qspi->mtd->oobavail; in qcom_spi_program_oob()
1176 mtd_ooblayout_get_databytes(snandc->qspi->mtd, snandc->data_buffer + data_size, in qcom_spi_program_oob()
1177 oob_buf, 0, snandc->qspi->mtd->oobavail); in qcom_spi_program_oob()
1194 if (snandc->qspi->page_rw && snandc->qspi->raw_rw) in qcom_spi_program_execute()
1197 if (snandc->qspi->page_rw) in qcom_spi_program_execute()
1200 if (snandc->qspi->oob_rw) in qcom_spi_program_execute()
1223 if (snandc->qspi->raw_rw) { in qcom_spi_cmd_mapping()
1265 snandc->qspi->data_buf = (u8 *)op->data.buf.out; in qcom_spi_write_page()
1293 snandc->qspi->addr1 = cpu_to_le32(s_op.addr1_reg); in qcom_spi_send_cmdaddr()
1294 snandc->qspi->addr2 = cpu_to_le32(s_op.addr2_reg); in qcom_spi_send_cmdaddr()
1295 snandc->qspi->cmd = cpu_to_le32(cmd); in qcom_spi_send_cmdaddr()
1300 snandc->qspi->addr1 = cpu_to_le32(s_op.addr1_reg); in qcom_spi_send_cmdaddr()
1301 snandc->qspi->addr2 = cpu_to_le32(s_op.addr2_reg); in qcom_spi_send_cmdaddr()
1302 snandc->qspi->cmd = cpu_to_le32(cmd); in qcom_spi_send_cmdaddr()
1307 snandc->qspi->addr1 = cpu_to_le32(s_op.addr1_reg << 16); in qcom_spi_send_cmdaddr()
1308 snandc->qspi->addr2 = cpu_to_le32(s_op.addr2_reg); in qcom_spi_send_cmdaddr()
1309 snandc->qspi->cmd = cpu_to_le32(cmd); in qcom_spi_send_cmdaddr()
1467 struct qpic_spi_nand *qspi; in qcom_spi_probe() local
1477 qspi = devm_kzalloc(dev, sizeof(*qspi), GFP_KERNEL); in qcom_spi_probe()
1478 if (!qspi) in qcom_spi_probe()
1488 qspi->snandc = snandc; in qcom_spi_probe()
1491 snandc->qspi = qspi; in qcom_spi_probe()
1492 snandc->qspi->ctlr = ctlr; in qcom_spi_probe()
1493 snandc->qspi->ecc = ecc; in qcom_spi_probe()
1512 snandc->qspi->iomacro_clk = devm_clk_get(dev, "iom"); in qcom_spi_probe()
1513 if (IS_ERR(snandc->qspi->iomacro_clk)) in qcom_spi_probe()
1514 return PTR_ERR(snandc->qspi->iomacro_clk); in qcom_spi_probe()
1534 ret = clk_prepare_enable(snandc->qspi->iomacro_clk); in qcom_spi_probe()
1547 snandc->qspi->ecc_eng.dev = &pdev->dev; in qcom_spi_probe()
1548 snandc->qspi->ecc_eng.integration = NAND_ECC_ENGINE_INTEGRATION_PIPELINED; in qcom_spi_probe()
1549 snandc->qspi->ecc_eng.ops = &qcom_spi_ecc_engine_ops_pipelined; in qcom_spi_probe()
1550 snandc->qspi->ecc_eng.priv = snandc; in qcom_spi_probe()
1552 ret = nand_ecc_register_on_host_hw_engine(&snandc->qspi->ecc_eng); in qcom_spi_probe()
1576 clk_disable_unprepare(snandc->qspi->iomacro_clk); in qcom_spi_probe()
1599 clk_disable_unprepare(snandc->qspi->iomacro_clk); in qcom_spi_remove()
1629 MODULE_DESCRIPTION("SPI driver for QPIC QSPI cores");