This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SRIO ACKID Aligning Problem

Other Parts Discussed in Thread: TMS320C6457

In our project we are using TMS320C6457 DSP which is connected with FPGA Altera Aria II using serial RIO interface. This link works fine and reliable when both devices powered up simultaneously.
In some cases we have to reload FPGA firmware from DSP side (some dedicated protocol implemented). It is obvious that after FPGA restart SRIO link should be reestablished.
We tried to implement the recovery procedure, as proposed at Appendix B Software-Assisted Error Recovery of TMS320C6457 DSP SRIO User Guide, but didn't get any success. Connection couldn't be reestablish even after restarting DSP program.
Only full DSP system reset and DSP program reloading help after FPGA firmware reload.

What are recommendations how to do this correct way without DSP system reset or Dsp reboot?

Some other questions and observation.

We are using 4x SRIO connection. Is it necessary to write 0x40FC8000 magic number to all 4 SP_CS_TX registers or only SP0_CS_TX register enough?

It is known error that outbound AckID field in ACKID_STAT is nor readable, But writing into that register doesn't affect inbound AckID field value. Is it correct behavior?. How to change this value other way then?

After loading updated values into the Dsp ACKID_STAT register we have to send Maintenance Write to other party's ACKID_STAT register.

We reuse the code from some provided example, like:

    ackID = (response & 0x3E0) >> 5;

    /***** Send Maintenance packet to link partner to set his OUTBOUND/INBOUND ACKID  *****/
    /***Value written should be: outstanding = outbound = DSP's expected inbound ACKID
        value, and the inbound = 1 + ACKID from the LM response above***/
 
    /* little endian, so not shifted */
    partner_inbound_ackid = ackID + 1;
 
    rcvAddress = 0x00000148;
    srio_start_maintenance(hSrio, (int) &partner_inbound_ackid,(int) rcvAddress, 4, REQ_MAINT_WR, SRIO_PORT_NUMBER,LSUNO);
    printf ("Partner_Inbound_AckID = 0x%08x\n", partner_inbound_ackid);

But in almost all cases this failed with Transaction timeout or Unavailable outbound credit errors.

What is correct endianess for the partner ACKID_STAT?

Why only partner inbound AckID programmed in this example?


Thank you

Dmitry