]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
iommu/arm-smmu: Return IOVA in iova_to_phys when SMMU is bypassed
authorSunil Goutham <sgoutham@cavium.com>
Tue, 25 Apr 2017 09:57:52 +0000 (15:27 +0530)
committerJoerg Roedel <jroedel@suse.de>
Wed, 26 Apr 2017 10:30:10 +0000 (12:30 +0200)
For software initiated address translation, when domain type is
IOMMU_DOMAIN_IDENTITY i.e SMMU is bypassed, mimic HW behavior
i.e return the same IOVA as translated address.

This patch is an extension to Will Deacon's patchset
"Implement SMMU passthrough using the default domain".

Signed-off-by: Sunil Goutham <sgoutham@cavium.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/arm-smmu-v3.c
drivers/iommu/arm-smmu.c

index 803352d78d434864f2714fd25b01a002f38612a2..6ef9c3ed4344c3deee71efb8e30e7b5ac6dd6192 100644 (file)
@@ -1714,6 +1714,9 @@ arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
        struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
 
+       if (domain->type == IOMMU_DOMAIN_IDENTITY)
+               return iova;
+
        if (!ops)
                return 0;
 
index 77242afa1efcdd5b280748eafbdac4bb0e8f1c17..a36e80abf08466f1f8c25a016a991ad28f6372ec 100644 (file)
@@ -1459,6 +1459,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
        struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
 
+       if (domain->type == IOMMU_DOMAIN_IDENTITY)
+               return iova;
+
        if (!ops)
                return 0;