Bootaux command in u-boot and boot m4/m7 aux cpu

Hi

I am so confused of booting m4/m7 core in verdin quad mini/plus.
Actually, I have succeeded in booting m7 core on verdin quad plus with hello_world.bin, but I am facing 2 issues on verdin quad mini.
On the console of verdin quad plus m7, hello_world. is displayed and inputting character is echoing back to the console as long as not booting A53 main cpu.

1st issue and question:
I installed the following version(devel version) TorizonCore to both verdins(plus and mini).
U-Boot 2022.04-6.1.0-devel+git.00f84bd784c4
TorizonCore 6.1.0-devel-202211+build.3(5.15.40-6.1.0-devel+git.b4f7c3c44d85)
There is bootaux avilable in Verdin quad plus while not available in verdin quad mini.
Does the above version TorizonCore not support bootaux command in u-boot?
If so, I will be trouble with LCD display overlay issue. Becasue this version does not support “verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo” which is for 10" capasitive-touch LCD.
Could you kindly let me know the version which supports bootaux as well as verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo?

2nd issue and question:
So I switched Verdin mini to the version to a stable version of the follows.
U-Boot 2020.04-5.7.0+git.33bb8e968332
TorizonCore 5.7.0-build.17.modified.container(5.4.193-5.7.0+git.f78299297185)
The I could see bootaux in this version, however, nothing happens by booting m4 cpu with hello_world.bin… no hello_world. no echo back.
What I did in u-boot was
iMX8MM# setenv load_cmd “ext4load mmc 0:1”
iMX8MM# setenv m4image “/ostree/deploy/torizon/var/hello_world.bin”
iMX8MM# setenv m4image_size 15000
iMX8MM# setenv loadm4image “${load_cmd} ${loadaddr} ${m4image}”
iMX8MM# setenv m4boot “${loadm4image}; cp.b ${loadaddr} 0x7e0000 ${m4image_size}; dcache flush; bootaux 0x7e0000”
iMX8MM# saveenv
iMX8MM# printenv

load_cmd=ext4load mmc 0:1
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x44500000
loadm4image=ext4load mmc 0:1 0x44500000 /ostree/deploy/torizon/var/hello_world.bin
m4boot=ext4load mmc 0:1 0x44500000 /ostree/deploy/torizon/var/hello_world.bin; cp.b 0x44500000 0x7e0000 15000; dcache flush; bootaux 0x7e0000
m4image=/ostree/deploy/torizon/var/hello_world.bin
m4image_size=15000

iMX8MM # ext4ls mmc 0:1 ostree/deploy/torizon/var/
(DIR) 4096 .
(DIR) 4096 …
(DIR) 4096 rootdirs
(DIR) 4096 lib
(DIR) 4096 tmp
(SYM) 11 lock
(SYM) 6 run
0 .ostree-selabeled
(SYM) 17 log
(DIR) 4096 sota
(DIR) 4096 volatile
(DIR) 4096 usrlocal
(DIR) 4096 cache
(DIR) 4096 spool
14380 hello_world.bin
190 .updated
iMX8MM #

So I think m4boot, m4image, etc are correctly set and hello_world.bin also is correctly stored.
I compiled hello_world sorce unziped from SDK_2_12_1_MIMX8MM6xxxKZ.zip with VScode.
Actually, it is completely same way as SDK_2_12_1_MIMX8ML8xxxKZ.zip which is for Verdin quad plus.

The follows are output message from u-boot when run m4boot(verdin mini) and m7boot(verdin plus)

iMX8MM # run m4boot
14380 bytes read in 22 ms (637.7 KiB/s)
!## Starting auxiliary core stack = 0x00000000, pc = 0x00000000…
iMX8MM #

iMX8MP # run m7boot
18324 bytes read in 2 ms (8.7 MiB/s)
!## Starting auxiliary core stack = 0x20020000, pc = 0x0000048D…
iMX8MP #

Could you kindly advice and help?
I am using Verdin development board.

Sorry so long and Thanks
ujsugi

Hi @ujsugi,

For BSP 6, the u-boot configuration that enables the bootaux command is not enabled yet. We will enable it in the near future. I will let you know here when it’s supported.

Please check this documentation: High performance, low power Embedded Computing Systems | Toradex Developer Center

Can you see something being printed on the screen by the cortex-m, or does it stops after linux has been booted?

Best Regards,
Hiago.

Thanks a lot for reply!

Issue1:
bootaux is enabled on Verdin Plus but is not enabled on Verdin Mini.
This means there are some difference b/w Mini and Plus at u-boot and kernel build and installtion process, despite that u-boot&kernel version are identical…So I think it some confuse.

Plus, I am facing another issue.
Issue1-2:
I have 10"capasitive-touch LCD which is connected via “Verdin DSI to LVDS Adapter”.
GUI is working and LCD is displayed correctly with TorizonCore 6.1.0-devel-202211+build.3 on Verdin Mini, as I choose “verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo” overlay.
Also it working on Verdin Plus with the same Torizon version and same overlay.
However, GUI does not work and nothing is desplayed with TorizonCore 5.7.0-build.17 or
TorizonCore 5.4.0-devel-202109+build.18 on Verdin Mini. The overlay I choose is “verdin-imx8mm_sn65dsi84-lt170410_overlay.dtbo” as per Device Tree Overlays (Linux) | Toradex Developer Center. Becasue “verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo” overlay is not available on this Torizon version.
Could you kindly let me know what overlay to be chosen with TorizonCore 5.x.x?
I can see “Applying Overlay: verdin-imx8mm_sn65dsi84-lt170410_overlay.dtbo” at OS booting message but nothing is displayed.

Issue2:
I attached the below.
— Here is the message at issuing Verdin Mini M4 boot —
iMX8MM # run m4boot
14380 bytes read in 22 ms (637.7 KiB/s)
!## Starting auxiliary core stack = 0x00000000, pc = 0x00000000… <==== I wonder!
iMX8MM #
Nothing is dislpayed to M4 serial console(uart4) and no echo back. Linux is not booted. Only M4 is on boot.

— Here is the message at issuing Verdin Plus M7 boot —
iMX8MP # run m7boot
18324 bytes read in 2 ms (8.7 MiB/s)
!## Starting auxiliary core stack = 0x20020000, pc = 0x0000048D…
iMX8MP #
As I mentioned, hello_world. is displayed and inputting character is echoing back to the console as long as not booting A53 main cpu. This means that character echo back is going on while Linux not stared. Once staing Linux(boot), echo back stops, because Linux takes device ownership.

— hello_back.c source code —

PRINTF("hello world.\r\n");

while (1)
{
    ch = GETCHAR();
    PUTCHAR(ch);
}

Hi @ujsugi,

I apologize; this is a little confusing, but I already talked with our team to enable the bootaux feature in the next releases of Verdin Mini BSP 6 (or TorizonCore 6). I’ll let you know when this feature is enabled. For now, it’s only possible to enable it if you create a custom image and enabled it yourself, so I suggest you keep using BSP 5.7 (or TorizonCore 5.7) for now.

Can you please try the following overlays?

touch-atmel-mxt_overlay.dtbo verdin-imx8mm_sn65dsi84-lt170410_overlay.dtbo verdin-imx8mm_sn65dsi84_overlay.dtbo

Some overlays are not present in TorizonCore 6 yet because some of them changed their names or it’s not available yet. Please try the above overlays and let me know if your display works now.

Can you please share with me how are you compiling your hello world binary?

Best Regards,
Hiago.

Thanks a lot for your help and support.

Regarding issue1, I will not decide to create a custome image which is so tough at this moment, so I will keep using BSP 5.7 for now.

Regarding issue 1-2, now it is working with the overlays you adviced! Thanks!

Regarding 2, it is fine after recovering everything re-installing easy installer, TorizonCore 5.7.0-build.17 and rebuilding hello_world.
The message displayed after bootaux as follows.
Verdin iMX8MM # run m4boot
14380 bytes read in 28 ms (501 KiB/s)
!## Starting auxiliary core stack = 0x20020000, pc = 0x1FFE02CD…
Verdin iMX8MM #

Stack appears at TCMU and PC appears at TCML with vector offset.
Plus, M4 cpu still holds the owner of uart4 even after Linux starting. It is unlike Verdin Plus M7 and as mentioned at How to Run a Hello World on the Cortex-M | Toradex Developer Center.

Thanks a lot!

Hi @ujsugi,

Ok, I suggest you use BSP 5.7 until we have bootaux available in our images. I can send you a message when we enable this support.

I’m glad it’s working now!

It appears that M4 started correctly. Have you connected to UART ttyUSB2 (or related) to check if it’s printing something in your terminal?

Best Regards,
Hiago.

I get a char and echo back it to USB com-port for M4.
It is like while(1){ ch = GETCHAR(); PUTCHAR(ch); }

Thanks

Hi @ujsugi,

Correct, and then after Linux boots, it stops working? or do the echoing and messages still appear?

Best Regards,
Hiago.

There is a difference b/w Mini and Plus.
M4 is still running(echoing) on Mini while M7 stops on Plus.
This differnce is explained at How to Run a Hello World on the Cortex-M | Toradex Developer Center. If I do the overlays to Plus as mentioned at this site, M7 will be still running without swiching the owner to Linux.

Hi @ujsugi,

Great! Thanks for explaining. I’m glad it’s working now. Feel free to reach me in case you have any further questions.

Best Regards,
Hiago.