The get_dma_ops and set_dma_ops APIs were never for driver to use. Remove these calls from QDMA driver. Instead, pass the DMA device pointer from the qdma_platdata structure.
Unified · Split
| @@ -7,9 +7,9 @@ · 6 unmodified lines | ||
| 7 | 7 | #include <linux/bitfield.h> |
| 8 | 8 | #include <linux/bitops.h> |
| 9 | 9 | #include <linux/dmaengine.h> |
| 10 | +#include <linux/dma-mapping.h> | |
| 10 | 11 | #include <linux/module.h> |
| 11 | 12 | #include <linux/mod_devicetable.h> |
| 12 | −#include <linux/dma-map-ops.h> | |
| 13 | 13 | #include <linux/platform_device.h> |
| 14 | 14 | #include <linux/platform_data/amd_qdma.h> |
| 15 | 15 | #include <linux/regmap.h> |
| @@ -492,18 +492,9 @@ static int qdma_device_verify(struct qdma_device *qdev) · 476 unmodified lines | ||
| 492 | 492 | |
| 493 | 493 | static int qdma_device_setup(struct qdma_device *qdev) |
| 494 | 494 | { |
| 495 | − struct device *dev = &qdev->pdev->dev; | |
| 496 | 495 | u32 ring_sz = QDMA_DEFAULT_RING_SIZE; |
| 497 | 496 | int ret = 0; |
| 498 | 497 | |
| 499 | − while (dev && get_dma_ops(dev)) | |
| 500 | − dev = dev->parent; | |
| 501 | − if (!dev) { | |
| 502 | − qdma_err(qdev, "dma device not found"); | |
| 503 | − return -EINVAL; | |
| 504 | − } | |
| 505 | − set_dma_ops(&qdev->pdev->dev, get_dma_ops(dev)); | |
| 506 | − | |
| 507 | 498 | ret = qdma_setup_fmap_context(qdev); |
| 508 | 499 | if (ret) { |
| 509 | 500 | qdma_err(qdev, "Failed setup fmap context"); |
| @@ -548,11 +539,12 @@ static void qdma_free_queue_resources(struct dma_chan *chan) · 38 unmodified lines | ||
| 548 | 539 | { |
| 549 | 540 | struct qdma_queue *queue = to_qdma_queue(chan); |
| 550 | 541 | struct qdma_device *qdev = queue->qdev; |
| 551 | − struct device *dev = qdev->dma_dev.dev; | |
| 542 | + struct qdma_platdata *pdata; | |
| 552 | 543 | |
| 553 | 544 | qdma_clear_queue_context(queue); |
| 554 | 545 | vchan_free_chan_resources(&queue->vchan); |
| 555 | − dma_free_coherent(dev, queue->ring_size * QDMA_MM_DESC_SIZE, | |
| 546 | + pdata = dev_get_platdata(&qdev->pdev->dev); | |
| 547 | + dma_free_coherent(pdata->dma_dev, queue->ring_size * QDMA_MM_DESC_SIZE, | |
| 556 | 548 | queue->desc_base, queue->dma_desc_base); |
| 557 | 549 | } |
| 558 | 550 | |
| @@ -565,6 +557,7 @@ static int qdma_alloc_queue_resources(struct dma_chan *chan) · 6 unmodified lines | ||
| 565 | 557 | struct qdma_queue *queue = to_qdma_queue(chan); |
| 566 | 558 | struct qdma_device *qdev = queue->qdev; |
| 567 | 559 | struct qdma_ctxt_sw_desc desc; |
| 560 | + struct qdma_platdata *pdata; | |
| 568 | 561 | size_t size; |
| 569 | 562 | int ret; |
| 570 | 563 | |
| @@ -572,8 +565,9 @@ static int qdma_alloc_queue_resources(struct dma_chan *chan) · 1 unmodified line | ||
| 572 | 565 | if (ret) |
| 573 | 566 | return ret; |
| 574 | 567 | |
| 568 | + pdata = dev_get_platdata(&qdev->pdev->dev); | |
| 575 | 569 | size = queue->ring_size * QDMA_MM_DESC_SIZE; |
| 576 | − queue->desc_base = dma_alloc_coherent(qdev->dma_dev.dev, size, | |
| 570 | + queue->desc_base = dma_alloc_coherent(pdata->dma_dev, size, | |
| 577 | 571 | &queue->dma_desc_base, |
| 578 | 572 | GFP_KERNEL); |
| 579 | 573 | if (!queue->desc_base) { |
| @@ -588,7 +582,7 @@ static int qdma_alloc_queue_resources(struct dma_chan *chan) · 8 unmodified lines | ||
| 588 | 582 | if (ret) { |
| 589 | 583 | qdma_err(qdev, "Failed to setup SW desc ctxt for %s", |
| 590 | 584 | chan->name); |
| 591 | − dma_free_coherent(qdev->dma_dev.dev, size, queue->desc_base, | |
| 585 | + dma_free_coherent(pdata->dma_dev, size, queue->desc_base, | |
| 592 | 586 | queue->dma_desc_base); |
| 593 | 587 | return ret; |
| 594 | 588 | } |
| @@ -948,8 +942,9 @@ static int qdma_init_error_irq(struct qdma_device *qdev) · 353 unmodified lines | ||
| 948 | 942 | |
| 949 | 943 | static int qdmam_alloc_qintr_rings(struct qdma_device *qdev) |
| 950 | 944 | { |
| 951 | − u32 ctxt[QDMA_CTXT_REGMAP_LEN]; | |
| 945 | + struct qdma_platdata *pdata = dev_get_platdata(&qdev->pdev->dev); | |
| 952 | 946 | struct device *dev = &qdev->pdev->dev; |
| 947 | + u32 ctxt[QDMA_CTXT_REGMAP_LEN]; | |
| 953 | 948 | struct qdma_intr_ring *ring; |
| 954 | 949 | struct qdma_ctxt_intr intr_ctxt; |
| 955 | 950 | u32 vector; |
| @@ -969,7 +964,8 @@ static int qdmam_alloc_qintr_rings(struct qdma_device *qdev) · 13 unmodified lines | ||
| 969 | 964 | ring->msix_id = qdev->err_irq_idx + i + 1; |
| 970 | 965 | ring->ridx = i; |
| 971 | 966 | ring->color = 1; |
| 972 | − ring->base = dmam_alloc_coherent(dev, QDMA_INTR_RING_SIZE, | |
| 967 | + ring->base = dmam_alloc_coherent(pdata->dma_dev, | |
| 968 | + QDMA_INTR_RING_SIZE, | |
| 973 | 969 | &ring->dev_base, GFP_KERNEL); |
| 974 | 970 | if (!ring->base) { |
| 975 | 971 | qdma_err(qdev, "Failed to alloc intr ring %d", i); |
| @@ -26,11 +26,13 @@ struct dma_slave_map; · 25 unmodified lines | ||
| 26 | 26 | * @max_mm_channels: Maximum number of MM DMA channels in each direction |
| 27 | 27 | * @device_map: DMA slave map |
| 28 | 28 | * @irq_index: The index of first IRQ |
| 29 | + * @dma_dev: The device pointer for dma operations | |
| 29 | 30 | */ |
| 30 | 31 | struct qdma_platdata { |
| 31 | 32 | u32 max_mm_channels; |
| 32 | 33 | u32 irq_index; |
| 33 | 34 | struct dma_slave_map *device_map; |
| 35 | + struct device *dma_dev; | |
| 34 | 36 | }; |
| 35 | 37 | |
| 36 | 38 | #endif /* _PLATDATA_AMD_QDMA_H */ |