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.

RapidIO DirectIO SPn_ERR_STAT: rcvd pkt-retry cntl sym can't make fwd progress

Hi

I am using the DIO lib 1.1.0 release edma streaming example on a C6472 and get the error below during a 256kByte transfer.

    SP_ERR_STAT (0x2d01158) = 0x180002
        : b20 - encountered retry condition.
        : b19 - rcvd pkt-retry cntl sym can't make fwd progress .

I have set the SPn_CTL_INDEP max_retry_thr to a large enough value so that the max retry count does not hit the threshold

    tmp = hSrioDirectIO->hCslObj->regs->PORT_OPTION[0].SP_CTL_INDEP;
    tmp |= 0x00000F00; // set MAX_RETRY_THR . Note: this register is set
                       // to 0x01A301C0 by the RIO_init() routine (ln 727)
    hSrioDirectIO->hCslObj->regs->PORT_OPTION[0].SP_CTL_INDEP = tmp;

But when I do the transfer, sometimes the SPn_ERR_STAT b19 "rcvd pkt-retry cntl sym can't make fwd progress" gets set. Although it says "can't make fwd progress", I can read back the data from the target and see that the transfer was successful.

So what does "can't make fwd progress" mean? It seems it was able to complete the transfer?

Cheers

 

  • Hi

    I am using the DIO lib 1.1.0 release edma streaming example on a C6472. I am encountering a retry condition is indicated by the SPn_ERR_STAT b20 and b19.

        SP_ERR_STAT (0x2d01158) = 0x180002
            : b20 - encountered retry condition.
            : b19 - rcvd pkt-retry cntl sym can't make fwd progress .

    I'd like to find out what is the max_retry_cnt mentioned in the SP_CTL_INDEP bit 16 description below.

    max_retry_cnt is equal to max_retry_threshold. The Port-Write request and
    interrupt are generated if enabled. This error is also reported in the register
    SP0_ERR_DET
    .

    The reason I'd like to know is for determining what the optimal SPn_CTL_INDEP MAX_RETRY_THR value should be under normal operating conditions.

    What register can I read to get max_retry_cnt?

    Cheers

     

     

     

  • Eddie,

    It is just poor wording.  Although it is true that while in the retry-stopped state, you can't make forward progress because the packet is retried continuously, the exceeding of threshold doesn't mean it won't eventually get through to the link partner.

    It is reported in the error management register SPn_ERR_DET as a possible cause for bit 31, and consequently can cause an interrupt and outbound port-write error message if the SPn_ERR_THRESH is met and the SPn_RATE_EN is enabled.  I haven't actually  ever changed the threshold from the 0x00 reset value.  I'm not sure why DIOLib would.

    As long as you are in port_ok status and don't have a fatal error, or are stuck in either input-error or output-error stopped state, then the packets should get through.

    Regards,

    Travis

  • Max_retry_cnt represents an internal counter that keeps track of the consecutive received retry control symbols.  It is not readable via register.

    Regards,

    Travis