I have been working with the Colibri IMX7D board, and I want to make use of the RPMSG module to communicate between the 2 cores (cortex m4 and cortex A7).
the RPMSG demos work with toradex images but can’t run them in my custom image,
I have enabled RPMSG drivers through defconfig file and enabled RPMSG through the status property in the devices trees with no result. I view the forums through the internet and I didn’t find the solution. Would somebody please elaborate?
Thanks for your reply,
I don’t have a problem when running M4 Firmwares through Uboot, for the RPMSG examples, I followed the tutorial, and ran them normally with toradex images, but, I could not with my custom image:
I can launch them through Uboot, but when moving to Linux, and loading the modules with modprobe (by following the tutorial), nothing happened.
I had also enabled RPMSG drivers in deconfig before building my image.
Is there a specific device tree I should use to enable communication between cores ? I searched a lot, and I didn’t find a solution.
the status is disabled, I can run Linux when loading RPMSG demos through Uboot, it is just the communication, that is not established when loading RPMSG module with modprobe through linux and nothing happened.
The image that I use is customized (the device tree is also customized), isn’t there a device tree that I can include to allow RPMSG in my image?
@alex.tx, right, vrings memory in DDR RAM must be reserved. But even if it’s not reserved, Linux still should report rpmsg status “okay” in /sys/firmware
“disabled” could be either due “disabled” in *.dtb, or due to u-boot. To use M4 + RPMSG, launching M4 FW from Linux using remoteproc or imxfwloader, you need to patch Toradex U-Boot 2020.07 like this:
Without patch you need issue bootaux any way, else u-boot will switch RPMSG from okay to disabled. Alternatively you may change RPMSG compatible string from “fsl,imx7d-rpmsg” to something else, of course something still recognizable by RPMSG driver.
I had changed colibri_imx7.c like you said to me, I checked the reserved memory and RPMSG cells , and I had also followed toradex tutorials, and examples from the internet, and I couldn’t solve this issue more then 1 week .
here an example :
as you can see , I have the driver installed in Linux
Have you just changed colibri_imx7.c, or as well recompiled u-boot and installed in on target?
When you succeed launching M4 with bootaux, please tell us the same rpmsg status in /sys/firmware. It must be okay, else you wouldn’t see M4 from Linux. With unpatched u-boot, u-boots bootaux command is what makes u-boot not disabling RPMSG in device tree.
I don’t understand you 2nd case:
Right snapshot shows the same Init as Remote…, so no difference between working and not working. It is not clear what you wanted to show us.
I wanted to show you, that when I run modprobe the communications between cores not established and nothing happened.
launching RPMSG require launching the firmware through U-boot , (the second capture) ,then launching the module with modprobe in Linux ,I showed you that nothing happens (the third capture) the output should be like this
I cant share what I have used to create the image, , I had made today a firmware for M4 witch had infinity loop and I had remarked that when the Linux started, the firmware stopped .I think that the problem is related to that.