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.