[PATCH v2] iommu/arm-smmu: Return IOVA in iova_to_phys when SMMU is bypassed

Sunil Kovvuri sunil.kovvuri at gmail.com
Wed Apr 26 05:12:38 EDT 2017


On Tue, Apr 25, 2017 at 3:27 PM,  <sunil.kovvuri at gmail.com> wrote:
> From: Sunil Goutham <sgoutham at cavium.com>
>
> 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 at cavium.com>
> ---
>
> V2
> - As per Will's suggestion applied fix to SMMUv3 driver as well.
>
>  drivers/iommu/arm-smmu-v3.c | 3 +++
>  drivers/iommu/arm-smmu.c    | 3 +++
>  2 files changed, 6 insertions(+)
>
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index 05b4592..d412bdd 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -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;
>
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index bfab4f7..81088cd 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -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;
>
> --
> 2.7.4
>

Will,

if you are okay with the patch, can you please ACK.

Thanks,
Sunil.



More information about the linux-arm-kernel mailing list