Lines Matching full:qspi

31 /* QSPI NAND config reg bits */
173 struct qpic_spi_nand *qspi = ecceng_to_qspi(eng); in nand_to_qcom_snand() local
175 return qspi->snandc; in nand_to_qcom_snand()
217 struct qpic_ecc *qecc = snandc->qspi->ecc; in qcom_spi_ooblayout_ecc()
233 struct qpic_ecc *qecc = snandc->qspi->ecc; in qcom_spi_ooblayout_free()
260 snandc->qspi->num_cw = cwperpage; in qcom_spi_ecc_init_ctx_pipelined()
293 snandc->qspi->oob_buf = kmalloc(mtd->writesize + mtd->oobsize, in qcom_spi_ecc_init_ctx_pipelined()
295 if (!snandc->qspi->oob_buf) { in qcom_spi_ecc_init_ctx_pipelined()
300 memset(snandc->qspi->oob_buf, 0xff, mtd->writesize + mtd->oobsize); in qcom_spi_ecc_init_ctx_pipelined()
303 snandc->qspi->mtd = mtd; in qcom_spi_ecc_init_ctx_pipelined()
388 snandc->qspi->ecc = ecc_cfg; in qcom_spi_ecc_prepare_io_req_pipelined()
389 snandc->qspi->raw_rw = false; in qcom_spi_ecc_prepare_io_req_pipelined()
390 snandc->qspi->oob_rw = false; in qcom_spi_ecc_prepare_io_req_pipelined()
391 snandc->qspi->page_rw = false; in qcom_spi_ecc_prepare_io_req_pipelined()
394 snandc->qspi->page_rw = true; in qcom_spi_ecc_prepare_io_req_pipelined()
397 snandc->qspi->oob_rw = true; in qcom_spi_ecc_prepare_io_req_pipelined()
400 snandc->qspi->raw_rw = true; in qcom_spi_ecc_prepare_io_req_pipelined()
414 if (snandc->qspi->ecc_stats.failed) in qcom_spi_ecc_finish_io_req_pipelined()
415 mtd->ecc_stats.failed += snandc->qspi->ecc_stats.failed; in qcom_spi_ecc_finish_io_req_pipelined()
417 mtd->ecc_stats.corrected += snandc->qspi->ecc_stats.corrected; in qcom_spi_ecc_finish_io_req_pipelined()
419 if (snandc->qspi->ecc_stats.failed) in qcom_spi_ecc_finish_io_req_pipelined()
422 return snandc->qspi->ecc_stats.bitflips; in qcom_spi_ecc_finish_io_req_pipelined()
437 int num_cw = snandc->qspi->num_cw; in qcom_spi_set_read_loc()
456 int num_cw = snandc->qspi->num_cw; in qcom_spi_config_cw_read()
475 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_block_erase()
483 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_block_erase()
484 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_block_erase()
485 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_block_erase()
508 int num_cw = snandc->qspi->num_cw; in qcom_spi_config_single_cw_page_read()
547 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_last_cw()
548 struct mtd_info *mtd = snandc->qspi->mtd; in qcom_spi_read_last_cw()
552 u32 num_cw = snandc->qspi->num_cw; in qcom_spi_read_last_cw()
561 snandc->regs->addr0 = (snandc->qspi->addr1 | cpu_to_le32(col)); in qcom_spi_read_last_cw()
562 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_last_cw()
569 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_last_cw()
608 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_check_error()
609 int i, num_cw = snandc->qspi->num_cw; in qcom_spi_check_error()
614 snandc->qspi->ecc_stats.failed = 0; in qcom_spi_check_error()
615 snandc->qspi->ecc_stats.corrected = 0; in qcom_spi_check_error()
656 snandc->qspi->ecc_stats.corrected += stat; in qcom_spi_check_error()
665 snandc->qspi->ecc_stats.bitflips = max_bitflips; in qcom_spi_check_error()
667 snandc->qspi->ecc_stats.failed++; in qcom_spi_check_error()
675 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_cw_raw()
676 struct mtd_info *mtd = snandc->qspi->mtd; in qcom_spi_read_cw_raw()
680 u32 cfg0, cfg1, ecc_bch_cfg, num_cw = snandc->qspi->num_cw; in qcom_spi_read_cw_raw()
696 snandc->regs->addr0 = (snandc->qspi->addr1 | cpu_to_le32(col)); in qcom_spi_read_cw_raw()
697 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_cw_raw()
698 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_cw_raw()
767 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_page_raw()
770 u32 num_cw = snandc->qspi->num_cw; in qcom_spi_read_page_raw()
772 if (snandc->qspi->page_rw) in qcom_spi_read_page_raw()
775 oob_buf = snandc->qspi->oob_buf; in qcom_spi_read_page_raw()
795 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_page_ecc()
798 u32 cfg0, cfg1, ecc_bch_cfg, num_cw = snandc->qspi->num_cw; in qcom_spi_read_page_ecc()
801 oob_buf = snandc->qspi->oob_buf; in qcom_spi_read_page_ecc()
812 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_read_page_ecc()
813 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_page_ecc()
814 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_page_ecc()
888 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_read_page_oob()
891 u32 cfg0, cfg1, ecc_bch_cfg, num_cw = snandc->qspi->num_cw; in qcom_spi_read_page_oob()
905 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_read_page_oob()
906 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_read_page_oob()
907 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_read_page_oob()
967 if (snandc->qspi->page_rw && snandc->qspi->raw_rw) in qcom_spi_read_page()
970 if (snandc->qspi->page_rw) in qcom_spi_read_page()
973 if (snandc->qspi->oob_rw && snandc->qspi->raw_rw) in qcom_spi_read_page()
976 if (snandc->qspi->oob_rw) in qcom_spi_read_page()
1004 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_program_raw()
1005 struct mtd_info *mtd = snandc->qspi->mtd; in qcom_spi_program_raw()
1008 int num_cw = snandc->qspi->num_cw; in qcom_spi_program_raw()
1016 data_buf = snandc->qspi->data_buf; in qcom_spi_program_raw()
1018 oob_buf = snandc->qspi->oob_buf; in qcom_spi_program_raw()
1026 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_program_raw()
1027 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_program_raw()
1028 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_program_raw()
1088 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_program_ecc()
1091 int num_cw = snandc->qspi->num_cw; in qcom_spi_program_ecc()
1100 if (snandc->qspi->data_buf) in qcom_spi_program_ecc()
1101 data_buf = snandc->qspi->data_buf; in qcom_spi_program_ecc()
1103 oob_buf = snandc->qspi->oob_buf; in qcom_spi_program_ecc()
1110 snandc->regs->addr0 = snandc->qspi->addr1; in qcom_spi_program_ecc()
1111 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_program_ecc()
1112 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_program_ecc()
1165 struct qpic_ecc *ecc_cfg = snandc->qspi->ecc; in qcom_spi_program_oob()
1168 int num_cw = snandc->qspi->num_cw; in qcom_spi_program_oob()
1179 oob_buf = snandc->qspi->data_buf; in qcom_spi_program_oob()
1185 snandc->regs->addr0 = (snandc->qspi->addr1 | cpu_to_le32(col)); in qcom_spi_program_oob()
1186 snandc->regs->addr1 = snandc->qspi->addr2; in qcom_spi_program_oob()
1187 snandc->regs->cmd = snandc->qspi->cmd; in qcom_spi_program_oob()
1196 oob_size = snandc->qspi->mtd->oobavail; in qcom_spi_program_oob()
1200 mtd_ooblayout_get_databytes(snandc->qspi->mtd, snandc->data_buffer + data_size, in qcom_spi_program_oob()
1201 oob_buf, 0, snandc->qspi->mtd->oobavail); in qcom_spi_program_oob()
1218 if (snandc->qspi->page_rw && snandc->qspi->raw_rw) in qcom_spi_program_execute()
1221 if (snandc->qspi->page_rw) in qcom_spi_program_execute()
1224 if (snandc->qspi->oob_rw) in qcom_spi_program_execute()
1247 if (snandc->qspi->raw_rw) { in qcom_spi_cmd_mapping()
1289 snandc->qspi->data_buf = (u8 *)op->data.buf.out; in qcom_spi_write_page()
1317 snandc->qspi->addr1 = cpu_to_le32(s_op.addr1_reg); in qcom_spi_send_cmdaddr()
1318 snandc->qspi->addr2 = cpu_to_le32(s_op.addr2_reg); in qcom_spi_send_cmdaddr()
1319 snandc->qspi->cmd = cpu_to_le32(cmd); in qcom_spi_send_cmdaddr()
1324 snandc->qspi->addr1 = cpu_to_le32(s_op.addr1_reg); in qcom_spi_send_cmdaddr()
1325 snandc->qspi->addr2 = cpu_to_le32(s_op.addr2_reg); in qcom_spi_send_cmdaddr()
1326 snandc->qspi->cmd = cpu_to_le32(cmd); in qcom_spi_send_cmdaddr()
1331 snandc->qspi->addr1 = cpu_to_le32(s_op.addr1_reg << 16); in qcom_spi_send_cmdaddr()
1332 snandc->qspi->addr2 = cpu_to_le32(s_op.addr2_reg); in qcom_spi_send_cmdaddr()
1333 snandc->qspi->cmd = cpu_to_le32(cmd); in qcom_spi_send_cmdaddr()
1493 struct qpic_spi_nand *qspi; in qcom_spi_probe() local
1503 qspi = devm_kzalloc(dev, sizeof(*qspi), GFP_KERNEL); in qcom_spi_probe()
1504 if (!qspi) in qcom_spi_probe()
1514 qspi->snandc = snandc; in qcom_spi_probe()
1517 snandc->qspi = qspi; in qcom_spi_probe()
1518 snandc->qspi->ctlr = ctlr; in qcom_spi_probe()
1519 snandc->qspi->ecc = ecc; in qcom_spi_probe()
1538 snandc->qspi->iomacro_clk = devm_clk_get(dev, "iom"); in qcom_spi_probe()
1539 if (IS_ERR(snandc->qspi->iomacro_clk)) in qcom_spi_probe()
1540 return PTR_ERR(snandc->qspi->iomacro_clk); in qcom_spi_probe()
1560 ret = clk_prepare_enable(snandc->qspi->iomacro_clk); in qcom_spi_probe()
1573 snandc->qspi->ecc_eng.dev = &pdev->dev; in qcom_spi_probe()
1574 snandc->qspi->ecc_eng.integration = NAND_ECC_ENGINE_INTEGRATION_PIPELINED; in qcom_spi_probe()
1575 snandc->qspi->ecc_eng.ops = &qcom_spi_ecc_engine_ops_pipelined; in qcom_spi_probe()
1576 snandc->qspi->ecc_eng.priv = snandc; in qcom_spi_probe()
1578 ret = nand_ecc_register_on_host_hw_engine(&snandc->qspi->ecc_eng); in qcom_spi_probe()
1602 clk_disable_unprepare(snandc->qspi->iomacro_clk); in qcom_spi_probe()
1625 clk_disable_unprepare(snandc->qspi->iomacro_clk); in qcom_spi_remove()
1656 MODULE_DESCRIPTION("SPI driver for QPIC QSPI cores");