IRQ handler is not called with external IRQ
Ran Shalit
ranshalit at gmail.com
Mon Aug 17 15:24:09 AEST 2015
Hello,
I have strange behaviour with external IRQ:
The registration on external IRQ is successful, but on simulating
interrupt the interrupt handler called.
It seems that the interrupt was received according to SEPNR which
shows that IRQ #2 interrupt is pending, but the handler was not
called.
These are the steps I done:
1. in DTS (using all external IRQ #2):
intc2 at 0{
compatible = "intc2";
#address-cells = <1>;
#size-cells = <0>;
reg = <0 0x1000>;
interrupts = <2 0x8> ;
interrupt-parent = <&ipic>;
};
2. registration in kernel for all interrupts:
np = of_find_node_by_name(NULL,"intc2");
if (np == NULL)
{
printk("Error node not found\n");
}
printk("Node np = 0x%0x\n",np);
virq = irq_of_parse_and_map(np,0);
printk(KERN_INFO"IRQHandler: ISR Setup VIRQ: %d \n" , virq);
if (0 > (error=request_irq(virq, &IRQHandler, 0, "intc2", &value))) {
printk(KERN_WARNING"IRQHandler: Init: Unable to allocate IRQ
error = %d\n\n", error);
return -1;
}
3. interrupt handler code:
int newval = 0;
static irqreturn_t hello_IRQHandler(int irq, void *dev_id)
{
unsigned int status;
struct timespec curr_tm;
printk("key_irq!!!!!\n");
return IRQ_HANDLED;
}
4. in boot I get print which show success with request_irq():
intc_init
Node np = 0xdfffe288
IRQHandler: ISR Setup VIRQ: 22
NET: Registered protocol family 17
5. forcing interrupt in IRQ #2, or #4 result in SEPNR change, but
there is no printing from interrupt handler
6. validation in SEPNR register that interrupt was received:
# devmem2 0xe000072c
/dev/mem opened.
Memory mapped at address 0xb7b80000.
Value at address 0xE000072C (0xb7b8072c): 0x20000000
Thank you for any suggestion,
Ran
More information about the Linuxppc-dev
mailing list