Hi,all:
Now, I am working with TCI6638K2K EVM.Kernel is download from :
git clone git://arago-project.org/git/projects/linux-keystone.git
I am researching the source code in irq-keystone-ipc.c
(tci6638-linux-kernel\linux-keystone\drivers\irqchip) to learn how ARM a15 register IPC interrupt ISR function in kernel.But There are some questions which are puzzled me.
As well known,When ARM want to register interrupt ISR in kernel,The usually operation is to use request_irq below.The only thing we need to do is that we provide the irq number and interrupt ISR function for handler.But in the irq-keystone-ipc.c it seems not like this.
int request_irq (unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long frags, const char *device, void *dev_id);
In the keystone_ipc_irq_of_init, I see that kernel register ipc interrupt ISR function using
kipc->chip.irq_ack = keystone_ipc_ack_irq, I also see that keystone_ipc_ack_irq can be called when DSP side set the register IPCGR_8. That means that ARM go into the IPC interrupt ISR function and receive the interrupt request from DSP.
kipc->mask = ~0x0;
kipc->chip.name = "keystone-ipc-irq";
kipc->chip.irq_ack = keystone_ipc_ack_irq;
kipc->chip.irq_mask = keystone_ipc_mask_irq;
kipc->chip.irq_unmask = keystone_ipc_unmask_irq;
Since I am not very skilled in linux kernel programming
1.
So I want to ask why kernel don’t use request_irq register interrupt ISR function like the way which I know.
2.
Isn’t it the only way that we register interrupt ISR function into kernel using request_irq?
3.
Can you explain the method with which tci6638k2k kernel register the IPC interrupt ISR function?
Thanks very much!