From: Eric Anholt <e...@anholt.net>

[ Upstream commit a242f4297cfe3f4589a7620dcd42cc503607fc6b ]

db820c wants to use the qcom smmu path to get HUPCF set (which keeps
the GPU from wedging and then sometimes wedging the kernel after a
page fault), but it doesn't have separate pagetables support yet in
drm/msm so we can't go all the way to the TTBR1 path.

Signed-off-by: Eric Anholt <e...@anholt.net>
Reviewed-by: Bjorn Andersson <bjorn.anders...@linaro.org>
Link: https://lore.kernel.org/r/20210326231303.3071950-1-e...@anholt.net
Signed-off-by: Will Deacon <w...@kernel.org>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c 
b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
index 98b3a1c2a181..44a427833385 100644
--- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
+++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
@@ -130,6 +130,16 @@ static int qcom_adreno_smmu_alloc_context_bank(struct 
arm_smmu_domain *smmu_doma
        return __arm_smmu_alloc_bitmap(smmu->context_map, start, count);
 }
 
+static bool qcom_adreno_can_do_ttbr1(struct arm_smmu_device *smmu)
+{
+       const struct device_node *np = smmu->dev->of_node;
+
+       if (of_device_is_compatible(np, "qcom,msm8996-smmu-v2"))
+               return false;
+
+       return true;
+}
+
 static int qcom_adreno_smmu_init_context(struct arm_smmu_domain *smmu_domain,
                struct io_pgtable_cfg *pgtbl_cfg, struct device *dev)
 {
@@ -144,7 +154,8 @@ static int qcom_adreno_smmu_init_context(struct 
arm_smmu_domain *smmu_domain,
         * be AARCH64 stage 1 but double check because the arm-smmu code assumes
         * that is the case when the TTBR1 quirk is enabled
         */
-       if ((smmu_domain->stage == ARM_SMMU_DOMAIN_S1) &&
+       if (qcom_adreno_can_do_ttbr1(smmu_domain->smmu) &&
+           (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) &&
            (smmu_domain->cfg.fmt == ARM_SMMU_CTX_FMT_AARCH64))
                pgtbl_cfg->quirks |= IO_PGTABLE_QUIRK_ARM_TTBR1;
 
-- 
2.30.2

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to