From: Joerg Roedel <joro@8bytes.org>
To: iommu@lists.linux-foundation.org
Cc: linux-kernel@vger.kernel.org, Joerg Roedel <jroedel@suse.de>,
Will Deacon <will.deacon@arm.com>
Subject: [PATCH 04/12] iommu/arm-smmu: Convert to iommu_capable() API function
Date: Fri, 5 Sep 2014 12:52:56 +0200 [thread overview]
Message-ID: <1409914384-21191-5-git-send-email-joro@8bytes.org> (raw)
In-Reply-To: <1409914384-21191-1-git-send-email-joro@8bytes.org>
From: Joerg Roedel <jroedel@suse.de>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
---
drivers/iommu/arm-smmu.c | 35 ++++++++++++++++++++++++++---------
1 file changed, 26 insertions(+), 9 deletions(-)
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index ca18d6d..47c2cb6 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -1515,20 +1515,37 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
return __pfn_to_phys(pte_pfn(pte)) | (iova & ~PAGE_MASK);
}
-static int arm_smmu_domain_has_cap(struct iommu_domain *domain,
- unsigned long cap)
+static bool arm_smmu_capable(enum iommu_cap cap)
{
- struct arm_smmu_domain *smmu_domain = domain->priv;
- struct arm_smmu_device *smmu = smmu_domain->smmu;
- u32 features = smmu ? smmu->features : 0;
+ struct arm_smmu_device *smmu;
+ bool ret = false;
switch (cap) {
case IOMMU_CAP_CACHE_COHERENCY:
- return features & ARM_SMMU_FEAT_COHERENT_WALK;
+ /*
+ * Use ARM_SMMU_FEAT_COHERENT_WALK as an indicator on whether
+ * the SMMU can force coherency on the DMA transaction. If it
+ * supports COHERENT_WALK it must be behind a coherent
+ * interconnect.
+ * A domain can be attached to any SMMU, so to reliably support
+ * IOMMU_CAP_CACHE_COHERENCY all SMMUs in the system need to be
+ * behind a coherent interconnect.
+ */
+ spin_lock(&arm_smmu_devices_lock);
+ list_for_each_entry(smmu, &arm_smmu_devices, list) {
+ if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK) {
+ ret = true;
+ } else {
+ ret = false;
+ break;
+ }
+ }
+ spin_unlock(&arm_smmu_devices_lock);
+ return ret;
case IOMMU_CAP_INTR_REMAP:
- return 1; /* MSIs are just memory writes */
+ return true; /* MSIs are just memory writes */
default:
- return 0;
+ return false;
}
}
@@ -1598,6 +1615,7 @@ static void arm_smmu_remove_device(struct device *dev)
}
static const struct iommu_ops arm_smmu_ops = {
+ .capable = arm_smmu_capable,
.domain_init = arm_smmu_domain_init,
.domain_destroy = arm_smmu_domain_destroy,
.attach_dev = arm_smmu_attach_dev,
@@ -1605,7 +1623,6 @@ static const struct iommu_ops arm_smmu_ops = {
.map = arm_smmu_map,
.unmap = arm_smmu_unmap,
.iova_to_phys = arm_smmu_iova_to_phys,
- .domain_has_cap = arm_smmu_domain_has_cap,
.add_device = arm_smmu_add_device,
.remove_device = arm_smmu_remove_device,
.pgsize_bitmap = (SECTION_SIZE |
--
1.9.1
next prev parent reply other threads:[~2014-09-05 10:55 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-05 10:52 [PATCH 00/12] iommu: Convert iommu_domain_has_cap() to iommu_capable() Joerg Roedel
2014-09-05 10:52 ` [PATCH 01/12] iommu: Introduce iommu_capable API function Joerg Roedel
2014-09-05 10:52 ` [PATCH 02/12] iommu: Convert iommu-caps from define to enum Joerg Roedel
2014-09-05 10:52 ` [PATCH 03/12] iommu/amd: Convert to iommu_capable() API function Joerg Roedel
2014-09-05 10:52 ` Joerg Roedel [this message]
2014-09-08 16:51 ` [PATCH 04/12] iommu/arm-smmu: " Will Deacon
2014-09-09 13:57 ` Joerg Roedel
2014-09-17 8:53 ` [PATCH 04/13 v2] iommu/arm-smmu: Convert to iommu_capable() API function function Joerg Roedel
2014-09-19 16:42 ` Will Deacon
2014-09-22 15:36 ` Joerg Roedel
2014-09-05 10:52 ` [PATCH 05/12] iommu/fsl: Convert to iommu_capable() API function Joerg Roedel
2014-09-09 18:38 ` Varun Sethi
2014-09-05 10:52 ` [PATCH 06/12] iommu/vt-d: " Joerg Roedel
2014-09-05 10:52 ` [PATCH 07/12] iommu/msm: " Joerg Roedel
2014-09-05 10:53 ` [PATCH 08/12] iommu/tegra: " Joerg Roedel
2014-09-05 10:53 ` [PATCH 09/12] kvm: iommu: Convert to use new " Joerg Roedel
2014-09-17 8:29 ` Joerg Roedel
2014-09-05 10:53 ` [PATCH 10/12] vfio: " Joerg Roedel
2014-09-08 23:14 ` Alex Williamson
2014-09-05 10:53 ` [PATCH 11/12] IB/usnic: " Joerg Roedel
2014-09-17 8:30 ` Joerg Roedel
2014-09-05 10:53 ` [PATCH 12/12] iommu: Remove iommu_domain_has_cap() " Joerg Roedel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1409914384-21191-5-git-send-email-joro@8bytes.org \
--to=joro@8bytes.org \
--cc=iommu@lists.linux-foundation.org \
--cc=jroedel@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=will.deacon@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).