Hi Tobias, 2015년 11월 02일 19:29에 Tobias Jakobi 이(가) 쓴 글: > Hello Joonyoung, > > > Joonyoung Shim wrote: >> 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. > Thanks, I'm going to take a closer look at dma_alloc_attrs() then. > > >>> 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? > I did, but I guess I should read it again... > > >> DMA_ATTR_NO_KERNEL_MAPPING is just to avoid creating a kernel virtual >> mapping for the allocated buffer on ARM arch. > Ah OK, so the IOMMU mapping is always established. > > >>> 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_*(). >>From my understanding the mixer doesn't directly access the physical > memory when running under IOMMU. It accesses memory through sysmmu_tv, > so my question was who does the setup so that sysmmu_tv "knows" how to > translate memory accesses. That is done by dma-mapping API, dma_alloc_attrs function in case of Exynos DRM. This dma mapping API calls internally iommu_map function of iommu framework after allocating physical pages and iova space, and the iova space will be mapped with physical pages. Please, look into the dma mapping framework - arch/arm/mm/dma-mapping.c - if you want to understand. I think you could understand it easily if you tried to look into exynos_drm_alloc_buf function before asking for it. Thanks, Inki Dae > > > With best wishes, > Tobias > > >> >> Thanks. >> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html