kumquat-buildroot/board/freescale/common/imx/imx8-bootloader-prepare.sh

55 lines
3.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
main ()
{
UBOOT_DTB=$2
if [ ! -e "$UBOOT_DTB" ]; then
echo "ERROR: couldn't find dtb: $UBOOT_DTB"
exit 1
fi
if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y$" ${BR2_CONFIG}; then
cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin
board/freescale/common/imx: use nodtb variant in uboot images for 8M In board/freescale/common/imx/imx8-bootloader-prepare.sh, when invoking mkimage_fit_atf.sh, the U-Boot DTB is passed as parameter, to be included in the FIT image. This parameter usually comes from BR2_ROOTFS_POST_SCRIPT_ARGS config option. The variable BL33=u-boot.bin set in the invocation uses the u-boot image which is including its embedded DTB. This means the U-Boot DTB is included twice. The upstream script mkimage_fit_atf.sh plus its Buildroot patch are meant to use by default the nodtb variant and use the DTB in a separate image. See [1] and [2]. The U-Boot default DTB which will be included in u-boot.bin image is selected with U-Boot CONFIG_DEFAULT_DEVICE_TREE, or DEVICE_TREE variable when invoking "make". If one of those option is not aligned to the BR2_ROOTFS_POST_SCRIPT_ARGS config option, it's possible the two included U-Boot DTBs are different. If such case happens, the built-in DTB is always used, regardless of the other one, selected with BR2_ROOTFS_POST_SCRIPT_ARGS. For example, this case happens for TechNexion Pico Pi i.MX8M and i.MX8MMini. Since the U-Boot defconfig assumes the nodtb version will be used, it does not set the default DTB. The u-boot.bin will include the fsl-imx8mm-evk instead. Including the wrong board DTB breaks the USB and UMS commands (and possibly others). Since those boards does not have SD card slots, a recovery serial download is needed at every update. This patch make sure that only the separate U-Boot DTB will be included in the FIT image by using the nodtb variant. [1] https://source.codeaurora.org/external/imx/imx-mkimage/tree/iMX8M/mkimage_fit_atf.sh?h=rel_imx_4.14.98_2.0.0_ga#n35 [2] https://git.busybox.net/buildroot/tree/package/imx-mkimage/0001-add-support-for-overriding-bl32-and-bl33-not-only-bl.patch?h=2019.11#n42 Signed-off-by: Julien Olivain <juju@cotds.org> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-12-17 21:37:12 +01:00
BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00910000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb
rm -f ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage_imx8 -fit -signed_hdmi ${BINARIES_DIR}/signed_hdmi_imx8m.bin -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x7E1000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y$" ${BR2_CONFIG}; then
cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin
board/freescale/common/imx: use nodtb variant in uboot images for 8M In board/freescale/common/imx/imx8-bootloader-prepare.sh, when invoking mkimage_fit_atf.sh, the U-Boot DTB is passed as parameter, to be included in the FIT image. This parameter usually comes from BR2_ROOTFS_POST_SCRIPT_ARGS config option. The variable BL33=u-boot.bin set in the invocation uses the u-boot image which is including its embedded DTB. This means the U-Boot DTB is included twice. The upstream script mkimage_fit_atf.sh plus its Buildroot patch are meant to use by default the nodtb variant and use the DTB in a separate image. See [1] and [2]. The U-Boot default DTB which will be included in u-boot.bin image is selected with U-Boot CONFIG_DEFAULT_DEVICE_TREE, or DEVICE_TREE variable when invoking "make". If one of those option is not aligned to the BR2_ROOTFS_POST_SCRIPT_ARGS config option, it's possible the two included U-Boot DTBs are different. If such case happens, the built-in DTB is always used, regardless of the other one, selected with BR2_ROOTFS_POST_SCRIPT_ARGS. For example, this case happens for TechNexion Pico Pi i.MX8M and i.MX8MMini. Since the U-Boot defconfig assumes the nodtb version will be used, it does not set the default DTB. The u-boot.bin will include the fsl-imx8mm-evk instead. Including the wrong board DTB breaks the USB and UMS commands (and possibly others). Since those boards does not have SD card slots, a recovery serial download is needed at every update. This patch make sure that only the separate U-Boot DTB will be included in the FIT image by using the nodtb variant. [1] https://source.codeaurora.org/external/imx/imx-mkimage/tree/iMX8M/mkimage_fit_atf.sh?h=rel_imx_4.14.98_2.0.0_ga#n35 [2] https://git.busybox.net/buildroot/tree/package/imx-mkimage/0001-add-support-for-overriding-bl32-and-bl33-not-only-bl.patch?h=2019.11#n42 Signed-off-by: Julien Olivain <juju@cotds.org> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-12-17 21:37:12 +01:00
BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00920000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb
rm -f ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage_imx8 -fit -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x7E1000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN=y$" ${BR2_CONFIG}; then
cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin
BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00960000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb
rm -f ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage_imx8 -v v2 -fit -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x912000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MP=y$" ${BR2_CONFIG}; then
cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin
BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00970000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb
rm -f ${BINARIES_DIR}/u-boot.its
${HOST_DIR}/bin/mkimage_imx8 -v v2 -fit -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x920000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
else
${HOST_DIR}/bin/mkimage_imx8 -commit > ${BINARIES_DIR}/mkimg.commit
cat ${BINARIES_DIR}/u-boot.bin ${BINARIES_DIR}/mkimg.commit > ${BINARIES_DIR}/u-boot-hash.bin
cp ${BINARIES_DIR}/bl31.bin ${BINARIES_DIR}/u-boot-atf.bin
dd if=${BINARIES_DIR}/u-boot-hash.bin of=${BINARIES_DIR}/u-boot-atf.bin bs=1K seek=128
if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8=y$" ${BR2_CONFIG}; then
${HOST_DIR}/bin/mkimage_imx8 -soc QM -rev B0 -append ${BINARIES_DIR}/ahab-container.img -c -scfw ${BINARIES_DIR}/mx8qm-mek-scfw-tcm.bin -ap ${BINARIES_DIR}/u-boot-atf.bin a53 0x80000000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
else
${HOST_DIR}/bin/mkimage_imx8 -soc QX -rev B0 -append ${BINARIES_DIR}/ahab-container.img -c -scfw ${BINARIES_DIR}/mx8qx-mek-scfw-tcm.bin -ap ${BINARIES_DIR}/u-boot-atf.bin a35 0x80000000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
fi
fi
exit $?
}
main $@