create explicit 1:1 mapping before mcs814x_alloc_gc/irq_setup_generic_chip marks all interrupts used and prevents mapping by dts init. IRQ 0 is the timer interrupt and is not illegal!
Was broken since kernel 3.14. Signed-off-by: Günther Kelleter <guenther.kelle...@devolo.de> --- target/linux/mcs814x/files-3.18/arch/arm/mach-mcs814x/irq.c | 6 +++++- target/linux/mcs814x/patches-3.18/015-timer-irq.patch | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 target/linux/mcs814x/patches-3.18/015-timer-irq.patch diff --git a/target/linux/mcs814x/files-3.18/arch/arm/mach-mcs814x/irq.c b/target/linux/mcs814x/files-3.18/arch/arm/mach-mcs814x/irq.c index f84c412..fd4345f 100644 --- a/target/linux/mcs814x/files-3.18/arch/arm/mach-mcs814x/irq.c +++ b/target/linux/mcs814x/files-3.18/arch/arm/mach-mcs814x/irq.c @@ -71,6 +71,7 @@ static const struct of_device_id mcs814x_intc_ids[] = { void __init mcs814x_of_irq_init(void) { struct device_node *np; + struct irq_domain *domain; np = of_find_matching_node(NULL, mcs814x_intc_ids); if (!np) @@ -80,7 +81,10 @@ void __init mcs814x_of_irq_init(void) if (!mcs814x_intc_base) panic("unable to map intc cpu registers\n"); - irq_domain_add_simple(np, 32, 0, &irq_generic_chip_ops, NULL); + domain = irq_domain_add_simple(np, 32, 0, &irq_domain_simple_ops, NULL); + if (!domain) + panic("unable to add irq domain\n"); + irq_create_strict_mappings(domain, 0, 0, 32); of_node_put(np); diff --git a/target/linux/mcs814x/patches-3.18/015-timer-irq.patch b/target/linux/mcs814x/patches-3.18/015-timer-irq.patch new file mode 100644 index 0000000..9bbb094 --- /dev/null +++ b/target/linux/mcs814x/patches-3.18/015-timer-irq.patch @@ -0,0 +1,11 @@ +--- a/kernel/irq/irqdesc.c ++++ b/kernel/irq/irqdesc.c +@@ -381,7 +381,7 @@ int __handle_domain_irq(struct irq_domai + * Some hardware gives randomly wrong interrupts. Rather + * than crashing, do something sensible. + */ +- if (unlikely(!irq || irq >= nr_irqs)) { ++ if (unlikely(irq >= nr_irqs)) { + ack_bad_irq(irq); + ret = -EINVAL; + } else { -- 2.4.6.89.g851dcf4 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel