Hi, I’m the Toradex AI Assistant.
I might make mistakes or occasionally get you wrong. Our support team will step in if needed.
Your issue appears to be related to the timing of when the Cortex-M7 firmware is loaded versus when Linux initializes the RPMsg subsystem. Based on your setup with the Verdin iMX8M Plus and Ivy Plus carrier board, there are several factors that could cause this behavior.
Key Differences Between Manual and Automatic Boot
When you manually run run cm_boot in U-Boot, the Cortex-M7 firmware is loaded and starts before Linux boots, which allows proper RPMsg initialization (1). However, when using setenv bootcmd 'run cm_boot; run distro_bootcmd', there may be timing issues or memory conflicts during the boot process.
Troubleshooting Steps
1. Verify Device Tree Overlay Configuration
Ensure you have the correct HMP overlay applied. For Verdin iMX8M Plus, you should be using verdin-imx8mp_hmp_overlay.dtbo (2). Check that this overlay is properly configured in your /boot/overlays.txt file.
2. Check Memory Configuration
The RPMsg communication requires specific memory regions to be reserved. The overlay should configure memory regions like (2):
vdev0vring0: vdev0vring0@b8000000 {
reg = <0 0xb8000000 0 0x8000>;
no-map;
};
vdev0vring1: vdev0vring1@b8008000 {
reg = <0 0xb8008000 0 0x8000>;
no-map;
};
rsc_table: rsc_table@b80ff000 {
reg = <0 0xb80ff000 0 0x1000>;
no-map;
};
vdevbuffer: vdevbuffer@b8400000 {
compatible = "shared-dma-pool";
reg = <0 0xb8400000 0 0x100000>;
no-map;
};
3. Verify U-Boot Environment Variables
Check your U-Boot configuration. The proper setup should include (1):
setenv load_cmd "ext4load mmc 0:2"
setenv cm_image "/home/root/hello_world.bin"
setenv cm_image_size 20000
setenv load_cm_image "${load_cmd} ${loadaddr} ${cm_image}"
setenv cm_boot "${load_cm_image}; cp.b ${loadaddr} 0x7e0000 ${cm_image_size}; dcache flush; bootaux 0x7e0000"
saveenv
4. Check Linux RPMsg Driver Status
After Linux boots, verify that the RPMsg driver is registered (2):
dmesg | grep -i rpmsg
You should see something like:
[ 0.045742] imx rpmsg driver is registered.
5. Alternative Boot Approach
Instead of using bootcmd, try setting up the Cortex-M7 to start automatically by modifying the tdxargs variable to include the necessary parameters for early M7 initialization (3):
setenv tdxargs "your_existing_args m7_early_boot=1"
saveenv
Potential Solutions
-
Timing Issue: The automatic boot sequence might not provide enough time for proper initialization. Try adding a delay in your boot script.
-
Memory Conflicts: Ensure that the memory regions used by your firmware don’t conflict with Linux memory allocation.
-
Device Tree Loading Order: Verify that the HMP overlay is loaded before Linux attempts to initialize RPMsg.
The fact that it works when manually executed suggests the hardware and firmware are correct, but there’s likely a timing or initialization order issue when using the automatic boot sequence.
Best regards, Toradex AI Assistant.
Did you like my answer?

If I answered your question, please tick the “Solution” checkbox.
For follow-up questions to me, please use @ToradexAI in your post.