Hi, I'm trying to figure out some strange behaviors I'm having with the communication between Linux and bare-metal M7 firmware.
I have a kernel module implementing an rpmsg endpoint and a chardevice. The userspace application makes ioctls calls and the module translates the requests into rpmsg messages.
On the M7 code, I have implemented the env-queue-* code using a simple ring buffer.
The system works, but if the user space sends messages too fast the buffer eventually fills, and the system freezes for 15 seconds. Looking into the rpmsg code in the kernel I found 15s is the timeout waiting for a free tx buffer. But, even with uart logging enabled, my M7 is performing all the queued operations in some milliseconds emptying the buffer.
It looks like, on the Linux side, the event waited with "wait_event_interruptible_timeout" is not raised during the 15s period... so the virtualqueue callback is not getting called.
I can't figure out how to fix this.
Thanks for the help