Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/omap: ensure we have a valid dma_mask

The omapdrm driver uses dma_set_coherent_mask(), but that's not enough
anymore when LPAE is enabled.

From Christoph Hellwig <hch@lst.de>:

> The traditional arm DMA code ignores, but the generic dma-direct/swiotlb
> has stricter checks and thus fails mappings without a DMA mask. As we
> use swiotlb for arm with LPAE now, omapdrm needs to catch up and
> actually set a DMA mask.

Change the dma_set_coherent_mask() call to
dma_coerce_mask_and_coherent() so that the dev->dma_mask is also set.

Fixes: ad3c7b18c5b3 ("arm: use swiotlb for bounce buffering on LPAE configs")
Reported-by: "H. Nikolaus Schaller" <hns@goldelico.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Link: https://patchwork.freedesktop.org/patch/msgid/c219e7e6-0f66-d6fd-e0cf-59c803386825@ti.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@ti.com>

+1 -1
+1 -1
drivers/gpu/drm/omapdrm/omap_drv.c
··· 669 669 if (omapdss_is_initialized() == false) 670 670 return -EPROBE_DEFER; 671 671 672 - ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); 672 + ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); 673 673 if (ret) { 674 674 dev_err(&pdev->dev, "Failed to set the DMA mask\n"); 675 675 return ret;