Use remoteproc to start M7 core on Verdin iMX8M-Plus

Hi @rafael.tx
can you explain how I can add the argument clk-imx8mp.mcore_booted=1 to the kernel command line?
Should I do this with u-boot customization?
Or with TorizonCore Builder?

I add the following lines to tcbuild.yaml

customization:
  # Customization section items.
  kernel:
    arguments:
      # prevents Linux from disabling the root clock of the Cortex M7
      - clk-imx8mp.mcore_booted=1

and if I run sudo tdx-info I get

Kernel command line:      root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/277551d6531e8143bfac04e4f70fecf5f84b7499d333e44b48a9617b3a635802/0 clk-imx8mp.mcore_booted=1

so I image the parameter is passed in the proper way.

But when I try to run M7 I get

[ 6849.243922] remoteproc remoteproc0: powering up imx-rproc
[ 6849.245325] remoteproc remoteproc0: Booting fw image firmware_imxcm7.elf, size 1251068
[ 6849.245428] imx-rproc imx8mp-cm7: map memory: 00000000b756f985+100000
[ 6849.245466] imx-rproc imx8mp-cm7: map memory: 000000005015e6c2+8000
[ 6849.245476] imx-rproc imx8mp-cm7: map memory: 00000000ad4b4323+8000
[ 6849.245484] imx-rproc imx8mp-cm7: map memory: 000000009895b7cc+1000000
[ 6849.245501] remoteproc remoteproc0: da = 0x80000000 len = 0x2a8 va = 0x00000000d40f8f5d
[ 6849.245509] remoteproc remoteproc0: da = 0x80000400 len = 0x134e8 va = 0x000000000076d005
[ 6849.245586] remoteproc remoteproc0: da = 0x800138e8 len = 0x29c88 va = 0x00000000bcbb84d2
[ 6849.245628] remoteproc remoteproc0: da = 0x80200000 len = 0x100000 va = 0x000000008633db6d
[ 6849.758963]  remoteproc0#vdev0buffer: assigned reserved memory node vdevbuffer@55400000
[ 6849.869243] imx-rproc imx8mp-cm7: imx_rproc_kick: failed (0, err:-62)
[ 6849.875703] virtio_rpmsg_bus virtio0: rpmsg host is online
[ 6849.875785]  remoteproc0#vdev0buffer: registered virtio0 (type 7)
[ 6849.875794] remoteproc remoteproc0: remote processor imx-rproc is now up

and I see no output from M7 debug UART (as it should be).
I see the message

[ 6849.869243] imx-rproc imx8mp-cm7: imx_rproc_kick: failed (0, err:-62)

and it seems strange to me.

If I try

# cat /sys/class/remoteproc/remoteproc0/state

I get

running

but this is strange, since I got no output from UART.

I can add one thing: my CM7 firmware donesn’t run from TCM, but from DDR.
I changed the linker of the firmware in the proper way.
Amnd so my question is: how can remoteproc know where is the right value for the Program Counter PC?
I think that maybe this PC is not set and so it has a default value of 0x7e0000 which is inside TCM.
And so remoteproc thinks it’s running, but from the wrong PC.

I found this topic on NXP and it’s similar to what I see.

Any suggestion?