diff options
author | Luka Perkov <luka@openwrt.org> | 2014-02-11 02:07:44 +0000 |
---|---|---|
committer | Luka Perkov <luka@openwrt.org> | 2014-02-11 02:07:44 +0000 |
commit | c9ae111a20be4c9555128cced8edded660d133df (patch) | |
tree | fd4809b562d454394cbb9ec517bf3f1ef2d5b6f2 /target/linux/mvebu/patches-3.10/0185-of-irq-simplify-args-to-irq_create_of_mapping.patch | |
parent | 3af779eb172b0438f77e8a01a97dd0eb9a146076 (diff) | |
download | mtk-20170518-c9ae111a20be4c9555128cced8edded660d133df.zip mtk-20170518-c9ae111a20be4c9555128cced8edded660d133df.tar.gz mtk-20170518-c9ae111a20be4c9555128cced8edded660d133df.tar.bz2 |
mvebu: backport mainline patches from kernel 3.13
This is a backport of the patches accepted to the Linux mainline related to
mvebu SoC (Armada XP and Armada 370) between Linux v3.12, and Linux v3.13.
This work mainly covers:
* Finishes work for sharing the pxa nand driver(drivers/mtd/nand/pxa3xx_nand.c)
between the PXA family, and the Armada family.
* timer initialization update, and access function for the Armada family.
* Generic IRQ handling backporting.
* Some bug fixes.
Signed-off-by: Seif Mazareeb <seif.mazareeb@gmail.com>
CC: Luka Perkov <luka@openwrt.org>
SVN-Revision: 39566
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.patch | 245 |
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 0000000..2de7e7b --- /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; + } + |