Lines Matching defs:dmadev

77 static inline struct hidma_dev *to_hidma_dev(struct dma_device *dmadev)
79 return container_of(dmadev, struct hidma_dev, ddev);
93 static void hidma_free(struct hidma_dev *dmadev)
95 INIT_LIST_HEAD(&dmadev->ddev.channels);
170 struct hidma_dev *dmadev = to_hidma_dev(ddev);
189 pm_runtime_mark_last_busy(dmadev->ddev.dev);
190 pm_runtime_put_autosuspend(dmadev->ddev.dev);
194 static int hidma_chan_init(struct hidma_dev *dmadev, u32 dma_sig)
199 mchan = devm_kzalloc(dmadev->ddev.dev, sizeof(*mchan), GFP_KERNEL);
203 ddev = &dmadev->ddev;
205 mchan->dmadev = dmadev;
222 struct hidma_dev *dmadev = from_tasklet(dmadev, t, task);
224 pm_runtime_get_sync(dmadev->ddev.dev);
225 hidma_ll_start(dmadev->lldev);
231 struct hidma_dev *dmadev = mchan->dmadev;
238 hidma_ll_queue_request(dmadev->lldev, qdesc->tre_ch);
251 status = pm_runtime_get(dmadev->ddev.dev);
253 tasklet_schedule(&dmadev->task);
255 hidma_ll_start(dmadev->lldev);
313 struct hidma_dev *dmadev = mchan->dmadev;
318 pm_runtime_get_sync(dmadev->ddev.dev);
319 if (!hidma_ll_isenabled(dmadev->lldev)) {
320 pm_runtime_mark_last_busy(dmadev->ddev.dev);
321 pm_runtime_put_autosuspend(dmadev->ddev.dev);
324 pm_runtime_mark_last_busy(dmadev->ddev.dev);
325 pm_runtime_put_autosuspend(dmadev->ddev.dev);
344 struct hidma_dev *dmadev = mchan->dmadev;
355 for (i = 0; i < dmadev->nr_descriptors; i++) {
364 rc = hidma_ll_request(dmadev->lldev, mchan->dma_sig,
379 hidma_ll_free(dmadev->lldev, mdesc->tre_ch);
398 struct hidma_dev *mdma = mchan->dmadev;
431 struct hidma_dev *mdma = mchan->dmadev;
472 struct hidma_dev *dmadev = to_hidma_dev(mchan->chan.device);
478 pm_runtime_get_sync(dmadev->ddev.dev);
491 rc = hidma_ll_disable(dmadev->lldev);
493 dev_err(dmadev->ddev.dev, "channel did not pause\n");
509 rc = hidma_ll_enable(dmadev->lldev);
511 pm_runtime_mark_last_busy(dmadev->ddev.dev);
512 pm_runtime_put_autosuspend(dmadev->ddev.dev);
519 struct hidma_dev *dmadev = to_hidma_dev(mchan->chan.device);
527 pm_runtime_get_sync(dmadev->ddev.dev);
528 rc = hidma_ll_setup(dmadev->lldev);
529 pm_runtime_mark_last_busy(dmadev->ddev.dev);
530 pm_runtime_put_autosuspend(dmadev->ddev.dev);
537 struct hidma_dev *mdma = mchan->dmadev;
564 struct hidma_dev *dmadev;
567 dmadev = to_hidma_dev(mchan->chan.device);
569 pm_runtime_get_sync(dmadev->ddev.dev);
570 if (hidma_ll_disable(dmadev->lldev))
571 dev_warn(dmadev->ddev.dev, "channel did not stop\n");
573 pm_runtime_mark_last_busy(dmadev->ddev.dev);
574 pm_runtime_put_autosuspend(dmadev->ddev.dev);
582 struct hidma_dev *dmadev;
586 dmadev = to_hidma_dev(mchan->chan.device);
588 pm_runtime_get_sync(dmadev->ddev.dev);
589 rc = hidma_ll_enable(dmadev->lldev);
593 dev_err(dmadev->ddev.dev,
595 pm_runtime_mark_last_busy(dmadev->ddev.dev);
596 pm_runtime_put_autosuspend(dmadev->ddev.dev);
616 struct hidma_dev *dmadev = to_hidma_dev_from_lldev(lldevp);
619 1 << (chirq - dmadev->msi_virqbase));
677 struct hidma_dev *dmadev = dev_get_drvdata(dev);
680 writel(msg->address_lo, dmadev->dev_evca + 0x118);
681 writel(msg->address_hi, dmadev->dev_evca + 0x11C);
682 writel(msg->data, dmadev->dev_evca + 0x120);
687 static void hidma_free_msis(struct hidma_dev *dmadev)
690 struct device *dev = dmadev->ddev.dev;
696 devm_free_irq(dev, virq, &dmadev->lldev);
703 static int hidma_request_msi(struct hidma_dev *dmadev,
719 &dmadev->lldev);
723 dmadev->msi_virqbase = virq;
730 devm_free_irq(&pdev->dev, virq, &dmadev->lldev);
736 hidma_ll_setup_irq(dmadev->lldev, true);
754 struct hidma_dev *dmadev;
790 dmadev = devm_kzalloc(&pdev->dev, sizeof(*dmadev), GFP_KERNEL);
791 if (!dmadev) {
796 INIT_LIST_HEAD(&dmadev->ddev.channels);
797 spin_lock_init(&dmadev->lock);
798 dmadev->ddev.dev = &pdev->dev;
799 pm_runtime_get_sync(dmadev->ddev.dev);
801 dma_cap_set(DMA_MEMCPY, dmadev->ddev.cap_mask);
802 dma_cap_set(DMA_MEMSET, dmadev->ddev.cap_mask);
808 dmadev->dev_evca = evca;
809 dmadev->evca_resource = evca_resource;
810 dmadev->dev_trca = trca;
811 dmadev->trca_resource = trca_resource;
812 dmadev->ddev.device_prep_dma_memcpy = hidma_prep_dma_memcpy;
813 dmadev->ddev.device_prep_dma_memset = hidma_prep_dma_memset;
814 dmadev->ddev.device_alloc_chan_resources = hidma_alloc_chan_resources;
815 dmadev->ddev.device_free_chan_resources = hidma_free_chan_resources;
816 dmadev->ddev.device_tx_status = hidma_tx_status;
817 dmadev->ddev.device_issue_pending = hidma_issue_pending;
818 dmadev->ddev.device_pause = hidma_pause;
819 dmadev->ddev.device_resume = hidma_resume;
820 dmadev->ddev.device_terminate_all = hidma_terminate_all;
821 dmadev->ddev.copy_align = 8;
829 &dmadev->nr_descriptors);
834 dmadev->nr_descriptors = nr_desc_prm;
837 if (!dmadev->nr_descriptors)
838 dmadev->nr_descriptors = HIDMA_NR_DEFAULT_DESC;
841 dmadev->chidx = readl(dmadev->dev_trca + 0x40);
843 dmadev->chidx = readl(dmadev->dev_trca + 0x28);
852 dmadev->lldev = hidma_ll_init(dmadev->ddev.dev,
853 dmadev->nr_descriptors, dmadev->dev_trca,
854 dmadev->dev_evca, dmadev->chidx);
855 if (!dmadev->lldev) {
860 platform_set_drvdata(pdev, dmadev);
862 rc = hidma_request_msi(dmadev, pdev);
865 hidma_ll_setup_irq(dmadev->lldev, false);
867 0, "qcom-hidma", dmadev->lldev);
872 INIT_LIST_HEAD(&dmadev->ddev.channels);
873 rc = hidma_chan_init(dmadev, 0);
877 rc = dma_async_device_register(&dmadev->ddev);
881 dmadev->irq = chirq;
882 tasklet_setup(&dmadev->task, hidma_issue_task);
883 hidma_debug_init(dmadev);
884 hidma_sysfs_init(dmadev);
886 pm_runtime_mark_last_busy(dmadev->ddev.dev);
887 pm_runtime_put_autosuspend(dmadev->ddev.dev);
892 hidma_free_msis(dmadev);
894 hidma_ll_uninit(dmadev->lldev);
896 if (dmadev)
897 hidma_free(dmadev);
906 struct hidma_dev *dmadev = platform_get_drvdata(pdev);
908 dev_info(dmadev->ddev.dev, "HI-DMA engine shutdown\n");
910 pm_runtime_get_sync(dmadev->ddev.dev);
911 if (hidma_ll_disable(dmadev->lldev))
912 dev_warn(dmadev->ddev.dev, "channel did not stop\n");
913 pm_runtime_mark_last_busy(dmadev->ddev.dev);
914 pm_runtime_put_autosuspend(dmadev->ddev.dev);
920 struct hidma_dev *dmadev = platform_get_drvdata(pdev);
922 pm_runtime_get_sync(dmadev->ddev.dev);
923 dma_async_device_unregister(&dmadev->ddev);
924 if (!dmadev->lldev->msi_support)
925 devm_free_irq(dmadev->ddev.dev, dmadev->irq, dmadev->lldev);
927 hidma_free_msis(dmadev);
929 tasklet_kill(&dmadev->task);
930 hidma_sysfs_uninit(dmadev);
931 hidma_debug_uninit(dmadev);
932 hidma_ll_uninit(dmadev->lldev);
933 hidma_free(dmadev);