From 85959f645ba38617233fbf44f442f8a88875d765 Mon Sep 17 00:00:00 2001 From: Simon Xue Date: Tue, 6 Apr 2021 16:50:41 +0800 Subject: [PATCH] iommu/rockchip: ignore device_link for vop iommu may enabled by pm_runtime_get_sync from vop, this path is not accept by vop, so ignore device_link for vop Change-Id: I532a2a964b423e78fadec02c3b4c2952301ebf4b Signed-off-by: Simon Xue --- drivers/iommu/rockchip-iommu.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index ddd43e5667d1..6b9ca1f5e824 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -105,6 +105,7 @@ struct rk_iommu { int num_clocks; bool reset_disabled; bool skip_read; /* rk3126/rk3128 can't read vop iommu registers */ + bool dlr_disable; /* avoid access iommu when runtime ops called */ struct iommu_device iommu; struct list_head node; /* entry in rk_iommu_domain.iommus */ struct iommu_domain *domain; /* domain to which iommu is attached */ @@ -1214,6 +1215,8 @@ static int rk_iommu_probe(struct platform_device *pdev) "rockchip,disable-mmu-reset"); iommu->skip_read = device_property_read_bool(dev, "rockchip,skip-mmu-read"); + iommu->dlr_disable = device_property_read_bool(dev, + "rockchip,disable-device-link-resume"); iommu->num_clocks = ARRAY_SIZE(rk_iommu_clocks); iommu->clocks = devm_kcalloc(iommu->dev, iommu->num_clocks, @@ -1337,6 +1340,9 @@ static int __maybe_unused rk_iommu_suspend(struct device *dev) if (!iommu->domain) return 0; + if (iommu->dlr_disable) + return 0; + rk_iommu_disable(iommu); return 0; } @@ -1348,6 +1354,9 @@ static int __maybe_unused rk_iommu_resume(struct device *dev) if (!iommu->domain) return 0; + if (iommu->dlr_disable) + return 0; + return rk_iommu_enable(iommu); }