I am working with an AM335x and ISDK V1.1.0.3. When the Ethernet driver is flooded with small packets, the Ethernet receiver can run out of buffer descriptors causing it to stall. The Ethernet receive will no longer generate any receive interrupts. My issue is directly related to the post at e2e.ti.com/.../252188 and the problem was explained by Sudhakar Ayyasamy. However, the answer to that post does not work in all situations including my application. The answer to that post is to disable ALL interrupts, which would negatively affect all other interrupt handlers.
I would like to ask TI, and everyone else, if there is any way to detect when the Ethernet receiver has stalled? I believe Sudhakar Ayyasamy stated that it's not possible to recover from this error. However, I believe I may have been able to restart the Ethernet receiver by calling CPSWCPDMARxHdrDescPtrWrite(). The problem is that I don't know how to detect when the Ethernet receiver is stalled. I have looked at the register values, but the register values look correct even when the receiver is stalled. I would appreciate any help in detecting this issue.
Currently, my workaround is to add more buffer descriptors to prevent the receiver from running out of descriptors. However, there is always the possibility of running out of buffers.