diff options
author | Jean-Philippe Brucker <jean-philippe.brucker@arm.com> | 2019-01-15 13:19:55 +0100 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2019-06-06 23:32:13 +0200 |
commit | fb709b5e1cca55d88a1d089fd935021310ce129b (patch) | |
tree | eaefdc541be60e0ba268959f99015af4bd098344 /drivers/of | |
parent | dt-bindings: virtio: Add virtio-pci-iommu node (diff) | |
download | linux-fb709b5e1cca55d88a1d089fd935021310ce129b.tar.xz linux-fb709b5e1cca55d88a1d089fd935021310ce129b.zip |
of: Allow the iommu-map property to omit untranslated devices
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.
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/base.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c index 20e0e7ee4edf..55e7f5bb0549 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2294,8 +2294,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); |