GPIO IRQ on P1022
Felix Radensky
felix at embedded-sol.com
Sun Jul 31 20:38:22 EST 2011
Hi,
I'm running kernel 3.0 on a custom board based on Freescale P1022.
The interrupt line of on-board FPGA is connected to GPIO2_9. FPGA
IRQ is level, active low. The GPIOs are mapped like this:
GPIOs 160-191, /soc at ffe00000/gpio-controller at f200:
GPIOs 192-223, /soc at ffe00000/gpio-controller at f100:
GPIOs 224-255, /soc at ffe00000/gpio-controller at f000:
I've verified that pin mixing is done correctly, and the
FPGA IRQ line is indeed configured as GPIO.
I have the following code in my driver:
#define FPGA_IRQ_GPIO 169
err = gpio_request(FPGA_IRQ_GPIO, "FPGA IRQ");
if (err) {
printk(KERN_ERR "Failed to request FPGA IRQ GPIO, err=%d\n",
err);
goto out;
}
gpio_direction_input(FPGA_IRQ_GPIO);
irq = gpio_to_irq(FPGA_IRQ_GPIO);
if (irq < 0) {
printk(KERN_ERR "Failed to map FPGA GPIO to IRQ\n");
goto out;
}
err = request_irq(irq, gsat_interrupt,
IRQF_TRIGGER_FALLING, DRVNAME, priv);
Interrupt handler reads FPGA interrupt status register to clear
interrupt
and exits.
What happens when I load my driver is single execution of
interrupt handler
followed by system freeze. Even if I call disable_irq() in
interrupt handler the
system still freezes.
I've added some prints to mpc8xxx_gpio.c driver, here's what I get:
mpc8xxx_gpio_to_irq: offset 9
mpc8xxx_gpio_irq_map: virq 31
irq: irq 9 on host /soc at ffe00000/gpio-controller at f200 mapped to
virtual irq 31
mpc8xxx_irq_set_type: virq 9 flow_type 2
mpc8xxx_irq_unmask: irq 9
mpc8xxx_gpio_irq_cascade: irq 47
mpc8xxx_irq_mask: irq 9
mpc8xxx_irq_ack: irq 9
What am I doing wrong ?
Thanks a lot.
Felix.
More information about the Linuxppc-dev
mailing list