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.
In evaluating the RM57’s EMAC, I noticed that the transmit CPPI chain was stalling. I believe this is caused by the EOQ not being set until the frame has completed transmission, though the EMAC has already determined to stop (CPPI descriptor’s next == NULL). The driver we’ve developed seeks to minimize the need for the main core to manage the EMAC.
To resolve the race condition between the EMAC’s decision to continue and the EOQ flag state, I’ve tested the the following workaround:
As I had to use trial and error to identify a sacrificial descriptor that works, I wanted to request TI's opinion on this workaround. Specifically, my concern is that these settings may impact the RM57 internals in some way that we've not identified in testing just ethernet alone.
The goal of this workaround is to remove the need for interrupts. In your solution you test EMAC_TX_HP, can this be guaranteed to be NULL at the start of the EOQ CPPI entry? Otherwise you'd end up with the same transmission stalls I referred to.
Hi Stephen,
Sorry, because of late answer - I was on holiday. As I experienced, you can add new descriptor entry at the end of the chain, by updating NEXT field, while EMAC is working. If EMAC has read out the NEXT filed before update (NULL value) it stop the transmission, so you have to restart again with the new BD, otherwise it continues the transfer with the new BD automatically.
This solution has been working on my desk for months, tested with floodpingig from different nodes, while it serves ftp, http - so looks like dependable enough.
Regards: Szilárd
Your solution requires an interrupt. I'm specifically trying to avoid using interrupts.