Lines Matching +full:qdma +full:- +full:error
1 // SPDX-License-Identifier: GPL-2.0
11 #include <soc/fsl/dpaa2-io.h>
13 #include "../virt-dma.h"
15 #include "dpaa2-qdma.h"
32 struct dpaa2_qdma_engine *dpaa2_qdma = dpaa2_chan->qdma; in dpaa2_qdma_alloc_chan_resources()
33 struct device *dev = &dpaa2_qdma->priv->dpdmai_dev->dev; in dpaa2_qdma_alloc_chan_resources()
35 dpaa2_chan->fd_pool = dma_pool_create("fd_pool", dev, in dpaa2_qdma_alloc_chan_resources()
38 if (!dpaa2_chan->fd_pool) in dpaa2_qdma_alloc_chan_resources()
41 dpaa2_chan->fl_pool = in dpaa2_qdma_alloc_chan_resources()
46 if (!dpaa2_chan->fl_pool) in dpaa2_qdma_alloc_chan_resources()
49 dpaa2_chan->sdd_pool = in dpaa2_qdma_alloc_chan_resources()
53 if (!dpaa2_chan->sdd_pool) in dpaa2_qdma_alloc_chan_resources()
56 return dpaa2_qdma->desc_allocated++; in dpaa2_qdma_alloc_chan_resources()
58 dma_pool_destroy(dpaa2_chan->fl_pool); in dpaa2_qdma_alloc_chan_resources()
60 dma_pool_destroy(dpaa2_chan->fd_pool); in dpaa2_qdma_alloc_chan_resources()
62 return -ENOMEM; in dpaa2_qdma_alloc_chan_resources()
68 struct dpaa2_qdma_engine *dpaa2_qdma = dpaa2_chan->qdma; in dpaa2_qdma_free_chan_resources()
73 spin_lock_irqsave(&dpaa2_chan->vchan.lock, flags); in dpaa2_qdma_free_chan_resources()
74 vchan_get_all_descriptors(&dpaa2_chan->vchan, &head); in dpaa2_qdma_free_chan_resources()
75 spin_unlock_irqrestore(&dpaa2_chan->vchan.lock, flags); in dpaa2_qdma_free_chan_resources()
77 vchan_dma_desc_free_list(&dpaa2_chan->vchan, &head); in dpaa2_qdma_free_chan_resources()
79 dpaa2_dpdmai_free_comp(dpaa2_chan, &dpaa2_chan->comp_used); in dpaa2_qdma_free_chan_resources()
80 dpaa2_dpdmai_free_comp(dpaa2_chan, &dpaa2_chan->comp_free); in dpaa2_qdma_free_chan_resources()
82 dma_pool_destroy(dpaa2_chan->fd_pool); in dpaa2_qdma_free_chan_resources()
83 dma_pool_destroy(dpaa2_chan->fl_pool); in dpaa2_qdma_free_chan_resources()
84 dma_pool_destroy(dpaa2_chan->sdd_pool); in dpaa2_qdma_free_chan_resources()
85 dpaa2_qdma->desc_allocated--; in dpaa2_qdma_free_chan_resources()
94 struct dpaa2_qdma_priv *qdma_priv = dpaa2_chan->qdma->priv; in dpaa2_qdma_request_desc()
95 struct device *dev = &qdma_priv->dpdmai_dev->dev; in dpaa2_qdma_request_desc()
99 spin_lock_irqsave(&dpaa2_chan->queue_lock, flags); in dpaa2_qdma_request_desc()
100 if (list_empty(&dpaa2_chan->comp_free)) { in dpaa2_qdma_request_desc()
101 spin_unlock_irqrestore(&dpaa2_chan->queue_lock, flags); in dpaa2_qdma_request_desc()
105 comp_temp->fd_virt_addr = in dpaa2_qdma_request_desc()
106 dma_pool_alloc(dpaa2_chan->fd_pool, GFP_NOWAIT, in dpaa2_qdma_request_desc()
107 &comp_temp->fd_bus_addr); in dpaa2_qdma_request_desc()
108 if (!comp_temp->fd_virt_addr) in dpaa2_qdma_request_desc()
111 comp_temp->fl_virt_addr = in dpaa2_qdma_request_desc()
112 dma_pool_alloc(dpaa2_chan->fl_pool, GFP_NOWAIT, in dpaa2_qdma_request_desc()
113 &comp_temp->fl_bus_addr); in dpaa2_qdma_request_desc()
114 if (!comp_temp->fl_virt_addr) in dpaa2_qdma_request_desc()
117 comp_temp->desc_virt_addr = in dpaa2_qdma_request_desc()
118 dma_pool_alloc(dpaa2_chan->sdd_pool, GFP_NOWAIT, in dpaa2_qdma_request_desc()
119 &comp_temp->desc_bus_addr); in dpaa2_qdma_request_desc()
120 if (!comp_temp->desc_virt_addr) in dpaa2_qdma_request_desc()
123 comp_temp->qchan = dpaa2_chan; in dpaa2_qdma_request_desc()
127 comp_temp = list_first_entry(&dpaa2_chan->comp_free, in dpaa2_qdma_request_desc()
129 list_del(&comp_temp->list); in dpaa2_qdma_request_desc()
130 spin_unlock_irqrestore(&dpaa2_chan->queue_lock, flags); in dpaa2_qdma_request_desc()
132 comp_temp->qchan = dpaa2_chan; in dpaa2_qdma_request_desc()
137 dma_pool_free(dpaa2_chan->fl_pool, in dpaa2_qdma_request_desc()
138 comp_temp->fl_virt_addr, in dpaa2_qdma_request_desc()
139 comp_temp->fl_bus_addr); in dpaa2_qdma_request_desc()
141 dma_pool_free(dpaa2_chan->fd_pool, in dpaa2_qdma_request_desc()
142 comp_temp->fd_virt_addr, in dpaa2_qdma_request_desc()
143 comp_temp->fd_bus_addr); in dpaa2_qdma_request_desc()
156 fd = dpaa2_comp->fd_virt_addr; in dpaa2_qdma_populate_fd()
160 dpaa2_fd_set_addr(fd, dpaa2_comp->fl_bus_addr); in dpaa2_qdma_populate_fd()
164 * we need to disable BMT if fsl-mc use iova addr in dpaa2_qdma_populate_fd()
181 sdd = dpaa2_comp->desc_virt_addr; in dpaa2_qdma_populate_first_framel()
185 sdd->cmd = cpu_to_le32(QDMA_SD_CMD_RDTTYPE_COHERENT); in dpaa2_qdma_populate_first_framel()
190 sdd->cmd = cpu_to_le32(LX2160_QDMA_DD_CMD_WRTTYPE_COHERENT); in dpaa2_qdma_populate_first_framel()
192 sdd->cmd = cpu_to_le32(QDMA_DD_CMD_WRTTYPE_COHERENT); in dpaa2_qdma_populate_first_framel()
197 dpaa2_fl_set_addr(f_list, dpaa2_comp->desc_bus_addr); in dpaa2_qdma_populate_first_framel()
203 f_list->bpid = cpu_to_le16(QDMA_FL_BMT_ENABLE); in dpaa2_qdma_populate_first_framel()
223 f_list->bpid = cpu_to_le16(QDMA_FL_BMT_ENABLE); in dpaa2_qdma_populate_frames()
237 f_list->bpid = cpu_to_le16(QDMA_FL_BMT_ENABLE); in dpaa2_qdma_populate_frames()
250 dpaa2_qdma = dpaa2_chan->qdma; in dpaa2_qdma_prep_memcpy()
255 wrt_changed = (bool)dpaa2_qdma->qdma_wrtype_fixup; in dpaa2_qdma_prep_memcpy()
260 f_list = dpaa2_comp->fl_virt_addr; in dpaa2_qdma_prep_memcpy()
269 return vchan_tx_prep(&dpaa2_chan->vchan, &dpaa2_comp->vdesc, flags); in dpaa2_qdma_prep_memcpy()
281 spin_lock_irqsave(&dpaa2_chan->queue_lock, flags); in dpaa2_qdma_issue_pending()
282 spin_lock(&dpaa2_chan->vchan.lock); in dpaa2_qdma_issue_pending()
283 if (vchan_issue_pending(&dpaa2_chan->vchan)) { in dpaa2_qdma_issue_pending()
284 vdesc = vchan_next_desc(&dpaa2_chan->vchan); in dpaa2_qdma_issue_pending()
289 fd = dpaa2_comp->fd_virt_addr; in dpaa2_qdma_issue_pending()
291 list_del(&vdesc->node); in dpaa2_qdma_issue_pending()
292 list_add_tail(&dpaa2_comp->list, &dpaa2_chan->comp_used); in dpaa2_qdma_issue_pending()
294 err = dpaa2_io_service_enqueue_fq(NULL, dpaa2_chan->fqid, fd); in dpaa2_qdma_issue_pending()
296 list_move_tail(&dpaa2_comp->list, in dpaa2_qdma_issue_pending()
297 &dpaa2_chan->comp_free); in dpaa2_qdma_issue_pending()
301 spin_unlock(&dpaa2_chan->vchan.lock); in dpaa2_qdma_issue_pending()
302 spin_unlock_irqrestore(&dpaa2_chan->queue_lock, flags); in dpaa2_qdma_issue_pending()
308 struct device *dev = &ls_dev->dev; in dpaa2_qdma_setup()
311 int err = -EINVAL; in dpaa2_qdma_setup()
316 priv->dev = dev; in dpaa2_qdma_setup()
317 priv->dpqdma_id = ls_dev->obj_desc.id; in dpaa2_qdma_setup()
320 err = dpdmai_open(priv->mc_io, 0, priv->dpqdma_id, &ls_dev->mc_handle); in dpaa2_qdma_setup()
328 err = dpdmai_get_attributes(priv->mc_io, 0, ls_dev->mc_handle, in dpaa2_qdma_setup()
329 &priv->dpdmai_attr); in dpaa2_qdma_setup()
335 if (priv->dpdmai_attr.version.major > DPDMAI_VER_MAJOR) { in dpaa2_qdma_setup()
336 err = -EINVAL; in dpaa2_qdma_setup()
339 priv->dpdmai_attr.version.major, in dpaa2_qdma_setup()
340 priv->dpdmai_attr.version.minor, in dpaa2_qdma_setup()
345 if (priv->dpdmai_attr.version.minor > DPDMAI_VER_MINOR) { in dpaa2_qdma_setup()
346 err = -EINVAL; in dpaa2_qdma_setup()
349 priv->dpdmai_attr.version.major, in dpaa2_qdma_setup()
350 priv->dpdmai_attr.version.minor, in dpaa2_qdma_setup()
355 priv->num_pairs = min(priv->dpdmai_attr.num_of_priorities, prio_def); in dpaa2_qdma_setup()
356 ppriv = kcalloc(priv->num_pairs, sizeof(*ppriv), GFP_KERNEL); in dpaa2_qdma_setup()
358 err = -ENOMEM; in dpaa2_qdma_setup()
361 priv->ppriv = ppriv; in dpaa2_qdma_setup()
363 for (i = 0; i < priv->num_pairs; i++) { in dpaa2_qdma_setup()
364 err = dpdmai_get_rx_queue(priv->mc_io, 0, ls_dev->mc_handle, in dpaa2_qdma_setup()
365 i, 0, &priv->rx_queue_attr[i]); in dpaa2_qdma_setup()
370 ppriv->rsp_fqid = priv->rx_queue_attr[i].fqid; in dpaa2_qdma_setup()
372 err = dpdmai_get_tx_queue(priv->mc_io, 0, ls_dev->mc_handle, in dpaa2_qdma_setup()
373 i, 0, &priv->tx_queue_attr[i]); in dpaa2_qdma_setup()
378 ppriv->req_fqid = priv->tx_queue_attr[i].fqid; in dpaa2_qdma_setup()
379 ppriv->prio = DPAA2_QDMA_DEFAULT_PRIORITY; in dpaa2_qdma_setup()
380 ppriv->priv = priv; in dpaa2_qdma_setup()
386 dpdmai_close(priv->mc_io, 0, ls_dev->mc_handle); in dpaa2_qdma_setup()
395 struct dpaa2_qdma_priv *priv = ppriv->priv; in dpaa2_qdma_fqdan_cb()
396 u32 n_chans = priv->dpaa2_qdma->n_chans; in dpaa2_qdma_fqdan_cb()
408 err = dpaa2_io_service_pull_fq(NULL, ppriv->rsp_fqid, in dpaa2_qdma_fqdan_cb()
409 ppriv->store); in dpaa2_qdma_fqdan_cb()
414 dq = dpaa2_io_store_next(ppriv->store, &is_last); in dpaa2_qdma_fqdan_cb()
417 dev_err(priv->dev, "FQID returned no valid frames!\n"); in dpaa2_qdma_fqdan_cb()
421 /* obtain FD and process the error */ in dpaa2_qdma_fqdan_cb()
426 dev_err(priv->dev, "FD error occurred\n"); in dpaa2_qdma_fqdan_cb()
429 qchan = &priv->dpaa2_qdma->chans[i]; in dpaa2_qdma_fqdan_cb()
430 spin_lock(&qchan->queue_lock); in dpaa2_qdma_fqdan_cb()
431 if (list_empty(&qchan->comp_used)) { in dpaa2_qdma_fqdan_cb()
432 spin_unlock(&qchan->queue_lock); in dpaa2_qdma_fqdan_cb()
436 &qchan->comp_used, list) { in dpaa2_qdma_fqdan_cb()
437 fd_eq = dpaa2_comp->fd_virt_addr; in dpaa2_qdma_fqdan_cb()
439 if (le64_to_cpu(fd_eq->simple.addr) == in dpaa2_qdma_fqdan_cb()
440 le64_to_cpu(fd->simple.addr)) { in dpaa2_qdma_fqdan_cb()
441 spin_lock(&qchan->vchan.lock); in dpaa2_qdma_fqdan_cb()
443 dpaa2_comp->vdesc); in dpaa2_qdma_fqdan_cb()
444 spin_unlock(&qchan->vchan.lock); in dpaa2_qdma_fqdan_cb()
449 spin_unlock(&qchan->queue_lock); in dpaa2_qdma_fqdan_cb()
461 struct device *dev = priv->dev; in dpaa2_qdma_dpio_setup()
462 int err = -EINVAL; in dpaa2_qdma_dpio_setup()
465 num = priv->num_pairs; in dpaa2_qdma_dpio_setup()
466 ppriv = priv->ppriv; in dpaa2_qdma_dpio_setup()
468 ppriv->nctx.is_cdan = 0; in dpaa2_qdma_dpio_setup()
469 ppriv->nctx.desired_cpu = DPAA2_IO_ANY_CPU; in dpaa2_qdma_dpio_setup()
470 ppriv->nctx.id = ppriv->rsp_fqid; in dpaa2_qdma_dpio_setup()
471 ppriv->nctx.cb = dpaa2_qdma_fqdan_cb; in dpaa2_qdma_dpio_setup()
472 err = dpaa2_io_service_register(NULL, &ppriv->nctx, dev); in dpaa2_qdma_dpio_setup()
478 ppriv->store = in dpaa2_qdma_dpio_setup()
480 if (!ppriv->store) { in dpaa2_qdma_dpio_setup()
481 err = -ENOMEM; in dpaa2_qdma_dpio_setup()
491 dpaa2_io_service_deregister(NULL, &ppriv->nctx, dev); in dpaa2_qdma_dpio_setup()
493 ppriv--; in dpaa2_qdma_dpio_setup()
494 while (ppriv >= priv->ppriv) { in dpaa2_qdma_dpio_setup()
495 dpaa2_io_service_deregister(NULL, &ppriv->nctx, dev); in dpaa2_qdma_dpio_setup()
496 dpaa2_io_store_destroy(ppriv->store); in dpaa2_qdma_dpio_setup()
497 ppriv--; in dpaa2_qdma_dpio_setup()
504 struct dpaa2_qdma_priv_per_prio *ppriv = priv->ppriv; in dpaa2_dpmai_store_free()
507 for (i = 0; i < priv->num_pairs; i++) { in dpaa2_dpmai_store_free()
508 dpaa2_io_store_destroy(ppriv->store); in dpaa2_dpmai_store_free()
515 struct dpaa2_qdma_priv_per_prio *ppriv = priv->ppriv; in dpaa2_dpdmai_dpio_free()
516 struct device *dev = priv->dev; in dpaa2_dpdmai_dpio_free()
519 for (i = 0; i < priv->num_pairs; i++) { in dpaa2_dpdmai_dpio_free()
520 dpaa2_io_service_deregister(NULL, &ppriv->nctx, dev); in dpaa2_dpdmai_dpio_free()
529 struct device *dev = priv->dev; in dpaa2_dpdmai_bind()
535 num = priv->num_pairs; in dpaa2_dpdmai_bind()
536 ppriv = priv->ppriv; in dpaa2_dpdmai_bind()
540 rx_queue_cfg.user_ctx = ppriv->nctx.qman64; in dpaa2_dpdmai_bind()
542 rx_queue_cfg.dest_cfg.dest_id = ppriv->nctx.dpio_id; in dpaa2_dpdmai_bind()
543 rx_queue_cfg.dest_cfg.priority = ppriv->prio; in dpaa2_dpdmai_bind()
544 err = dpdmai_set_rx_queue(priv->mc_io, 0, ls_dev->mc_handle, in dpaa2_dpdmai_bind()
560 struct dpaa2_qdma_priv_per_prio *ppriv = priv->ppriv; in dpaa2_dpdmai_dpio_unbind()
561 struct device *dev = priv->dev; in dpaa2_dpdmai_dpio_unbind()
568 for (i = 0; i < priv->num_pairs; i++) { in dpaa2_dpdmai_dpio_unbind()
569 ppriv->nctx.qman64 = 0; in dpaa2_dpdmai_dpio_unbind()
570 ppriv->nctx.dpio_id = 0; in dpaa2_dpdmai_dpio_unbind()
574 err = dpdmai_reset(priv->mc_io, 0, ls_dev->mc_handle); in dpaa2_dpdmai_dpio_unbind()
589 spin_lock_irqsave(&qchan->queue_lock, flags); in dpaa2_dpdmai_free_comp()
590 list_del(&comp_tmp->list); in dpaa2_dpdmai_free_comp()
591 spin_unlock_irqrestore(&qchan->queue_lock, flags); in dpaa2_dpdmai_free_comp()
592 dma_pool_free(qchan->fd_pool, in dpaa2_dpdmai_free_comp()
593 comp_tmp->fd_virt_addr, in dpaa2_dpdmai_free_comp()
594 comp_tmp->fd_bus_addr); in dpaa2_dpdmai_free_comp()
595 dma_pool_free(qchan->fl_pool, in dpaa2_dpdmai_free_comp()
596 comp_tmp->fl_virt_addr, in dpaa2_dpdmai_free_comp()
597 comp_tmp->fl_bus_addr); in dpaa2_dpdmai_free_comp()
598 dma_pool_free(qchan->sdd_pool, in dpaa2_dpdmai_free_comp()
599 comp_tmp->desc_virt_addr, in dpaa2_dpdmai_free_comp()
600 comp_tmp->desc_bus_addr); in dpaa2_dpdmai_free_comp()
610 num = dpaa2_qdma->n_chans; in dpaa2_dpdmai_free_channels()
612 qchan = &dpaa2_qdma->chans[i]; in dpaa2_dpdmai_free_channels()
613 dpaa2_dpdmai_free_comp(qchan, &qchan->comp_used); in dpaa2_dpdmai_free_channels()
614 dpaa2_dpdmai_free_comp(qchan, &qchan->comp_free); in dpaa2_dpdmai_free_channels()
615 dma_pool_destroy(qchan->fd_pool); in dpaa2_dpdmai_free_channels()
616 dma_pool_destroy(qchan->fl_pool); in dpaa2_dpdmai_free_channels()
617 dma_pool_destroy(qchan->sdd_pool); in dpaa2_dpdmai_free_channels()
628 qchan = dpaa2_comp->qchan; in dpaa2_qdma_free_desc()
629 spin_lock_irqsave(&qchan->queue_lock, flags); in dpaa2_qdma_free_desc()
630 list_move_tail(&dpaa2_comp->list, &qchan->comp_free); in dpaa2_qdma_free_desc()
631 spin_unlock_irqrestore(&qchan->queue_lock, flags); in dpaa2_qdma_free_desc()
636 struct dpaa2_qdma_priv *priv = dpaa2_qdma->priv; in dpaa2_dpdmai_init_channels()
638 int num = priv->num_pairs; in dpaa2_dpdmai_init_channels()
641 INIT_LIST_HEAD(&dpaa2_qdma->dma_dev.channels); in dpaa2_dpdmai_init_channels()
642 for (i = 0; i < dpaa2_qdma->n_chans; i++) { in dpaa2_dpdmai_init_channels()
643 dpaa2_chan = &dpaa2_qdma->chans[i]; in dpaa2_dpdmai_init_channels()
644 dpaa2_chan->qdma = dpaa2_qdma; in dpaa2_dpdmai_init_channels()
645 dpaa2_chan->fqid = priv->tx_queue_attr[i % num].fqid; in dpaa2_dpdmai_init_channels()
646 dpaa2_chan->vchan.desc_free = dpaa2_qdma_free_desc; in dpaa2_dpdmai_init_channels()
647 vchan_init(&dpaa2_chan->vchan, &dpaa2_qdma->dma_dev); in dpaa2_dpdmai_init_channels()
648 spin_lock_init(&dpaa2_chan->queue_lock); in dpaa2_dpdmai_init_channels()
649 INIT_LIST_HEAD(&dpaa2_chan->comp_used); in dpaa2_dpdmai_init_channels()
650 INIT_LIST_HEAD(&dpaa2_chan->comp_free); in dpaa2_dpdmai_init_channels()
657 struct device *dev = &dpdmai_dev->dev; in dpaa2_qdma_probe()
664 return -ENOMEM; in dpaa2_qdma_probe()
666 priv->dpdmai_dev = dpdmai_dev; in dpaa2_qdma_probe()
668 priv->iommu_domain = iommu_get_domain_for_dev(dev); in dpaa2_qdma_probe()
669 if (priv->iommu_domain) in dpaa2_qdma_probe()
673 err = fsl_mc_portal_allocate(dpdmai_dev, 0, &priv->mc_io); in dpaa2_qdma_probe()
675 if (err == -ENXIO) in dpaa2_qdma_probe()
676 err = -EPROBE_DEFER; in dpaa2_qdma_probe()
704 err = dpdmai_enable(priv->mc_io, 0, dpdmai_dev->mc_handle); in dpaa2_qdma_probe()
712 err = -ENOMEM; in dpaa2_qdma_probe()
716 priv->dpaa2_qdma = dpaa2_qdma; in dpaa2_qdma_probe()
717 dpaa2_qdma->priv = priv; in dpaa2_qdma_probe()
719 dpaa2_qdma->desc_allocated = 0; in dpaa2_qdma_probe()
720 dpaa2_qdma->n_chans = NUM_CH; in dpaa2_qdma_probe()
725 dpaa2_qdma->qdma_wrtype_fixup = true; in dpaa2_qdma_probe()
727 dpaa2_qdma->qdma_wrtype_fixup = false; in dpaa2_qdma_probe()
729 dma_cap_set(DMA_PRIVATE, dpaa2_qdma->dma_dev.cap_mask); in dpaa2_qdma_probe()
730 dma_cap_set(DMA_SLAVE, dpaa2_qdma->dma_dev.cap_mask); in dpaa2_qdma_probe()
731 dma_cap_set(DMA_MEMCPY, dpaa2_qdma->dma_dev.cap_mask); in dpaa2_qdma_probe()
733 dpaa2_qdma->dma_dev.dev = dev; in dpaa2_qdma_probe()
734 dpaa2_qdma->dma_dev.device_alloc_chan_resources = in dpaa2_qdma_probe()
736 dpaa2_qdma->dma_dev.device_free_chan_resources = in dpaa2_qdma_probe()
738 dpaa2_qdma->dma_dev.device_tx_status = dma_cookie_status; in dpaa2_qdma_probe()
739 dpaa2_qdma->dma_dev.device_prep_dma_memcpy = dpaa2_qdma_prep_memcpy; in dpaa2_qdma_probe()
740 dpaa2_qdma->dma_dev.device_issue_pending = dpaa2_qdma_issue_pending; in dpaa2_qdma_probe()
742 err = dma_async_device_register(&dpaa2_qdma->dma_dev); in dpaa2_qdma_probe()
744 dev_err(dev, "Can't register NXP QDMA engine.\n"); in dpaa2_qdma_probe()
753 dpdmai_disable(priv->mc_io, 0, dpdmai_dev->mc_handle); in dpaa2_qdma_probe()
760 kfree(priv->ppriv); in dpaa2_qdma_probe()
761 dpdmai_close(priv->mc_io, 0, dpdmai_dev->mc_handle); in dpaa2_qdma_probe()
763 fsl_mc_portal_free(priv->mc_io); in dpaa2_qdma_probe()
776 dev = &ls_dev->dev; in dpaa2_qdma_remove()
778 dpaa2_qdma = priv->dpaa2_qdma; in dpaa2_qdma_remove()
780 dpdmai_disable(priv->mc_io, 0, ls_dev->mc_handle); in dpaa2_qdma_remove()
784 dpdmai_close(priv->mc_io, 0, ls_dev->mc_handle); in dpaa2_qdma_remove()
785 fsl_mc_portal_free(priv->mc_io); in dpaa2_qdma_remove()
789 dma_async_device_unregister(&dpaa2_qdma->dma_dev); in dpaa2_qdma_remove()
799 dev = &ls_dev->dev; in dpaa2_qdma_shutdown()
802 dpdmai_disable(priv->mc_io, 0, ls_dev->mc_handle); in dpaa2_qdma_shutdown()
804 dpdmai_close(priv->mc_io, 0, ls_dev->mc_handle); in dpaa2_qdma_shutdown()
805 dpdmai_destroy(priv->mc_io, 0, priv->dpqdma_id, ls_dev->mc_handle); in dpaa2_qdma_shutdown()
818 .name = "dpaa2-qdma",
838 MODULE_ALIAS("platform:fsl-dpaa2-qdma");
840 MODULE_DESCRIPTION("NXP Layerscape DPAA2 qDMA engine driver");