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

Commit fad25926 authored by Mitchel Humpherys's avatar Mitchel Humpherys Committed by Patrick Daly
Browse files

iommu: export iommu_pgsize



It can be useful in IOMMU drivers.  Export it.

Change-Id: I4c423d256312250f1e33ca8d64dfe1626f008b5e
Signed-off-by: default avatarMitchel Humpherys <mitchelh@codeaurora.org>
Signed-off-by: default avatarPatrick Daly <pdaly@codeaurora.org>
parent ff8e21c9
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -1275,7 +1275,7 @@ phys_addr_t iommu_iova_to_phys_hard(struct iommu_domain *domain,
	return domain->ops->iova_to_phys_hard(domain, iova);
}

static size_t iommu_pgsize(struct iommu_domain *domain,
size_t iommu_pgsize(unsigned long pgsize_bitmap,
		    unsigned long addr_merge, size_t size)
{
	unsigned int pgsize_idx;
@@ -1295,7 +1295,7 @@ static size_t iommu_pgsize(struct iommu_domain *domain,
	pgsize = (1UL << (pgsize_idx + 1)) - 1;

	/* throw away page sizes not supported by the hardware */
	pgsize &= domain->pgsize_bitmap;
	pgsize &= pgsize_bitmap;

	/* make sure we're still sane */
	BUG_ON(!pgsize);
@@ -1340,7 +1340,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova,
	pr_debug("map: iova 0x%lx pa %pa size 0x%zx\n", iova, &paddr, size);

	while (size) {
		size_t pgsize = iommu_pgsize(domain, iova | paddr, size);
		size_t pgsize = iommu_pgsize(domain->pgsize_bitmap,
						iova | paddr, size);

		pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
			 iova, &paddr, pgsize);
@@ -1398,7 +1399,8 @@ size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova, size_t size)
	 * or we hit an area that isn't mapped.
	 */
	while (unmapped < size) {
		size_t pgsize = iommu_pgsize(domain, iova, size - unmapped);
		size_t pgsize = iommu_pgsize(domain->pgsize_bitmap,
						iova, size - unmapped);

		unmapped_page = domain->ops->unmap(domain, iova, pgsize);
		if (!unmapped_page)
+2 −0
Original line number Diff line number Diff line
@@ -245,6 +245,8 @@ extern int iommu_attach_device(struct iommu_domain *domain,
extern void iommu_detach_device(struct iommu_domain *domain,
				struct device *dev);
extern struct iommu_domain *iommu_get_domain_for_dev(struct device *dev);
extern size_t iommu_pgsize(unsigned long pgsize_bitmap,
			   unsigned long addr_merge, size_t size);
extern int iommu_map(struct iommu_domain *domain, unsigned long iova,
		     phys_addr_t paddr, size_t size, int prot);
extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,