Part Number: AM6441
Hi,
we have a AM64 device that uses EthernetIP from the Industrial Comms SDK on an R5 core and Linux on the A53 core.
Our application is different from the TI example since our fieldbus application runs on Linux, and is connected via RpMsg to the EthernetIP application on the R5 core.
This worked without issues.
After adding the raw ethernet tunneling between the R5 and A53 cores based on the TI tunneling example from the SDK, we observed random crashes on the R5 during the start of the application, producing the following logs on Linux side:
This happens quite unreliable (Test system with ~10 devices constantly rebooting lead to at least one case during a day of testing)
Since we already used RpMsg on the R5 core for the fieldbus IPC, there was already a call to waitForLinuxReady there. When integrating the TI tunneling example, a second call to waitForLinuxReady was added in the tunnel task.
It seems that waitForLinuxReady does not only wait, but also reset the vrings between R5 and A53, so we removed the call from the tunnel task and are simply waiting on a semaphore until the other call to waitForLinux proceeds.
With this change we did not see any further crashes over the course of several days.
For me it is not clear how two calls to waitForLinuxReady could cause this, since it was guaranteed by our application that no endpoints are announced to Linux before both waitForLinux calls were done and therefore no RpMsg communication happended that could affect the vring states(?).
Since we couldn't reliably reproduce the crash even before this change, we can not be sure if it is reliably fixed. It would be great if someone with deeper knowledge of the RpMsg drivers could point us to the mechanism that might cause the behavior seen in the screenshot, when 2 calls to waitForLinuxReady reset the vrings twice.
Thank you and kind regards
Philip Kees