Lines Matching refs:xdev

353 	struct xilinx_dma_device *xdev;  member
457 readl_poll_timeout(chan->xdev->regs + chan->ctrl_offset + reg, val, \
463 return ioread32(chan->xdev->regs + reg); in dma_read()
468 iowrite32(value, chan->xdev->regs + reg); in dma_write()
515 writel(value_lsb, chan->xdev->regs + chan->desc_offset + reg); in vdma_desc_write_64()
518 writel(value_msb, chan->xdev->regs + chan->desc_offset + reg + 4); in vdma_desc_write_64()
523 lo_hi_writeq(value, chan->xdev->regs + chan->ctrl_offset + reg); in dma_writeq()
701 if (chan->xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { in xilinx_dma_free_tx_descriptor()
706 } else if (chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) { in xilinx_dma_free_tx_descriptor()
771 if (chan->xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_free_chan_resources()
786 if (chan->xdev->dma_config->dmatype != XDMA_TYPE_AXIDMA) { in xilinx_dma_free_chan_resources()
882 if (chan->xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_alloc_chan_resources()
925 } else if (chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) { in xilinx_dma_alloc_chan_resources()
940 (chan->xdev->dma_config->dmatype != XDMA_TYPE_AXIDMA)) { in xilinx_dma_alloc_chan_resources()
949 if (chan->xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_alloc_chan_resources()
957 if ((chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) && chan->has_sg) in xilinx_dma_alloc_chan_resources()
978 chan->xdev->max_buffer_len); in xilinx_dma_calc_copysize()
981 chan->xdev->common.copy_align) { in xilinx_dma_calc_copysize()
987 (1 << chan->xdev->common.copy_align)); in xilinx_dma_calc_copysize()
1016 if (chan->xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_tx_status()
1025 chan->xdev->max_buffer_len; in xilinx_dma_tx_status()
1261 hw->control & chan->xdev->max_buffer_len); in xilinx_cdma_start_transfer()
1304 if (chan->has_sg && !chan->xdev->mcdma) in xilinx_dma_start_transfer()
1308 if (chan->has_sg && chan->xdev->mcdma) { in xilinx_dma_start_transfer()
1330 if (chan->has_sg && !chan->xdev->mcdma) { in xilinx_dma_start_transfer()
1337 } else if (chan->has_sg && chan->xdev->mcdma) { in xilinx_dma_start_transfer()
1365 hw->control & chan->xdev->max_buffer_len); in xilinx_dma_start_transfer()
1549 if (chan->xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { in append_desc_queue()
1554 } else if (chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) { in append_desc_queue()
1574 if (chan->has_sg && (chan->xdev->dma_config->dmatype == XDMA_TYPE_VDMA) in append_desc_queue()
1726 if (!len || len > chan->xdev->max_buffer_len) in xilinx_cdma_prep_memcpy()
2086 if ((chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) && chan->has_sg) in xilinx_dma_terminate_all()
2366 static void xdma_disable_allclks(struct xilinx_dma_device *xdev) in xdma_disable_allclks() argument
2368 clk_disable_unprepare(xdev->rxs_clk); in xdma_disable_allclks()
2369 clk_disable_unprepare(xdev->rx_clk); in xdma_disable_allclks()
2370 clk_disable_unprepare(xdev->txs_clk); in xdma_disable_allclks()
2371 clk_disable_unprepare(xdev->tx_clk); in xdma_disable_allclks()
2372 clk_disable_unprepare(xdev->axi_clk); in xdma_disable_allclks()
2386 static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, in xilinx_dma_chan_probe() argument
2395 chan = devm_kzalloc(xdev->dev, sizeof(*chan), GFP_KERNEL); in xilinx_dma_chan_probe()
2399 chan->dev = xdev->dev; in xilinx_dma_chan_probe()
2400 chan->xdev = xdev; in xilinx_dma_chan_probe()
2402 chan->ext_addr = xdev->ext_addr; in xilinx_dma_chan_probe()
2423 dev_err(xdev->dev, "missing xlnx,datawidth property\n"); in xilinx_dma_chan_probe()
2433 xdev->common.copy_align = fls(width - 1); in xilinx_dma_chan_probe()
2443 if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { in xilinx_dma_chan_probe()
2447 if (xdev->flush_on_fsync == XILINX_DMA_FLUSH_BOTH || in xilinx_dma_chan_probe()
2448 xdev->flush_on_fsync == XILINX_DMA_FLUSH_MM2S) in xilinx_dma_chan_probe()
2457 chan->tdest = chan_id - xdev->nr_channels; in xilinx_dma_chan_probe()
2467 if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { in xilinx_dma_chan_probe()
2471 if (xdev->flush_on_fsync == XILINX_DMA_FLUSH_BOTH || in xilinx_dma_chan_probe()
2472 xdev->flush_on_fsync == XILINX_DMA_FLUSH_S2MM) in xilinx_dma_chan_probe()
2476 dev_err(xdev->dev, "Invalid channel compatible node\n"); in xilinx_dma_chan_probe()
2485 dev_err(xdev->dev, "unable to request IRQ %d\n", chan->irq); in xilinx_dma_chan_probe()
2489 if (xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_chan_probe()
2492 } else if (xdev->dma_config->dmatype == XDMA_TYPE_CDMA) { in xilinx_dma_chan_probe()
2501 if (xdev->dma_config->dmatype != XDMA_TYPE_VDMA) { in xilinx_dma_chan_probe()
2517 chan->common.device = &xdev->common; in xilinx_dma_chan_probe()
2519 list_add_tail(&chan->common.device_node, &xdev->common.channels); in xilinx_dma_chan_probe()
2520 xdev->chan[chan->id] = chan; in xilinx_dma_chan_probe()
2525 dev_err(xdev->dev, "Reset channel failed\n"); in xilinx_dma_chan_probe()
2542 static int xilinx_dma_child_probe(struct xilinx_dma_device *xdev, in xilinx_dma_child_probe() argument
2548 if ((ret < 0) && xdev->mcdma) in xilinx_dma_child_probe()
2549 dev_warn(xdev->dev, "missing dma-channels property\n"); in xilinx_dma_child_probe()
2552 xilinx_dma_chan_probe(xdev, node, xdev->chan_id++); in xilinx_dma_child_probe()
2554 xdev->nr_channels += nr_channels; in xilinx_dma_child_probe()
2569 struct xilinx_dma_device *xdev = ofdma->of_dma_data; in of_dma_xilinx_xlate() local
2572 if (chan_id >= xdev->nr_channels || !xdev->chan[chan_id]) in of_dma_xilinx_xlate()
2575 return dma_get_slave_channel(&xdev->chan[chan_id]->common); in of_dma_xilinx_xlate()
2613 struct xilinx_dma_device *xdev; in xilinx_dma_probe() local
2620 xdev = devm_kzalloc(&pdev->dev, sizeof(*xdev), GFP_KERNEL); in xilinx_dma_probe()
2621 if (!xdev) in xilinx_dma_probe()
2624 xdev->dev = &pdev->dev; in xilinx_dma_probe()
2630 xdev->dma_config = match->data; in xilinx_dma_probe()
2631 clk_init = xdev->dma_config->clk_init; in xilinx_dma_probe()
2635 err = clk_init(pdev, &xdev->axi_clk, &xdev->tx_clk, &xdev->txs_clk, in xilinx_dma_probe()
2636 &xdev->rx_clk, &xdev->rxs_clk); in xilinx_dma_probe()
2642 xdev->regs = devm_ioremap_resource(&pdev->dev, io); in xilinx_dma_probe()
2643 if (IS_ERR(xdev->regs)) in xilinx_dma_probe()
2644 return PTR_ERR(xdev->regs); in xilinx_dma_probe()
2647 xdev->max_buffer_len = GENMASK(XILINX_DMA_MAX_TRANS_LEN_MAX - 1, 0); in xilinx_dma_probe()
2649 if (xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_probe()
2650 xdev->mcdma = of_property_read_bool(node, "xlnx,mcdma"); in xilinx_dma_probe()
2655 dev_warn(xdev->dev, in xilinx_dma_probe()
2659 dev_warn(xdev->dev, "Please ensure that IP supports buffer length > 23 bits\n"); in xilinx_dma_probe()
2660 xdev->max_buffer_len = in xilinx_dma_probe()
2666 if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { in xilinx_dma_probe()
2670 dev_err(xdev->dev, in xilinx_dma_probe()
2676 &xdev->flush_on_fsync); in xilinx_dma_probe()
2678 dev_warn(xdev->dev, in xilinx_dma_probe()
2684 dev_warn(xdev->dev, "missing xlnx,addrwidth property\n"); in xilinx_dma_probe()
2687 xdev->ext_addr = true; in xilinx_dma_probe()
2689 xdev->ext_addr = false; in xilinx_dma_probe()
2692 dma_set_mask(xdev->dev, DMA_BIT_MASK(addr_width)); in xilinx_dma_probe()
2695 xdev->common.dev = &pdev->dev; in xilinx_dma_probe()
2697 INIT_LIST_HEAD(&xdev->common.channels); in xilinx_dma_probe()
2698 if (!(xdev->dma_config->dmatype == XDMA_TYPE_CDMA)) { in xilinx_dma_probe()
2699 dma_cap_set(DMA_SLAVE, xdev->common.cap_mask); in xilinx_dma_probe()
2700 dma_cap_set(DMA_PRIVATE, xdev->common.cap_mask); in xilinx_dma_probe()
2703 xdev->common.device_alloc_chan_resources = in xilinx_dma_probe()
2705 xdev->common.device_free_chan_resources = in xilinx_dma_probe()
2707 xdev->common.device_terminate_all = xilinx_dma_terminate_all; in xilinx_dma_probe()
2708 xdev->common.device_tx_status = xilinx_dma_tx_status; in xilinx_dma_probe()
2709 xdev->common.device_issue_pending = xilinx_dma_issue_pending; in xilinx_dma_probe()
2710 if (xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { in xilinx_dma_probe()
2711 dma_cap_set(DMA_CYCLIC, xdev->common.cap_mask); in xilinx_dma_probe()
2712 xdev->common.device_prep_slave_sg = xilinx_dma_prep_slave_sg; in xilinx_dma_probe()
2713 xdev->common.device_prep_dma_cyclic = in xilinx_dma_probe()
2715 xdev->common.device_prep_interleaved_dma = in xilinx_dma_probe()
2718 xdev->common.residue_granularity = in xilinx_dma_probe()
2720 } else if (xdev->dma_config->dmatype == XDMA_TYPE_CDMA) { in xilinx_dma_probe()
2721 dma_cap_set(DMA_MEMCPY, xdev->common.cap_mask); in xilinx_dma_probe()
2722 xdev->common.device_prep_dma_memcpy = xilinx_cdma_prep_memcpy; in xilinx_dma_probe()
2724 xdev->common.device_prep_interleaved_dma = in xilinx_dma_probe()
2728 platform_set_drvdata(pdev, xdev); in xilinx_dma_probe()
2732 err = xilinx_dma_child_probe(xdev, child); in xilinx_dma_probe()
2737 if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { in xilinx_dma_probe()
2738 for (i = 0; i < xdev->nr_channels; i++) in xilinx_dma_probe()
2739 if (xdev->chan[i]) in xilinx_dma_probe()
2740 xdev->chan[i]->num_frms = num_frames; in xilinx_dma_probe()
2744 dma_async_device_register(&xdev->common); in xilinx_dma_probe()
2747 xdev); in xilinx_dma_probe()
2750 dma_async_device_unregister(&xdev->common); in xilinx_dma_probe()
2754 if (xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) in xilinx_dma_probe()
2756 else if (xdev->dma_config->dmatype == XDMA_TYPE_CDMA) in xilinx_dma_probe()
2764 xdma_disable_allclks(xdev); in xilinx_dma_probe()
2766 for (i = 0; i < xdev->nr_channels; i++) in xilinx_dma_probe()
2767 if (xdev->chan[i]) in xilinx_dma_probe()
2768 xilinx_dma_chan_remove(xdev->chan[i]); in xilinx_dma_probe()
2781 struct xilinx_dma_device *xdev = platform_get_drvdata(pdev); in xilinx_dma_remove() local
2786 dma_async_device_unregister(&xdev->common); in xilinx_dma_remove()
2788 for (i = 0; i < xdev->nr_channels; i++) in xilinx_dma_remove()
2789 if (xdev->chan[i]) in xilinx_dma_remove()
2790 xilinx_dma_chan_remove(xdev->chan[i]); in xilinx_dma_remove()
2792 xdma_disable_allclks(xdev); in xilinx_dma_remove()