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()
1192 status = cadence_nand_set_access_width16(cdns_ctrl, false); in cadence_nand_hw_init()
1207 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_prepare_data_size() local
1215 if (cdns_ctrl->curr_trans_type == transfer_type) in cadence_nand_prepare_data_size()
1242 writel_relaxed(reg, cdns_ctrl->reg + TRAN_CFG_0); in cadence_nand_prepare_data_size()
1247 writel_relaxed(reg, cdns_ctrl->reg + TRAN_CFG_1); in cadence_nand_prepare_data_size()
1249 if (cdns_ctrl->caps2.data_control_supp) { in cadence_nand_prepare_data_size()
1250 reg = readl_relaxed(cdns_ctrl->reg + CONTROL_DATA_CTRL); in cadence_nand_prepare_data_size()
1253 writel_relaxed(reg, cdns_ctrl->reg + CONTROL_DATA_CTRL); in cadence_nand_prepare_data_size()
1256 cdns_ctrl->curr_trans_type = transfer_type; in cadence_nand_prepare_data_size()
1260 cadence_nand_cdma_transfer(struct cdns_nand_ctrl *cdns_ctrl, u8 chip_nr, in cadence_nand_cdma_transfer() argument
1275 cadence_nand_set_ecc_enable(cdns_ctrl, with_ecc); in cadence_nand_cdma_transfer()
1277 dma_buf = dma_map_single(cdns_ctrl->dev, buf, buf_size, dir); in cadence_nand_cdma_transfer()
1278 if (dma_mapping_error(cdns_ctrl->dev, dma_buf)) { in cadence_nand_cdma_transfer()
1279 dev_err(cdns_ctrl->dev, "Failed to map DMA buffer\n"); in cadence_nand_cdma_transfer()
1284 dma_ctrl_dat = dma_map_single(cdns_ctrl->dev, ctrl_dat, in cadence_nand_cdma_transfer()
1286 if (dma_mapping_error(cdns_ctrl->dev, dma_ctrl_dat)) { in cadence_nand_cdma_transfer()
1287 dma_unmap_single(cdns_ctrl->dev, dma_buf, in cadence_nand_cdma_transfer()
1289 dev_err(cdns_ctrl->dev, "Failed to map DMA buffer\n"); in cadence_nand_cdma_transfer()
1294 cadence_nand_cdma_desc_prepare(cdns_ctrl, chip_nr, page, in cadence_nand_cdma_transfer()
1297 status = cadence_nand_cdma_send_and_wait(cdns_ctrl, thread_nr); in cadence_nand_cdma_transfer()
1299 dma_unmap_single(cdns_ctrl->dev, dma_buf, in cadence_nand_cdma_transfer()
1303 dma_unmap_single(cdns_ctrl->dev, dma_ctrl_dat, in cadence_nand_cdma_transfer()
1308 return cadence_nand_cdma_finish(cdns_ctrl); in cadence_nand_cdma_transfer()
1311 static void cadence_nand_set_timings(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_set_timings() argument
1315 cdns_ctrl->reg + ASYNC_TOGGLE_TIMINGS); in cadence_nand_set_timings()
1316 writel_relaxed(t->timings0, cdns_ctrl->reg + TIMINGS0); in cadence_nand_set_timings()
1317 writel_relaxed(t->timings1, cdns_ctrl->reg + TIMINGS1); in cadence_nand_set_timings()
1318 writel_relaxed(t->timings2, cdns_ctrl->reg + TIMINGS2); in cadence_nand_set_timings()
1320 if (cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_set_timings()
1321 writel_relaxed(t->dll_phy_ctrl, cdns_ctrl->reg + DLL_PHY_CTRL); in cadence_nand_set_timings()
1323 writel_relaxed(t->phy_ctrl, cdns_ctrl->reg + PHY_CTRL); in cadence_nand_set_timings()
1325 if (cdns_ctrl->caps2.is_phy_type_dll) { in cadence_nand_set_timings()
1326 writel_relaxed(0, cdns_ctrl->reg + PHY_TSEL); in cadence_nand_set_timings()
1327 writel_relaxed(2, cdns_ctrl->reg + PHY_DQ_TIMING); in cadence_nand_set_timings()
1329 cdns_ctrl->reg + PHY_DQS_TIMING); in cadence_nand_set_timings()
1331 cdns_ctrl->reg + PHY_GATE_LPBK_CTRL); in cadence_nand_set_timings()
1333 cdns_ctrl->reg + PHY_DLL_MASTER_CTRL); in cadence_nand_set_timings()
1334 writel_relaxed(0, cdns_ctrl->reg + PHY_DLL_SLAVE_CTRL); in cadence_nand_set_timings()
1340 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_select_target() local
1343 if (chip == cdns_ctrl->selected_chip) in cadence_nand_select_target()
1346 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_select_target()
1351 cadence_nand_set_timings(cdns_ctrl, &cdns_chip->timings); in cadence_nand_select_target()
1353 cadence_nand_set_ecc_strength(cdns_ctrl, in cadence_nand_select_target()
1356 cadence_nand_set_erase_detection(cdns_ctrl, true, in cadence_nand_select_target()
1359 cdns_ctrl->curr_trans_type = -1; in cadence_nand_select_target()
1360 cdns_ctrl->selected_chip = chip; in cadence_nand_select_target()
1367 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_erase() local
1372 cadence_nand_cdma_desc_prepare(cdns_ctrl, in cadence_nand_erase()
1376 status = cadence_nand_cdma_send_and_wait(cdns_ctrl, thread_nr); in cadence_nand_erase()
1378 dev_err(cdns_ctrl->dev, "erase operation failed\n"); in cadence_nand_erase()
1382 status = cadence_nand_cdma_finish(cdns_ctrl); in cadence_nand_erase()
1392 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_bbm() local
1398 cadence_nand_set_skip_bytes_conf(cdns_ctrl, 0, 0, 0); in cadence_nand_read_bbm()
1404 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_bbm()
1406 page, cdns_ctrl->buf, NULL, in cadence_nand_read_bbm()
1410 dev_err(cdns_ctrl->dev, "read BBM failed\n"); in cadence_nand_read_bbm()
1414 memcpy(buf + cdns_chip->bbm_offs, cdns_ctrl->buf, cdns_chip->bbm_len); in cadence_nand_read_bbm()
1423 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_write_page() local
1433 cadence_nand_set_skip_bytes_conf(cdns_ctrl, cdns_chip->bbm_len, in cadence_nand_write_page()
1443 memset(cdns_ctrl->buf + mtd->writesize, 0xFF, in cadence_nand_write_page()
1447 cadence_nand_set_skip_marker_val(cdns_ctrl, marker_val); in cadence_nand_write_page()
1451 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, mtd->writesize) && in cadence_nand_write_page()
1452 cdns_ctrl->caps2.data_control_supp) { in cadence_nand_write_page()
1458 oob = cdns_ctrl->buf + mtd->writesize; in cadence_nand_write_page()
1460 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_write_page()
1467 dev_err(cdns_ctrl->dev, "write page failed\n"); in cadence_nand_write_page()
1476 memcpy(cdns_ctrl->buf + mtd->writesize, chip->oob_poi, in cadence_nand_write_page()
1480 memcpy(cdns_ctrl->buf, buf, mtd->writesize); in cadence_nand_write_page()
1484 return cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_write_page()
1486 page, cdns_ctrl->buf, NULL, in cadence_nand_write_page()
1494 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_write_oob() local
1497 memset(cdns_ctrl->buf, 0xFF, mtd->writesize); in cadence_nand_write_oob()
1499 return cadence_nand_write_page(chip, cdns_ctrl->buf, 1, page); in cadence_nand_write_oob()
1506 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_write_page_raw() local
1514 void *tmp_buf = cdns_ctrl->buf; in cadence_nand_write_page_raw()
1531 cadence_nand_set_skip_bytes_conf(cdns_ctrl, 0, 0, 0); in cadence_nand_write_page_raw()
1595 return cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_write_page_raw()
1597 page, cdns_ctrl->buf, NULL, in cadence_nand_write_page_raw()
1612 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_page() local
1622 cadence_nand_set_skip_bytes_conf(cdns_ctrl, cdns_chip->bbm_len, in cadence_nand_read_page()
1630 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, mtd->writesize) && in cadence_nand_read_page()
1631 cdns_ctrl->caps2.data_control_supp) { in cadence_nand_read_page()
1637 oob = cdns_ctrl->buf + mtd->writesize; in cadence_nand_read_page()
1640 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_page()
1649 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_page()
1651 page, cdns_ctrl->buf, in cadence_nand_read_page()
1656 memcpy(buf, cdns_ctrl->buf, mtd->writesize); in cadence_nand_read_page()
1659 cdns_ctrl->buf + mtd->writesize, in cadence_nand_read_page()
1670 cdns_ctrl->cdma_desc->status); in cadence_nand_read_page()
1677 dev_err(cdns_ctrl->dev, "read page failed\n"); in cadence_nand_read_page()
1691 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_oob() local
1693 return cadence_nand_read_page(chip, cdns_ctrl->buf, 1, page); in cadence_nand_read_oob()
1699 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_read_page_raw() local
1707 void *tmp_buf = cdns_ctrl->buf; in cadence_nand_read_page_raw()
1715 cadence_nand_set_skip_bytes_conf(cdns_ctrl, 0, 0, 0); in cadence_nand_read_page_raw()
1718 status = cadence_nand_cdma_transfer(cdns_ctrl, in cadence_nand_read_page_raw()
1720 page, cdns_ctrl->buf, NULL, in cadence_nand_read_page_raw()
1730 dev_err(cdns_ctrl->dev, "read raw page failed\n"); in cadence_nand_read_page_raw()
1811 static int cadence_nand_slave_dma_transfer(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_slave_dma_transfer() argument
1823 chan = cdns_ctrl->dmac; in cadence_nand_slave_dma_transfer()
1828 dev_err(cdns_ctrl->dev, "Failed to map DMA buffer\n"); in cadence_nand_slave_dma_transfer()
1833 src_dma = cdns_ctrl->io.dma; in cadence_nand_slave_dma_transfer()
1837 dst_dma = cdns_ctrl->io.dma; in cadence_nand_slave_dma_transfer()
1840 tx = dmaengine_prep_dma_memcpy(cdns_ctrl->dmac, dst_dma, src_dma, len, in cadence_nand_slave_dma_transfer()
1843 dev_err(cdns_ctrl->dev, "Failed to prepare DMA memcpy\n"); in cadence_nand_slave_dma_transfer()
1852 dev_err(cdns_ctrl->dev, "Failed to do DMA tx_submit\n"); in cadence_nand_slave_dma_transfer()
1856 dma_async_issue_pending(cdns_ctrl->dmac); in cadence_nand_slave_dma_transfer()
1859 dma_unmap_single(cdns_ctrl->dev, buf_dma, len, dir); in cadence_nand_slave_dma_transfer()
1864 dma_unmap_single(cdns_ctrl->dev, buf_dma, len, dir); in cadence_nand_slave_dma_transfer()
1867 dev_dbg(cdns_ctrl->dev, "Fall back to CPU I/O\n"); in cadence_nand_slave_dma_transfer()
1872 static int cadence_nand_read_buf(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_read_buf() argument
1880 status = cadence_nand_wait_on_sdma(cdns_ctrl, &thread_nr, &sdma_size); in cadence_nand_read_buf()
1884 if (!cdns_ctrl->caps1->has_dma) { in cadence_nand_read_buf()
1888 ioread32_rep(cdns_ctrl->io.virt, buf, len_in_words); in cadence_nand_read_buf()
1891 ioread32_rep(cdns_ctrl->io.virt, cdns_ctrl->buf, in cadence_nand_read_buf()
1894 memcpy(buf + (len_in_words << 2), cdns_ctrl->buf, in cadence_nand_read_buf()
1900 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, len)) { in cadence_nand_read_buf()
1901 status = cadence_nand_slave_dma_transfer(cdns_ctrl, buf, in cadence_nand_read_buf()
1902 cdns_ctrl->io.dma, in cadence_nand_read_buf()
1907 dev_warn(cdns_ctrl->dev, in cadence_nand_read_buf()
1912 status = cadence_nand_slave_dma_transfer(cdns_ctrl, cdns_ctrl->buf, in cadence_nand_read_buf()
1913 cdns_ctrl->io.dma, in cadence_nand_read_buf()
1917 dev_err(cdns_ctrl->dev, "Slave DMA transfer failed"); in cadence_nand_read_buf()
1921 memcpy(buf, cdns_ctrl->buf, len); in cadence_nand_read_buf()
1926 static int cadence_nand_write_buf(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_write_buf() argument
1934 status = cadence_nand_wait_on_sdma(cdns_ctrl, &thread_nr, &sdma_size); in cadence_nand_write_buf()
1938 if (!cdns_ctrl->caps1->has_dma) { in cadence_nand_write_buf()
1941 iowrite32_rep(cdns_ctrl->io.virt, buf, len_in_words); in cadence_nand_write_buf()
1944 memcpy(cdns_ctrl->buf, buf + (len_in_words << 2), in cadence_nand_write_buf()
1947 iowrite32_rep(cdns_ctrl->io.virt, cdns_ctrl->buf, in cadence_nand_write_buf()
1954 if (cadence_nand_dma_buf_ok(cdns_ctrl, buf, len)) { in cadence_nand_write_buf()
1955 status = cadence_nand_slave_dma_transfer(cdns_ctrl, (void *)buf, in cadence_nand_write_buf()
1956 cdns_ctrl->io.dma, in cadence_nand_write_buf()
1961 dev_warn(cdns_ctrl->dev, in cadence_nand_write_buf()
1966 memcpy(cdns_ctrl->buf, buf, len); in cadence_nand_write_buf()
1968 status = cadence_nand_slave_dma_transfer(cdns_ctrl, cdns_ctrl->buf, in cadence_nand_write_buf()
1969 cdns_ctrl->io.dma, in cadence_nand_write_buf()
1973 dev_err(cdns_ctrl->dev, "Slave DMA transfer failed"); in cadence_nand_write_buf()
1981 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_force_byte_access() local
1993 status = cadence_nand_set_access_width16(cdns_ctrl, !force_8bit); in cadence_nand_force_byte_access()
2001 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_opcode() local
2018 ret = cadence_nand_generic_cmd_send(cdns_ctrl, in cadence_nand_cmd_opcode()
2022 dev_err(cdns_ctrl->dev, "send cmd %x failed\n", in cadence_nand_cmd_opcode()
2031 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_address() local
2062 ret = cadence_nand_generic_cmd_send(cdns_ctrl, in cadence_nand_cmd_address()
2066 dev_err(cdns_ctrl->dev, "send address %llx failed\n", address); in cadence_nand_cmd_address()
2115 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_data() local
2142 dev_err(cdns_ctrl->dev, in cadence_nand_cmd_data()
2148 ret = cadence_nand_generic_cmd_send(cdns_ctrl, in cadence_nand_cmd_data()
2152 dev_err(cdns_ctrl->dev, "send generic data cmd failed\n"); in cadence_nand_cmd_data()
2159 ret = cadence_nand_read_buf(cdns_ctrl, buf, len); in cadence_nand_cmd_data()
2163 ret = cadence_nand_write_buf(cdns_ctrl, buf, len); in cadence_nand_cmd_data()
2167 dev_err(cdns_ctrl->dev, "data transfer failed for generic command\n"); in cadence_nand_cmd_data()
2174 dev_err(cdns_ctrl->dev, in cadence_nand_cmd_data()
2187 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_cmd_waitrdy() local
2192 status = cadence_nand_wait_for_value(cdns_ctrl, RBN_SETINGS, in cadence_nand_cmd_waitrdy()
2311 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_setup_interface() local
2315 u32 board_delay = cdns_ctrl->board_delay; in cadence_nand_setup_interface()
2317 cdns_ctrl->nf_clk_rate); in cadence_nand_setup_interface()
2322 u32 if_skew = cdns_ctrl->caps1->if_skew; in cadence_nand_setup_interface()
2338 if (cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_setup_interface()
2469 dev_dbg(cdns_ctrl->dev, "ASYNC_TOGGLE_TIMINGS_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2489 dev_dbg(cdns_ctrl->dev, "TIMINGS0_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2510 dev_dbg(cdns_ctrl->dev, "TIMINGS1_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2523 dev_dbg(cdns_ctrl->dev, "TIMINGS2_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2525 if (cdns_ctrl->caps2.is_phy_type_dll) { in cadence_nand_setup_interface()
2535 dev_dbg(cdns_ctrl->dev, "DLL_PHY_CTRL_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2560 if (!cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_setup_interface()
2568 dev_warn(cdns_ctrl->dev, in cadence_nand_setup_interface()
2573 if (cdns_ctrl->caps2.is_phy_type_dll) in cadence_nand_setup_interface()
2576 dev_dbg(cdns_ctrl->dev, "PHY_CTRL_REG_SDR\t%x\n", reg); in cadence_nand_setup_interface()
2578 if (cdns_ctrl->caps2.is_phy_type_dll) { in cadence_nand_setup_interface()
2579 dev_dbg(cdns_ctrl->dev, "PHY_TSEL_REG_SDR\t%x\n", 0); in cadence_nand_setup_interface()
2580 dev_dbg(cdns_ctrl->dev, "PHY_DQ_TIMING_REG_SDR\t%x\n", 2); in cadence_nand_setup_interface()
2581 dev_dbg(cdns_ctrl->dev, "PHY_DQS_TIMING_REG_SDR\t%x\n", in cadence_nand_setup_interface()
2586 dev_dbg(cdns_ctrl->dev, "PHY_GATE_LPBK_CTRL_REG_SDR\t%x\n", in cadence_nand_setup_interface()
2590 dev_dbg(cdns_ctrl->dev, "PHY_DLL_MASTER_CTRL_REG_SDR\t%lx\n", in cadence_nand_setup_interface()
2592 dev_dbg(cdns_ctrl->dev, "PHY_DLL_SLAVE_CTRL_REG_SDR\t%x\n", 0); in cadence_nand_setup_interface()
2600 struct cdns_nand_ctrl *cdns_ctrl = to_cdns_nand_ctrl(chip->controller); in cadence_nand_attach_chip() local
2607 ret = cadence_nand_set_access_width16(cdns_ctrl, true); in cadence_nand_attach_chip()
2624 &cdns_ctrl->ecc_caps, in cadence_nand_attach_chip()
2627 dev_err(cdns_ctrl->dev, "ECC configuration failed\n"); in cadence_nand_attach_chip()
2631 dev_dbg(cdns_ctrl->dev, in cadence_nand_attach_chip()
2642 if (cdns_chip->avail_oob_size > cdns_ctrl->bch_metadata_size) in cadence_nand_attach_chip()
2643 cdns_chip->avail_oob_size = cdns_ctrl->bch_metadata_size; in cadence_nand_attach_chip()
2649 ret = cadence_nand_get_ecc_strength_idx(cdns_ctrl, chip->ecc.strength); in cadence_nand_attach_chip()
2655 if (cadence_nand_wait_for_value(cdns_ctrl, CTRL_STATUS, in cadence_nand_attach_chip()
2660 cadence_nand_set_ecc_strength(cdns_ctrl, in cadence_nand_attach_chip()
2663 cadence_nand_set_erase_detection(cdns_ctrl, true, in cadence_nand_attach_chip()
2676 if ((mtd->writesize + mtd->oobsize) > cdns_ctrl->buf_size) in cadence_nand_attach_chip()
2677 cdns_ctrl->buf_size = mtd->writesize + mtd->oobsize; in cadence_nand_attach_chip()
2680 ret = dma_set_mask(cdns_ctrl->dev, DMA_BIT_MASK(32)); in cadence_nand_attach_chip()
2682 dev_err(cdns_ctrl->dev, "no usable DMA configuration\n"); in cadence_nand_attach_chip()
2697 static int cadence_nand_chip_init(struct cdns_nand_ctrl *cdns_ctrl, in cadence_nand_chip_init() argument
2708 dev_err(cdns_ctrl->dev, "missing/invalid reg property\n"); in cadence_nand_chip_init()
2713 cdns_chip = devm_kzalloc(cdns_ctrl->dev, sizeof(*cdns_chip) + in cadence_nand_chip_init()
2717 dev_err(cdns_ctrl->dev, "could not allocate chip structure\n"); in cadence_nand_chip_init()
2727 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2733 if (cs >= cdns_ctrl->caps2.max_banks) { in cadence_nand_chip_init()
2734 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2736 cs, cdns_ctrl->caps2.max_banks); in cadence_nand_chip_init()
2740 if (test_and_set_bit(cs, &cdns_ctrl->assigned_cs)) { in cadence_nand_chip_init()
2741 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2750 chip->controller = &cdns_ctrl->controller; in cadence_nand_chip_init()
2754 mtd->dev.parent = cdns_ctrl->dev; in cadence_nand_chip_init()
2764 dev_err(cdns_ctrl->dev, "could not scan the nand chip\n"); in cadence_nand_chip_init()
2770 dev_err(cdns_ctrl->dev, in cadence_nand_chip_init()
2776 list_add_tail(&cdns_chip->node, &cdns_ctrl->chips); in cadence_nand_chip_init()
2781 static void cadence_nand_chips_cleanup(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_chips_cleanup() argument
2787 list_for_each_entry_safe(entry, temp, &cdns_ctrl->chips, node) { in cadence_nand_chips_cleanup()
2796 static int cadence_nand_chips_init(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_chips_init() argument
2798 struct device_node *np = cdns_ctrl->dev->of_node; in cadence_nand_chips_init()
2800 int max_cs = cdns_ctrl->caps2.max_banks; in cadence_nand_chips_init()
2806 dev_err(cdns_ctrl->dev, in cadence_nand_chips_init()
2813 ret = cadence_nand_chip_init(cdns_ctrl, nand_np); in cadence_nand_chips_init()
2816 cadence_nand_chips_cleanup(cdns_ctrl); in cadence_nand_chips_init()
2825 cadence_nand_irq_cleanup(int irqnum, struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_irq_cleanup() argument
2828 writel_relaxed(INTR_ENABLE_INTR_EN, cdns_ctrl->reg + INTR_ENABLE); in cadence_nand_irq_cleanup()
2831 static int cadence_nand_init(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_init() argument
2836 cdns_ctrl->cdma_desc = dma_alloc_coherent(cdns_ctrl->dev, in cadence_nand_init()
2837 sizeof(*cdns_ctrl->cdma_desc), in cadence_nand_init()
2838 &cdns_ctrl->dma_cdma_desc, in cadence_nand_init()
2840 if (!cdns_ctrl->dma_cdma_desc) in cadence_nand_init()
2843 cdns_ctrl->buf_size = SZ_16K; in cadence_nand_init()
2844 cdns_ctrl->buf = kmalloc(cdns_ctrl->buf_size, GFP_KERNEL); in cadence_nand_init()
2845 if (!cdns_ctrl->buf) { in cadence_nand_init()
2850 if (devm_request_irq(cdns_ctrl->dev, cdns_ctrl->irq, cadence_nand_isr, in cadence_nand_init()
2852 cdns_ctrl)) { in cadence_nand_init()
2853 dev_err(cdns_ctrl->dev, "Unable to allocate IRQ\n"); in cadence_nand_init()
2858 spin_lock_init(&cdns_ctrl->irq_lock); in cadence_nand_init()
2859 init_completion(&cdns_ctrl->complete); in cadence_nand_init()
2861 ret = cadence_nand_hw_init(cdns_ctrl); in cadence_nand_init()
2868 if (cdns_ctrl->caps1->has_dma) { in cadence_nand_init()
2869 cdns_ctrl->dmac = dma_request_channel(mask, NULL, NULL); in cadence_nand_init()
2870 if (!cdns_ctrl->dmac) { in cadence_nand_init()
2871 dev_err(cdns_ctrl->dev, in cadence_nand_init()
2878 nand_controller_init(&cdns_ctrl->controller); in cadence_nand_init()
2879 INIT_LIST_HEAD(&cdns_ctrl->chips); in cadence_nand_init()
2881 cdns_ctrl->controller.ops = &cadence_nand_controller_ops; in cadence_nand_init()
2882 cdns_ctrl->curr_corr_str_idx = 0xFF; in cadence_nand_init()
2884 ret = cadence_nand_chips_init(cdns_ctrl); in cadence_nand_init()
2886 dev_err(cdns_ctrl->dev, "Failed to register MTD: %d\n", in cadence_nand_init()
2891 kfree(cdns_ctrl->buf); in cadence_nand_init()
2892 cdns_ctrl->buf = kzalloc(cdns_ctrl->buf_size, GFP_KERNEL); in cadence_nand_init()
2893 if (!cdns_ctrl->buf) { in cadence_nand_init()
2901 if (cdns_ctrl->dmac) in cadence_nand_init()
2902 dma_release_channel(cdns_ctrl->dmac); in cadence_nand_init()
2905 cadence_nand_irq_cleanup(cdns_ctrl->irq, cdns_ctrl); in cadence_nand_init()
2908 kfree(cdns_ctrl->buf); in cadence_nand_init()
2911 dma_free_coherent(cdns_ctrl->dev, sizeof(struct cadence_nand_cdma_desc), in cadence_nand_init()
2912 cdns_ctrl->cdma_desc, cdns_ctrl->dma_cdma_desc); in cadence_nand_init()
2918 static void cadence_nand_remove(struct cdns_nand_ctrl *cdns_ctrl) in cadence_nand_remove() argument
2920 cadence_nand_chips_cleanup(cdns_ctrl); in cadence_nand_remove()
2921 cadence_nand_irq_cleanup(cdns_ctrl->irq, cdns_ctrl); in cadence_nand_remove()
2922 kfree(cdns_ctrl->buf); in cadence_nand_remove()
2923 dma_free_coherent(cdns_ctrl->dev, sizeof(struct cadence_nand_cdma_desc), in cadence_nand_remove()
2924 cdns_ctrl->cdma_desc, cdns_ctrl->dma_cdma_desc); in cadence_nand_remove()
2926 if (cdns_ctrl->dmac) in cadence_nand_remove()
2927 dma_release_channel(cdns_ctrl->dmac); in cadence_nand_remove()
2931 struct cdns_nand_ctrl cdns_ctrl; member
2953 struct cdns_nand_ctrl *cdns_ctrl; in cadence_nand_dt_probe() local
2972 cdns_ctrl = &dt->cdns_ctrl; in cadence_nand_dt_probe()
2973 cdns_ctrl->caps1 = devdata; in cadence_nand_dt_probe()
2975 cdns_ctrl->dev = &ofdev->dev; in cadence_nand_dt_probe()
2976 cdns_ctrl->irq = platform_get_irq(ofdev, 0); in cadence_nand_dt_probe()
2977 if (cdns_ctrl->irq < 0) in cadence_nand_dt_probe()
2978 return cdns_ctrl->irq; in cadence_nand_dt_probe()
2980 dev_info(cdns_ctrl->dev, "IRQ: nr %d\n", cdns_ctrl->irq); in cadence_nand_dt_probe()
2982 cdns_ctrl->reg = devm_platform_ioremap_resource(ofdev, 0); in cadence_nand_dt_probe()
2983 if (IS_ERR(cdns_ctrl->reg)) in cadence_nand_dt_probe()
2984 return PTR_ERR(cdns_ctrl->reg); in cadence_nand_dt_probe()
2987 cdns_ctrl->io.dma = res->start; in cadence_nand_dt_probe()
2988 cdns_ctrl->io.virt = devm_ioremap_resource(&ofdev->dev, res); in cadence_nand_dt_probe()
2989 if (IS_ERR(cdns_ctrl->io.virt)) in cadence_nand_dt_probe()
2990 return PTR_ERR(cdns_ctrl->io.virt); in cadence_nand_dt_probe()
2992 dt->clk = devm_clk_get(cdns_ctrl->dev, "nf_clk"); in cadence_nand_dt_probe()
2996 cdns_ctrl->nf_clk_rate = clk_get_rate(dt->clk); in cadence_nand_dt_probe()
3002 dev_info(cdns_ctrl->dev, in cadence_nand_dt_probe()
3006 cdns_ctrl->board_delay = val; in cadence_nand_dt_probe()
3008 ret = cadence_nand_init(cdns_ctrl); in cadence_nand_dt_probe()
3020 cadence_nand_remove(&dt->cdns_ctrl); in cadence_nand_dt_remove()