DMA: Support 36bit address when call getposition function.
authorJaejoon Yoo <joonyj7.yoo@samsung.com>
Tue, 10 Jan 2017 10:05:01 +0000 (19:05 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:21:50 +0000 (20:21 +0300)
Change-Id: I542860611c550d25b014e6cb112e64edf94e4e02
Signed-off-by: Jaejoon Yoo <joonyj7.yoo@samsung.com>
drivers/dma/pl330.c

index 768bee7f4c3ddf57118966e107ae07756abec26a..fe5479bcca94a73babc2a1d84a793a2e5179f154 100644 (file)
@@ -3026,6 +3026,9 @@ int pl330_dma_getposition(struct dma_chan *chan,
        *src = readl(regs + SA(thrd->id));
        *dst = readl(regs + DA(thrd->id));
 
+       *src |= (dma_addr_t)readl(thrd->ar_wrapper) << 32;
+       *dst |= (dma_addr_t)readl(thrd->aw_wrapper) << 32;
+
        return 0;
 }
 EXPORT_SYMBOL(pl330_dma_getposition);
@@ -3115,7 +3118,11 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
        int num_chan;
        struct device_node *np = adev->dev.of_node;
 
+#ifdef  CONFIG_ZONE_DMA
+       ret = dma_set_mask_and_coherent(&adev->dev, DMA_BIT_MASK(32));
+#else
        ret = dma_set_mask_and_coherent(&adev->dev, DMA_BIT_MASK(36));
+#endif
        if (ret)
                return ret;