]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
iommu/of: Support ats-supported device-tree property
authorJean-Philippe Brucker <jean-philippe@linaro.org>
Fri, 7 Jun 2024 10:54:15 +0000 (11:54 +0100)
committerWill Deacon <will@kernel.org>
Thu, 4 Jul 2024 13:54:01 +0000 (14:54 +0100)
Device-tree declares whether a PCI root-complex supports ATS by setting
the "ats-supported" property. Copy this flag into device fwspec to let
IOMMU drivers quickly check if they can enable ATS for a device.

Tested-by: Ketan Patil <ketanp@nvidia.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Link: https://lore.kernel.org/r/20240607105415.2501934-4-jean-philippe@linaro.org
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/of_iommu.c

index 3afe0b48a48db937baa711dc4264d865a9c5f0d7..082b94c2b329175f9db5d891a82975079b090dc2 100644 (file)
@@ -105,6 +105,14 @@ static int of_iommu_configure_device(struct device_node *master_np,
                      of_iommu_configure_dev(master_np, dev);
 }
 
+static void of_pci_check_device_ats(struct device *dev, struct device_node *np)
+{
+       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
+
+       if (fwspec && of_property_read_bool(np, "ats-supported"))
+               fwspec->flags |= IOMMU_FWSPEC_PCI_RC_ATS;
+}
+
 /*
  * Returns:
  *  0 on success, an iommu was configured
@@ -147,6 +155,7 @@ int of_iommu_configure(struct device *dev, struct device_node *master_np,
                pci_request_acs();
                err = pci_for_each_dma_alias(to_pci_dev(dev),
                                             of_pci_iommu_init, &info);
+               of_pci_check_device_ats(dev, master_np);
        } else {
                err = of_iommu_configure_device(master_np, dev, id);
        }