Part Number: DRA712
Hello,
Our configuration:
- IPU (SYS/BIOS) - loaded by the bootloader (MLO) at the early stage of the booting process and then late attached by Linux kernel (remoteproc)
- MPU running Linux
We need to pass messages (fixed size data) from IPU (FW) to MPU (user space app) keeping in mind that IPU is running first and needs to wait for Linux to boot.
Currently, we are using MessageQ for that purpose where IPU works as writer and User space app as reader. According to MessageQ API only reader can create and own the queue so the app in user space.
IPU is collecting messages at the very early stage of the booting when the app is not running yet and because the queue is not created yet it has to internally buffer these messages in FW memory, which is something that we want to avoid.
1. Is there any other mechanism than MessageQ for our configuration (BIOS -> Linux) that allows putting data to shared memory in the way that when the other part (Linux) is ready it can read those messages?
I found that only MessageQ with RPMB Transport is capable to perform such IPC communication. All other components that are used by MessageQ like ListMP or HeapBuf/Mem are only for communication between cores running SYS/BIOS.
I also found RingIO mechanism but I guess it does not support DRA7X and requires additional kernel driver:
software-dl.ti.com/.../_ring_i_o_8h.html
2. Is there any other option than polling MessageQ_open, to check that a message queue still exists on the remote side? So for IPU to check if the queue still exists on the Linux side.
We observe the following scenario:
- IPU opens the queue for the first time and is putting some messages.
- User space app can receive messages and everything works fine.
- User space app suddenly crashes.
- IPU can still put messages without any error, i.e. MessageQ_put return success
- The app recovers creating the queue once again but all previously sent messages are lost
BR,
Szymon