|
@@ -38,14 +38,23 @@ static int msm_iommu_attach(struct msm_mmu *mmu, const char * const *names,
|
|
|
int cnt)
|
|
|
{
|
|
|
struct msm_iommu *iommu = to_msm_iommu(mmu);
|
|
|
- return iommu_attach_device(iommu->domain, mmu->dev);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ pm_runtime_get_sync(mmu->dev);
|
|
|
+ ret = iommu_attach_device(iommu->domain, mmu->dev);
|
|
|
+ pm_runtime_put_sync(mmu->dev);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void msm_iommu_detach(struct msm_mmu *mmu, const char * const *names,
|
|
|
int cnt)
|
|
|
{
|
|
|
struct msm_iommu *iommu = to_msm_iommu(mmu);
|
|
|
+
|
|
|
+ pm_runtime_get_sync(mmu->dev);
|
|
|
iommu_detach_device(iommu->domain, mmu->dev);
|
|
|
+ pm_runtime_put_sync(mmu->dev);
|
|
|
}
|
|
|
|
|
|
static int msm_iommu_map(struct msm_mmu *mmu, uint64_t iova,
|
|
@@ -54,7 +63,9 @@ static int msm_iommu_map(struct msm_mmu *mmu, uint64_t iova,
|
|
|
struct msm_iommu *iommu = to_msm_iommu(mmu);
|
|
|
size_t ret;
|
|
|
|
|
|
+// pm_runtime_get_sync(mmu->dev);
|
|
|
ret = iommu_map_sg(iommu->domain, iova, sgt->sgl, sgt->nents, prot);
|
|
|
+// pm_runtime_put_sync(mmu->dev);
|
|
|
WARN_ON(ret < 0);
|
|
|
|
|
|
return (ret == len) ? 0 : -EINVAL;
|
|
@@ -65,7 +76,9 @@ static int msm_iommu_unmap(struct msm_mmu *mmu, uint64_t iova,
|
|
|
{
|
|
|
struct msm_iommu *iommu = to_msm_iommu(mmu);
|
|
|
|
|
|
+ pm_runtime_get_sync(mmu->dev);
|
|
|
iommu_unmap(iommu->domain, iova, len);
|
|
|
+ pm_runtime_put_sync(mmu->dev);
|
|
|
|
|
|
return 0;
|
|
|
}
|