 1424532b21
			
		
	
	
	1424532b21
	
	
	
		
			
			Patch 22b3c181c6 ("arm: dma-mapping: limit
IOMMU mapping size") added a check for IO address space size. However
this patch broke IOMMU initialization for typical platforms initialized
from device tree, which get the default IO address space size of 4GiB.
This value doesn't fit into size_t and fails a check introduced by that
commit resulting in failed dma-mapping/iommu initialization. This patch
fixes this issue by adding proper support for full 4GiB address space
size.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
		
	
			
		
			
				
	
	
		
			37 lines
		
	
	
	
		
			927 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			927 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef ASMARM_DMA_IOMMU_H
 | |
| #define ASMARM_DMA_IOMMU_H
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| #include <linux/mm_types.h>
 | |
| #include <linux/scatterlist.h>
 | |
| #include <linux/dma-debug.h>
 | |
| #include <linux/kmemcheck.h>
 | |
| #include <linux/kref.h>
 | |
| 
 | |
| struct dma_iommu_mapping {
 | |
| 	/* iommu specific data */
 | |
| 	struct iommu_domain	*domain;
 | |
| 
 | |
| 	unsigned long		**bitmaps;	/* array of bitmaps */
 | |
| 	unsigned int		nr_bitmaps;	/* nr of elements in array */
 | |
| 	unsigned int		extensions;
 | |
| 	size_t			bitmap_size;	/* size of a single bitmap */
 | |
| 	size_t			bits;		/* per bitmap */
 | |
| 	dma_addr_t		base;
 | |
| 
 | |
| 	spinlock_t		lock;
 | |
| 	struct kref		kref;
 | |
| };
 | |
| 
 | |
| struct dma_iommu_mapping *
 | |
| arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, u64 size);
 | |
| 
 | |
| void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
 | |
| 
 | |
| int arm_iommu_attach_device(struct device *dev,
 | |
| 					struct dma_iommu_mapping *mapping);
 | |
| void arm_iommu_detach_device(struct device *dev);
 | |
| 
 | |
| #endif /* __KERNEL__ */
 | |
| #endif
 |