NXP RPMSG Demo not functional on IMX8DX Colibri

Hello All,

I am attempting to develop a RPMSG FreeRTOS application on your IMX8X SOM. During this process I have attempted to run NXP’s FreeRTOS demo applications on the board, specifically the “rpmsg_lite_str_echo_rtos” demo app.

I have made a modification to the demo application to use the SODIMM 144 and 146 pins on the Colibri as the M4 UART, git styel patch for that is below. This is the only modification done to the FreeRTOS demo.

rpmsg_lite_str_echo_rtos_colibri_m4_uart_pin_change.patch (2.4 KB)

Along with that modification to the M4 FreeRTOS, I have made a change to the Toradex Linux kernel (based on the HEAD of the branch “toradex_5.4-2.3.x-imx”). The change I made was to remove the pins that were mentioned in the FreeRTOS pinmux header file. Those changes are in the patchfile attached below.

kernel_disable_m4_related_pins.patch (2.1 KB)

For running the demo app I pull the m4 binary into Uboot via TFTP, loads fine. And I then see the following on the M4 UART.

RPMSG String Echo FreeRTOS RTOS API Demo...

NOTE: The command I run in Uboot is setenv serverip; dhcp; tftp ${loadaddr} rpmsg_lite_str_echo_rtos.bin; dcache flush;bootaux ${loadaddr}

Then I run boot in Uboot and get up to Linux Userspace. In userspace I then modprobe the imx_rpmsg_tty module to test out the demo. This modprobe process hangs and never returns, it prints out the following during this “hang”.

root@localhost:~# modprobe imx_rpmsg_tty
[   18.703453] imx_rpmsg_tty virtio1.rpmsg-openamp-demo-channel.-1.30: new channel: 0x400 -> 0x1e!
[   18.712476] Install rpmsg tty driver!

After that hang I see nothing new printed to the M4 UART.

I’ll also share my dmesg output, in case that is useful
dmesg_out.txt (26.3 KB)

Some background info on what hardware/BSP I am using.

The Carrier being used is a Colibri Evaluation board (v3.28)

The SOM is a Colibri IMX8X (The 1GB IMX8DX variety) marked v1.0D

The BSP is your v5 BSP (non-Torizon), pulled from the default.xml repo manifest here: tdxref - toradex-manifest.git - Repo manifest for Toradex Embedded Linux TorizonCore and BSP layer setup for Yocto Project/Openembedded

I am building for the “colibri-imx8x” MACHINE. And using the imx8dx-colibri-eval-v3.dtb

Any help getting the RPMSG demo running would be appreciated. Thanks for the help on this.


Hi @Cosmo ,
The issue seems to be with the kernel toradex_5.4-2.3.x-imx.The M4 stops as soon as the kernel starts to load, we are investigating into it

However, RpMsg worked with the kernel toradex_5.4-2.1.x-imx, here are the steps required

  • Use the changes mentioned by you in rpmsg_lite_str_echo_rtos_colibri_m4_uart_pin_change.patch
  • Connect UART
    SODIMM_144 ← RX
    SODIMM_146 —> TX
  • Keep you demo inside your SD card and enter the following command
  Colibri iMX8X # fatload mmc 1 ${loadaddr} rpmsg.bin && dcache flush && bootaux ${loadaddr} 0
  67624 bytes read in 21 ms (3.1 MiB/s)
  Power on aux core 0
  Copy image from 0x89000000 to 0x34fe0000
  Start M4
  bootaux complete
  Colibri iMX8X # boot
  root@colibri-imx8x-v10b:~# modprobe imx_rpmsg_tty
  [  177.568570] imx_rpmsg_tty virtio1.rpmsg-openamp-demo-channel.-1.30: new channel: 0x400 -> 
  [  177.577782] Install rpmsg tty driver!

You would be able to see the following messages on your M4 UARTterminal

RPMSG String Echo FreeRTOS RTOS API Demo...

Nameservice sent, ready for incoming messages...
Get Message From Master Side : "hello world!" [len : 12]

Hi Sahil,

Thanks for getting back to me on this.

I was able to test with the HEAD of the Toradex Kernel branch “toradex_5.4-2.1.x-imx”.

Following the steps you provided I’m seeing the same results on my end. RPMSG is working with the NXP demo.

Appreciate the help on this. I’d be interested to know what the issue with the “toradex_5.4-2.3.x-imx” branch turns out to be.


Hi @Cosmo
Can you test with this rpmsg.bin (66.0 KB)

Your rpmsg.bin works with the “toradex_5.4-2.1.x-imx” Kernel

Output on the M4 UART when echoing “test” to the ttyRPMSG30 device.

Nameservice sent, ready for incoming messages...
Get Message From Master Side : "hello world!" [len : 12]
Get Message From Master Side : "test" [len : 4]
Get New Line From Master Side

Hi @Cosmo ,
I have used the same steps that I have mentioned
On the latest BSP, try building your dtb with the following patch
imx8-ss-cm40.patch (1.2 KB).