| From c2c689e06f50cd2d82c5bd412c3a20fbbc126167 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 19 Aug 2021 14:28:48 +0530 |
| Subject: dmaengine: xilinx_dma: Set DMA mask for coherent APIs |
| |
| From: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com> |
| |
| [ Upstream commit aac6c0f90799d66b8989be1e056408f33fd99fe6 ] |
| |
| The xilinx dma driver uses the consistent allocations, so for correct |
| operation also set the DMA mask for coherent APIs. It fixes the below |
| kernel crash with dmatest client when DMA IP is configured with 64-bit |
| address width and linux is booted from high (>4GB) memory. |
| |
| Call trace: |
| [ 489.531257] dma_alloc_from_pool+0x8c/0x1c0 |
| [ 489.535431] dma_direct_alloc+0x284/0x330 |
| [ 489.539432] dma_alloc_attrs+0x80/0xf0 |
| [ 489.543174] dma_pool_alloc+0x160/0x2c0 |
| [ 489.547003] xilinx_cdma_prep_memcpy+0xa4/0x180 |
| [ 489.551524] dmatest_func+0x3cc/0x114c |
| [ 489.555266] kthread+0x124/0x130 |
| [ 489.558486] ret_from_fork+0x10/0x3c |
| [ 489.562051] ---[ end trace 248625b2d596a90a ]--- |
| |
| Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com> |
| Reviewed-by: Harini Katakam <harini.katakam@xilinx.com> |
| Link: https://lore.kernel.org/r/1629363528-30347-1-git-send-email-radhey.shyam.pandey@xilinx.com |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/dma/xilinx/xilinx_dma.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c |
| index 4b9530a7bf65..434b1ff22e31 100644 |
| --- a/drivers/dma/xilinx/xilinx_dma.c |
| +++ b/drivers/dma/xilinx/xilinx_dma.c |
| @@ -3077,7 +3077,7 @@ static int xilinx_dma_probe(struct platform_device *pdev) |
| xdev->ext_addr = false; |
| |
| /* Set the dma mask bits */ |
| - dma_set_mask(xdev->dev, DMA_BIT_MASK(addr_width)); |
| + dma_set_mask_and_coherent(xdev->dev, DMA_BIT_MASK(addr_width)); |
| |
| /* Initialize the DMA engine */ |
| xdev->common.dev = &pdev->dev; |
| -- |
| 2.33.0 |
| |