Commit 0e764a01 authored by Jordan Crouse's avatar Jordan Crouse Committed by Will Deacon

iommu/arm-smmu: Allow client devices to select direct mapping

Some client devices want to directly map the IOMMU themselves instead
of using the DMA domain. Allow those devices to opt in to direct
mapping by way of a list of compatible strings.
Co-developed-by: default avatarSai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: default avatarSai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/7cf1f64167b5545b7f42275395be1f1e2ea3a6ac.1587407458.git.saiprakash.ranjan@codeaurora.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent 232c5ae8
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
* Copyright (c) 2019, The Linux Foundation. All rights reserved. * Copyright (c) 2019, The Linux Foundation. All rights reserved.
*/ */
#include <linux/of_device.h>
#include <linux/qcom_scm.h> #include <linux/qcom_scm.h>
#include "arm-smmu.h" #include "arm-smmu.h"
...@@ -11,6 +12,23 @@ struct qcom_smmu { ...@@ -11,6 +12,23 @@ struct qcom_smmu {
struct arm_smmu_device 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,sdm845-mdss" },
{ }
};
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) static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
{ {
int ret; int ret;
...@@ -41,6 +59,7 @@ static int qcom_smmu500_reset(struct arm_smmu_device *smmu) ...@@ -41,6 +59,7 @@ static int qcom_smmu500_reset(struct arm_smmu_device *smmu)
} }
static const struct arm_smmu_impl qcom_smmu_impl = { static const struct arm_smmu_impl qcom_smmu_impl = {
.def_domain_type = qcom_smmu_def_domain_type,
.reset = qcom_smmu500_reset, .reset = qcom_smmu500_reset,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment