IMX7 : enable RPMSG

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?

Thank you.

Best regards,

How do you lauch your M4 firmware? IIRC Toradex u-boot disables RPMSG if bootaux command is not used. You should check through sysfs if status is really “okay”

# find /sys/firmware -name "*rpm*"
/sys/firmware/devicetree/base/soc/aips-bus@30800000/rpmsg
# cat /sys/firmware/devicetree/base/soc/aips-bus@30800000/rpmsg/status
okay#

If it is indeed disabled, then make sure you are using right dtb. Try running bootaux with not necessarily right M4 FW. It may stop u-boot disabling RPMSG.

2 Likes

Hi,
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.
Best regards,

We are stuck without answer for this ^^.

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?

Hi @marouen
Please check your Device Tree for reserved memory and proper rpmsg cells.

@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

@marouen,
“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:

diff --git a/board/toradex/colibri_imx7/colibri_imx7.c b/board/toradex/colibri_imx7/colibri_imx7.c
index 3540c10..dfbe55c 100644
--- a/board/toradex/colibri_imx7/colibri_imx7.c
+++ b/board/toradex/colibri_imx7/colibri_imx7.c
@@ -312,14 +312,7 @@ int ft_board_setup(void *blob, bd_t *bd)
 			eprintf("Cannot set usable memory\n");
 			return ret;
 		}
-	} else {
-		int off;
-
-		off = fdt_node_offset_by_compatible(blob, -1,
-						    "fsl,imx7d-rpmsg");
-		if (off > 0)
-			fdt_status_disabled(blob, off);
-	}
+	} 
 #endif
 #if defined(CONFIG_FDT_FIXUP_PARTITIONS)
 	static const struct node_info nodes[] = {

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.

1 Like

@Edward
still not working :sweat_smile:

@alex.tx
my device tree has exactly the same properties for reserved memory and RPMSG cells as your links

Who’s not working? Is it “okay” already in /sys/firmware? No further steps without “okay”. Why it may be not OK I answered already.

the status in /sys/firmware/devicetree/base/soc/aips-bus@30800000/rpmsg/status is disabled,

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

I am starting the example pinpong_freertos.elf through U_boot on the cortex m4 , witch print the following output:


, when I run modporbe through Linux, nothing happened

Hi @marouen ,

Thanks @Edward for the help.

did you test this exact firmware and ping-pong demo on the Toradex image?

Furthermore, could you send us a full log of all the steps including u-boot, so we can have a look at the whole thing?

Best Regards
Kevin

@marouen,

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.

yes

the status is okay

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

Hi @kevin.tx

Yes, I have tested many RPMSG firmware ,including ping-pong demo ,and they worked on Toradex but none for mine.

I had sent in my last two images in the previous reply the full log:
The capture on the left represent cortex A log, the right one represent cortex M log.

Then clearly you failed to patch U-boot. Else having the same dtb you would always see “okay”, no matter launch you M4 FW or not.

Though we may looping around some miscommunication, like this:

Yes what? Yes, you changed only *.c file, or yes you did everything… Never mind.

Hi @marouen,

Were you able to fix this issue? Can you update us about that?

Best regards,
Hiago.

Hi @hfranco.tx

I am still not able to fix the issue.

Hi @marouen !

Could you please share the steps you took to create your image?

If you could share the layers/recipes/patches you used in Yocto, it would be great.

If you don’t want to share it here, you can send a private message or send it to support.eu@toradex.com / suuport@toradex.com.

Best regards,

Hi @henrique.tx
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.

Hi @marouen !

Unfortunately not knowing which changes you made makes it very hard to help you…

Then, please follow the tips above (and from other Community posts) to try to solve your issue.

Also, let us know if there is a way to help you.

Best regards,