dmaengine: sprd: add dma mask interface in probe
authorKaiwei Liu <kaiwei.liu@unisoc.com>
Tue, 19 Sep 2023 07:38:01 +0000 (15:38 +0800)
committerVinod Koul <vkoul@kernel.org>
Mon, 2 Oct 2023 15:58:33 +0000 (21:28 +0530)
In the probe of DMA, the default addressing range is 32 bits,
while the actual DMA hardware addressing range used is 36 bits.
So add dma_set_mask_and_coherent function to match DMA
addressing range.

Signed-off-by: Kaiwei Liu <kaiwei.liu@unisoc.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230919073801.25054-1-kaiwei.liu@unisoc.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/sprd-dma.c

index 0064a5f..fe3d69c 100644 (file)
@@ -1117,6 +1117,15 @@ static int sprd_dma_probe(struct platform_device *pdev)
        u32 chn_count;
        int ret, i;
 
+       ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(36));
+       if (ret) {
+               ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
+               if (ret) {
+                       dev_err(&pdev->dev, "unable to set coherent mask to 32\n");
+                       return ret;
+               }
+       }
+
        /* Parse new and deprecated dma-channels properties */
        ret = device_property_read_u32(&pdev->dev, "dma-channels", &chn_count);
        if (ret)