summaryrefslogtreecommitdiff
path: root/drivers/bus/fsl-mc/fsl-mc-msi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bus/fsl-mc/fsl-mc-msi.c')
-rw-r--r--drivers/bus/fsl-mc/fsl-mc-msi.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/bus/fsl-mc/fsl-mc-msi.c b/drivers/bus/fsl-mc/fsl-mc-msi.c
index e7bbff445a83..8edadf05cbb7 100644
--- a/drivers/bus/fsl-mc/fsl-mc-msi.c
+++ b/drivers/bus/fsl-mc/fsl-mc-msi.c
@@ -13,6 +13,7 @@
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/msi.h>
+#include <linux/acpi_iort.h>
#include "fsl-mc-private.h"
@@ -179,25 +180,31 @@ struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
struct irq_domain *fsl_mc_find_msi_domain(struct device *dev)
{
- struct irq_domain *msi_domain = NULL;
+ struct device *root_dprc_dev;
+ struct device *bus_dev;
+ struct irq_domain *msi_domain;
struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
- msi_domain = of_msi_map_get_device_domain(dev, mc_dev->icid,
+ fsl_mc_get_root_dprc(dev, &root_dprc_dev);
+ bus_dev = root_dprc_dev->parent;
+
+ if (bus_dev->of_node) {
+ msi_domain = of_msi_map_get_device_domain(dev,
+ mc_dev->icid,
DOMAIN_BUS_FSL_MC_MSI);
- /*
- * if the msi-map property is missing assume that all the
- * child containers inherit the domain from the parent
- */
- if (!msi_domain) {
- struct device *root_dprc_dev;
- struct device *bus_dev;
-
- fsl_mc_get_root_dprc(dev, &root_dprc_dev);
- bus_dev = root_dprc_dev->parent;
- msi_domain = of_msi_get_domain(bus_dev,
- bus_dev->of_node,
- DOMAIN_BUS_FSL_MC_MSI);
+ /*
+ * if the msi-map property is missing assume that all the
+ * child containers inherit the domain from the parent
+ */
+ if (!msi_domain)
+
+ msi_domain = of_msi_get_domain(bus_dev,
+ bus_dev->of_node,
+ DOMAIN_BUS_FSL_MC_MSI);
+ } else {
+ msi_domain = iort_get_device_domain(dev, mc_dev->icid,
+ DOMAIN_BUS_FSL_MC_MSI);
}
return msi_domain;