This patch add dma mask for capability.

Signed-off-by: EastL Lee <eastl....@mediatek.com>
---
 drivers/dma/mediatek/mtk-cqdma.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/dma/mediatek/mtk-cqdma.c b/drivers/dma/mediatek/mtk-cqdma.c
index 905bbcb..1610632 100644
--- a/drivers/dma/mediatek/mtk-cqdma.c
+++ b/drivers/dma/mediatek/mtk-cqdma.c
@@ -117,6 +117,7 @@ struct mtk_cqdma_vchan {
  * @clk:                    The clock that device internal is using
  * @dma_requests:           The number of VCs the device supports to
  * @dma_channels:           The number of PCs the device supports to
+ * @dma_mask:               A mask for DMA capability
  * @vc:                     The pointer to all available VCs
  * @pc:                     The pointer to all the underlying PCs
  */
@@ -126,6 +127,7 @@ struct mtk_cqdma_device {
 
        u32 dma_requests;
        u32 dma_channels;
+       u32 dma_mask;
        struct mtk_cqdma_vchan *vc;
        struct mtk_cqdma_pchan **pc;
 };
@@ -607,6 +609,21 @@ static int mtk_cqdma_probe(struct platform_device *pdev)
                cqdma->dma_channels = MTK_CQDMA_NR_PCHANS;
        }
 
+       if (pdev->dev.of_node)
+               err = of_property_read_u32(pdev->dev.of_node,
+                                          "dma-channel-mask",
+                                          &cqdma->dma_mask);
+       if (err) {
+               dev_warn(&pdev->dev,
+                        "Using 0 as missing dma-channel-mask property\n");
+               cqdma->dma_mask = 0;
+       }
+
+       if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(cqdma->dma_mask))) {
+               dev_warn(&pdev->dev, "DMA set mask failed\n");
+               return -EINVAL;
+       }
+
        cqdma->pc = devm_kcalloc(&pdev->dev, cqdma->dma_channels,
                                 sizeof(*cqdma->pc), GFP_KERNEL);
        if (!cqdma->pc)
-- 
1.9.1

Reply via email to