Re: [PATCH 2/3] iommu/of: Support ats-supported device-tree property

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 29/04/2024 12:39 pm, Jean-Philippe Brucker wrote:
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.

I don't think this functionally conflicts with what I've got going on in this area at the moment, and although the way it fits around the other error handling seems a bit obtuse and clunky IMO, apparently that's the fault of the existing ACPI implementation, so for now,

Reviewed-by: Robin Murphy <robin.murphy@xxxxxxx>

Signed-off-by: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx>
Tested-by: Ketan Patil <ketanp@xxxxxxxxxx>
---
  drivers/iommu/of_iommu.c | 9 +++++++++
  1 file changed, 9 insertions(+)

diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index 3afe0b48a48db..082b94c2b3291 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -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);
  	}




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux