diff options
Diffstat (limited to 'drivers/iommu/arm-smmu.c')
-rw-r--r-- | drivers/iommu/arm-smmu.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 373b6e4d6e15..3ae50be49269 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c | |||
@@ -1606,13 +1606,17 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain, | |||
1606 | static int arm_smmu_domain_has_cap(struct iommu_domain *domain, | 1606 | static int arm_smmu_domain_has_cap(struct iommu_domain *domain, |
1607 | unsigned long cap) | 1607 | unsigned long cap) |
1608 | { | 1608 | { |
1609 | unsigned long caps = 0; | ||
1610 | struct arm_smmu_domain *smmu_domain = domain->priv; | 1609 | struct arm_smmu_domain *smmu_domain = domain->priv; |
1610 | u32 features = smmu_domain->root_cfg.smmu->features; | ||
1611 | 1611 | ||
1612 | if (smmu_domain->root_cfg.smmu->features & ARM_SMMU_FEAT_COHERENT_WALK) | 1612 | switch (cap) { |
1613 | caps |= IOMMU_CAP_CACHE_COHERENCY; | 1613 | case IOMMU_CAP_CACHE_COHERENCY: |
1614 | 1614 | return features & ARM_SMMU_FEAT_COHERENT_WALK; | |
1615 | return !!(cap & caps); | 1615 | case IOMMU_CAP_INTR_REMAP: |
1616 | return 1; /* MSIs are just memory writes */ | ||
1617 | default: | ||
1618 | return 0; | ||
1619 | } | ||
1616 | } | 1620 | } |
1617 | 1621 | ||
1618 | static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data) | 1622 | static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data) |