summaryrefslogtreecommitdiff
path: root/drivers/iommu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/msm_iommu_pagetable.c16
-rw-r--r--drivers/iommu/msm_iommu_pagetable_lpae.c15
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)