mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 01:30:54 +07:00
drm/msm: pm runtime support for iommu
In particular, attach() and unmap() need pm-runtime get/put to ensure iommu clks are enabled. Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
f90000492e
commit
cc69272673
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user