Lines Matching refs:cdns_ctrl
550 cadence_nand_dma_buf_ok(struct cdns_nand_ctrl *cdns_ctrl, const void *buf, in cadence_nand_dma_buf_ok() argument
553 u8 data_dma_width = cdns_ctrl->caps2.data_dma_width; in cadence_nand_dma_buf_ok()
560 static int cadence_nand_wait_for_value(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_wait_for_value() argument
567 ret = readl_relaxed_poll_timeout(cdns_ctrl->reg + reg_offset, in cadence_nand_wait_for_value()
572 dev_err(cdns_ctrl->dev, in cadence_nand_wait_for_value()
580 static int cadence_nand_set_ecc_enable(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_ecc_enable() argument
585 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_set_ecc_enable()
590 reg = readl_relaxed(cdns_ctrl->reg + ECC_CONFIG_0); in cadence_nand_set_ecc_enable()
597 writel_relaxed(reg, cdns_ctrl->reg + ECC_CONFIG_0); in cadence_nand_set_ecc_enable()
602 static void cadence_nand_set_ecc_strength(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_ecc_strength() argument
607 if (cdns_ctrl->curr_corr_str_idx == corr_str_idx) in cadence_nand_set_ecc_strength()
610 reg = readl_relaxed(cdns_ctrl->reg + ECC_CONFIG_0); in cadence_nand_set_ecc_strength()
613 writel_relaxed(reg, cdns_ctrl->reg + ECC_CONFIG_0); in cadence_nand_set_ecc_strength()
615 cdns_ctrl->curr_corr_str_idx = corr_str_idx; in cadence_nand_set_ecc_strength()
618 static int cadence_nand_get_ecc_strength_idx(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_get_ecc_strength_idx() argument
624 if (cdns_ctrl->ecc_strengths[i] == strength) { in cadence_nand_get_ecc_strength_idx()
633 static int cadence_nand_set_skip_marker_val(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_skip_marker_val() argument
638 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_set_skip_marker_val()
643 reg = readl_relaxed(cdns_ctrl->reg + SKIP_BYTES_CONF); in cadence_nand_set_skip_marker_val()
648 writel_relaxed(reg, cdns_ctrl->reg + SKIP_BYTES_CONF); in cadence_nand_set_skip_marker_val()
653 static int cadence_nand_set_skip_bytes_conf(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_skip_bytes_conf() argument
660 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_set_skip_bytes_conf()
670 reg = readl_relaxed(cdns_ctrl->reg + SKIP_BYTES_CONF); in cadence_nand_set_skip_bytes_conf()
677 writel_relaxed(reg, cdns_ctrl->reg + SKIP_BYTES_CONF); in cadence_nand_set_skip_bytes_conf()
678 writel_relaxed(skip_bytes_offset, cdns_ctrl->reg + SKIP_BYTES_OFFSET); in cadence_nand_set_skip_bytes_conf()
684 static void cadence_nand_set_erase_detection(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_erase_detection() argument
690 reg = readl_relaxed(cdns_ctrl->reg + ECC_CONFIG_0); in cadence_nand_set_erase_detection()
697 writel_relaxed(reg, cdns_ctrl->reg + ECC_CONFIG_0); in cadence_nand_set_erase_detection()
698 writel_relaxed(bitflips_threshold, cdns_ctrl->reg + ECC_CONFIG_1); in cadence_nand_set_erase_detection()
701 static int cadence_nand_set_access_width16(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_access_width16() argument
706 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_set_access_width16()
711 reg = readl_relaxed(cdns_ctrl->reg + COMMON_SET); in cadence_nand_set_access_width16()
717 writel_relaxed(reg, cdns_ctrl->reg + COMMON_SET); in cadence_nand_set_access_width16()
723 cadence_nand_clear_interrupt(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_clear_interrupt() argument
726 writel_relaxed(irq_status->status, cdns_ctrl->reg + INTR_STATUS); in cadence_nand_clear_interrupt()
728 cdns_ctrl->reg + TRD_COMP_INT_STATUS); in cadence_nand_clear_interrupt()
730 cdns_ctrl->reg + TRD_ERR_INT_STATUS); in cadence_nand_clear_interrupt()
734 cadence_nand_read_int_status(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_read_int_status() argument
737 irq_status->status = readl_relaxed(cdns_ctrl->reg + INTR_STATUS); in cadence_nand_read_int_status()
738 irq_status->trd_status = readl_relaxed(cdns_ctrl->reg in cadence_nand_read_int_status()
740 irq_status->trd_error = readl_relaxed(cdns_ctrl->reg in cadence_nand_read_int_status()
744 static u32 irq_detected(struct cdns_nand_ctrl *cdns_ctrl, in irq_detected() argument
747 cadence_nand_read_int_status(cdns_ctrl, irq_status); in irq_detected()
753 static void cadence_nand_reset_irq(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_reset_irq() argument
757 spin_lock_irqsave(&cdns_ctrl->irq_lock, flags); in cadence_nand_reset_irq()
758 memset(&cdns_ctrl->irq_status, 0, sizeof(cdns_ctrl->irq_status)); in cadence_nand_reset_irq()
759 memset(&cdns_ctrl->irq_mask, 0, sizeof(cdns_ctrl->irq_mask)); in cadence_nand_reset_irq()
760 spin_unlock_irqrestore(&cdns_ctrl->irq_lock, flags); in cadence_nand_reset_irq()
769 struct cdns_nand_ctrl *cdns_ctrl = dev_id; in cadence_nand_isr() local
773 spin_lock(&cdns_ctrl->irq_lock); in cadence_nand_isr()
775 if (irq_detected(cdns_ctrl, &irq_status)) { in cadence_nand_isr()
778 cadence_nand_clear_interrupt(cdns_ctrl, &irq_status); in cadence_nand_isr()
780 cdns_ctrl->irq_status.status |= irq_status.status; in cadence_nand_isr()
781 cdns_ctrl->irq_status.trd_status |= irq_status.trd_status; in cadence_nand_isr()
782 cdns_ctrl->irq_status.trd_error |= irq_status.trd_error; in cadence_nand_isr()
784 complete(&cdns_ctrl->complete); in cadence_nand_isr()
788 spin_unlock(&cdns_ctrl->irq_lock); in cadence_nand_isr()
793 static void cadence_nand_set_irq_mask(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_irq_mask() argument
797 cdns_ctrl->reg + INTR_ENABLE); in cadence_nand_set_irq_mask()
800 cdns_ctrl->reg + TRD_ERR_INT_STATUS_EN); in cadence_nand_set_irq_mask()
804 cadence_nand_wait_for_irq(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_wait_for_irq() argument
811 time_left = wait_for_completion_timeout(&cdns_ctrl->complete, in cadence_nand_wait_for_irq()
814 *irq_status = cdns_ctrl->irq_status; in cadence_nand_wait_for_irq()
817 dev_err(cdns_ctrl->dev, "timeout occurred:\n"); in cadence_nand_wait_for_irq()
818 dev_err(cdns_ctrl->dev, "\tstatus = 0x%x, mask = 0x%x\n", in cadence_nand_wait_for_irq()
820 dev_err(cdns_ctrl->dev, in cadence_nand_wait_for_irq()
823 dev_err(cdns_ctrl->dev, in cadence_nand_wait_for_irq()
830 static int cadence_nand_generic_cmd_send(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_generic_cmd_send() argument
840 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_generic_cmd_send()
845 cadence_nand_reset_irq(cdns_ctrl); in cadence_nand_generic_cmd_send()
847 writel_relaxed(mini_ctrl_cmd_l, cdns_ctrl->reg + CMD_REG2); in cadence_nand_generic_cmd_send()
848 writel_relaxed(mini_ctrl_cmd_h, cdns_ctrl->reg + CMD_REG3); in cadence_nand_generic_cmd_send()
856 writel_relaxed(reg, cdns_ctrl->reg + CMD_REG0); in cadence_nand_generic_cmd_send()
862 static int cadence_nand_wait_on_sdma(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_wait_on_sdma() argument
874 cadence_nand_set_irq_mask(cdns_ctrl, &irq_mask); in cadence_nand_wait_on_sdma()
875 cadence_nand_wait_for_irq(cdns_ctrl, &irq_mask, &irq_status); in cadence_nand_wait_on_sdma()
877 dev_err(cdns_ctrl->dev, "Timeout while waiting for SDMA\n"); in cadence_nand_wait_on_sdma()
882 *out_sdma_size = readl_relaxed(cdns_ctrl->reg + SDMA_SIZE); in cadence_nand_wait_on_sdma()
883 *out_sdma_trd = readl_relaxed(cdns_ctrl->reg + SDMA_TRD_NUM); in cadence_nand_wait_on_sdma()
887 dev_err(cdns_ctrl->dev, "SDMA error - irq_status %x\n", in cadence_nand_wait_on_sdma()
895 static void cadence_nand_get_caps(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_get_caps() argument
899 reg = readl_relaxed(cdns_ctrl->reg + CTRL_FEATURES); in cadence_nand_get_caps()
901 cdns_ctrl->caps2.max_banks = 1 << FIELD_GET(CTRL_FEATURES_N_BANKS, reg); in cadence_nand_get_caps()
904 cdns_ctrl->caps2.data_dma_width = 8; in cadence_nand_get_caps()
906 cdns_ctrl->caps2.data_dma_width = 4; in cadence_nand_get_caps()
909 cdns_ctrl->caps2.data_control_supp = true; in cadence_nand_get_caps()
913 cdns_ctrl->caps2.is_phy_type_dll = true; in cadence_nand_get_caps()
918 cadence_nand_cdma_desc_prepare(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_cdma_desc_prepare() argument
922 struct cadence_nand_cdma_desc *cdma_desc = cdns_ctrl->cdma_desc; in cadence_nand_cdma_desc_prepare()
928 if (cdns_ctrl->ctrl_rev >= 13) in cadence_nand_cdma_desc_prepare()
945 static u8 cadence_nand_check_desc_error(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_check_desc_error() argument
955 dev_err(cdns_ctrl->dev, ":CDMA desc error flag detected.\n"); in cadence_nand_check_desc_error()
965 static int cadence_nand_cdma_finish(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_cdma_finish() argument
967 struct cadence_nand_cdma_desc *desc_ptr = cdns_ctrl->cdma_desc; in cadence_nand_cdma_finish()
971 status = cadence_nand_check_desc_error(cdns_ctrl, in cadence_nand_cdma_finish()
973 dev_err(cdns_ctrl->dev, ":CDMA error %x\n", desc_ptr->status); in cadence_nand_cdma_finish()
977 dev_info(cdns_ctrl->dev, "DMA unsupported flag is set"); in cadence_nand_cdma_finish()
988 static int cadence_nand_cdma_send(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_cdma_send() argument
995 status = cadence_nand_wait_for_value(cdns_ctrl, TRD_STATUS, in cadence_nand_cdma_send()
1001 cadence_nand_reset_irq(cdns_ctrl); in cadence_nand_cdma_send()
1002 reinit_completion(&cdns_ctrl->complete); in cadence_nand_cdma_send()
1004 writel_relaxed((u32)cdns_ctrl->dma_cdma_desc, in cadence_nand_cdma_send()
1005 cdns_ctrl->reg + CMD_REG2); in cadence_nand_cdma_send()
1006 writel_relaxed(0, cdns_ctrl->reg + CMD_REG3); in cadence_nand_cdma_send()
1013 writel_relaxed(reg, cdns_ctrl->reg + CMD_REG0); in cadence_nand_cdma_send()
1020 cadence_nand_cdma_send_and_wait(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_cdma_send_and_wait() argument
1030 cadence_nand_set_irq_mask(cdns_ctrl, &irq_mask); in cadence_nand_cdma_send_and_wait()
1032 status = cadence_nand_cdma_send(cdns_ctrl, thread); in cadence_nand_cdma_send_and_wait()
1036 cadence_nand_wait_for_irq(cdns_ctrl, &irq_mask, &irq_status); in cadence_nand_cdma_send_and_wait()
1040 dev_err(cdns_ctrl->dev, "CDMA command timeout\n"); in cadence_nand_cdma_send_and_wait()
1044 dev_err(cdns_ctrl->dev, "CDMA command failed\n"); in cadence_nand_cdma_send_and_wait()
1077 static int cadence_nand_read_bch_caps(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_read_bch_caps() argument
1079 struct nand_ecc_caps *ecc_caps = &cdns_ctrl->ecc_caps; in cadence_nand_read_bch_caps()
1083 reg = readl_relaxed(cdns_ctrl->reg + BCH_CFG_3); in cadence_nand_read_bch_caps()
1084 cdns_ctrl->bch_metadata_size = FIELD_GET(BCH_CFG_3_METADATA_SIZE, reg); in cadence_nand_read_bch_caps()
1085 if (cdns_ctrl->bch_metadata_size < 4) { in cadence_nand_read_bch_caps()
1086 dev_err(cdns_ctrl->dev, in cadence_nand_read_bch_caps()
1091 reg = readl_relaxed(cdns_ctrl->reg + BCH_CFG_0); in cadence_nand_read_bch_caps()
1092 cdns_ctrl->ecc_strengths[0] = FIELD_GET(BCH_CFG_0_CORR_CAP_0, reg); in cadence_nand_read_bch_caps()
1093 cdns_ctrl->ecc_strengths[1] = FIELD_GET(BCH_CFG_0_CORR_CAP_1, reg); in cadence_nand_read_bch_caps()
1094 cdns_ctrl->ecc_strengths[2] = FIELD_GET(BCH_CFG_0_CORR_CAP_2, reg); in cadence_nand_read_bch_caps()
1095 cdns_ctrl->ecc_strengths[3] = FIELD_GET(BCH_CFG_0_CORR_CAP_3, reg); in cadence_nand_read_bch_caps()
1097 reg = readl_relaxed(cdns_ctrl->reg + BCH_CFG_1); in cadence_nand_read_bch_caps()
1098 cdns_ctrl->ecc_strengths[4] = FIELD_GET(BCH_CFG_1_CORR_CAP_4, reg); in cadence_nand_read_bch_caps()
1099 cdns_ctrl->ecc_strengths[5] = FIELD_GET(BCH_CFG_1_CORR_CAP_5, reg); in cadence_nand_read_bch_caps()
1100 cdns_ctrl->ecc_strengths[6] = FIELD_GET(BCH_CFG_1_CORR_CAP_6, reg); in cadence_nand_read_bch_caps()
1101 cdns_ctrl->ecc_strengths[7] = FIELD_GET(BCH_CFG_1_CORR_CAP_7, reg); in cadence_nand_read_bch_caps()
1103 reg = readl_relaxed(cdns_ctrl->reg + BCH_CFG_2); in cadence_nand_read_bch_caps()
1104 cdns_ctrl->ecc_stepinfos[0].stepsize = in cadence_nand_read_bch_caps()
1107 cdns_ctrl->ecc_stepinfos[1].stepsize = in cadence_nand_read_bch_caps()
1112 if (cdns_ctrl->ecc_strengths[i] != 0) in cadence_nand_read_bch_caps()
1119 cdns_ctrl->ecc_stepinfos[i].nstrengths = nstrengths; in cadence_nand_read_bch_caps()
1120 cdns_ctrl->ecc_stepinfos[i].strengths = in cadence_nand_read_bch_caps()
1121 cdns_ctrl->ecc_strengths; in cadence_nand_read_bch_caps()
1123 if (cdns_ctrl->ecc_stepinfos[i].stepsize != 0) in cadence_nand_read_bch_caps()
1126 if (cdns_ctrl->ecc_stepinfos[i].stepsize > max_step_size) in cadence_nand_read_bch_caps()
1127 max_step_size = cdns_ctrl->ecc_stepinfos[i].stepsize; in cadence_nand_read_bch_caps()
1129 ecc_caps->stepinfos = &cdns_ctrl->ecc_stepinfos[0]; in cadence_nand_read_bch_caps()
1148 dev_err(cdns_ctrl->dev, in cadence_nand_read_bch_caps()
1158 static int cadence_nand_hw_init(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_hw_init() argument
1163 status = cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_hw_init()
1169 reg = readl_relaxed(cdns_ctrl->reg + CTRL_VERSION); in cadence_nand_hw_init()
1170 cdns_ctrl->ctrl_rev = FIELD_GET(CTRL_VERSION_REV, reg); in cadence_nand_hw_init()
1172 dev_info(cdns_ctrl->dev, in cadence_nand_hw_init()
1177 writel_relaxed(0, cdns_ctrl->reg + MULTIPLANE_CFG); in cadence_nand_hw_init()
1178 writel_relaxed(0, cdns_ctrl->reg + CACHE_CFG); in cadence_nand_hw_init()
1181 writel_relaxed(0xFFFFFFFF, cdns_ctrl->reg + INTR_STATUS); in cadence_nand_hw_init()
1183 cadence_nand_get_caps(cdns_ctrl); in cadence_nand_hw_init()
1184 if (cadence_nand_read_bch_caps(cdns_ctrl)) in cadence_nand_hw_init()
1188 if (cdns_ctrl->caps2.data_dma_width == 8) { in cadence_nand_hw_init()
1189 dev_err(cdns_ctrl->dev, in cadence_nand_hw_init()
1200 status = cadence_nand_set_access_width16(cdns_ctrl, false); in cadence_nand_hw_init()
1215 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_prepare_data_size() local
1223 if (cdns_ctrl->curr_trans_type == transfer_type) in cadence_nand_prepare_data_size()
1250 writel_relaxed(reg, cdns_ctrl->reg + TRAN_CFG_0); in cadence_nand_prepare_data_size()
1255 writel_relaxed(reg, cdns_ctrl->reg + TRAN_CFG_1); in cadence_nand_prepare_data_size()
1257 if (cdns_ctrl->caps2.data_control_supp) { in cadence_nand_prepare_data_size()
1258 reg = readl_relaxed(cdns_ctrl->reg + CONTROL_DATA_CTRL); in cadence_nand_prepare_data_size()
1261 writel_relaxed(reg, cdns_ctrl->reg + CONTROL_DATA_CTRL); in cadence_nand_prepare_data_size()
1264 cdns_ctrl->curr_trans_type = transfer_type; in cadence_nand_prepare_data_size()
1268 cadence_nand_cdma_transfer(struct cdns_nand_ctrl *cdns_ctrl, u8 chip_nr, in cadence_nand_cdma_transfer() argument
1283 cadence_nand_set_ecc_enable(cdns_ctrl, with_ecc); in cadence_nand_cdma_transfer()
1285 dma_buf = dma_map_single(cdns_ctrl->dev, buf, buf_size, dir); in cadence_nand_cdma_transfer()
1286 if (dma_mapping_error(cdns_ctrl->dev, dma_buf)) { in cadence_nand_cdma_transfer()
1287 dev_err(cdns_ctrl->dev, "Failed to map DMA buffer\n"); in cadence_nand_cdma_transfer()
1292 dma_ctrl_dat = dma_map_single(cdns_ctrl->dev, ctrl_dat, in cadence_nand_cdma_transfer()
1294 if (dma_mapping_error(cdns_ctrl->dev, dma_ctrl_dat)) { in cadence_nand_cdma_transfer()
1295 dma_unmap_single(cdns_ctrl->dev, dma_buf, in cadence_nand_cdma_transfer()
1297 dev_err(cdns_ctrl->dev, "Failed to map DMA buffer\n"); in cadence_nand_cdma_transfer()
1302 cadence_nand_cdma_desc_prepare(cdns_ctrl, chip_nr, page, in cadence_nand_cdma_transfer()
1305 status = cadence_nand_cdma_send_and_wait(cdns_ctrl, thread_nr); in cadence_nand_cdma_transfer()
1307 dma_unmap_single(cdns_ctrl->dev, dma_buf, in cadence_nand_cdma_transfer()
1311 dma_unmap_single(cdns_ctrl->dev, dma_ctrl_dat, in cadence_nand_cdma_transfer()
1316 return cadence_nand_cdma_finish(cdns_ctrl); in cadence_nand_cdma_transfer()
1319 static void cadence_nand_set_timings(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_timings() argument
1323 cdns_ctrl->reg + ASYNC_TOGGLE_TIMINGS); in cadence_nand_set_timings()
1324 writel_relaxed(t->timings0, cdns_ctrl->reg + TIMINGS0); in cadence_nand_set_timings()
1325 writel_relaxed(t->timings1, cdns_ctrl->reg + TIMINGS1); in cadence_nand_set_timings()
1326 writel_relaxed(t->timings2, cdns_ctrl->reg + TIMINGS2); in cadence_nand_set_timings()
1328 if (cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_set_timings()
1329 writel_relaxed(t->dll_phy_ctrl, cdns_ctrl->reg + DLL_PHY_CTRL); in cadence_nand_set_timings()
1331 writel_relaxed(t->phy_ctrl, cdns_ctrl->reg + PHY_CTRL); in cadence_nand_set_timings()
1333 if (cdns_ctrl->caps2.is_phy_type_dll) { in cadence_nand_set_timings()
1334 writel_relaxed(0, cdns_ctrl->reg + PHY_TSEL); in cadence_nand_set_timings()
1335 writel_relaxed(2, cdns_ctrl->reg + PHY_DQ_TIMING); in cadence_nand_set_timings()
1337 cdns_ctrl->reg + PHY_DQS_TIMING); in cadence_nand_set_timings()
1339 cdns_ctrl->reg + PHY_GATE_LPBK_CTRL); in cadence_nand_set_timings()
1341 cdns_ctrl->reg + PHY_DLL_MASTER_CTRL); in cadence_nand_set_timings()
1342 writel_relaxed(0, cdns_ctrl->reg + PHY_DLL_SLAVE_CTRL); in cadence_nand_set_timings()
1348 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_select_target() local
1351 if (chip == cdns_ctrl->selected_chip) in cadence_nand_select_target()
1354 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_select_target()
1359 cadence_nand_set_timings(cdns_ctrl, &cdns_chip->timings); in cadence_nand_select_target()
1361 cadence_nand_set_ecc_strength(cdns_ctrl, in cadence_nand_select_target()
1364 cadence_nand_set_erase_detection(cdns_ctrl, true, in cadence_nand_select_target()
1367 cdns_ctrl->curr_trans_type = -1; in cadence_nand_select_target()
1368 cdns_ctrl->selected_chip = chip; in cadence_nand_select_target()
1375 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_erase() local
1380 cadence_nand_cdma_desc_prepare(cdns_ctrl, in cadence_nand_erase()
1384 status = cadence_nand_cdma_send_and_wait(cdns_ctrl, thread_nr); in cadence_nand_erase()
1386 dev_err(cdns_ctrl->dev, "erase operation failed\n"); in cadence_nand_erase()
1390 status = cadence_nand_cdma_finish(cdns_ctrl); in cadence_nand_erase()
1400 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_bbm() local
1406 cadence_nand_set_skip_bytes_conf(cdns_ctrl, 0, 0, 0); in cadence_nand_read_bbm()
1412 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_bbm()
1414 page, cdns_ctrl->buf, NULL, in cadence_nand_read_bbm()
1418 dev_err(cdns_ctrl->dev, "read BBM failed\n"); in cadence_nand_read_bbm()
1422 memcpy(buf + cdns_chip->bbm_offs, cdns_ctrl->buf, cdns_chip->bbm_len); in cadence_nand_read_bbm()
1431 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_write_page() local
1441 cadence_nand_set_skip_bytes_conf(cdns_ctrl, cdns_chip->bbm_len, in cadence_nand_write_page()
1451 memset(cdns_ctrl->buf + mtd->writesize, 0xFF, in cadence_nand_write_page()
1455 cadence_nand_set_skip_marker_val(cdns_ctrl, marker_val); in cadence_nand_write_page()
1459 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, mtd->writesize) && in cadence_nand_write_page()
1460 cdns_ctrl->caps2.data_control_supp) { in cadence_nand_write_page()
1466 oob = cdns_ctrl->buf + mtd->writesize; in cadence_nand_write_page()
1468 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_write_page()
1475 dev_err(cdns_ctrl->dev, "write page failed\n"); in cadence_nand_write_page()
1484 memcpy(cdns_ctrl->buf + mtd->writesize, chip->oob_poi, in cadence_nand_write_page()
1488 memcpy(cdns_ctrl->buf, buf, mtd->writesize); in cadence_nand_write_page()
1492 return cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_write_page()
1494 page, cdns_ctrl->buf, NULL, in cadence_nand_write_page()
1502 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_write_oob() local
1505 memset(cdns_ctrl->buf, 0xFF, mtd->writesize); in cadence_nand_write_oob()
1507 return cadence_nand_write_page(chip, cdns_ctrl->buf, 1, page); in cadence_nand_write_oob()
1514 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_write_page_raw() local
1522 void *tmp_buf = cdns_ctrl->buf; in cadence_nand_write_page_raw()
1539 cadence_nand_set_skip_bytes_conf(cdns_ctrl, 0, 0, 0); in cadence_nand_write_page_raw()
1603 return cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_write_page_raw()
1605 page, cdns_ctrl->buf, NULL, in cadence_nand_write_page_raw()
1620 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_page() local
1630 cadence_nand_set_skip_bytes_conf(cdns_ctrl, cdns_chip->bbm_len, in cadence_nand_read_page()
1638 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, mtd->writesize) && in cadence_nand_read_page()
1639 cdns_ctrl->caps2.data_control_supp) { in cadence_nand_read_page()
1645 oob = cdns_ctrl->buf + mtd->writesize; in cadence_nand_read_page()
1648 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_page()
1657 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_page()
1659 page, cdns_ctrl->buf, in cadence_nand_read_page()
1664 memcpy(buf, cdns_ctrl->buf, mtd->writesize); in cadence_nand_read_page()
1667 cdns_ctrl->buf + mtd->writesize, in cadence_nand_read_page()
1678 cdns_ctrl->cdma_desc->status); in cadence_nand_read_page()
1685 dev_err(cdns_ctrl->dev, "read page failed\n"); in cadence_nand_read_page()
1699 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_oob() local
1701 return cadence_nand_read_page(chip, cdns_ctrl->buf, 1, page); in cadence_nand_read_oob()
1707 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_page_raw() local
1715 void *tmp_buf = cdns_ctrl->buf; in cadence_nand_read_page_raw()
1723 cadence_nand_set_skip_bytes_conf(cdns_ctrl, 0, 0, 0); in cadence_nand_read_page_raw()
1726 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_page_raw()
1728 page, cdns_ctrl->buf, NULL, in cadence_nand_read_page_raw()
1738 dev_err(cdns_ctrl->dev, "read raw page failed\n"); in cadence_nand_read_page_raw()
1819 static int cadence_nand_slave_dma_transfer(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_slave_dma_transfer() argument
1831 chan = cdns_ctrl->dmac; in cadence_nand_slave_dma_transfer()
1836 dev_err(cdns_ctrl->dev, "Failed to map DMA buffer\n"); in cadence_nand_slave_dma_transfer()
1841 src_dma = cdns_ctrl->io.dma; in cadence_nand_slave_dma_transfer()
1845 dst_dma = cdns_ctrl->io.dma; in cadence_nand_slave_dma_transfer()
1848 tx = dmaengine_prep_dma_memcpy(cdns_ctrl->dmac, dst_dma, src_dma, len, in cadence_nand_slave_dma_transfer()
1851 dev_err(cdns_ctrl->dev, "Failed to prepare DMA memcpy\n"); in cadence_nand_slave_dma_transfer()
1860 dev_err(cdns_ctrl->dev, "Failed to do DMA tx_submit\n"); in cadence_nand_slave_dma_transfer()
1864 dma_async_issue_pending(cdns_ctrl->dmac); in cadence_nand_slave_dma_transfer()
1867 dma_unmap_single(cdns_ctrl->dev, buf_dma, len, dir); in cadence_nand_slave_dma_transfer()
1872 dma_unmap_single(cdns_ctrl->dev, buf_dma, len, dir); in cadence_nand_slave_dma_transfer()
1875 dev_dbg(cdns_ctrl->dev, "Fall back to CPU I/O\n"); in cadence_nand_slave_dma_transfer()
1880 static int cadence_nand_read_buf(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_read_buf() argument
1888 status = cadence_nand_wait_on_sdma(cdns_ctrl, &thread_nr, &sdma_size); in cadence_nand_read_buf()
1892 if (!cdns_ctrl->caps1->has_dma) { in cadence_nand_read_buf()
1893 u8 data_dma_width = cdns_ctrl->caps2.data_dma_width; in cadence_nand_read_buf()
1899 ioread32_rep(cdns_ctrl->io.virt, buf, len_in_words); in cadence_nand_read_buf()
1902 readsq(cdns_ctrl->io.virt, buf, len_in_words); in cadence_nand_read_buf()
1911 ioread32_rep(cdns_ctrl->io.virt, in cadence_nand_read_buf()
1912 cdns_ctrl->buf, in cadence_nand_read_buf()
1916 readsq(cdns_ctrl->io.virt, cdns_ctrl->buf, in cadence_nand_read_buf()
1921 memcpy(buf + read_bytes, cdns_ctrl->buf, in cadence_nand_read_buf()
1927 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, len)) { in cadence_nand_read_buf()
1928 status = cadence_nand_slave_dma_transfer(cdns_ctrl, buf, in cadence_nand_read_buf()
1929 cdns_ctrl->io.dma, in cadence_nand_read_buf()
1934 dev_warn(cdns_ctrl->dev, in cadence_nand_read_buf()
1939 status = cadence_nand_slave_dma_transfer(cdns_ctrl, cdns_ctrl->buf, in cadence_nand_read_buf()
1940 cdns_ctrl->io.dma, in cadence_nand_read_buf()
1944 dev_err(cdns_ctrl->dev, "Slave DMA transfer failed"); in cadence_nand_read_buf()
1948 memcpy(buf, cdns_ctrl->buf, len); in cadence_nand_read_buf()
1953 static int cadence_nand_write_buf(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_write_buf() argument
1961 status = cadence_nand_wait_on_sdma(cdns_ctrl, &thread_nr, &sdma_size); in cadence_nand_write_buf()
1965 if (!cdns_ctrl->caps1->has_dma) { in cadence_nand_write_buf()
1966 u8 data_dma_width = cdns_ctrl->caps2.data_dma_width; in cadence_nand_write_buf()
1971 iowrite32_rep(cdns_ctrl->io.virt, buf, len_in_words); in cadence_nand_write_buf()
1974 writesq(cdns_ctrl->io.virt, buf, len_in_words); in cadence_nand_write_buf()
1982 memcpy(cdns_ctrl->buf, buf + written_bytes, in cadence_nand_write_buf()
1987 iowrite32_rep(cdns_ctrl->io.virt, in cadence_nand_write_buf()
1988 cdns_ctrl->buf, in cadence_nand_write_buf()
1992 writesq(cdns_ctrl->io.virt, cdns_ctrl->buf, in cadence_nand_write_buf()
2000 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, len)) { in cadence_nand_write_buf()
2001 status = cadence_nand_slave_dma_transfer(cdns_ctrl, (void *)buf, in cadence_nand_write_buf()
2002 cdns_ctrl->io.dma, in cadence_nand_write_buf()
2007 dev_warn(cdns_ctrl->dev, in cadence_nand_write_buf()
2012 memcpy(cdns_ctrl->buf, buf, len); in cadence_nand_write_buf()
2014 status = cadence_nand_slave_dma_transfer(cdns_ctrl, cdns_ctrl->buf, in cadence_nand_write_buf()
2015 cdns_ctrl->io.dma, in cadence_nand_write_buf()
2019 dev_err(cdns_ctrl->dev, "Slave DMA transfer failed"); in cadence_nand_write_buf()
2027 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_force_byte_access() local
2038 return cadence_nand_set_access_width16(cdns_ctrl, !force_8bit); in cadence_nand_force_byte_access()
2044 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_opcode() local
2061 ret = cadence_nand_generic_cmd_send(cdns_ctrl, in cadence_nand_cmd_opcode()
2065 dev_err(cdns_ctrl->dev, "send cmd %x failed\n", in cadence_nand_cmd_opcode()
2074 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_address() local
2105 ret = cadence_nand_generic_cmd_send(cdns_ctrl, in cadence_nand_cmd_address()
2109 dev_err(cdns_ctrl->dev, "send address %llx failed\n", address); in cadence_nand_cmd_address()
2158 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_data() local
2185 dev_err(cdns_ctrl->dev, in cadence_nand_cmd_data()
2191 ret = cadence_nand_generic_cmd_send(cdns_ctrl, in cadence_nand_cmd_data()
2195 dev_err(cdns_ctrl->dev, "send generic data cmd failed\n"); in cadence_nand_cmd_data()
2202 ret = cadence_nand_read_buf(cdns_ctrl, buf, len); in cadence_nand_cmd_data()
2206 ret = cadence_nand_write_buf(cdns_ctrl, buf, len); in cadence_nand_cmd_data()
2210 dev_err(cdns_ctrl->dev, "data transfer failed for generic command\n"); in cadence_nand_cmd_data()
2217 dev_err(cdns_ctrl->dev, in cadence_nand_cmd_data()
2230 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_waitrdy() local
2235 status = cadence_nand_wait_for_value(cdns_ctrl, RBN_SETINGS, in cadence_nand_cmd_waitrdy()
2354 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_setup_interface() local
2358 u32 board_delay = cdns_ctrl->board_delay; in cadence_nand_setup_interface()
2360 cdns_ctrl->nf_clk_rate); in cadence_nand_setup_interface()
2365 u32 if_skew = cdns_ctrl->caps1->if_skew; in cadence_nand_setup_interface()
2381 if (cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_setup_interface()
2512 dev_dbg(cdns_ctrl->dev, "ASYNC_TOGGLE_TIMINGS_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2532 dev_dbg(cdns_ctrl->dev, "TIMINGS0_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2553 dev_dbg(cdns_ctrl->dev, "TIMINGS1_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2566 dev_dbg(cdns_ctrl->dev, "TIMINGS2_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2568 if (cdns_ctrl->caps2.is_phy_type_dll) { in cadence_nand_setup_interface()
2578 dev_dbg(cdns_ctrl->dev, "DLL_PHY_CTRL_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2603 if (!cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_setup_interface()
2611 dev_warn(cdns_ctrl->dev, in cadence_nand_setup_interface()
2616 if (cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_setup_interface()
2619 dev_dbg(cdns_ctrl->dev, "PHY_CTRL_REG_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2621 if (cdns_ctrl->caps2.is_phy_type_dll) { in cadence_nand_setup_interface()
2622 dev_dbg(cdns_ctrl->dev, "PHY_TSEL_REG_SDR\t%x\n", 0); in cadence_nand_setup_interface()
2623 dev_dbg(cdns_ctrl->dev, "PHY_DQ_TIMING_REG_SDR\t%x\n", 2); in cadence_nand_setup_interface()
2624 dev_dbg(cdns_ctrl->dev, "PHY_DQS_TIMING_REG_SDR\t%x\n", in cadence_nand_setup_interface()
2629 dev_dbg(cdns_ctrl->dev, "PHY_GATE_LPBK_CTRL_REG_SDR\t%x\n", in cadence_nand_setup_interface()
2633 dev_dbg(cdns_ctrl->dev, "PHY_DLL_MASTER_CTRL_REG_SDR\t%lx\n", in cadence_nand_setup_interface()
2635 dev_dbg(cdns_ctrl->dev, "PHY_DLL_SLAVE_CTRL_REG_SDR\t%x\n", 0); in cadence_nand_setup_interface()
2643 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_attach_chip() local
2650 ret = cadence_nand_set_access_width16(cdns_ctrl, true); in cadence_nand_attach_chip()
2667 &cdns_ctrl->ecc_caps, in cadence_nand_attach_chip()
2670 dev_err(cdns_ctrl->dev, "ECC configuration failed\n"); in cadence_nand_attach_chip()
2674 dev_dbg(cdns_ctrl->dev, in cadence_nand_attach_chip()
2685 if (cdns_chip->avail_oob_size > cdns_ctrl->bch_metadata_size) in cadence_nand_attach_chip()
2686 cdns_chip->avail_oob_size = cdns_ctrl->bch_metadata_size; in cadence_nand_attach_chip()
2692 ret = cadence_nand_get_ecc_strength_idx(cdns_ctrl, chip->ecc.strength); in cadence_nand_attach_chip()
2698 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_attach_chip()
2703 cadence_nand_set_ecc_strength(cdns_ctrl, in cadence_nand_attach_chip()
2706 cadence_nand_set_erase_detection(cdns_ctrl, true, in cadence_nand_attach_chip()
2719 if ((mtd->writesize + mtd->oobsize) > cdns_ctrl->buf_size) in cadence_nand_attach_chip()
2720 cdns_ctrl->buf_size = mtd->writesize + mtd->oobsize; in cadence_nand_attach_chip()
2723 ret = dma_set_mask(cdns_ctrl->dev, DMA_BIT_MASK(32)); in cadence_nand_attach_chip()
2725 dev_err(cdns_ctrl->dev, "no usable DMA configuration\n"); in cadence_nand_attach_chip()
2740 static int cadence_nand_chip_init(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_chip_init() argument
2751 dev_err(cdns_ctrl->dev, "missing/invalid reg property\n"); in cadence_nand_chip_init()
2756 cdns_chip = devm_kzalloc(cdns_ctrl->dev, sizeof(*cdns_chip) + in cadence_nand_chip_init()
2760 dev_err(cdns_ctrl->dev, "could not allocate chip structure\n"); in cadence_nand_chip_init()
2770 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2776 if (cs >= cdns_ctrl->caps2.max_banks) { in cadence_nand_chip_init()
2777 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2779 cs, cdns_ctrl->caps2.max_banks); in cadence_nand_chip_init()
2783 if (test_and_set_bit(cs, &cdns_ctrl->assigned_cs)) { in cadence_nand_chip_init()
2784 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2793 chip->controller = &cdns_ctrl->controller; in cadence_nand_chip_init()
2797 mtd->dev.parent = cdns_ctrl->dev; in cadence_nand_chip_init()
2807 dev_err(cdns_ctrl->dev, "could not scan the nand chip\n"); in cadence_nand_chip_init()
2813 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2819 list_add_tail(&cdns_chip->node, &cdns_ctrl->chips); in cadence_nand_chip_init()
2824 static void cadence_nand_chips_cleanup(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_chips_cleanup() argument
2830 list_for_each_entry_safe(entry, temp, &cdns_ctrl->chips, node) { in cadence_nand_chips_cleanup()
2839 static int cadence_nand_chips_init(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_chips_init() argument
2841 struct device_node *np = cdns_ctrl->dev->of_node; in cadence_nand_chips_init()
2843 int max_cs = cdns_ctrl->caps2.max_banks; in cadence_nand_chips_init()
2849 dev_err(cdns_ctrl->dev, in cadence_nand_chips_init()
2856 ret = cadence_nand_chip_init(cdns_ctrl, nand_np); in cadence_nand_chips_init()
2859 cadence_nand_chips_cleanup(cdns_ctrl); in cadence_nand_chips_init()
2868 cadence_nand_irq_cleanup(int irqnum, struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_irq_cleanup() argument
2871 writel_relaxed(INTR_ENABLE_INTR_EN, cdns_ctrl->reg + INTR_ENABLE); in cadence_nand_irq_cleanup()
2874 static int cadence_nand_init(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_init() argument
2879 cdns_ctrl->cdma_desc = dma_alloc_coherent(cdns_ctrl->dev, in cadence_nand_init()
2880 sizeof(*cdns_ctrl->cdma_desc), in cadence_nand_init()
2881 &cdns_ctrl->dma_cdma_desc, in cadence_nand_init()
2883 if (!cdns_ctrl->dma_cdma_desc) in cadence_nand_init()
2886 cdns_ctrl->buf_size = SZ_16K; in cadence_nand_init()
2887 cdns_ctrl->buf = kmalloc(cdns_ctrl->buf_size, GFP_KERNEL); in cadence_nand_init()
2888 if (!cdns_ctrl->buf) { in cadence_nand_init()
2893 if (devm_request_irq(cdns_ctrl->dev, cdns_ctrl->irq, cadence_nand_isr, in cadence_nand_init()
2895 cdns_ctrl)) { in cadence_nand_init()
2896 dev_err(cdns_ctrl->dev, "Unable to allocate IRQ\n"); in cadence_nand_init()
2901 spin_lock_init(&cdns_ctrl->irq_lock); in cadence_nand_init()
2902 init_completion(&cdns_ctrl->complete); in cadence_nand_init()
2904 ret = cadence_nand_hw_init(cdns_ctrl); in cadence_nand_init()
2911 if (cdns_ctrl->caps1->has_dma) { in cadence_nand_init()
2912 cdns_ctrl->dmac = dma_request_channel(mask, NULL, NULL); in cadence_nand_init()
2913 if (!cdns_ctrl->dmac) { in cadence_nand_init()
2914 dev_err(cdns_ctrl->dev, in cadence_nand_init()
2921 nand_controller_init(&cdns_ctrl->controller); in cadence_nand_init()
2922 INIT_LIST_HEAD(&cdns_ctrl->chips); in cadence_nand_init()
2924 cdns_ctrl->controller.ops = &cadence_nand_controller_ops; in cadence_nand_init()
2925 cdns_ctrl->curr_corr_str_idx = 0xFF; in cadence_nand_init()
2927 ret = cadence_nand_chips_init(cdns_ctrl); in cadence_nand_init()
2929 dev_err(cdns_ctrl->dev, "Failed to register MTD: %d\n", in cadence_nand_init()
2934 kfree(cdns_ctrl->buf); in cadence_nand_init()
2935 cdns_ctrl->buf = kzalloc(cdns_ctrl->buf_size, GFP_KERNEL); in cadence_nand_init()
2936 if (!cdns_ctrl->buf) { in cadence_nand_init()
2944 if (cdns_ctrl->dmac) in cadence_nand_init()
2945 dma_release_channel(cdns_ctrl->dmac); in cadence_nand_init()
2948 cadence_nand_irq_cleanup(cdns_ctrl->irq, cdns_ctrl); in cadence_nand_init()
2951 kfree(cdns_ctrl->buf); in cadence_nand_init()
2954 dma_free_coherent(cdns_ctrl->dev, sizeof(struct cadence_nand_cdma_desc), in cadence_nand_init()
2955 cdns_ctrl->cdma_desc, cdns_ctrl->dma_cdma_desc); in cadence_nand_init()
2961 static void cadence_nand_remove(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_remove() argument
2963 cadence_nand_chips_cleanup(cdns_ctrl); in cadence_nand_remove()
2964 cadence_nand_irq_cleanup(cdns_ctrl->irq, cdns_ctrl); in cadence_nand_remove()
2965 kfree(cdns_ctrl->buf); in cadence_nand_remove()
2966 dma_free_coherent(cdns_ctrl->dev, sizeof(struct cadence_nand_cdma_desc), in cadence_nand_remove()
2967 cdns_ctrl->cdma_desc, cdns_ctrl->dma_cdma_desc); in cadence_nand_remove()
2969 if (cdns_ctrl->dmac) in cadence_nand_remove()
2970 dma_release_channel(cdns_ctrl->dmac); in cadence_nand_remove()
2974 struct cdns_nand_ctrl cdns_ctrl; member
2996 struct cdns_nand_ctrl *cdns_ctrl; in cadence_nand_dt_probe() local
3015 cdns_ctrl = &dt->cdns_ctrl; in cadence_nand_dt_probe()
3016 cdns_ctrl->caps1 = devdata; in cadence_nand_dt_probe()
3018 cdns_ctrl->dev = &ofdev->dev; in cadence_nand_dt_probe()
3019 cdns_ctrl->irq = platform_get_irq(ofdev, 0); in cadence_nand_dt_probe()
3020 if (cdns_ctrl->irq < 0) in cadence_nand_dt_probe()
3021 return cdns_ctrl->irq; in cadence_nand_dt_probe()
3023 dev_info(cdns_ctrl->dev, "IRQ: nr %d\n", cdns_ctrl->irq); in cadence_nand_dt_probe()
3025 cdns_ctrl->reg = devm_platform_ioremap_resource(ofdev, 0); in cadence_nand_dt_probe()
3026 if (IS_ERR(cdns_ctrl->reg)) in cadence_nand_dt_probe()
3027 return PTR_ERR(cdns_ctrl->reg); in cadence_nand_dt_probe()
3029 cdns_ctrl->io.virt = devm_platform_get_and_ioremap_resource(ofdev, 1, &res); in cadence_nand_dt_probe()
3030 if (IS_ERR(cdns_ctrl->io.virt)) in cadence_nand_dt_probe()
3031 return PTR_ERR(cdns_ctrl->io.virt); in cadence_nand_dt_probe()
3032 cdns_ctrl->io.dma = res->start; in cadence_nand_dt_probe()
3034 dt->clk = devm_clk_get(cdns_ctrl->dev, "nf_clk"); in cadence_nand_dt_probe()
3038 cdns_ctrl->nf_clk_rate = clk_get_rate(dt->clk); in cadence_nand_dt_probe()
3044 dev_info(cdns_ctrl->dev, in cadence_nand_dt_probe()
3048 cdns_ctrl->board_delay = val; in cadence_nand_dt_probe()
3050 ret = cadence_nand_init(cdns_ctrl); in cadence_nand_dt_probe()
3062 cadence_nand_remove(&dt->cdns_ctrl); in cadence_nand_dt_remove()