Hi all,
I met a question about SRIO doorbell interrupt routing.
Firstly, my code is below
CSL_SRIO_SetDoorbellRoute(hSrio, 1);
for (i = 0; i < 16; i++)
{
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 0, i, 14);
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 1, i, 15);
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 2, i, 13);
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 3, i, 12);
}
So all the Reg=0 doorbell info will route to INTDST14.
Then
CSL_SRIO_DisableInterruptPacing (hSrioCSL, 14); CpIntc_dispatchPlug(CSL_INTC0_INTDST14, (CpIntc_FuncPtr)myDoorbellCompletionIsr, (UArg)hDrvManagedSrioDrv, TRUE); CpIntc_mapSysIntToHostInt(0, CSL_INTC0_INTDST14, 9); CpIntc_enableHostInt(0, 9); CpIntc_enableSysInt(0, CSL_INTC0_INTDST14); eventId = CpIntc_getEventId(9); EventCombiner_dispatchPlug (eventId, CpIntc_dispatch, 9, TRUE);
means that I plug the myDoorbellCompletionIsr with INTDST14 and then route the INTDST14 to CIC0OUT_9.
And plug the eventID 75(corresponding with CIC0OUT_9) with Cpintc_dispatch.
With this code above, when I send the doorbell info with reg=0 to DSP through FPGA , the myDoorbellCompletionIsr can raise.
2. Then I change the code like this
CSL_SRIO_SetDoorbellRoute(hSrio, 0);
for (i = 0; i < 16; i++)
{
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 0, i, 0);
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 1, i, 1);
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 2, i, 2);
CSL_SRIO_RouteDoorbellInterrupts(hSrio, 3, i, 3);
}
means doorbell info with reg=0 goes into INTDST16.
And then
EventCombiner_dispatchPlug (20, (CpIntc_FuncPtr)myDoorbellCompletionIsr, (UArg)hDrvManagedSrioDrv, TRUE);
I plug the eventID20 with myDoorbellCompletionIsr.
Because the INTDST16 is the eventID20 of Core0, I think the myDoorbellCompletionIsr will raise.
But when I send the doorbell info with reg=0, the myDoorbellCompletionIsr can not raise.
Are there any misunderstandings in the routing path of SRIO doorbell?
Thanks for any replies!
Feng