#21613: brcm63xx: external IRQs broken
-----------------------+---------------------------------------
Reporter: dgcbueu@… | Owner: developers
Type: defect | Status: new
Priority: high | Milestone: Designated Driver (Trunk)
Component: kernel | Version: Trunk
Keywords: |
-----------------------+---------------------------------------
Since Chaos Calmer version, external IRQs are broken in brcm63xx.
Previous versions of Openwrt worked quite fine
- Attitude Adjustment: OK
- Barrier Breaker: OK
- Chaos Calmer: '''FAIL'''
- trunk: '''FAIL'''
This is the snippet code I used for testing
{{{
#include <linux/kernel.h>
#include <linux/err.h>
#include <linux/module.h>
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <bcm63xx_cpu.h>
#include <bcm63xx_io.h>
#include <bcm63xx_regs.h>
#include <bcm63xx_irq.h>
static irqreturn_t gpio_interrupt(int irq, void *dev_id)
{
printk("my IRQ triggered!!!!\n");
return IRQ_HANDLED;
}
int bcm63xx_button_init(void)
{
int ret, irq;
printk("TEST IRQ (GPIO-button)\n");
irq = IRQ_EXT_1;
ret = request_irq(irq, gpio_interrupt, 0, "bcm63xx_extIRQ", NULL);
if (ret) {
printk(KERN_ERR "bcm63xx-extIRQ: failed to register irq
%d\n",irq);
return ret;
}
printk("Mapped IRQ %d\n", irq );
return 0;
}
arch_initcall(bcm63xx_button_init);
}}}
These external IRQs are commonly wired externally to some physical button
on the casing, so it was very easy to test it.
I also succesfully tested a more complex driver like an Infrarred
receiver:
https://github.com/danitool/openwrt-pkgs/blob/bb/lirc-
bcm63xx/src/lirc_bcm63xx.c
And worked totally fine in AA and BB, but failed on CC and trunk.
In CC a new driver was introduced to manage IRQs in brcm63xx, probably
this driver itself is the culprit.
The IRQ driver irq-bcm6345.ext: http://pastebin.com/DuWFq3fn
--
Ticket URL: <https://dev.openwrt.org/ticket/21613>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets