Hard to say, about M4 empty rpmsg messages.
I am using an ioctl (ioctl(mFdRpmsg, FIONREAD, &byte_avail)) to check if there's anything in the buffer of the kernel driver. It says there's nothing.
On my M4 side, I have two queues, TX/RX. Those are clearly blocked, based off of previous testing.
I see no evidence that an empty message is being sent.
I have a log being sent based off the return from the ioctl. It doesn't indicate any empty messages.
Perhaps it's not so much the iMx8, but the kernel. The kernel driver decides if blocking is supported.
In the rpmsg_char driver (on my kernel), it clearly indicates it should support blocking reads. The rpmsg_tty driver doesn't have any waits on any queues available.
I believe I will need to use rpmsg_char, but I don't have any m4 (co-processor) code for rpmsg_char. I do have working M4 code for rpmsg_tty.