Hello,
We use the SRIO type 9 messages in our system.
At initialization, the Tx free queue is filled with 16 descriptors and in each transaction a descriptor is popped from the Tx free queue, pushed to the Tx queue and after the transmission completion the descriptor is returned automatically to the Tx free queue. This behavior is the normal behavior of the system.
BUT, there are cases that the SRIO port has an error (e.g. link partner disabled the input port) and this cause the descriptors to be aggregated in the Tx queue (since the packets can't be transmitted to the link partner) until there is no free descriptor in the Tx free queue. Now, even if the SRIO problem is solved (the link partner established a link and all SRIO alignment and error recovery procedures have been done) the descriptors are still stuck in the Tx queue and not been transmitted (There are several cases that the descriptors are released but in most of the time the descriptors stuck is in the Tx queue).
my suspicious is that the Tx queue signals the SRIO to pop a descriptor from the Tx queue only after software pushed a descriptor to the Tx queue or after previous transaction has completed, but in case that no descriptor has been pushed to the Tx queue or transaction has completed (like in case that there are descriptors in the Tx queue and error occurred in the system) - no signal is done to release a descriptor from the Tx queue which lead to the phenomena I described earlier.
1. Is there any operation that can force the PKTDMA/SRIO module to start Tx queue transactions after a stuck scenario is detected? Shouldn't it be done automatically?
2. Can you approve/reject my assumption?
Waiting for your advice.