On 10/31/2015 05:44 AM, Tobias Jakobi wrote:
Hey there,
this question arose during some discussion with someone concerning the Exynos mixer and G2D.
The question is the following. Consider the Exynos mixer when run under the IOMMU (that's sysmmu_tv IIRC). What exactly does setup the IOMMU mapping so that the mixer can scanout the framebuffer?
IOMMU mapping is in dma_alloc_attrs(). Already IOMMU was integrated in the DMA mapping API on ARM arch.
There is exynos_gem_map_sgt_with_dma() in the Exynos GEM code, but it's currently exclusively used for the G2D and only when dealing with userptr (and not GEM) there.
I was looking at exynos_drm_alloc_buf() since this called when allocating a BO to be used as scanout.
I see dma_alloc_attrs() being called, which also sets the DMA address that is later used in the mixer code. But DMA_ATTR_NO_KERNEL_MAPPING is passed, so no mapping is done at this point.
Did you read Documentation/DMA-attributes.txt document? DMA_ATTR_NO_KERNEL_MAPPING is just to avoid creating a kernel virtual mapping for the allocated buffer on ARM arch.
Is the mapping done somewhere else, or is it simply not necessary here?
What is the mapping you mean? As you know, the DMA address of the memory gets from dma_alloc_attrs() and it can be used by device. There is no reason to use dma_map_*().
Thanks.