Dear All
Could, i trigger interrupt with CHIPSIG, e.g. CHIPSIG3 inside the ARM and then, create the ISR also in ARM side.
e.g.
# define ARM_TO_ARM_DATA_IRQ 31
# define CHIPSIG 0x01C14174
# define CHIPSIG_CLR 0x01C14178
# define SICR 0xFFFEE024
irqreturn_t dataArmtoArm_isr(int irq, void *dev_id, struct pt_regs * regs)
{
u32* chipsigClear;
u32* sicr;
printk(KERN_ALERT "****Receiving Packet from ARM****\n");
/*
* Write a 1 to the CHIPINT1 bit of the Chip Signal Clear (CHIPSIG_CLR)
* register, then write the IRQ to the System Interrupt Status Index Clear
* (SICR) register to clear the interrupt.
*/
chipsigClear = (u32 *) ioremap_nocache(CHIPSIG_CLR,sizeof(u32));
sicr = (u32 *) ioremap_nocache(SICR,sizeof(u32));
iowrite32(CHIPSIG_CLR_DATA_IRQ3,chipsigClear);
iowrite32(irq,sicr);
// Checking The Rx Buffer
printk(KERN_ALERT "*** ARM to ARM interrupt ***\n");
break;
}
void GenerateInterrupt()
{
u32* chipsigReg;
chipsigReg = (u32 *) ioremap_nocache(CHIPSIG,sizeof(u32));
printk(KERN_ALERT "*** Pinging ArmtoArm_isr ***\n");
iowrite32(SYSCFG_CHIPSIG_CHIPSIG3,chipsigReg);
}
request_irq(ARM_TO_ARM_DATA_IRQ,
(void*)&dataArmtoArm_isr,
IRQF_DISABLED,
"Arm2ArmISR",
dev);
The result that i got, the processor restart.
Could anyone help, if i miss something, so the interrupt does not work properly