On Thu, Apr 20, 2017 at 11:44 AM, Mikko Perttunen <cyndis@xxxxxxxx> wrote:
On 20.04.2017 11:25, Arnd Bergmann wrote:
On Thu, Apr 20, 2017 at 9:02 AM, Mikko Perttunen <cyndis@xxxxxxxx> 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