Thread (2 messages) 2 messages, 2 authors, 2011-07-15

[Linaro-mm-sig] [RFC 2/2] ARM: initial proof-of-concept IOMMU mapper for DMA-mapping

From: Ramirez Luna, Omar <hidden>
Date: 2011-07-14 18:32:41
Also in: linux-mm

Hi Marek,
Add initial proof of concept implementation of DMA-mapping API for
devices that have IOMMU support. Right now only dma_alloc_coherent,
dma_free_coherent and dma_mmap_coherent functions are supported.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
...
quoted hunk
diff --git a/arch/arm/include/asm/dma-iommu.h b/arch/arm/include/asm/dma-iommu.h
new file mode 100644
index 0000000..c246ff3
--- /dev/null
+++ b/arch/arm/include/asm/dma-iommu.h
...
+int __init arm_iommu_assign_device(struct device *dev, dma_addr_t base, dma_addr_t size);
__init causes a panic if the iommu is assigned after boot.

In OMAP3 the iommu driver controls isp and dsp address spaces, it is
loaded until any of those 2 drivers is needed.
quoted hunk
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index f8c6972..b6397c1 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
...
+static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,
+ ? ? ? ? ? dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs)
+{
+ ? ? ? struct dma_iommu_mapping *mapping = dev->archdata.mapping;
+ ? ? ? struct page **pages;
+ ? ? ? void *addr = NULL;
+ ? ? ? pgprot_t prot;
+
+ ? ? ? if (dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs))
+ ? ? ? ? ? ? ? prot = pgprot_writecombine(pgprot_kernel);
+ ? ? ? else
+ ? ? ? ? ? ? ? prot = pgprot_dmacoherent(pgprot_kernel);
+
+ ? ? ? arm_iommu_init(dev);
I found useful to call arm_iommu_init inside arm_iommu_assign_device
instead. So, then gen_pool is created only once without the
mapping->pool check, instead of relying on the call to ...alloc_attrs,
which in my case I never use because I'm implementing
iommu_map|unmap_sg functions to see how it goes with the dma mapping.

Regards,

Omar
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help