From: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>

Currently, PPR/ATS can be enabled only if the domain is type
identity mapping. However, when we allow the IOMMU v2 page table
to be used for DMA-API, the sanity check needs to be updated to
only apply for the case when using AMD_IOMMU_V1 page table mode.

Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Vasant Hegde <vasant.he...@amd.com>
---
 drivers/iommu/amd/iommu.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index 059e699c43d1..b558e8c30613 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -1682,7 +1682,7 @@ static void pdev_iommuv2_disable(struct pci_dev *pdev)
        pci_disable_pasid(pdev);
 }
 
-static int pdev_iommuv2_enable(struct pci_dev *pdev)
+static int pdev_pri_ats_enable(struct pci_dev *pdev)
 {
        int ret;
 
@@ -1745,11 +1745,19 @@ static int attach_device(struct device *dev,
                struct iommu_domain *def_domain = iommu_get_dma_domain(dev);
 
                ret = -EINVAL;
-               if (def_domain->type != IOMMU_DOMAIN_IDENTITY)
+
+               /*
+                * In case of using AMD_IOMMU_V1 page table mode and the device
+                * is enabling for PPR/ATS support (using v2 table),
+                * we need to make sure that the domain type is identity map.
+                */
+               if ((amd_iommu_pgtable == AMD_IOMMU_V1) &&
+                   def_domain->type != IOMMU_DOMAIN_IDENTITY) {
                        goto out;
+               }
 
                if (dev_data->iommu_v2) {
-                       if (pdev_iommuv2_enable(pdev) != 0)
+                       if (pdev_pri_ats_enable(pdev) != 0)
                                goto out;
 
                        dev_data->ats.enabled = true;
-- 
2.27.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to