Message ID | 20181115165234.43990-4-jean-philippe.brucker@arm.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | Add virtio-iommu driver | expand |
On Thu, 15 Nov 2018 16:52:30 +0000, Jean-Philippe Brucker wrote: > In PCI root complex nodes, the iommu-map property describes the IOMMU that > translates each endpoint. On some platforms, the IOMMU itself is presented > as a PCI endpoint (e.g. AMD IOMMU and virtio-iommu). This isn't supported > by the current OF driver, which expects all endpoints to have an IOMMU. > Allow the iommu-map property to have gaps. > > Relaxing of_map_rid() also allows the msi-map property to have gaps, which > is invalid since MSIs always reach an MSI controller. In that case > pci_msi_setup_msi_irqs() will return an error when attempting to find the > device's MSI domain. > > Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com> > --- > drivers/of/base.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > Reviewed-by: Rob Herring <robh@kernel.org>
diff --git a/drivers/of/base.c b/drivers/of/base.c index 09692c9b32a7..99f6bfa9b898 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2237,8 +2237,12 @@ int of_map_rid(struct device_node *np, u32 rid, return 0; } - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; + pr_info("%pOF: no %s translation for rid 0x%x on %pOF\n", np, map_name, + rid, target && *target ? *target : NULL); + + /* Bypasses translation */ + if (id_out) + *id_out = rid; + return 0; } EXPORT_SYMBOL_GPL(of_map_rid);
In PCI root complex nodes, the iommu-map property describes the IOMMU that translates each endpoint. On some platforms, the IOMMU itself is presented as a PCI endpoint (e.g. AMD IOMMU and virtio-iommu). This isn't supported by the current OF driver, which expects all endpoints to have an IOMMU. Allow the iommu-map property to have gaps. Relaxing of_map_rid() also allows the msi-map property to have gaps, which is invalid since MSIs always reach an MSI controller. In that case pci_msi_setup_msi_irqs() will return an error when attempting to find the device's MSI domain. Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com> --- drivers/of/base.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)