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

Commit 387f2853 authored by Chintan Pandya's avatar Chintan Pandya
Browse files

iommu: msm: implement iova_to_phys_hard



IOMMU ops have been providing 2 interfaces for iova
to phys API. One is software based look up and another
is ATOS based look up. So, split the original iova
to phys into 2 separate hooks.

Change-Id: I9dc7e564b753d1898b364359c83ef83e04043759
Signed-off-by: default avatarChintan Pandya <cpandya@codeaurora.org>
parent 7d54fbdb
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -1231,6 +1231,20 @@ static size_t msm_iommu_map_sg(struct iommu_domain *domain, unsigned long va,

static phys_addr_t msm_iommu_iova_to_phys(struct iommu_domain *domain,
					  phys_addr_t va)
{
	phys_addr_t ret;
	unsigned long flags;

	mutex_lock(&msm_iommu_lock);
	spin_lock_irqsave(&msm_iommu_spin_lock, flags);
	ret = msm_iommu_iova_to_phys_soft(domain, va);
	spin_unlock_irqrestore(&msm_iommu_spin_lock, flags);
	mutex_unlock(&msm_iommu_lock);
	return ret;
}

static phys_addr_t msm_iommu_iova_to_phys_hard(struct iommu_domain *domain,
					  phys_addr_t va)
{
	struct msm_iommu_priv *priv;
	struct msm_iommu_drvdata *iommu_drvdata;
@@ -1256,10 +1270,8 @@ static phys_addr_t msm_iommu_iova_to_phys(struct iommu_domain *domain,
	iommu_drvdata = dev_get_drvdata(ctx_drvdata->pdev->dev.parent);

	if (iommu_drvdata->model == MMU_500) {
		spin_lock_irqsave(&msm_iommu_spin_lock, flags);
		ret = msm_iommu_iova_to_phys_soft(domain, va);
		spin_unlock_irqrestore(&msm_iommu_spin_lock, flags);
		mutex_unlock(&msm_iommu_lock);
		WARN_ONCE(1,
			"ATOS based iova_to_phys is not supported in MMU500\n");
		return ret;
	}

@@ -1709,6 +1721,7 @@ static struct iommu_ops msm_iommu_ops = {
	.unmap_range = msm_iommu_unmap_range,
	.map_sg = msm_iommu_map_sg,
	.iova_to_phys = msm_iommu_iova_to_phys,
	.iova_to_phys_hard = msm_iommu_iova_to_phys_hard,
	.capable = msm_iommu_capable,
	.pgsize_bitmap = MSM_IOMMU_PGSIZES,
	.domain_set_attr = msm_iommu_domain_set_attr,