irqchip/gicv3-its: platform-msi: Refactor its_pmsi_prepare()
authorHanjun Guo <hanjun.guo@linaro.org>
Tue, 7 Mar 2017 12:40:00 +0000 (20:40 +0800)
committerMarc Zyngier <marc.zyngier@arm.com>
Fri, 7 Apr 2017 09:52:18 +0000 (10:52 +0100)
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 <hanjun.guo@linaro.org>
[lorenzo.pieralisi@arm.com: rewrote commit log]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Matthias Brugger <mbrugger@suse.com>
Tested-by: Ming Lei <ming.lei@canonical.com>
Tested-by: Wei Xu <xuwei5@hisilicon.com>
Tested-by: Sinan Kaya <okaya@codeaurora.org>
Cc: Tomasz Nowicki <tn@semihalf.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic-v3-its-platform-msi.c

index 470b4aa7d62c2816015b57420a81f12b37ef4649..3c94278fc8678078ae6ee5e778a1f46f4713fd9c 100644 (file)
@@ -24,15 +24,11 @@ static struct irq_chip its_pmsi_irq_chip = {
        .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;