Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a256beb authored by Olav Haugan's avatar Olav Haugan Committed by Chintan Pandya
Browse files

iommu: msm: Add debug option to only map 4K pages



For debugging and performance measurements it might be useful to
force mappings into the page tables with 4K granularity. To enable
this feature turn on CONFIG_IOMMU_FORCE_4K_MAPPINGS.

Change-Id: Ie2a36e3f4e2f96b2c19b3b8b64e8f8ed1a13e674
Signed-off-by: default avatarOlav Haugan <ohaugan@codeaurora.org>
parent 072185c6
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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)
+13 −2
Original line number Diff line number Diff line
@@ -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)