Hi,
In my test system, a C6678 DSP sends SRIO SWRITEs to an FPGA, with a Byte_Count of several kilobytes per operation. The FPGA implements a FIFO at the destination region, and sends Type 7 XOFF and XON packets for flow control at high- and low- watermarks for the FIFO. After the FPGA sends an XOFF, we see the DSP send the first SRIO packet of the next LSU operation (which is fine). When the DSP software sees completion code 2 ("Packet not sent due to flow control blockade (Xoff)"), it writes the value 2 to LSUn_REG6 (Restart field = 1). After the FPGA sends XON, and presumably after the DSP triggers the Restart, we see the DSP perform the entire LSU operation -- including the first write. Because the FPGA treats the destination region like a FIFO, this causes the first 256 bytes of data to be written into the FIFO twice.
Is this kind of retransmission the expected behavior from TI's perspective? If so, is there any way to avoid it, or a bound on how many packets might be retransmitted in this scenario?
SPRUGW1B is not clear whether the logic in Figure 2-12 (selection of an LSU for the next transmission) occurs per LSU operation or per SRIO packet. If the former, I would have expected an entire LSU operation to complete before congestion control takes effect. If the latter, I would have expected behavior like the C6474's, where DSP address, remote address and Byte_Count fields in the LSU are updated as SRIO packets are sent (although I have not experimented with congestion control on a C6474). The DSP and FPGA here can implement a scheme to work around these retransmissions, but I want to make sure we understand the DSP's behavior so our workaround is complete.
Michael