On Thu, Apr 20, 2017 at 11:44 AM, Mikko Perttunen <cyn...@kapsi.fi> wrote: > On 20.04.2017 11:25, Arnd Bergmann wrote: >> On Thu, Apr 20, 2017 at 9:02 AM, Mikko Perttunen <cyn...@kapsi.fi> wrote: >>> On 19.04.2017 21:24, Arnd Bergmann wrote: >> >> I don't think this can be a per-platform policy. > > > Yeah, now that we are using the ARM SMMU on T186 onwards it's more difficult > than when we were using the Tegra SMMU, so we'll probably have to change > that. > > The goal of the current code is to allocate memory from the CMA, so one > option would be to change it to use dma_alloc_from_contiguous. That way we > wouldn't get the double IOMMU mapping, which would be nice.
Right, also we shouldn't define what a particular API does based on which platform you run on. > The goal of the current code is to allocate memory from the CMA, so one > option would be to change it to use dma_alloc_from_contiguous. That way > we wouldn't get the double IOMMU mapping, which would be nice. dma_alloc_from_contiguous() is intentionally not exported to drivers, and it would result in a page that is not mapped into your kernel address space. This is probably not the only driver that has this issue, so maybe a better approach would be to fill the API gap and introduce an IOMMU API function that takes a domain/iova/length tuple as its argument and allocates coherent or WC memory that it maps into that address? Arnd