Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ setenv saveenv_mmc 'if test -z "${fiovb_rpmb}"; then saveenv; fi;'

# Boot firmware update helpers
setenv rollback_setup 'if test -n "${fiovb_rpmb}"; then fiovb write_pvalue rollback 1; fiovb write_pvalue upgrade_available 0; fiovb write_pvalue bootupgrade_available 0; else setenv rollback 1; setenv upgrade_available 0; setenv bootupgrade_available 0; setenv fiovb.rollback "${rollback}"; setenv fiovb.upgrade_available "${upgrade_available}"; setenv fiovb.bootupgrade_available "${bootupgrade_available}"; fi;'
setenv load_image 'if ext4load ${devtype} ${devnum}:2 ${loadaddr} ${image_path}; then echo "${fio_msg} loaded ${image_path}"; else "${fio_msg} error occured while loading ${image_path}, scheduling rollback after reset ..."; run rollback_setup; run saveenv_mmc; reset; fi;'
setenv load_image 'if ext4load ${devtype} ${devnum}:2 ${loadaddr} ${image_path}; then echo "${fio_msg} loaded ${image_path}"; else "${fio_msg} error occured while loading ${image_path}, scheduling rollback after reset ..."; run rollback_setup; run saveenv_mmc; run do_reboot; fi;'
setenv set_blkcnt 'setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt ${blkcnt} / 0x200'

# Import uEnv.txt
Expand Down Expand Up @@ -62,7 +62,7 @@ if test "${fiovb.is_secondary_boot}" = "0"; then
fiovb read_pvalue bootupgrade_available 4
if test ! $? -eq 0; then fiovb write_pvalue bootupgrade_available 0; fi
fiovb read_pvalue bootfirmware_version 128
if test ! $? -eq 0; then run bootcmd_bootenv; fiovb write_pvalue bootfirmware_version ${bootfirmware_version}; fi
if test ! $? -eq 0; then run bootcmd_bootenv; fiovb write_pvalue bootfirmware_version "${bootfirmware_version}"; fi
fi

# Only update bootcount when upgrade_available is set and boot mode is
Expand All @@ -84,6 +84,14 @@ if test "${fiovb.is_secondary_boot}" = "0"; then

run rollback_setup
run saveenv_mmc

# check if boot firmware was also updated so we need
# to restore it and boot old firmware after reset
# and continue rollback process
if test "${fiovb.bootupgrade_available}" = "1"; then
run restore_boot0
run do_reboot
fi
else
if test "${fiovb.bootupgrade_available}" = "1"; then
run backup_boot0
Expand All @@ -98,21 +106,27 @@ if test "${fiovb.is_secondary_boot}" = "0"; then
setenv start_blk "${bootloader2_s}"
run load_image
run update_primary_image2
run bootcmd_bootenv
if test -n "${fiovb_rpmb}"; then
fiovb write_pvalue bootupgrade_available 0;
fiovb write_pvalue bootfirmware_version ${bootfirmware_version};
else
setenv bootupgrade_available 0;
setenv bootfirmware_version ${bootfirmware_version};
fi

run saveenv_mmc

echo "${fio_msg} doing reset to boot newly updated images..."
reset
run do_reboot
fi;
fi
fi
# That means that ak-lite confirmed succesfull boot, so we can now reset
# fiovb.bootupgrade_available variable
if test "${fiovb.bootupgrade_available}" = "1" && test "${fiovb.upgrade_available}" = "0"; then
echo "${fio_msg} finishing boot firmware update..."
run bootcmd_bootenv
if test -n "${fiovb_rpmb}"; then
fiovb write_pvalue bootupgrade_available 0;
fiovb write_pvalue bootfirmware_version "${bootfirmware_version}";
else
setenv bootupgrade_available 0;
setenv bootfirmware_version "${bootfirmware_version}";
fi
run saveenv_mmc
fi

else
# Save fiovb.is_secondary_boot state for allowing userspace
# to easily identify the boot mode via environment
Expand All @@ -124,13 +138,19 @@ fi
setenv bootcmd_load_f 'ext4load ${devtype} ${devnum}:${rootpart} ${fit_addr} "/boot"${kernel_image}'
setenv bootcmd_tee_ovy 'if test -n ${optee_ovl_addr}; then imxtract ${fit_addr}#conf@@FIT_NODE_SEPARATOR@@${fdt_file_final} fdt@@FIT_NODE_SEPARATOR@@${fdt_file_final} ${fdt_addr}; fdt addr ${fdt_addr}; fdt resize 0x1000; fdt apply ${optee_ovl_addr}; fi'
setenv bootcmd_run 'if test -n ${optee_ovl_addr}; then bootm ${fit_addr}#conf@@FIT_NODE_SEPARATOR@@${fdt_file_final} ${fit_addr}#conf@@FIT_NODE_SEPARATOR@@${fdt_file_final} ${fdt_addr}; else echo "${fio_msg} loading ${fdt_file_final}"; bootm ${fit_addr}#conf@@FIT_NODE_SEPARATOR@@${fdt_file_final}; fi'
setenv bootcmd_rollback 'if test -n "${kernel_image2}" && test "${fiovb.rollback}" = "1"; then setenv kernel_image ${kernel_image2}; setenv bootargs ${bootargs2}; fi;'
setenv bootcmd_rollback 'if test -n "${kernel_image2}" && test "${fiovb.rollback}" = "1"; then setenv kernel_image "${kernel_image2}"; setenv bootargs "${bootargs2}"; fi;'

# Handle the case if we booted secondary boot image set,
# which means that the primary set is broken
# which means that the primary set is broken (for example, boot0 is corrupted)
if test "${fiovb.is_secondary_boot}" = "1"; then
# and it became corrupted after update, which means
# that we should rollback also
if test "${fiovb.bootupgrade_available}" = "1"; then
run rollback_setup
run saveenv_mmc
fi
run restore_boot0
reset
run do_reboot
fi

run bootcmd_rollback
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ if test -z "${update_primary_image}"; then setenv update_primary_image "run upda
if test -z "${update_secondary_image}"; then setenv update_secondary_image "run update_image"; fi;
if test -z "${update_primary_image2}"; then setenv update_primary_image2 "run update_image"; fi;
if test -z "${update_secondary_image2}"; then setenv update_secondary_image2 "run update_image"; fi;

if test -z "${do_reboot}"; then setenv do_reboot "reset"; fi;
4 changes: 2 additions & 2 deletions meta-lmp-bsp/recipes-bsp/u-boot/u-boot-fio/imx8qm-mek/lmp.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ CONFIG_SPL_FIT_SIGNATURE=y
CONFIG_SPL_FIT_SIGNATURE_STRICT=y
CONFIG_FIT_VERBOSE=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_PSCI_BOARD_REBOOT=y
# CONFIG_SPL_FIT_IMAGE_TINY is not set
# CONFIG_SPL_SATA_SUPPORT is not set
# CONFIG_SPL_LOAD_IMX_CONTAINER is not set
Expand All @@ -27,8 +28,7 @@ CONFIG_ENV_SIZE=0x4000
CONFIG_CMD_IMPORTENV=y
CONFIG_CMD_EDITENV=y
CONFIG_CMD_SAVEENV=y
CONFIG_BOOTCOUNT_LIMIT=y
CONFIG_BOOTCOUNT_ENV=y
CONFIG_BOOTDELAY=-2
# CONFIG_DISTRO_DEFAULTS is not set
CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,7 @@ setenv restore_boot0 'echo "${fio_msg} restore primary boot image set ..."; run
setenv update_primary_image "run update_image_boot0"
setenv update_primary_image2 "run update_image_boot0"

setenv do_reboot "reboot"

@@INCLUDE_COMMON_IMX@@
@@INCLUDE_COMMON_ALTERNATIVE@@