On Tuesday 03 May 2011, Laurent Pinchart wrote:
I wish it was that simple.
The OMAP4 ISS (Imaging Subsystem) has no IOMMU, but it can use the OMAP4 DMM (Dynamic Memory Manager) which acts as a memory remapper. Basically (if my understanding is correct), the ISS is configured to read/write from/to physical addresses. If those physical addresses are in the DMM address range, the DMM translates the accesses to physical accesses, acting as an IOMMU.
The ISS can thus write to physically contiguous memory directly, or to scattered physical pages through the DMM. Whether an IOMMU (or, to be correct in this case, the IOMMU-like DMM) needs to handle the DMA is a per-buffer decision, not a per-device decision.
This doesn't sound too unusual for IOMMU implementations. A lot of time you can access e.g. low memory using a direct mapping but you need the IOMMU code for highmem. I've also seen a machine where a linear mapping exists for all the memory in strict ordering, while you can use relaxed DMA ordering when you go through the IOMMU address range. If we manage to come up with a common dma-mapping API implementation for all IOMMUs, it certainly needs to handle that case as well.
Arnd