Merge "msm: smmu: add re-route calling for specified iova when mapping"
This commit is contained in:
commit
d2c81e0602
1 changed files with 21 additions and 7 deletions
|
@ -120,16 +120,30 @@ static int msm_smmu_map(struct msm_mmu *mmu, uint64_t iova,
|
||||||
{
|
{
|
||||||
struct msm_smmu *smmu = to_msm_smmu(mmu);
|
struct msm_smmu *smmu = to_msm_smmu(mmu);
|
||||||
struct msm_smmu_client *client = msm_smmu_to_client(smmu);
|
struct msm_smmu_client *client = msm_smmu_to_client(smmu);
|
||||||
|
struct iommu_domain *domain;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (priv)
|
if (!client || !sgt)
|
||||||
ret = msm_dma_map_sg_lazy(client->dev, sgt->sgl, sgt->nents,
|
return -EINVAL;
|
||||||
DMA_BIDIRECTIONAL, priv);
|
|
||||||
else
|
|
||||||
ret = dma_map_sg(client->dev, sgt->sgl, sgt->nents,
|
|
||||||
DMA_BIDIRECTIONAL);
|
|
||||||
|
|
||||||
return (ret != sgt->nents) ? -ENOMEM : 0;
|
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);
|
||||||
|
|
||||||
|
return (ret != sgt->nents) ? -ENOMEM : 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void msm_smmu_unmap(struct msm_mmu *mmu, uint64_t iova,
|
static void msm_smmu_unmap(struct msm_mmu *mmu, uint64_t iova,
|
||||||
|
|
Loading…
Add table
Reference in a new issue