diff options
Diffstat (limited to 'drivers/iommu/arm-smmu-qcom.c')
| -rw-r--r-- | drivers/iommu/arm-smmu-qcom.c | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c deleted file mode 100644 index cf01d0215a39..000000000000 --- a/drivers/iommu/arm-smmu-qcom.c +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (c) 2019, The Linux Foundation. All rights reserved. - */ - -#include <linux/of_device.h> -#include <linux/qcom_scm.h> - -#include "arm-smmu.h" - -struct qcom_smmu { - struct arm_smmu_device smmu; -}; - -static const struct of_device_id qcom_smmu_client_of_match[] = { - { .compatible = "qcom,adreno" }, - { .compatible = "qcom,mdp4" }, - { .compatible = "qcom,mdss" }, - { .compatible = "qcom,sc7180-mdss" }, - { .compatible = "qcom,sc7180-mss-pil" }, - { .compatible = "qcom,sdm845-mdss" }, - { .compatible = "qcom,sdm845-mss-pil" }, - { } -}; - -static int qcom_smmu_def_domain_type(struct device *dev) -{ - const struct of_device_id *match = - of_match_device(qcom_smmu_client_of_match, dev); - - return match ? IOMMU_DOMAIN_IDENTITY : 0; -} - -static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu) -{ - int ret; - - /* - * To address performance degradation in non-real time clients, - * such as USB and UFS, turn off wait-for-safe on sdm845 based boards, - * such as MTP and db845, whose firmwares implement secure monitor - * call handlers to turn on/off the wait-for-safe logic. - */ - ret = qcom_scm_qsmmu500_wait_safe_toggle(0); - if (ret) - dev_warn(smmu->dev, "Failed to turn off SAFE logic\n"); - - return ret; -} - -static int qcom_smmu500_reset(struct arm_smmu_device *smmu) -{ - const struct device_node *np = smmu->dev->of_node; - - arm_mmu500_reset(smmu); - - if (of_device_is_compatible(np, "qcom,sdm845-smmu-500")) - return qcom_sdm845_smmu500_reset(smmu); - - return 0; -} - -static const struct arm_smmu_impl qcom_smmu_impl = { - .def_domain_type = qcom_smmu_def_domain_type, - .reset = qcom_smmu500_reset, -}; - -struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu) -{ - struct qcom_smmu *qsmmu; - - qsmmu = devm_kzalloc(smmu->dev, sizeof(*qsmmu), GFP_KERNEL); - if (!qsmmu) - return ERR_PTR(-ENOMEM); - - qsmmu->smmu = *smmu; - - qsmmu->smmu.impl = &qcom_smmu_impl; - devm_kfree(smmu->dev, smmu); - - return &qsmmu->smmu; -} |
