From: Hanjun Guo <[email protected]>

By adding ACPI support for platform MSI, the gicv3 driver has to
provide code to retrieve the dev id through ACPI instead of device
tree bindings; given that its_pmsi_prepare() allows already to get
the dev id but it is OF dependent, factor OF related code out into
a single function to make its_pmsi_prepare() ready to be used with
other firmware interfaces.

Signed-off-by: Hanjun Guo <[email protected]>
[[email protected]: rewrote commit log]
Signed-off-by: Lorenzo Pieralisi <[email protected]>
Reviewed-by: Matthias Brugger <[email protected]>
Tested-by: Ming Lei <[email protected]>
Tested-by: Wei Xu <[email protected]>
Tested-by: Sinan Kaya <[email protected]>
Cc: Marc Zyngier <[email protected]>
Cc: Lorenzo Pieralisi <[email protected]>
Cc: Tomasz Nowicki <[email protected]>
Cc: Thomas Gleixner <[email protected]>
---
 drivers/irqchip/irq-gic-v3-its-platform-msi.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c 
b/drivers/irqchip/irq-gic-v3-its-platform-msi.c
index 470b4aa..3c94278 100644
--- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c
+++ b/drivers/irqchip/irq-gic-v3-its-platform-msi.c
@@ -24,15 +24,11 @@
        .name                   = "ITS-pMSI",
 };
 
-static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
-                           int nvec, msi_alloc_info_t *info)
+static int of_pmsi_get_dev_id(struct irq_domain *domain, struct device *dev,
+                                 u32 *dev_id)
 {
-       struct msi_domain_info *msi_info;
-       u32 dev_id;
        int ret, index = 0;
 
-       msi_info = msi_get_domain_info(domain->parent);
-
        /* Suck the DeviceID out of the msi-parent property */
        do {
                struct of_phandle_args args;
@@ -43,11 +39,24 @@ static int its_pmsi_prepare(struct irq_domain *domain, 
struct device *dev,
                if (args.np == irq_domain_get_of_node(domain)) {
                        if (WARN_ON(args.args_count != 1))
                                return -EINVAL;
-                       dev_id = args.args[0];
+                       *dev_id = args.args[0];
                        break;
                }
        } while (!ret);
 
+       return ret;
+}
+
+static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
+                           int nvec, msi_alloc_info_t *info)
+{
+       struct msi_domain_info *msi_info;
+       u32 dev_id;
+       int ret;
+
+       msi_info = msi_get_domain_info(domain->parent);
+
+       ret = of_pmsi_get_dev_id(domain, dev, &dev_id);
        if (ret)
                return ret;
 
-- 
1.7.12.4

Reply via email to