summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuchun Chen <guchunc@qti.qualcomm.com>2017-06-07 20:00:30 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-06-07 20:00:30 -0700
commita14f22c34c1dba0cf8107abf99b04a9052fdc6b4 (patch)
tree7d40b7eb8889bee054c774abe322731679ffdc15
parentae94b477afd5d71221964250395d8f109ddb5b06 (diff)
Revert "msm: smmu: add re-route calling for specified iova."
This reverts commit ae94b477afd5d71221964250395d8f109ddb5b06. This change brings side effect of smmu fault in apq8098 project. It blocks their regression test. Change-Id: Ia479188eca74ec988026f7d42207435da2f79bfc Signed-off-by: Guchun Chen <guchunc@codeaurora.org>
-rw-r--r--drivers/gpu/drm/msm/msm_smmu.c56
1 files changed, 14 insertions, 42 deletions
diff --git a/drivers/gpu/drm/msm/msm_smmu.c b/drivers/gpu/drm/msm/msm_smmu.c
index a6efb22b5ed4..c2dd5f96521e 100644
--- a/drivers/gpu/drm/msm/msm_smmu.c
+++ b/drivers/gpu/drm/msm/msm_smmu.c
@@ -120,30 +120,16 @@ static int msm_smmu_map(struct msm_mmu *mmu, uint64_t iova,
{
struct msm_smmu *smmu = to_msm_smmu(mmu);
struct msm_smmu_client *client = msm_smmu_to_client(smmu);
- struct iommu_domain *domain;
int ret;
- if (!client || !sgt)
- return -EINVAL;
-
- if (iova != 0) {
- if (!client->mmu_mapping || !client->mmu_mapping->domain)
- return -EINVAL;
-
- domain = client->mmu_mapping->domain;
-
- return iommu_map_sg(domain, iova, sgt->sgl,
- sgt->nents, flags);
- } else {
- if (priv)
- ret = msm_dma_map_sg_lazy(client->dev, sgt->sgl,
- sgt->nents, DMA_BIDIRECTIONAL, priv);
- else
- ret = dma_map_sg(client->dev, sgt->sgl, sgt->nents,
- DMA_BIDIRECTIONAL);
+ if (priv)
+ ret = msm_dma_map_sg_lazy(client->dev, sgt->sgl, sgt->nents,
+ DMA_BIDIRECTIONAL, priv);
+ else
+ ret = dma_map_sg(client->dev, sgt->sgl, sgt->nents,
+ DMA_BIDIRECTIONAL);
- return (ret != sgt->nents) ? -ENOMEM : 0;
- }
+ return (ret != sgt->nents) ? -ENOMEM : 0;
}
static void msm_smmu_unmap(struct msm_mmu *mmu, uint64_t iova,
@@ -151,27 +137,13 @@ static void msm_smmu_unmap(struct msm_mmu *mmu, uint64_t iova,
{
struct msm_smmu *smmu = to_msm_smmu(mmu);
struct msm_smmu_client *client = msm_smmu_to_client(smmu);
- struct iommu_domain *domain = client->mmu_mapping->domain;
- struct scatterlist *sg;
- size_t len = 0;
- int unmapped, i = 0;
-
- if (iova != 0) {
- for_each_sg(sgt->sgl, sg, sgt->nents, i)
- len += sg->length;
-
- unmapped = iommu_unmap(domain, iova, len);
- if (unmapped < len)
- dev_warn(mmu->dev,
- "could not unmap iova@%llx\n", iova);
- } else {
- if (priv)
- msm_dma_unmap_sg(client->dev, sgt->sgl,
- sgt->nents, DMA_BIDIRECTIONAL, priv);
- else
- dma_unmap_sg(client->dev, sgt->sgl, sgt->nents,
- DMA_BIDIRECTIONAL);
- }
+
+ if (priv)
+ msm_dma_unmap_sg(client->dev, sgt->sgl, sgt->nents,
+ DMA_BIDIRECTIONAL, priv);
+ else
+ dma_unmap_sg(client->dev, sgt->sgl, sgt->nents,
+ DMA_BIDIRECTIONAL);
}
static void msm_smmu_destroy(struct msm_mmu *mmu)