diff options
Diffstat (limited to 'drivers/iommu')
-rw-r--r-- | drivers/iommu/msm_iommu_pagetable.c | 16 | ||||
-rw-r--r-- | drivers/iommu/msm_iommu_pagetable_lpae.c | 15 |
2 files changed, 29 insertions, 2 deletions
diff --git a/drivers/iommu/msm_iommu_pagetable.c b/drivers/iommu/msm_iommu_pagetable.c index acb21fcedb86..797a2214e644 100644 --- a/drivers/iommu/msm_iommu_pagetable.c +++ b/drivers/iommu/msm_iommu_pagetable.c @@ -337,12 +337,28 @@ static int check_range(u32 *fl_table, unsigned int va, return 0; } +/* + * For debugging we may want to force mappings to be 4K only + */ +#ifdef CONFIG_IOMMU_FORCE_4K_MAPPINGS +static inline int is_fully_aligned(unsigned int va, phys_addr_t pa, size_t len, + int align) +{ + if (align == SZ_4K) { + return IS_ALIGNED(va, align) && IS_ALIGNED(pa, align) + && (len >= align); + } else { + return 0; + } +} +#else static inline int is_fully_aligned(unsigned int va, phys_addr_t pa, size_t len, int align) { return IS_ALIGNED(va, align) && IS_ALIGNED(pa, align) && (len >= align); } +#endif int msm_iommu_pagetable_map_range(struct msm_iommu_pt *pt, unsigned int va, struct scatterlist *sg, unsigned int len, int prot) diff --git a/drivers/iommu/msm_iommu_pagetable_lpae.c b/drivers/iommu/msm_iommu_pagetable_lpae.c index d3fb2999f731..18a4ff6ce3c3 100644 --- a/drivers/iommu/msm_iommu_pagetable_lpae.c +++ b/drivers/iommu/msm_iommu_pagetable_lpae.c @@ -455,11 +455,22 @@ static phys_addr_t get_phys_addr(struct scatterlist *sg) return pa; } -static inline s32 is_fully_aligned(u32 va, phys_addr_t pa, size_t len, - s32 align) +#ifdef CONFIG_IOMMU_FORCE_4K_MAPPINGS +static inline int is_fully_aligned(unsigned int va, phys_addr_t pa, size_t len, + int align) +{ + if (align == SZ_4K) + return IS_ALIGNED(va | pa, align) && (len >= align); + else + return 0; +} +#else +static inline int is_fully_aligned(unsigned int va, phys_addr_t pa, size_t len, + int align) { return IS_ALIGNED(va | pa, align) && (len >= align); } +#endif s32 msm_iommu_pagetable_map_range(struct msm_iommu_pt *pt, u32 va, struct scatterlist *sg, u32 len, s32 prot) |