Messages in this thread | | | Date | Mon, 20 Apr 2020 21:58:26 +0530 | From | Sai Prakash Ranjan <> | Subject | Re: [PATCHv2 2/6] iommu/arm-smmu: Allow client devices to select direct mapping |
| |
On 2020-04-20 21:27, Robin Murphy wrote: > On 2020-04-20 3:37 pm, Sai Prakash Ranjan wrote: >> From: Jordan Crouse <jcrouse@codeaurora.org> >> >> 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. >> >> Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> >> Co-developed-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> >> Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> >> --- >> drivers/iommu/arm-smmu-qcom.c | 19 +++++++++++++++++++ >> drivers/iommu/arm-smmu.h | 1 + >> 2 files changed, 20 insertions(+) >> >> diff --git a/drivers/iommu/arm-smmu-qcom.c >> b/drivers/iommu/arm-smmu-qcom.c >> index 64a4ab270ab7..0b3f159065aa 100644 >> --- a/drivers/iommu/arm-smmu-qcom.c >> +++ b/drivers/iommu/arm-smmu-qcom.c >> @@ -3,6 +3,7 @@ >> * Copyright (c) 2019, The Linux Foundation. All rights reserved. >> */ >> +#include <linux/of_device.h> >> #include <linux/qcom_scm.h> >> #include "arm-smmu.h" >> @@ -11,6 +12,23 @@ 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,sdm845-mdss" }, >> + { } >> +}; >> + >> +static int qcom_smmu_request_domain(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; >> @@ -41,6 +59,7 @@ static int qcom_smmu500_reset(struct arm_smmu_device >> *smmu) >> } >> static const struct arm_smmu_impl qcom_smmu_impl = { >> + .req_domain = qcom_smmu_request_domain, >> .reset = qcom_smmu500_reset, >> }; >> diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h >> index 8d1cd54d82a6..662fdb4dccd2 100644 >> --- a/drivers/iommu/arm-smmu.h >> +++ b/drivers/iommu/arm-smmu.h >> @@ -386,6 +386,7 @@ struct arm_smmu_impl { >> int (*init_context)(struct arm_smmu_domain *smmu_domain); >> void (*tlb_sync)(struct arm_smmu_device *smmu, int page, int sync, >> int status); >> + int (*req_domain)(struct device *dev); > > Nit: since the point is to implement the full > iommu_ops::def_domain_type interface, can we call it def_domain_type > please? >
Sure, will send the next version shortly.
Thanks, Sai
-- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
| |