Lines Matching refs:tdma

122 	struct tegra_adma		*tdma;  member
155 static inline void tdma_write(struct tegra_adma *tdma, u32 reg, u32 val) in tdma_write() argument
157 writel(val, tdma->base_addr + reg); in tdma_write()
160 static inline u32 tdma_read(struct tegra_adma *tdma, u32 reg) in tdma_read() argument
162 return readl(tdma->base_addr + reg); in tdma_read()
188 return tdc->tdma->dev; in tdc2dev()
206 static int tegra_adma_init(struct tegra_adma *tdma) in tegra_adma_init() argument
212 tdma_write(tdma, ADMA_GLOBAL_INT_CLEAR, 0x1); in tegra_adma_init()
215 tdma_write(tdma, ADMA_GLOBAL_SOFT_RESET, 0x1); in tegra_adma_init()
219 tdma->base_addr + ADMA_GLOBAL_SOFT_RESET, in tegra_adma_init()
225 tdma_write(tdma, ADMA_GLOBAL_CMD, 1); in tegra_adma_init()
233 struct tegra_adma *tdma = tdc->tdma; in tegra_adma_request_alloc() local
242 dev_err(tdma->dev, "invalid DMA request\n"); in tegra_adma_request_alloc()
246 if (test_and_set_bit(sreq_index, &tdma->tx_requests_reserved)) { in tegra_adma_request_alloc()
247 dev_err(tdma->dev, "DMA request reserved\n"); in tegra_adma_request_alloc()
254 dev_err(tdma->dev, "invalid DMA request\n"); in tegra_adma_request_alloc()
258 if (test_and_set_bit(sreq_index, &tdma->rx_requests_reserved)) { in tegra_adma_request_alloc()
259 dev_err(tdma->dev, "DMA request reserved\n"); in tegra_adma_request_alloc()
265 dev_WARN(tdma->dev, "channel %s has invalid transfer type\n", in tegra_adma_request_alloc()
278 struct tegra_adma *tdma = tdc->tdma; in tegra_adma_request_free() local
285 clear_bit(tdc->sreq_index, &tdma->tx_requests_reserved); in tegra_adma_request_free()
289 clear_bit(tdc->sreq_index, &tdma->rx_requests_reserved); in tegra_adma_request_free()
293 dev_WARN(tdma->dev, "channel %s has invalid transfer type\n", in tegra_adma_request_free()
610 struct tegra_adma *tdma = ofdma->of_dma_data; in tegra_dma_of_xlate() local
621 dev_err(tdma->dev, "DMA request must not be 0\n"); in tegra_dma_of_xlate()
625 chan = dma_get_any_slave_channel(&tdma->dma_dev); in tegra_dma_of_xlate()
637 struct tegra_adma *tdma = dev_get_drvdata(dev); in tegra_adma_runtime_suspend() local
639 tdma->global_cmd = tdma_read(tdma, ADMA_GLOBAL_CMD); in tegra_adma_runtime_suspend()
646 struct tegra_adma *tdma = dev_get_drvdata(dev); in tegra_adma_runtime_resume() local
653 tdma_write(tdma, ADMA_GLOBAL_CMD, tdma->global_cmd); in tegra_adma_runtime_resume()
671 struct tegra_adma *tdma; in tegra_adma_probe() local
681 tdma = devm_kzalloc(&pdev->dev, sizeof(*tdma) + cdata->nr_channels * in tegra_adma_probe()
683 if (!tdma) in tegra_adma_probe()
686 tdma->dev = &pdev->dev; in tegra_adma_probe()
687 tdma->nr_channels = cdata->nr_channels; in tegra_adma_probe()
688 platform_set_drvdata(pdev, tdma); in tegra_adma_probe()
691 tdma->base_addr = devm_ioremap_resource(&pdev->dev, res); in tegra_adma_probe()
692 if (IS_ERR(tdma->base_addr)) in tegra_adma_probe()
693 return PTR_ERR(tdma->base_addr); in tegra_adma_probe()
709 ret = tegra_adma_init(tdma); in tegra_adma_probe()
713 INIT_LIST_HEAD(&tdma->dma_dev.channels); in tegra_adma_probe()
714 for (i = 0; i < tdma->nr_channels; i++) { in tegra_adma_probe()
715 struct tegra_adma_chan *tdc = &tdma->channels[i]; in tegra_adma_probe()
717 tdc->chan_addr = tdma->base_addr + ADMA_CH_REG_OFFSET(i); in tegra_adma_probe()
725 vchan_init(&tdc->vc, &tdma->dma_dev); in tegra_adma_probe()
727 tdc->tdma = tdma; in tegra_adma_probe()
730 dma_cap_set(DMA_SLAVE, tdma->dma_dev.cap_mask); in tegra_adma_probe()
731 dma_cap_set(DMA_PRIVATE, tdma->dma_dev.cap_mask); in tegra_adma_probe()
732 dma_cap_set(DMA_CYCLIC, tdma->dma_dev.cap_mask); in tegra_adma_probe()
734 tdma->dma_dev.dev = &pdev->dev; in tegra_adma_probe()
735 tdma->dma_dev.device_alloc_chan_resources = in tegra_adma_probe()
737 tdma->dma_dev.device_free_chan_resources = in tegra_adma_probe()
739 tdma->dma_dev.device_issue_pending = tegra_adma_issue_pending; in tegra_adma_probe()
740 tdma->dma_dev.device_prep_dma_cyclic = tegra_adma_prep_dma_cyclic; in tegra_adma_probe()
741 tdma->dma_dev.device_config = tegra_adma_slave_config; in tegra_adma_probe()
742 tdma->dma_dev.device_tx_status = tegra_adma_tx_status; in tegra_adma_probe()
743 tdma->dma_dev.device_terminate_all = tegra_adma_terminate_all; in tegra_adma_probe()
744 tdma->dma_dev.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); in tegra_adma_probe()
745 tdma->dma_dev.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); in tegra_adma_probe()
746 tdma->dma_dev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); in tegra_adma_probe()
747 tdma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT; in tegra_adma_probe()
749 ret = dma_async_device_register(&tdma->dma_dev); in tegra_adma_probe()
756 tegra_dma_of_xlate, tdma); in tegra_adma_probe()
765 tdma->nr_channels); in tegra_adma_probe()
770 dma_async_device_unregister(&tdma->dma_dev); in tegra_adma_probe()
773 irq_dispose_mapping(tdma->channels[i].irq); in tegra_adma_probe()
786 struct tegra_adma *tdma = platform_get_drvdata(pdev); in tegra_adma_remove() local
789 dma_async_device_unregister(&tdma->dma_dev); in tegra_adma_remove()
791 for (i = 0; i < tdma->nr_channels; ++i) in tegra_adma_remove()
792 irq_dispose_mapping(tdma->channels[i].irq); in tegra_adma_remove()