of/irq: make of_msi_map_get_device_domain() bus agnostic
authorDiana Craciun <diana.craciun@oss.nxp.com>
Fri, 19 Jun 2020 08:20:10 +0000 (09:20 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Tue, 28 Jul 2020 14:51:32 +0000 (15:51 +0100)
of_msi_map_get_device_domain() is PCI specific but it need not be and
can be easily changed to be bus agnostic in order to be used by other
busses by adding an IRQ domain bus token as an input parameter.

Signed-off-by: Diana Craciun <diana.craciun@oss.nxp.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Acked-by: Bjorn Helgaas <bhelgaas@google.com> # pci/msi.c
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200619082013.13661-10-lorenzo.pieralisi@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
drivers/of/irq.c
drivers/pci/msi.c
include/linux/of_irq.h

index d632bc5b3a2de8d2c7466f224e3007c1731d6062..1005e4f349ef6cd5f35a565f96d0ec74f3cc8410 100644 (file)
@@ -613,18 +613,20 @@ u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in)
  * of_msi_map_get_device_domain - Use msi-map to find the relevant MSI domain
  * @dev: device for which the mapping is to be done.
  * @rid: Requester ID for the device.
+ * @bus_token: Bus token
  *
  * Walk up the device hierarchy looking for devices with a "msi-map"
  * property.
  *
  * Returns: the MSI domain for this device (or NULL on failure)
  */
-struct irq_domain *of_msi_map_get_device_domain(struct device *dev, u32 rid)
+struct irq_domain *of_msi_map_get_device_domain(struct device *dev, u32 id,
+                                               u32 bus_token)
 {
        struct device_node *np = NULL;
 
-       __of_msi_map_rid(dev, &np, rid);
-       return irq_find_matching_host(np, DOMAIN_BUS_PCI_MSI);
+       __of_msi_map_rid(dev, &np, id);
+       return irq_find_matching_host(np, bus_token);
 }
 
 /**
index 77f48b95e27732128190e8972df2e61861f55d10..b4bfe0b03b2ddeee16c01ff9a877795cf7ccb7eb 100644 (file)
@@ -1556,7 +1556,7 @@ struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
        u32 rid = pci_dev_id(pdev);
 
        pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
-       dom = of_msi_map_get_device_domain(&pdev->dev, rid);
+       dom = of_msi_map_get_device_domain(&pdev->dev, rid, DOMAIN_BUS_PCI_MSI);
        if (!dom)
                dom = iort_get_device_domain(&pdev->dev, rid,
                                             DOMAIN_BUS_PCI_MSI);
index 1214cabb22479be282ea6482ecec1657d8d59c1a..7142a37227584768d54bb44c032996fb444ddbc8 100644 (file)
@@ -52,7 +52,8 @@ extern struct irq_domain *of_msi_get_domain(struct device *dev,
                                            struct device_node *np,
                                            enum irq_domain_bus_token token);
 extern struct irq_domain *of_msi_map_get_device_domain(struct device *dev,
-                                                      u32 rid);
+                                                       u32 id,
+                                                       u32 bus_token);
 extern void of_msi_configure(struct device *dev, struct device_node *np);
 u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in);
 #else
@@ -85,7 +86,7 @@ static inline struct irq_domain *of_msi_get_domain(struct device *dev,
        return NULL;
 }
 static inline struct irq_domain *of_msi_map_get_device_domain(struct device *dev,
-                                                             u32 rid)
+                                               u32 id, u32 bus_token)
 {
        return NULL;
 }