rockchip:iommu:1,fix build error 2,disable invalid tlb when iovmm_unmap

This commit is contained in:
xxm
2014-07-31 17:35:15 +08:00
parent 3ba44c468f
commit fb4412ae7a
3 changed files with 34 additions and 17 deletions

View File

@@ -174,9 +174,9 @@ void iovmm_unmap(struct device *dev, dma_addr_t iova)
region->start = round_down(region->start, PAGE_SIZE);
unmapped_size = iommu_unmap(vmm->domain, region->start, region->size);
/*
rockchip_sysmmu_tlb_invalidate(dev);
*/
gen_pool_free(vmm->vmm_pool, region->start, region->size);
WARN_ON(unmapped_size != region->size);

View File

@@ -7,9 +7,9 @@
#ifndef __ASM_PLAT_IOVMM_H
#define __ASM_PLAT_IOVMM_H
#ifdef CONFIG_ROCKCHIP_IOVMM
struct scatterlist;
struct device;
#ifdef CONFIG_ROCKCHIP_IOVMM
int iovmm_activate(struct device *dev);
void iovmm_deactivate(struct device *dev);
@@ -62,14 +62,14 @@ struct device *rockchip_get_sysmmu_device_by_compatible(const char *compt);
#else
#define iovmm_activate(dev) (-ENOSYS)
#define iovmm_deactivate(dev) do { } while (0)
#define iovmm_map(dev, sg, offset, size) (-ENOSYS)
#define iovmm_unmap(dev, iova) do { } while (0)
#define iovmm_map_oto(dev, phys, size) (-ENOSYS)
#define iovmm_unmap_oto(dev, phys) do { } while (0)
#define rockchip_get_sysmmu_device_by_compatible(compt) do { } while (0)
static inline int iovmm_activate(struct device *dev) {return -ENOSYS; }
static inline void iovmm_deactivate(struct device *dev) { }
static inline dma_addr_t iovmm_map(struct device *dev, struct scatterlist *sg, off_t offset,
size_t size) { return -ENOSYS; }
static inline void iovmm_unmap(struct device *dev, dma_addr_t iova) { }
static inline int iovmm_map_oto(struct device *dev, phys_addr_t phys, size_t size) {return -ENOSYS; }
static inline void iovmm_unmap_oto(struct device *dev, phys_addr_t phys) { }
static inline struct device *rockchip_get_sysmmu_device_by_compatible(const char *compt) {return NULL; }
#endif /* CONFIG_ROCKCHIP_IOVMM */
#endif /*__ASM_PLAT_IOVMM_H*/

View File

@@ -12,6 +12,7 @@
#include <linux/list.h>
#include <linux/atomic.h>
#include <linux/spinlock.h>
#include <linux/device.h>
#define IEP_SYSMMU_COMPATIBLE_NAME "iommu,iep_mmu"
#define VIP_SYSMMU_COMPATIBLE_NAME "iommu,vip_mmu"
@@ -90,20 +91,36 @@ void rockchip_sysmmu_tlb_invalidate(struct device *owner);
void rockchip_sysmmu_set_fault_handler(struct device *dev,sysmmu_fault_handler_t handler);
#else /* CONFIG_ROCKCHIP_IOMMU */
#define rockchip_sysmmu_enable(owner, pgd) do { } while (0)
#define rockchip_sysmmu_disable(owner) do { } while (0)
#define rockchip_sysmmu_tlb_invalidate(owner) do { } while (0)
#define rockchip_sysmmu_set_fault_handler(sysmmu, handler) do { } while (0)
static inline int rockchip_sysmmu_enable(struct device *owner, unsigned long pgd)
{
return -ENOSYS;
}
static inline bool rockchip_sysmmu_disable(struct device *owner)
{
return false;
}
static inline void rockchip_sysmmu_tlb_invalidate(struct device *owner)
{
}
static inline void rockchip_sysmmu_set_fault_handler(struct device *dev,sysmmu_fault_handler_t handler)
{
}
static inline void rockchip_sysmmu_set_prefbuf(struct device *owner,
unsigned long base0, unsigned long size0,
unsigned long base1, unsigned long size1)
{
}
#endif
#ifdef CONFIG_IOMMU_API
#include <linux/device.h>
static inline void platform_set_sysmmu(struct device *sysmmu, struct device *dev)
{
dev->archdata.iommu = sysmmu;
}
#else
#define platform_set_sysmmu(dev, sysmmu) do { } while (0)
static inline void platform_set_sysmmu(struct device *sysmmu, struct device *dev)
{
}
#endif
#endif /* _ARM_MACH_RK_SYSMMU_H_ */