Part Number: PROCESSOR-SDK-OMAPL138
Other Parts Discussed in Thread: OMAPL138, DA8XX, OMAP-L138
Hi Support,
Setup:
I am working with the OMAPL138 SoC. My setup consists of SYS/BIOS running on the DSP and Linux on the ARM.
To communicate between the DSP and the ARM I am using IPC and MessageQ.
In Linux I am using the following kernel modules:
- rpmsg_proto
- rpmsg_core
- virtio_rpmsg_bus
- virtio
- virtio_ring
- da8xx_remoteproc
- remoteproc
CMEM?
The IPC communication functions correctly and I am able to transmit/receive data on both processors. However, I have noticed that if I transmit messages larger than 512 bytes, the "virtio_rpmsg_bus" starts to complain with the following error: "inbound msg too big: (512, 30068)".
It seems that RPmsg is applying some sort of buffer that is limited to 512 bytes. I understand that this number is due to some trade of with regards to "big enough for most purposes" vs. "small enough to reduce copy overhead".
I would like to send data up to 30000 bytes in size with IPC. Is there any way accomplish this without using something like CMEM or editing the MAX_RPMSG_BUF_SIZE macro and rebuilding the kernel?
The large size is to avoid too many interrupts on the ARM.
Ideally, I would like to use a fixed sized heap for IPC with something similar to HeapMultiBuf.
I would like to create 7 fixed pool buffers in shared memory (DDR) like such:
- 4096 * 128 = 512KB
- 2048 * 256 = 512KB
- 512 * 512 = 256KB
- 256 * 1024 = 256KB
- 128 * 4096 = 512KB
- 64 * 16384 = 1024KB
- 64 * 32768 = 2048KB
The reason I am bit sceptical of using CMEM is that I understand that the ARM is the only one able to allocate/free from shared memory and the DSP is only able to read/write.
Is it impossible to "allocate" on the ARM and "free" on the DSP? This was possible to do in the old DSPLINK, is IPC more limited in this regard?
Thanks and regards,
Kim
