Subject: DMA mapping API(IOMMU) for ARM64?

From: [email-masked] (Marek Szyprowski)
Date: Wed, 19 Jun 2013 11:29:18 +0200

Hello,

On 6/18/2013 2:50 PM, Catalin Marinas wrote:
> On Tue, Jun 18, 2013 at 12:01:37PM +0100, Hiroshi Doyu wrote:
> > Arnd Bergmann <[email-masked]> wrote @ Tue, 18 Jun 2013 12:32:44 +0200:
> > > On Tuesday 18 June 2013 11:19:14 Will Deacon wrote:
> > > > I've spoken briefly with Catalin about this and it seems like there might be
> > > > *some* scope for sharing common dma-mapping code between architectures.
> > > > There doesn't really need to be any architecture-specific details in
> > > > allocating iova space and the interface to the iommu drivers is
> > > > well-defined. The arch-specific stuff is bogged down in the non-coherent
> > > > buffer management, but that doesn't necessarily equate to lots of code.
> > > >
> > > > So, the best bet would be to figure out how to split up what we have under
> > > > arch/arm/ so that it can be re-used by arm64 and potentially other
> > > > architectures (powerpc has some simple stuff for coherent mappings and some
> > > > less-simple stuff for non-coherent buffers).
> > >
> > > I'm sure that other architectures are interested in sharing the code.
> > > Best move it into the global mm/ directory, at least the version for
> > > coherent mappings.
> >
> > I'm guessing that this kind of unification usually takes some time
> > since we need to factor out the common code from the different
> > ${ARCH}/mm/dma-mapping.c. Also some of ${ARCH} has IOMMU support in
> > it. So if we want to develop our 64-bit ARM with working DMA mapping
> > API during this transition, the step to take would be:
> >
> > 1, Copy arch/arm/mm/dma-mapping.c arch/arm64/mm/dma-mapping.c(+swiotlb)
> > 2, Adapt arch/arm64/mm/dma-mapping.c(+swiotlb) to 64bit compatible.
> > 3, Factor out the common code from them into mm/dma-mapping.c
>
> Or add the relevant code to something like lib/iommu-helper.c, convert
> arm64 to use that and we can work on converting arm and other
> architectures afterwards.

I think that this would be the best way of providing iommu support for 
dma mapping
subsystem(s). I initially put it in arm/mm/dma-mapping.c because it was 
the first
approach of integrating generic IOMMU with DMA-mapping and it was simply 
easier to
have all the code in one place. Now, when second client of such approach 
comes, it
should be much easier to identify which part of the code is common and 
which one is
specific to particular implementation. Feel free to ask any questions if 
you need
help. I don't have access to any ARM64 machine or simulator, so I can 
only review
the code.

Best regards
-- 
Marek Szyprowski
Samsung R&D Institute Poland