Hi team,
Here's an issue from the customer may need your help:
The following issues occur when debugging the am263x IPC_notify feature:
1) At the second step, the bit corresponding to the IPC register read_Req of Core 0 is set to 1, but Core0 does not enter an interrupt (Interrupt configuration has been tested with the function vimTriggerSoftInt and entry can be triggered, i.e. interrupt configuration is OK) .
2) After entering an interrupt, the interrupt flag bit needs to be cleared, specifically which register is cleared? The routines for the reference SDK are the clear flag bit write done. But in reality, it's read req.
Interrupt configuration is as follows:
Vim_IntCfg intCfg; intCfg.map = VIM_INTTYPE_IRQ; intCfg.type = VIM_INTTRIGTYPE_LEVEL; intCfg.intNum = MSS_CR5A_MBOX_RD_REQ; intCfg.handler = IPC_CoreReqHandle; intCfg.priority = VIM_PRIORITY_3; vimRegisterInterrupt(&intCfg); vimEnableInterrupt(MSS_CR5A_MBOX_RD_REQ); intCfg.map = VIM_INTTYPE_IRQ; intCfg.type = VIM_INTTRIGTYPE_PULSE; intCfg.intNum = MSS_CR5A_MBOX_RD_ACK; intCfg.handler = IPC_CoreReqHandle; intCfg.priority = VIM_PRIORITY_3; vimRegisterInterrupt(&intCfg); vimEnableInterrupt(MSS_CR5A_MBOX_RD_ACK);
Trigger Code: (The write to shared memory section is omitted, this function tells the target core to read the data after the shared memory has been written)
void IPC_NotifyCoreWriteDown( uint32_t TarCore) { uint32_t mailboxBaseAddr, intrBitPos; IpcNotify_SwQueue *swQ; IPC_GetNotifyMailboxAddr(&TarCore, &mailboxBaseAddr, &intrBitPos, &swQ); volatile uint32_t *addr = (uint32_t *)mailboxBaseAddr; *addr = (1<<intrBitPos); }
Could you help check this case? Thanks.
Best Regards,
Cherry