M4 code incorporated into imx-boot halts after a second

Hi Kevin,

I haven’t modified the boot.scr from the reference image, it is still:

#
# Copyright 2020 Toradex
#
# TorizonCore boot script.

if test -z "${altbootcmd}"
then
    env set altbootcmd 'env set rollback 1; run bootcmd'
    env save
fi

if test "${rollback}" = "1" && test "${upgrade_available}" = "1"
then
    # Make sure to reset upgrade_available to avoid unnecessary wear
    # Note this also makes rollback permanent. aktualizr will reset rollback
    # when a new (hopefully better) update comes in.
    env set upgrade_available 0
    env save
fi

# save default U-Boot devicetree file to use in a rollback situation
env set fdtfile2 "${fdtfile}"

if test ${devtype} != ubi
then
    if test -n "${loadaddr}"
    then
        ext4load ${devtype} ${devnum}:1 ${loadaddr} /boot/loader/uEnv.txt; env import -t ${loadaddr} ${filesize}
    else
        ext4load ${devtype} ${devnum}:1 ${scriptaddr} /boot/loader/uEnv.txt; env import -t ${scriptaddr} ${filesize}
    fi
else
    ubifsmount ${devtype}${devnum}:rootfs && load ${devtype} ${devnum}:0 ${loadaddr} /boot/loader/uEnv.txt; env import -t ${loadaddr} ${filesize}
fi

run bootcmd_run

The uEnv.txt, again isn’t modified from stock.

kernel_image=/ostree/torizon-a365050f574bcc7d045a18af3273d04163ad1c0752f3369effcba07d8523a691/vmlinuz-5.4.129-5.4.0+git.cb88cc157bfb
ramdisk_image=/ostree/torizon-a365050f574bcc7d045a18af3273d04163ad1c0752f3369effcba07d8523a691/initramfs-5.4.129-5.4.0+git.cb88cc157bfb.img
fdtdir=/ostree/torizon-a365050f574bcc7d045a18af3273d04163ad1c0752f3369effcba07d8523a691/dtb
bootargs=quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/a365050f574bcc7d045a18af3273d04163ad1c0752f3369effcba07d8523a691/0
kernel_image_type=Image.gz
overlays_file="overlays.txt"
otaroot=1

set_bootargs=if test ${devtype} != ubi; then \
                 # Load commands for regular block devices \
                 env set bootcmd_args env set bootargs ${defargs} root=LABEL=otaroot rootfstype=ext4 ${bootargs} ${tdxargs}; \
             else \
                 # Load commands for raw NAND devices \
                 env set bootcmd_args env set bootargs ${defargs} ubi.mtd=ubi root=/dev/ubi0_0 rootfstype=ubifs ubi.fm_autoconvert=1 ${bootargs} ${tdxargs}; \
             fi || true

set_kernel_load_addr=if test ${kernel_image_type} = "Image.gz"; then \
    env set kernel_addr_load ${loadaddr}; \
    env set bootcmd_unzip_k 'unzip $kernel_addr_load $kernel_addr_r'; \
else \
    env set kernel_addr_load ${kernel_addr_r}; \
    env set bootcmd_unzip_k ';'; \
fi || true

load_overlay=load ${devtype} ${devnum}:${otaroot} ${loadaddr} /boot${fdtdir}/${overlays_file}; env import -t ${loadaddr} ${filesize}
apply_overlays=fdt addr ${fdt_addr_r} && fdt resize 0x20000 && \
               for overlay_file in ${fdt_overlays}; do \
                   echo "Applying Overlay: ${overlay_file}" && \
                   load ${devtype} ${devnum}:${otaroot} ${loadaddr} /boot${fdtdir}/overlays/${overlay_file} && fdt apply ${loadaddr}; \
               done;

bootcmd_load_k=load ${devtype} ${devnum}:${otaroot} ${kernel_addr_load} "/boot"${kernel_image}
bootcmd_load_r=load ${devtype} ${devnum}:${otaroot} ${ramdisk_addr_r} "/boot"${ramdisk_image}; env set ramdisk_size ${filesize}

# check kernel_image2 to avoid booting from other then default emmc in case of
# bootlimit is reached and there is no other deployed image
check_rollback_needed=if test -n "${kernel_image2}" && test "${rollback}" = "1"; then \
    echo "Rollback enabled. Booting previously deployed version."; \
    env set kernel_image ${kernel_image2}; \
    env set ramdisk_image ${ramdisk_image2}; \
    env set bootargs ${bootargs2}; \
    env set fdtdir ${fdtdir2}; \
    env set fdt_file ${fdt_file2}; \
    env set fdtfile ${fdtfile2}; \
fi || true

set_fdt_path=if test -n "${fdtdir}"; then \
                env set fdt_path /boot${fdtdir}/${fdtfile}; \
             else \
                env set fdt_path /boot${fdt_file}; \
             fi || true

bootcmd_dtb=load ${devtype} ${devnum}:${otaroot} ${fdt_addr_r} ${fdt_path}; \
            if test ${skip_fdt_overlays} != 1; then \
                    if test -e ${devtype} ${devnum}:${otaroot} /boot${fdtdir}/${overlays_file}; then \
                        run load_overlay && run apply_overlays || true; \
                    fi || true; \
            fi || true

set_bootargs_custom=if test -n "${fdt_overlays}"; then \
                        for overlay_file in ${fdt_overlays}; do \
                            if test "${overlay_file}" = "custom-kargs_overlay.dtbo"; then \
                                if fdt get value custom_kargs /chosen/ bootargs_custom; then \
                                    env set bootargs ${bootargs} ${custom_kargs}; \
                                fi; \
                            fi; \
                        done; \
                    fi || true

board_fixups=if test "${board}" = "verdin-imx8mm"; then \
                 if test "${fdtfile}" = "imx8mm-verdin-nonwifi-v1.1-dahlia.dtb"; then \
                     env set fdtfile imx8mm-verdin-nonwifi-dahlia.dtb; \
                 elif test "${fdtfile}" = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"; then \
                     env set fdtfile imx8mm-verdin-nonwifi-dev.dtb; \
                 elif test "${fdtfile}" = "imx8mm-verdin-wifi-v1.1-dahlia.dtb"; then \
                     env set fdtfile imx8mm-verdin-wifi-dahlia.dtb; \
                 elif test "${fdtfile}" = "imx8mm-verdin-wifi-v1.1-dev.dtb"; then \
                     env set fdtfile imx8mm-verdin-wifi-dev.dtb; \
                 fi; \
             fi || true

nand_fixups=if test ${devtype} = ubi; then \
    setexpr kernel_image sub "/boot" "" ${kernel_image}; \
    setexpr ramdisk_image sub "/boot" "" ${ramdisk_image}; \
    setexpr fdtdir sub "/boot" "" ${fdtdir}; \
    if test -n "${kernel_image2}"; then \
        setexpr kernel_image2 sub "/boot" "" ${kernel_image2}; \
        setexpr ramdisk_image2 sub "/boot" "" ${ramdisk_image2}; \
        setexpr fdtdir2 sub "/boot" "" ${fdtdir2}; \
    fi || true; \
fi || true

bootcmd_boot=booti ${kernel_addr_r} ${ramdisk_addr_r}:${ramdisk_size} ${fdt_addr_r}
bootcmd_run=run board_fixups && run nand_fixups && run check_rollback_needed && run set_bootargs && run set_fdt_path && \
            run bootcmd_dtb && run bootcmd_args && run set_bootargs_custom && run set_kernel_load_addr && \
            run bootcmd_load_k && run bootcmd_unzip_k && run bootcmd_load_r && run bootcmd_boot

I don’t understand the sudden change in behaviour. Perhaps I can ask a different question; does anyone at torizon have a sound method to get the M4 cores on a imx8 to run automatically at boot? At the moment that’s all i’m trying to achieve. (I’m guessing i might be able to boot them from SD by modifying the boot script.)