• Home
  • Raw
  • Download

Lines Matching full:tdma

131 	struct tegra_adma		*tdma;  member
168 static inline void tdma_write(struct tegra_adma *tdma, u32 reg, u32 val) in tdma_write() argument
170 writel(val, tdma->base_addr + tdma->cdata->global_reg_offset + reg); in tdma_write()
173 static inline u32 tdma_read(struct tegra_adma *tdma, u32 reg) in tdma_read() argument
175 return readl(tdma->base_addr + tdma->cdata->global_reg_offset + reg); in tdma_read()
201 return tdc->tdma->dev; in tdc2dev()
219 static int tegra_adma_init(struct tegra_adma *tdma) in tegra_adma_init() argument
225 tdma_write(tdma, tdma->cdata->ch_base_offset + tdma->cdata->global_int_clear, 0x1); in tegra_adma_init()
228 tdma_write(tdma, ADMA_GLOBAL_SOFT_RESET, 0x1); in tegra_adma_init()
232 tdma->base_addr + in tegra_adma_init()
233 tdma->cdata->global_reg_offset + in tegra_adma_init()
240 tdma_write(tdma, ADMA_GLOBAL_CMD, 1); in tegra_adma_init()
248 struct tegra_adma *tdma = tdc->tdma; in tegra_adma_request_alloc() local
254 if (sreq_index > tdma->cdata->ch_req_max) { in tegra_adma_request_alloc()
255 dev_err(tdma->dev, "invalid DMA request\n"); in tegra_adma_request_alloc()
261 if (test_and_set_bit(sreq_index, &tdma->tx_requests_reserved)) { in tegra_adma_request_alloc()
262 dev_err(tdma->dev, "DMA request reserved\n"); in tegra_adma_request_alloc()
268 if (test_and_set_bit(sreq_index, &tdma->rx_requests_reserved)) { in tegra_adma_request_alloc()
269 dev_err(tdma->dev, "DMA request reserved\n"); in tegra_adma_request_alloc()
275 dev_WARN(tdma->dev, "channel %s has invalid transfer type\n", in tegra_adma_request_alloc()
288 struct tegra_adma *tdma = tdc->tdma; in tegra_adma_request_free() local
295 clear_bit(tdc->sreq_index, &tdma->tx_requests_reserved); in tegra_adma_request_free()
299 clear_bit(tdc->sreq_index, &tdma->rx_requests_reserved); in tegra_adma_request_free()
303 dev_WARN(tdma->dev, "channel %s has invalid transfer type\n", in tegra_adma_request_free()
560 const struct tegra_adma_chip_data *cdata = tdc->tdma->cdata; in tegra_adma_set_xfer_params()
706 struct tegra_adma *tdma = ofdma->of_dma_data; in tegra_dma_of_xlate() local
717 dev_err(tdma->dev, "DMA request must not be 0\n"); in tegra_dma_of_xlate()
721 chan = dma_get_any_slave_channel(&tdma->dma_dev); in tegra_dma_of_xlate()
733 struct tegra_adma *tdma = dev_get_drvdata(dev); in tegra_adma_runtime_suspend() local
738 tdma->global_cmd = tdma_read(tdma, ADMA_GLOBAL_CMD); in tegra_adma_runtime_suspend()
739 if (!tdma->global_cmd) in tegra_adma_runtime_suspend()
742 for (i = 0; i < tdma->nr_channels; i++) { in tegra_adma_runtime_suspend()
743 tdc = &tdma->channels[i]; in tegra_adma_runtime_suspend()
758 clk_disable_unprepare(tdma->ahub_clk); in tegra_adma_runtime_suspend()
765 struct tegra_adma *tdma = dev_get_drvdata(dev); in tegra_adma_runtime_resume() local
770 ret = clk_prepare_enable(tdma->ahub_clk); in tegra_adma_runtime_resume()
775 tdma_write(tdma, ADMA_GLOBAL_CMD, tdma->global_cmd); in tegra_adma_runtime_resume()
777 if (!tdma->global_cmd) in tegra_adma_runtime_resume()
780 for (i = 0; i < tdma->nr_channels; i++) { in tegra_adma_runtime_resume()
781 tdc = &tdma->channels[i]; in tegra_adma_runtime_resume()
840 struct tegra_adma *tdma; in tegra_adma_probe() local
849 tdma = devm_kzalloc(&pdev->dev, in tegra_adma_probe()
850 struct_size(tdma, channels, cdata->nr_channels), in tegra_adma_probe()
852 if (!tdma) in tegra_adma_probe()
855 tdma->dev = &pdev->dev; in tegra_adma_probe()
856 tdma->cdata = cdata; in tegra_adma_probe()
857 tdma->nr_channels = cdata->nr_channels; in tegra_adma_probe()
858 platform_set_drvdata(pdev, tdma); in tegra_adma_probe()
860 tdma->base_addr = devm_platform_ioremap_resource(pdev, 0); in tegra_adma_probe()
861 if (IS_ERR(tdma->base_addr)) in tegra_adma_probe()
862 return PTR_ERR(tdma->base_addr); in tegra_adma_probe()
864 tdma->ahub_clk = devm_clk_get(&pdev->dev, "d_audio"); in tegra_adma_probe()
865 if (IS_ERR(tdma->ahub_clk)) { in tegra_adma_probe()
867 return PTR_ERR(tdma->ahub_clk); in tegra_adma_probe()
870 INIT_LIST_HEAD(&tdma->dma_dev.channels); in tegra_adma_probe()
871 for (i = 0; i < tdma->nr_channels; i++) { in tegra_adma_probe()
872 struct tegra_adma_chan *tdc = &tdma->channels[i]; in tegra_adma_probe()
874 tdc->chan_addr = tdma->base_addr + cdata->ch_base_offset in tegra_adma_probe()
883 vchan_init(&tdc->vc, &tdma->dma_dev); in tegra_adma_probe()
885 tdc->tdma = tdma; in tegra_adma_probe()
894 ret = tegra_adma_init(tdma); in tegra_adma_probe()
898 dma_cap_set(DMA_SLAVE, tdma->dma_dev.cap_mask); in tegra_adma_probe()
899 dma_cap_set(DMA_PRIVATE, tdma->dma_dev.cap_mask); in tegra_adma_probe()
900 dma_cap_set(DMA_CYCLIC, tdma->dma_dev.cap_mask); in tegra_adma_probe()
902 tdma->dma_dev.dev = &pdev->dev; in tegra_adma_probe()
903 tdma->dma_dev.device_alloc_chan_resources = in tegra_adma_probe()
905 tdma->dma_dev.device_free_chan_resources = in tegra_adma_probe()
907 tdma->dma_dev.device_issue_pending = tegra_adma_issue_pending; in tegra_adma_probe()
908 tdma->dma_dev.device_prep_dma_cyclic = tegra_adma_prep_dma_cyclic; in tegra_adma_probe()
909 tdma->dma_dev.device_config = tegra_adma_slave_config; in tegra_adma_probe()
910 tdma->dma_dev.device_tx_status = tegra_adma_tx_status; in tegra_adma_probe()
911 tdma->dma_dev.device_terminate_all = tegra_adma_terminate_all; in tegra_adma_probe()
912 tdma->dma_dev.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); in tegra_adma_probe()
913 tdma->dma_dev.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); in tegra_adma_probe()
914 tdma->dma_dev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); in tegra_adma_probe()
915 tdma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT; in tegra_adma_probe()
916 tdma->dma_dev.device_pause = tegra_adma_pause; in tegra_adma_probe()
917 tdma->dma_dev.device_resume = tegra_adma_resume; in tegra_adma_probe()
919 ret = dma_async_device_register(&tdma->dma_dev); in tegra_adma_probe()
926 tegra_dma_of_xlate, tdma); in tegra_adma_probe()
935 tdma->nr_channels); in tegra_adma_probe()
940 dma_async_device_unregister(&tdma->dma_dev); in tegra_adma_probe()
947 irq_dispose_mapping(tdma->channels[i].irq); in tegra_adma_probe()
954 struct tegra_adma *tdma = platform_get_drvdata(pdev); in tegra_adma_remove() local
958 dma_async_device_unregister(&tdma->dma_dev); in tegra_adma_remove()
960 for (i = 0; i < tdma->nr_channels; ++i) in tegra_adma_remove()
961 irq_dispose_mapping(tdma->channels[i].irq); in tegra_adma_remove()