summaryrefslogtreecommitdiffstats
path: root/target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch')
-rw-r--r--target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch245
1 files changed, 245 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch b/target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch
new file mode 100644
index 0000000000..2de7e7b674
--- /dev/null
+++ b/target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch
@@ -0,0 +1,245 @@
+From 5e69ff59f7e51ddfde0b31587beb9e40ea1c85bc Mon Sep 17 00:00:00 2001
+From: Grant Likely <grant.likely@linaro.org>
+Date: Thu, 19 Dec 2013 09:30:56 -0300
+Subject: [PATCH 185/203] of/irq: simplify args to irq_create_of_mapping
+
+All the callers of irq_create_of_mapping() pass the contents of a struct
+of_phandle_args structure to the function. Since all the callers already
+have an of_phandle_args pointer, why not pass it directly to
+irq_create_of_mapping()?
+
+Signed-off-by: Grant Likely <grant.likely@linaro.org>
+Acked-by: Michal Simek <monstr@monstr.eu>
+Acked-by: Tony Lindgren <tony@atomide.com>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Russell King <linux@arm.linux.org.uk>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+
+Conflicts:
+ arch/mips/pci/pci-rt3883.c
+ kernel/irq/irqdomain.c
+---
+ arch/arm/mach-integrator/pci_v3.c | 2 +-
+ arch/microblaze/pci/pci-common.c | 2 +-
+ arch/mips/pci/fixup-lantiq.c | 2 +-
+ arch/powerpc/kernel/pci-common.c | 2 +-
+ arch/powerpc/platforms/cell/celleb_scc_pciex.c | 2 +-
+ arch/powerpc/platforms/cell/celleb_scc_sio.c | 2 +-
+ arch/powerpc/platforms/cell/spider-pic.c | 7 ++-----
+ arch/powerpc/platforms/cell/spu_manage.c | 3 +--
+ arch/powerpc/platforms/fsl_uli1575.c | 2 +-
+ arch/powerpc/platforms/pseries/event_sources.c | 3 +--
+ arch/x86/kernel/devicetree.c | 2 +-
+ drivers/of/irq.c | 2 +-
+ drivers/pci/host/pci-mvebu.c | 2 +-
+ include/linux/of_irq.h | 4 +---
+ kernel/irq/irqdomain.c | 15 +++++++--------
+ 15 files changed, 22 insertions(+), 30 deletions(-)
+
+--- a/arch/arm/mach-integrator/pci_v3.c
++++ b/arch/arm/mach-integrator/pci_v3.c
+@@ -694,7 +694,7 @@ static int __init pci_v3_map_irq_dt(cons
+ return 0;
+ }
+
+- return irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ return irq_create_of_mapping(&oirq);
+ }
+
+ static int __init pci_v3_dtprobe(struct platform_device *pdev,
+--- a/arch/microblaze/pci/pci-common.c
++++ b/arch/microblaze/pci/pci-common.c
+@@ -246,7 +246,7 @@ int pci_read_irq_line(struct pci_dev *pc
+ oirq.args_count, oirq.args[0], oirq.args[1],
+ of_node_full_name(oirq.np));
+
+- virq = irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ virq = irq_create_of_mapping(&oirq);
+ }
+ if (!virq) {
+ pr_debug(" Failed to map !\n");
+--- a/arch/mips/pci/fixup-lantiq.c
++++ b/arch/mips/pci/fixup-lantiq.c
+@@ -33,7 +33,7 @@ int __init pcibios_map_irq(const struct
+ slot, pin);
+ return 0;
+ }
+- irq = irq_create_of_mapping(dev_irq.np, dev_irq.args, dev_irq.args_count);
++ irq = irq_create_of_mapping(&dev_irq);
+ dev_info(&dev->dev, "SLOT:%d PIN:%d IRQ:%d\n", slot, pin, irq);
+ return irq;
+ }
+--- a/arch/powerpc/kernel/pci-common.c
++++ b/arch/powerpc/kernel/pci-common.c
+@@ -266,7 +266,7 @@ static int pci_read_irq_line(struct pci_
+ oirq.args_count, oirq.args[0], oirq.args[1],
+ of_node_full_name(oirq.np));
+
+- virq = irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ virq = irq_create_of_mapping(&oirq);
+ }
+ if(virq == NO_IRQ) {
+ pr_debug(" Failed to map !\n");
+--- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c
++++ b/arch/powerpc/platforms/cell/celleb_scc_pciex.c
+@@ -511,7 +511,7 @@ static __init int celleb_setup_pciex(str
+ pr_err("PCIEXC:Failed to map irq\n");
+ goto error;
+ }
+- virq = irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ virq = irq_create_of_mapping(&oirq);
+ if (request_irq(virq, pciex_handle_internal_irq,
+ 0, "pciex", (void *)phb)) {
+ pr_err("PCIEXC:Failed to request irq\n");
+--- a/arch/powerpc/platforms/cell/celleb_scc_sio.c
++++ b/arch/powerpc/platforms/cell/celleb_scc_sio.c
+@@ -66,7 +66,7 @@ static int __init txx9_serial_init(void)
+ #ifdef CONFIG_SERIAL_TXX9_CONSOLE
+ req.membase = ioremap(req.mapbase, 0x24);
+ #endif
+- req.irq = irq_create_of_mapping(irq.np, irq.args, irq.args_count);
++ req.irq = irq_create_of_mapping(&irq);
+ req.flags |= UPF_IOREMAP | UPF_BUGGY_UART
+ /*HAVE_CTS_LINE*/;
+ req.uartclk = 83300000;
+--- a/arch/powerpc/platforms/cell/spider-pic.c
++++ b/arch/powerpc/platforms/cell/spider-pic.c
+@@ -236,11 +236,8 @@ static unsigned int __init spider_find_c
+ * tree in case the device-tree is ever fixed
+ */
+ struct of_phandle_args oirq;
+- if (of_irq_parse_one(pic->host->of_node, 0, &oirq) == 0) {
+- virq = irq_create_of_mapping(oirq.np, oirq.args,
+- oirq.args_count);
+- return virq;
+- }
++ if (of_irq_parse_one(pic->host->of_node, 0, &oirq) == 0)
++ return irq_create_of_mapping(&oirq);
+
+ /* Now do the horrible hacks */
+ tmp = of_get_property(pic->host->of_node, "#interrupt-cells", NULL);
+--- a/arch/powerpc/platforms/cell/spu_manage.c
++++ b/arch/powerpc/platforms/cell/spu_manage.c
+@@ -190,8 +190,7 @@ static int __init spu_map_interrupts(str
+ ret = -EINVAL;
+ pr_debug(" irq %d no 0x%x on %s\n", i, oirq.args[0],
+ oirq.np->full_name);
+- spu->irqs[i] = irq_create_of_mapping(oirq.np,
+- oirq.args, oirq.args_count);
++ spu->irqs[i] = irq_create_of_mapping(&oirq);
+ if (spu->irqs[i] == NO_IRQ) {
+ pr_debug("spu_new: failed to map it !\n");
+ goto err;
+--- a/arch/powerpc/platforms/fsl_uli1575.c
++++ b/arch/powerpc/platforms/fsl_uli1575.c
+@@ -334,7 +334,7 @@ static void hpcd_final_uli5288(struct pc
+ laddr[0] = (hose->first_busno << 16) | (PCI_DEVFN(31, 0) << 8);
+ laddr[1] = laddr[2] = 0;
+ of_irq_parse_raw(hosenode, &pin, 1, laddr, &oirq);
+- dev->irq = irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ dev->irq = irq_create_of_mapping(&oirq);
+ }
+
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x1575, hpcd_quirk_uli1575);
+--- a/arch/powerpc/platforms/pseries/event_sources.c
++++ b/arch/powerpc/platforms/pseries/event_sources.c
+@@ -59,8 +59,7 @@ void request_event_sources_irqs(struct d
+ index++) {
+ if (count > 15)
+ break;
+- virqs[count] = irq_create_of_mapping(oirq.np, oirq.args,
+- oirq.args_count);
++ virqs[count] = irq_create_of_mapping(&oirq);
+ if (virqs[count] == NO_IRQ) {
+ pr_err("event-sources: Unable to allocate "
+ "interrupt number for %s\n",
+--- a/arch/x86/kernel/devicetree.c
++++ b/arch/x86/kernel/devicetree.c
+@@ -121,7 +121,7 @@ static int x86_of_pci_irq_enable(struct
+ if (ret)
+ return ret;
+
+- virq = irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ virq = irq_create_of_mapping(&oirq);
+ if (virq == 0)
+ return -EINVAL;
+ dev->irq = virq;
+--- a/drivers/of/irq.c
++++ b/drivers/of/irq.c
+@@ -41,7 +41,7 @@ unsigned int irq_of_parse_and_map(struct
+ if (of_irq_parse_one(dev, index, &oirq))
+ return 0;
+
+- return irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ return irq_create_of_mapping(&oirq);
+ }
+ EXPORT_SYMBOL_GPL(irq_of_parse_and_map);
+
+--- a/drivers/pci/host/pci-mvebu.c
++++ b/drivers/pci/host/pci-mvebu.c
+@@ -656,7 +656,7 @@ static int __init mvebu_pcie_map_irq(con
+ if (ret)
+ return ret;
+
+- return irq_create_of_mapping(oirq.np, oirq.args, oirq.args_count);
++ return irq_create_of_mapping(&oirq);
+ }
+
+ static struct pci_bus *mvebu_pcie_scan_bus(int nr, struct pci_sys_data *sys)
+--- a/include/linux/of_irq.h
++++ b/include/linux/of_irq.h
+@@ -37,9 +37,7 @@ extern int of_irq_parse_raw(struct devic
+ struct of_phandle_args *out_irq);
+ extern int of_irq_parse_one(struct device_node *device, int index,
+ struct of_phandle_args *out_irq);
+-extern unsigned int irq_create_of_mapping(struct device_node *controller,
+- const u32 *intspec,
+- unsigned int intsize);
++extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data);
+ extern int of_irq_to_resource(struct device_node *dev, int index,
+ struct resource *r);
+ extern int of_irq_count(struct device_node *dev);
+--- a/kernel/irq/irqdomain.c
++++ b/kernel/irq/irqdomain.c
+@@ -655,15 +655,14 @@ int irq_create_strict_mappings(struct ir
+ }
+ EXPORT_SYMBOL_GPL(irq_create_strict_mappings);
+
+-unsigned int irq_create_of_mapping(struct device_node *controller,
+- const u32 *intspec, unsigned int intsize)
++unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data)
+ {
+ struct irq_domain *domain;
+ irq_hw_number_t hwirq;
+ unsigned int type = IRQ_TYPE_NONE;
+ unsigned int virq;
+
+- domain = controller ? irq_find_host(controller) : irq_default_domain;
++ domain = irq_data->np ? irq_find_host(irq_data->np) : irq_default_domain;
+ if (!domain) {
+ #ifdef CONFIG_MIPS
+ /*
+@@ -677,17 +676,17 @@ unsigned int irq_create_of_mapping(struc
+ if (intsize > 0)
+ return intspec[0];
+ #endif
+- pr_warning("no irq domain found for %s !\n",
+- of_node_full_name(controller));
++ pr_warn("no irq domain found for %s !\n",
++ of_node_full_name(irq_data->np));
+ return 0;
+ }
+
+ /* If domain has no translation, then we assume interrupt line */
+ if (domain->ops->xlate == NULL)
+- hwirq = intspec[0];
++ hwirq = irq_data->args[0];
+ else {
+- if (domain->ops->xlate(domain, controller, intspec, intsize,
+- &hwirq, &type))
++ if (domain->ops->xlate(domain, irq_data->np, irq_data->args,
++ irq_data->args_count, &hwirq, &type))
+ return 0;
+ }
+