I have two C6678 DSPs with SRIO connected by a CPS-1848 switch from IDT.
This is standard, working hardware from a board supplier.
DSP-1 is in a loop waiting for a doorbell from DSP2 by polling the
DOORBELL INT ICSR and then acknowledging it. When it receives
this doorbell it sends one back to DSP2 and waits again.
DSP-2 is doing the inverse: sending a doorbell to DSP-1 and waiting
for one coming back.
DSP-1 sends the doorbell by writing the following values to LSU[0]:
R1=0, R2=0, R3=0, R4=0x30010440 R5=000000A0
DSP-2 sends the doorbell by writing the following values to LSU[0]:
R1=0, R2=0, R3=0, R4=0x30020440 R5=000100A0
On both DSPs, the LSU is properly locked each time before writing
the registers.
This runs for an indeterminate number of loops (varying from 2 to >50)
but then everything stops and I get solid errors when trying to
send doorbells. The relevant field from LSU_STAT shows a completion
code of usually 1 (Transaction Timeout) but occasionally 6
("Retry" response).
After these errors, I have tried flushing the LSU. This seems to work
once or twice, but then the error becomes permanent.
There is only ever one outstanding LSU transaction at a time on each DSP.
There are no interrupts involved.
Interrupt pacing is disabled.
This is a cut-down version of a larger example that is also doing data
transfers across SRIO. This works for a random number of transfers (from
five to several thousand) before getting stuck in the same way as
the doorbell example.
Does anyone have a suggestion as to what might be going on and why?
↧
timeout on sending SRIO doorbell.
↧