Lines Matching refs:host
333 struct fsmc_nand_data *host; in fsmc_select_chip() local
335 host = container_of(mtd, struct fsmc_nand_data, mtd); in fsmc_select_chip()
345 if (host->select_chip) in fsmc_select_chip()
346 host->select_chip(chipnr, in fsmc_select_chip()
351 dev_err(host->dev, "unsupported chip-select %d\n", chipnr); in fsmc_select_chip()
362 struct fsmc_nand_data *host = container_of(mtd, in fsmc_cmd_ctrl() local
364 void __iomem *regs = host->regs_va; in fsmc_cmd_ctrl()
365 unsigned int bank = host->bank; in fsmc_cmd_ctrl()
371 this->IO_ADDR_R = host->cmd_va; in fsmc_cmd_ctrl()
372 this->IO_ADDR_W = host->cmd_va; in fsmc_cmd_ctrl()
374 this->IO_ADDR_R = host->addr_va; in fsmc_cmd_ctrl()
375 this->IO_ADDR_W = host->addr_va; in fsmc_cmd_ctrl()
377 this->IO_ADDR_R = host->data_va; in fsmc_cmd_ctrl()
378 this->IO_ADDR_W = host->data_va; in fsmc_cmd_ctrl()
448 struct fsmc_nand_data *host = container_of(mtd, in fsmc_enable_hwecc() local
450 void __iomem *regs = host->regs_va; in fsmc_enable_hwecc()
451 uint32_t bank = host->bank; in fsmc_enable_hwecc()
469 struct fsmc_nand_data *host = container_of(mtd, in fsmc_read_hwecc_ecc4() local
471 void __iomem *regs = host->regs_va; in fsmc_read_hwecc_ecc4()
472 uint32_t bank = host->bank; in fsmc_read_hwecc_ecc4()
484 dev_err(host->dev, "calculate ecc timed out\n"); in fsmc_read_hwecc_ecc4()
520 struct fsmc_nand_data *host = container_of(mtd, in fsmc_read_hwecc_ecc1() local
522 void __iomem *regs = host->regs_va; in fsmc_read_hwecc_ecc1()
523 uint32_t bank = host->bank; in fsmc_read_hwecc_ecc1()
550 struct fsmc_nand_data *host = param; in dma_complete() local
552 complete(&host->dma_access_complete); in dma_complete()
555 static int dma_xfer(struct fsmc_nand_data *host, void *buffer, int len, in dma_xfer() argument
568 chan = host->write_dma_chan; in dma_xfer()
570 chan = host->read_dma_chan; in dma_xfer()
579 dma_dst = host->data_pa; in dma_xfer()
581 dma_src = host->data_pa; in dma_xfer()
588 dev_err(host->dev, "device_prep_dma_memcpy error\n"); in dma_xfer()
594 tx->callback_param = host; in dma_xfer()
599 dev_err(host->dev, "dma_submit_error %d\n", cookie); in dma_xfer()
606 wait_for_completion_timeout(&host->dma_access_complete, in dma_xfer()
610 dev_err(host->dev, "wait_for_completion_timeout\n"); in dma_xfer()
677 struct fsmc_nand_data *host; in fsmc_read_buf_dma() local
679 host = container_of(mtd, struct fsmc_nand_data, mtd); in fsmc_read_buf_dma()
680 dma_xfer(host, buf, len, DMA_FROM_DEVICE); in fsmc_read_buf_dma()
692 struct fsmc_nand_data *host; in fsmc_write_buf_dma() local
694 host = container_of(mtd, struct fsmc_nand_data, mtd); in fsmc_write_buf_dma()
695 dma_xfer(host, (void *)buf, len, DMA_TO_DEVICE); in fsmc_write_buf_dma()
715 struct fsmc_nand_data *host = container_of(mtd, in fsmc_read_page_hwecc() local
717 struct fsmc_eccplace *ecc_place = host->ecc_place; in fsmc_read_page_hwecc()
785 struct fsmc_nand_data *host = container_of(mtd, in fsmc_bch8_correct_data() local
788 void __iomem *regs = host->regs_va; in fsmc_bch8_correct_data()
789 unsigned int bank = host->bank; in fsmc_bch8_correct_data()
930 struct fsmc_nand_data *host; in fsmc_nand_probe() local
955 host = devm_kzalloc(&pdev->dev, sizeof(*host), GFP_KERNEL); in fsmc_nand_probe()
956 if (!host) in fsmc_nand_probe()
960 host->data_va = devm_ioremap_resource(&pdev->dev, res); in fsmc_nand_probe()
961 if (IS_ERR(host->data_va)) in fsmc_nand_probe()
962 return PTR_ERR(host->data_va); in fsmc_nand_probe()
964 host->data_pa = (dma_addr_t)res->start; in fsmc_nand_probe()
967 host->addr_va = devm_ioremap_resource(&pdev->dev, res); in fsmc_nand_probe()
968 if (IS_ERR(host->addr_va)) in fsmc_nand_probe()
969 return PTR_ERR(host->addr_va); in fsmc_nand_probe()
972 host->cmd_va = devm_ioremap_resource(&pdev->dev, res); in fsmc_nand_probe()
973 if (IS_ERR(host->cmd_va)) in fsmc_nand_probe()
974 return PTR_ERR(host->cmd_va); in fsmc_nand_probe()
977 host->regs_va = devm_ioremap_resource(&pdev->dev, res); in fsmc_nand_probe()
978 if (IS_ERR(host->regs_va)) in fsmc_nand_probe()
979 return PTR_ERR(host->regs_va); in fsmc_nand_probe()
981 host->clk = clk_get(&pdev->dev, NULL); in fsmc_nand_probe()
982 if (IS_ERR(host->clk)) { in fsmc_nand_probe()
984 return PTR_ERR(host->clk); in fsmc_nand_probe()
987 ret = clk_prepare_enable(host->clk); in fsmc_nand_probe()
996 pid |= (readl(host->regs_va + resource_size(res) - 0x20 + 4 * i) & 255) << (i * 8); in fsmc_nand_probe()
997 host->pid = pid; in fsmc_nand_probe()
1003 host->bank = pdata->bank; in fsmc_nand_probe()
1004 host->select_chip = pdata->select_bank; in fsmc_nand_probe()
1005 host->partitions = pdata->partitions; in fsmc_nand_probe()
1006 host->nr_partitions = pdata->nr_partitions; in fsmc_nand_probe()
1007 host->dev = &pdev->dev; in fsmc_nand_probe()
1008 host->dev_timings = pdata->nand_timings; in fsmc_nand_probe()
1009 host->mode = pdata->mode; in fsmc_nand_probe()
1011 if (host->mode == USE_DMA_ACCESS) in fsmc_nand_probe()
1012 init_completion(&host->dma_access_complete); in fsmc_nand_probe()
1015 mtd = &host->mtd; in fsmc_nand_probe()
1016 nand = &host->nand; in fsmc_nand_probe()
1018 nand->priv = host; in fsmc_nand_probe()
1020 host->mtd.dev.parent = &pdev->dev; in fsmc_nand_probe()
1021 nand->IO_ADDR_R = host->data_va; in fsmc_nand_probe()
1022 nand->IO_ADDR_W = host->data_va; in fsmc_nand_probe()
1041 switch (host->mode) { in fsmc_nand_probe()
1045 host->read_dma_chan = dma_request_channel(mask, filter, in fsmc_nand_probe()
1047 if (!host->read_dma_chan) { in fsmc_nand_probe()
1051 host->write_dma_chan = dma_request_channel(mask, filter, in fsmc_nand_probe()
1053 if (!host->write_dma_chan) { in fsmc_nand_probe()
1068 fsmc_nand_setup(host->regs_va, host->bank, in fsmc_nand_probe()
1070 host->dev_timings); in fsmc_nand_probe()
1072 if (AMBA_REV_BITS(host->pid) >= 8) { in fsmc_nand_probe()
1083 if (nand_scan_ident(&host->mtd, 1, NULL)) { in fsmc_nand_probe()
1089 if (AMBA_REV_BITS(host->pid) >= 8) { in fsmc_nand_probe()
1090 switch (host->mtd.oobsize) { in fsmc_nand_probe()
1093 host->ecc_place = &fsmc_ecc4_sp_place; in fsmc_nand_probe()
1097 host->ecc_place = &fsmc_ecc4_lp_place; in fsmc_nand_probe()
1101 host->ecc_place = &fsmc_ecc4_lp_place; in fsmc_nand_probe()
1105 host->ecc_place = &fsmc_ecc4_lp_place; in fsmc_nand_probe()
1109 host->ecc_place = &fsmc_ecc4_lp_place; in fsmc_nand_probe()
1141 switch (host->mtd.oobsize) { in fsmc_nand_probe()
1162 if (nand_scan_tail(&host->mtd)) { in fsmc_nand_probe()
1177 host->mtd.name = "nand"; in fsmc_nand_probe()
1179 ret = mtd_device_parse_register(&host->mtd, NULL, &ppdata, in fsmc_nand_probe()
1180 host->partitions, host->nr_partitions); in fsmc_nand_probe()
1184 platform_set_drvdata(pdev, host); in fsmc_nand_probe()
1190 if (host->mode == USE_DMA_ACCESS) in fsmc_nand_probe()
1191 dma_release_channel(host->write_dma_chan); in fsmc_nand_probe()
1193 if (host->mode == USE_DMA_ACCESS) in fsmc_nand_probe()
1194 dma_release_channel(host->read_dma_chan); in fsmc_nand_probe()
1196 clk_disable_unprepare(host->clk); in fsmc_nand_probe()
1198 clk_put(host->clk); in fsmc_nand_probe()
1207 struct fsmc_nand_data *host = platform_get_drvdata(pdev); in fsmc_nand_remove() local
1209 if (host) { in fsmc_nand_remove()
1210 nand_release(&host->mtd); in fsmc_nand_remove()
1212 if (host->mode == USE_DMA_ACCESS) { in fsmc_nand_remove()
1213 dma_release_channel(host->write_dma_chan); in fsmc_nand_remove()
1214 dma_release_channel(host->read_dma_chan); in fsmc_nand_remove()
1216 clk_disable_unprepare(host->clk); in fsmc_nand_remove()
1217 clk_put(host->clk); in fsmc_nand_remove()
1226 struct fsmc_nand_data *host = dev_get_drvdata(dev); in fsmc_nand_suspend() local
1227 if (host) in fsmc_nand_suspend()
1228 clk_disable_unprepare(host->clk); in fsmc_nand_suspend()
1234 struct fsmc_nand_data *host = dev_get_drvdata(dev); in fsmc_nand_resume() local
1235 if (host) { in fsmc_nand_resume()
1236 clk_prepare_enable(host->clk); in fsmc_nand_resume()
1237 fsmc_nand_setup(host->regs_va, host->bank, in fsmc_nand_resume()
1238 host->nand.options & NAND_BUSWIDTH_16, in fsmc_nand_resume()
1239 host->dev_timings); in fsmc_nand_resume()