From 75e2478ae146814dbe6fb222a6909ec3b3088482 Mon Sep 17 00:00:00 2001 From: Mike Engel Date: Wed, 19 Jan 2022 11:59:56 +0100 Subject: [PATCH] u-boot: add CCMP15 support to build u-boot This commit adds u-boot build support for the CCMP15 platform. The installation scripts are copies from the CC6UL platform. Signed-off-by: Mike Engel https://onedigi.atlassian.net/browse/DEL-7797 --- .../recipes-bsp/u-boot/digi-u-boot.inc | 1 - .../u-boot/u-boot-dey/ccmp15-dvk/boot.txt | 81 +++++ .../u-boot-dey/ccmp15/install_linux_fw_sd.txt | 259 +++++++++++++++ .../ccmp15/install_linux_fw_usb.txt | 260 +++++++++++++++ .../u-boot-dey/ccmp15/install_linux_fw_uuu.sh | 307 ++++++++++++++++++ .../recipes-bsp/u-boot/u-boot-dey_2021.04.bb | 2 +- 6 files changed, 908 insertions(+), 2 deletions(-) create mode 100644 meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15-dvk/boot.txt create mode 100644 meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_sd.txt create mode 100644 meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_usb.txt create mode 100644 meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_uuu.sh diff --git a/meta-digi-arm/recipes-bsp/u-boot/digi-u-boot.inc b/meta-digi-arm/recipes-bsp/u-boot/digi-u-boot.inc index 3d2c7cc8f..c9f0b2851 100644 --- a/meta-digi-arm/recipes-bsp/u-boot/digi-u-boot.inc +++ b/meta-digi-arm/recipes-bsp/u-boot/digi-u-boot.inc @@ -36,7 +36,6 @@ SRC_URI_append = " \ BOOTLOADER_IMAGE_RECIPE ?= "u-boot" LOCALVERSION ?= "" -inherit fsl-u-boot-localversion EXTRA_OEMAKE_append = " KCFLAGS=-fgnu89-inline" diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15-dvk/boot.txt b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15-dvk/boot.txt new file mode 100644 index 000000000..243cc9d4e --- /dev/null +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15-dvk/boot.txt @@ -0,0 +1,81 @@ +# +# U-Boot bootscript for NAND images created by Yocto. +# + +# As the first step in the boot script, check if we are using DualBoot and +# if an upgrade is available. This requires the script to change some variables +# and save them, while the rest of the script changes variables only temporarily +# without saving them. + +# Dual boot update verification +if test "${dualboot}" = "yes"; then + if test "${upgrade_available}" = "1"; then + echo "Update detected; Booting new system in ${active_system} (try ${bootcount})" + else + if test "${active_system}" = "linux_a"; then + echo "Booting from system A" + setenv mtdbootpart ${active_system} + setenv mtdrootfspart ${rootfsvol_a} + setenv rootfsvol ${rootfsvol_a} + else + echo "Booting from system B" + setenv mtdbootpart ${active_system} + setenv mtdrootfspart ${rootfsvol_b} + setenv rootfsvol ${rootfsvol_b} + fi + fi +else + if test "${mtdbootpart}" = "recovery"; then + setenv boot_initrd true + setenv initrd_file uramdisk-recovery.img + else + true + fi +fi + + +# Back up environment variables +setenv ORIG_extra_bootargs ${extra_bootargs} + +# +# Set device tree filename depending on the board ID (if defined) +# +if test -n "${board_id}"; then + setenv fdt_file imx6ul-ccimx6ulsbc-id${board_id}.dtb +else + # + # Set device tree filename depending on the hardware variant + # + if test "${module_variant}" = "0x02"; then + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + elif test "${module_variant}" = "0x03"; then + setenv fdt_file imx6ul-ccimx6ulsbc.dtb + elif test "${module_variant}" = "0x04"; then + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + elif test "${module_variant}" = "0x05"; then + setenv fdt_file imx6ul-ccimx6ulsbc.dtb + elif test "${module_variant}" = "0x06"; then + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + elif test "${module_variant}" = "0x07"; then + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + elif test "${module_variant}" = "0x08"; then + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + elif test "${module_variant}" = "0x09"; then + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + elif test "${module_variant}" = "0x0a"; then + setenv fdt_file imx6ul-ccimx6ulsbc.dtb + else + setenv fdt_file imx6ul-ccimx6ulsbc-wb.dtb + fi +fi + +setenv extra_bootargs fbcon=logo-pos:center ${extra_bootargs} +dboot linux nand ${mtdbootpart} + + + +# We only get here in case of an error on the dboot command. + +# Undo changes to environment variables +setenv extra_bootargs ${ORIG_extra_bootargs} +setenv ORIG_extra_bootargs diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_sd.txt b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_sd.txt new file mode 100644 index 000000000..6483ab906 --- /dev/null +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_sd.txt @@ -0,0 +1,259 @@ +# +# U-Boot script for installing Linux images created by Yocto from the micro SD +# card into the NAND +# + +# Reset temp variables +install_abort=0 +BASEFILENAME=0 + +# Determine U-Boot file to program basing on module variant +if test -n "${module_variant}"; then + if test "${module_variant}" = "0x02" || test "${module_variant}" = "0x03" || test "${module_variant}" = "0x06" || test "${module_variant}" = "0x0a"; then + setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##.imx; + elif test "${module_variant}" = "0x04" || test "${module_variant}" = "0x05" || test "${module_variant}" = "0x07"; then + setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##1GB.imx; + elif test "${module_variant}" = "0x08" || test "${module_variant}" = "0x09"; then + setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##512MB.imx + fi +fi + +# Use 'test -n ...' because 'test -z ...' does not work well on old versions of +# u-boot when the checked value is empty. +if test -n "${INSTALL_UBOOT_FILENAME}"; then + true; +else + echo ""; + echo "[ERROR] Cannot determine U-Boot file for this module!"; + echo ""; + echo "1. Set variable 'INSTALL_UBOOT_FILENAME' depending on your ConnectCore 6UL variant:"; + echo " - For a SOM with 1GB DDR3, run:"; + echo " => setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##1GB.imx"; + echo " - For a SOM with 512MB DDR3, run:"; + echo " => setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##512MB.imx"; + echo " - For a SOM with 256MB DDR3, run:"; + echo " => setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##.imx"; + echo ""; + echo "2. Run the install script again."; + echo ""; + echo "Aborted"; + echo ""; + exit; +fi; + +setenv INSTALL_MMCDEV 0 + +if test -z "${image-name}"; then + setenv image-name ##DEFAULT_IMAGE_NAME## +fi +GRAPHICAL_IMAGES="##GRAPHICAL_IMAGES##" +for g in ${GRAPHICAL_IMAGES}; do + if test "${image-name}" = "${g}"; then + BASEFILENAME="${image-name}-##GRAPHICAL_BACKEND##" + fi +done +if test "${BASEFILENAME}" = "0"; then + BASEFILENAME="${image-name}" +fi +setenv INSTALL_LINUX_FILENAME ${BASEFILENAME}-##MACHINE##.boot.ubifs +setenv INSTALL_RECOVERY_FILENAME ${BASEFILENAME}-##MACHINE##.recovery.ubifs +setenv INSTALL_ROOTFS_FILENAME ${BASEFILENAME}-##MACHINE##.ubifs + +# Check for presence of firmware files on the SD card +for install_f in ${INSTALL_UBOOT_FILENAME} ${INSTALL_LINUX_FILENAME} ${INSTALL_RECOVERY_FILENAME} ${INSTALL_ROOTFS_FILENAME}; do + if test ! -e mmc ${INSTALL_MMCDEV} ${install_f}; then + echo "ERROR: Could not find file ${install_f}"; + install_abort=1; + fi; +done +if test "${install_abort}" = "1"; then + echo "Aborted."; + exit; +fi + +echo "############################################################" +echo "# Linux firmware install from micro SD #" +echo "############################################################" +echo "" +echo " This process will erase your NAND and will install the following files" +echo " on the partitions of the NAND." +echo "" +echo " PARTITION FILENAME" +echo " --------- --------" +echo " bootloader ${INSTALL_UBOOT_FILENAME}" +if test \"\$\{dualboot\}\" = yes; then + echo " linux_a ${INSTALL_LINUX_FILENAME}" + echo " linux_b ${INSTALL_LINUX_FILENAME}" + echo " rootfs_a ${INSTALL_ROOTFS_FILENAME}" + echo " rootfs_b ${INSTALL_ROOTFS_FILENAME}" +else + echo " linux ${INSTALL_LINUX_FILENAME}" + echo " recovery ${INSTALL_RECOVERY_FILENAME}" + echo " rootfs ${INSTALL_ROOTFS_FILENAME}" +fi +echo "" +echo " Press CTRL+C now if you wish to abort or wait 10 seconds" +echo " to continue." + +sleep 10 +if test $? -eq 1; then + echo "Aborted by user."; + exit; +fi + +# Skip user confirmation for U-Boot update +setenv forced_update 1 + +# Set bootdelay to zero so that firmware update is run immediately after +# the first reset. +setenv bootdelay 0 + +# Update U-Boot +echo "" +echo "" +echo ">> Installing U-Boot boot loader image ${INSTALL_UBOOT_FILENAME} (target will reset)" +echo "" +echo "" +update uboot mmc ${INSTALL_MMCDEV} ${INSTALL_UBOOT_FILENAME} +if test $? -eq 1; then + # Use old-style update with source file system argument + update uboot mmc ${INSTALL_MMCDEV} fat ${INSTALL_UBOOT_FILENAME} + if test $? -eq 1; then + echo "[ERROR] Failed to update U-Boot boot loader!"; + echo ""; + echo "Aborted."; + exit; + fi +fi + +# Set 'bootcmd' to the second part of the script that will +# - Reset environment to defaults +# - Restore 'singlemtdsys' and 'dualboot' if previously set +# - Run 'partition_nand_linux' script to re-partition the NAND if needed +# - Save the environment +# - If Dual Boot +# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b +# - If Normal Boot: +# - Update the system partitions: linux, recovery, rootfs +# - Erase the 'update' partition +# - Configure recovery to wipe 'update' partition +# - Run 'recovery' and let the system boot after +setenv bootcmd " + env default -a; + setenv singlemtdsys ${singlemtdsys}; + setenv dualboot ${dualboot}; + run partition_nand_linux; + saveenv; + if test \"\$\{singlemtdsys\}\" = yes; then + run ubivolscript; + else + force_erase="-e"; + fi; + if test \"\$\{dualboot\}\" = yes; then + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux_a\"; + echo \"\"; + echo \"\"; + update linux_a mmc ${INSTALL_MMCDEV} ${INSTALL_LINUX_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update linux_a!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux_b\"; + echo \"\"; + echo \"\"; + update linux_b mmc ${INSTALL_MMCDEV} ${INSTALL_LINUX_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update linux_b!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_a\"; + echo \"\"; + echo \"\"; + update rootfs_a mmc ${INSTALL_MMCDEV} ${INSTALL_ROOTFS_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update rootfs_a partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_b\"; + echo \"\"; + echo \"\"; + update rootfs_b mmc ${INSTALL_MMCDEV} ${INSTALL_ROOTFS_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update rootfs_b partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + else + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux\"; + echo \"\"; + echo \"\"; + update linux mmc ${INSTALL_MMCDEV} ${INSTALL_LINUX_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update linux!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_RECOVERY_FILENAME} on recovery\"; + echo \"\"; + echo \"\"; + update recovery mmc ${INSTALL_MMCDEV} ${INSTALL_RECOVERY_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update recovery partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs\"; + echo \"\"; + echo \"\"; + update rootfs mmc ${INSTALL_MMCDEV} ${INSTALL_ROOTFS_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update rootfs partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + if test \"\$\{singlemtdsys\}\" != yes; then + nand erase.part update; + fi; + setenv boot_recovery yes; + setenv recovery_command wipe_update; + fi; + saveenv; + echo \"\"; + echo \"\"; + echo \">> Firmware installation complete.\"; + if test \"\$\{dualboot\}\" != yes; then + echo \"Rebooting into recovery mode for final deployment.\"; + fi; + echo \"\"; + echo \"\"; + sleep 1; + reset; +" + +saveenv +reset diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_usb.txt b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_usb.txt new file mode 100644 index 000000000..1fedd6a49 --- /dev/null +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_usb.txt @@ -0,0 +1,260 @@ +# +# U-Boot script for installing Linux images created by Yocto from a USB stick +# into the NAND +# + +# Reset temp variables +install_abort=0 +BASEFILENAME=0 + +# Determine U-Boot file to program basing on module variant +if test -n "${module_variant}"; then + if test "${module_variant}" = "0x02" || test "${module_variant}" = "0x03" || test "${module_variant}" = "0x06" || test "${module_variant}" = "0x0a"; then + setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##.imx; + elif test "${module_variant}" = "0x04" || test "${module_variant}" = "0x05" || test "${module_variant}" = "0x07"; then + setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##1GB.imx; + elif test "${module_variant}" = "0x08" || test "${module_variant}" = "0x09"; then + setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##512MB.imx + fi +fi + +# Use 'test -n ...' because 'test -z ...' does not work well on old versions of +# u-boot when the checked value is empty. +if test -n "${INSTALL_UBOOT_FILENAME}"; then + true; +else + echo ""; + echo "[ERROR] Cannot determine U-Boot file for this module!"; + echo ""; + echo "1. Set variable 'INSTALL_UBOOT_FILENAME' depending on your ConnectCore 6UL variant:"; + echo " - For a SOM with 1GB DDR3, run:"; + echo " => setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##1GB.imx"; + echo " - For a SOM with 512MB DDR3, run:"; + echo " => setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##512MB.imx"; + echo " - For a SOM with 256MB DDR3, run:"; + echo " => setenv INSTALL_UBOOT_FILENAME u-boot-##MACHINE##.imx"; + echo ""; + echo "2. Run the install script again."; + echo ""; + echo "Aborted"; + echo ""; + exit; +fi; + +setenv INSTALL_USBDEV 0 + +if test -z "${image-name}"; then + setenv image-name ##DEFAULT_IMAGE_NAME## +fi +GRAPHICAL_IMAGES="##GRAPHICAL_IMAGES##" +for g in ${GRAPHICAL_IMAGES}; do + if test "${image-name}" = "${g}"; then + BASEFILENAME="${image-name}-##GRAPHICAL_BACKEND##" + fi +done +if test "${BASEFILENAME}" = "0"; then + BASEFILENAME="${image-name}" +fi +setenv INSTALL_LINUX_FILENAME ${BASEFILENAME}-##MACHINE##.boot.ubifs +setenv INSTALL_RECOVERY_FILENAME ${BASEFILENAME}-##MACHINE##.recovery.ubifs +setenv INSTALL_ROOTFS_FILENAME ${BASEFILENAME}-##MACHINE##.ubifs + +# Check for presence of firmware files on the USB +for install_f in ${INSTALL_UBOOT_FILENAME} ${INSTALL_LINUX_FILENAME} ${INSTALL_RECOVERY_FILENAME} ${INSTALL_ROOTFS_FILENAME}; do + if test ! -e usb ${INSTALL_USBDEV} ${install_f}; then + echo "ERROR: Could not find file ${install_f}"; + install_abort=1; + fi; +done +if test "${install_abort}" = "1"; then + echo "Aborted."; + exit; +fi + +echo "############################################################" +echo "# Linux firmware install from USB #" +echo "############################################################" +echo "" +echo " This process will erase your NAND and will install the following files" +echo " on the partitions of the NAND." +echo "" +echo " PARTITION FILENAME" +echo " --------- --------" +echo " bootloader ${INSTALL_UBOOT_FILENAME}" +if test \"\$\{dualboot\}\" = yes; then + echo " linux_a ${INSTALL_LINUX_FILENAME}" + echo " linux_b ${INSTALL_LINUX_FILENAME}" + echo " rootfs_a ${INSTALL_ROOTFS_FILENAME}" + echo " rootfs_b ${INSTALL_ROOTFS_FILENAME}" +else + echo " linux ${INSTALL_LINUX_FILENAME}" + echo " recovery ${INSTALL_RECOVERY_FILENAME}" + echo " rootfs ${INSTALL_ROOTFS_FILENAME}" +fi +echo "" +echo " Press CTRL+C now if you wish to abort or wait 10 seconds" +echo " to continue." + +sleep 10 +if test $? -eq 1; then + echo "Aborted by user."; + exit; +fi + +# Skip user confirmation for U-Boot update +setenv forced_update 1 + +# Set bootdelay to zero so that firmware update is run immediately after +# the first reset. +setenv bootdelay 0 + +# Update U-Boot +echo "" +echo "" +echo ">> Installing U-Boot boot loader image ${INSTALL_UBOOT_FILENAME} (target will reset)" +echo "" +echo "" +update uboot usb ${INSTALL_USBDEV} ${INSTALL_UBOOT_FILENAME} +if test $? -eq 1; then + # Use old-style update with source file system argument + update uboot usb ${INSTALL_USBDEV} fat ${INSTALL_UBOOT_FILENAME} + if test $? -eq 1; then + echo "[ERROR] Failed to update U-Boot boot loader!"; + echo ""; + echo "Aborted."; + exit; + fi +fi + +# Set 'bootcmd' to the second part of the script that will +# - Reset environment to defaults +# - Restore 'singlemtdsys' and 'dualboot' if previously set +# - Run 'partition_nand_linux' script to re-partition the NAND if needed +# - Save the environment +# - If Dual Boot +# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b +# - If Normal Boot: +# - Update the system partitions: linux, recovery, rootfs +# - Erase the 'update' partition +# - Configure recovery to wipe 'update' partition +# - Run 'recovery' and let the system boot after +setenv bootcmd " + env default -a; + setenv singlemtdsys ${singlemtdsys}; + setenv dualboot ${dualboot}; + run partition_nand_linux; + saveenv; + if test \"\$\{singlemtdsys\}\" = yes; then + run ubivolscript; + else + force_erase="-e"; + fi; + usb start; + if test \"\$\{dualboot\}\" = yes; then + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux_a\"; + echo \"\"; + echo \"\"; + update linux_a usb ${INSTALL_USBDEV} ${INSTALL_LINUX_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update linux_a!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux_b\"; + echo \"\"; + echo \"\"; + update linux_b usb ${INSTALL_USBDEV} ${INSTALL_LINUX_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update linux_b!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_a\"; + echo \"\"; + echo \"\"; + update rootfs_a usb ${INSTALL_USBDEV} ${INSTALL_ROOTFS_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update rootfs_a partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_b\"; + echo \"\"; + echo \"\"; + update rootfs_b usb ${INSTALL_USBDEV} ${INSTALL_ROOTFS_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update rootfs_b partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + else + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux\"; + echo \"\"; + echo \"\"; + update linux usb ${INSTALL_USBDEV} ${INSTALL_LINUX_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update linux!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_RECOVERY_FILENAME} on recovery\"; + echo \"\"; + echo \"\"; + update recovery usb ${INSTALL_USBDEV} ${INSTALL_RECOVERY_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update recovery partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + echo \"\"; + echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs\"; + echo \"\"; + echo \"\"; + update rootfs usb ${INSTALL_USBDEV} ${INSTALL_ROOTFS_FILENAME} ${force_erase}; + if test \$? -eq 1; then + echo \"[ERROR] Failed to update rootfs partition!\"; + echo \"\"; + echo \"Aborted.\"; + exit; + fi; + echo \"\"; + if test \"\$\{singlemtdsys\}\" != yes; then + nand erase.part update; + fi; + setenv boot_recovery yes; + setenv recovery_command wipe_update; + fi; + saveenv; + echo \"\"; + echo \"\"; + echo \">> Firmware installation complete.\"; + if test \"\$\{dualboot\}\" != yes; then + echo \"Rebooting into recovery mode for final deployment.\"; + fi; + echo \"\"; + echo \"\"; + sleep 1; + reset; +" + +saveenv +reset diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_uuu.sh b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_uuu.sh new file mode 100644 index 000000000..fe346999c --- /dev/null +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp15/install_linux_fw_uuu.sh @@ -0,0 +1,307 @@ +#!/bin/sh +#=============================================================================== +# +# Copyright (C) 2020-2021 by Digi International Inc. +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 as published by +# the Free Software Foundation. +# +# +# Description: +# Script to flash Yocto build artifacts over USB to the target. +#=============================================================================== +# set -x + +# +# U-Boot script for installing Linux images created by Yocto +# + +# Exit on any error +set -e + +# Parse uuu cmd output +getenv() +{ + uuu -v fb: ucmd printenv "${1}" | sed -ne "s,^${1}=,,g;T;p" +} + +show_usage() +{ + echo "Usage: $0 [options]" + echo "" + echo " Options:" + echo " -h Show this help." + echo " -i Image name that prefixes the image filenames, such as 'dey-image-qt', " + echo " 'dey-image-webkit', 'core-image-base'..." + echo " Defaults to '##DEFAULT_IMAGE_NAME##' if not provided." + echo " -n No wait. Skips 10 seconds delay to stop script." + echo " -u U-Boot filename." + echo " Auto-determined by variant if not provided." + exit 2 +} + +# Update a partition +# Params: +# 1. partition +# 2. file +# 3. timeout (in ms) +# Description: +# - downloads image to RAM +# - runs 'update' command from RAM +part_update() +{ + echo "\033[36m" + echo "=====================================================================================" + echo "Updating '${1}' partition with file: ${2}" + echo "=====================================================================================" + echo "\033[0m" + + # When in Multi-MTD mode, pass -e to update command to force the erase + # of the MTD partition before programming. This is usually done by + # 'update' command except when a UBI volume is already found. + # On the install script, the MTD partition table may have changed, so + # we'd better clean the partition. + if [ "${SINGLEMTDSYS}" != true ]; then + ERASE="-e" + fi + uuu fb: download -f "${2}" + uuu "fb[-t ${3}]:" ucmd update "${1}" ram \${fastboot_buffer} \${fastboot_bytes} ${ERASE} +} + +clear +echo "############################################################" +echo "# Linux firmware install through USB OTG #" +echo "############################################################" + +# Command line admits the following parameters: +# -u +# -i +while getopts 'hi:nu:' c +do + case $c in + h) show_usage ;; + i) IMAGE_NAME=${OPTARG} ;; + n) NOWAIT=true ;; + u) INSTALL_UBOOT_FILENAME=${OPTARG} ;; + esac +done + +# Enable the redirect support to get u-boot variables values +uuu fb: ucmd setenv stdout serial,fastboot + +# Check if dualboot variable is active +dualboot=$(getenv "dualboot") +if [ "${dualboot}" = "yes" ]; then + DUALBOOT=true; +fi + +# Check if singlemtdsys variable is active +singlemtdsys=$(getenv "singlemtdsys") +if [ "${singlemtdsys}" = "yes" ]; then + SINGLEMTDSYS=true; +fi + +echo "" +echo "Determining image files to use..." + +# Determine U-Boot filename if not provided +if [ -z "${INSTALL_UBOOT_FILENAME}" ]; then + module_variant=$(getenv "module_variant") + # Determine U-Boot file to program basing on SOM's variant + if [ -n "$module_variant" ] || [ "$module_variant" = "0x00" ]; then + if [ "$module_variant" = "0x08" ] || \ + [ "$module_variant" = "0x09" ]; then + INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##512MB.imx" + elif [ "$module_variant" = "0x04" ] || \ + [ "$module_variant" = "0x05" ] || \ + [ "$module_variant" = "0x07" ]; then + INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##1GB.imx" + else + INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##.imx" + fi + fi + + # U-Boot when the checked value is empty. + if [ -n "${INSTALL_UBOOT_FILENAME}" ]; then + true + else + # remove redirect + uuu fb: ucmd setenv stdout serial + + echo "" + echo "[ERROR] Cannot determine U-Boot file for this module!" + echo "" + echo "1. Add U-boot file name, depending on your ConnectCore 6UL variant, to script command line:" + echo " - For a SOM with 1GB DDR3, run:" + echo " => ./install_linux_fw_uuu.sh -u u-boot-##MACHINE##1GB.imx" + echo " - For a SOM with 512MB DDR3, run:" + echo " => ./install_linux_fw_uuu.sh -u u-boot-##MACHINE##512MB.imx" + echo " - For a SOM with 256MB DDR3, run:" + echo " => ./install_linux_fw_uuu.sh -u u-boot-##MACHINE##.imx" + echo "" + echo "2. Run the install script again." + echo "" + echo "Aborted" + echo "" + exit + fi +fi + +# remove redirect +uuu fb: ucmd setenv stdout serial + +# Determine linux, recovery, and rootfs image filenames to update +if [ -z "${IMAGE_NAME}" ]; then + IMAGE_NAME="##DEFAULT_IMAGE_NAME##" +fi +GRAPHICAL_IMAGES="##GRAPHICAL_IMAGES##" +for g in ${GRAPHICAL_IMAGES}; do + if [ "${IMAGE_NAME}" = "${g}" ]; then + BASEFILENAME="${IMAGE_NAME}-##GRAPHICAL_BACKEND##" + fi +done +if [ -z "${BASEFILENAME}" ]; then + BASEFILENAME="${IMAGE_NAME}" +fi +INSTALL_LINUX_FILENAME="${BASEFILENAME}-##MACHINE##.boot.ubifs" +INSTALL_RECOVERY_FILENAME="${BASEFILENAME}-##MACHINE##.recovery.ubifs" +INSTALL_ROOTFS_FILENAME="${BASEFILENAME}-##MACHINE##.ubifs" + +# Verify existance of files before starting the update +FILES="${INSTALL_UBOOT_FILENAME} ${INSTALL_LINUX_FILENAME} ${INSTALL_RECOVERY_FILENAME} ${INSTALL_ROOTFS_FILENAME}" +for f in ${FILES}; do + if [ ! -f ${f} ]; then + echo "\033[31m[ERROR] Could not find file '${f}'\033[0m" + ABORT=true + fi +done; + +[ "${ABORT}" = true ] && exit 1 + +# parts names +LINUX_NAME="linux" +RECOVERY_NAME="recovery" +ROOTFS_NAME="rootfs" +# Print warning about storage media being deleted +if [ "${NOWAIT}" != true ]; then + WAIT=10 + printf "\n" + printf " ====================\n" + printf " = IMPORTANT! =\n" + printf " ====================\n" + printf " This process will erase your NAND and will install the following files\n" + printf " on the partitions of the NAND.\n" + printf "\n" + printf " PARTITION\tFILENAME\n" + printf " ---------\t--------\n" + printf " bootloader\t${INSTALL_UBOOT_FILENAME}\n" + if [ "${DUALBOOT}" = true ]; then + printf " ${LINUX_NAME}_a\t${INSTALL_LINUX_FILENAME}\n" + printf " ${LINUX_NAME}_b\t${INSTALL_LINUX_FILENAME}\n" + printf " ${ROOTFS_NAME}_a\t${INSTALL_ROOTFS_FILENAME}\n" + printf " ${ROOTFS_NAME}_b\t${INSTALL_ROOTFS_FILENAME}\n" + else + printf " ${LINUX_NAME}\t${INSTALL_LINUX_FILENAME}\n" + printf " ${RECOVERY_NAME}\t${INSTALL_RECOVERY_FILENAME}\n" + printf " ${ROOTFS_NAME}\t${INSTALL_ROOTFS_FILENAME}\n" + fi + printf "\n" + printf " Press CTRL+C now if you wish to abort.\n" + printf "\n" + while [ ${WAIT} -gt 0 ]; do + printf "\r Update process starts in %d " ${WAIT} + sleep 1 + WAIT=$(( ${WAIT} - 1 )) + done + printf "\r \n" + printf " Starting update process\n" +fi + +# Set fastboot buffer address to $loadaddr, just in case +uuu fb: ucmd setenv fastboot_buffer \${loadaddr} + +# Skip user confirmation for U-Boot update +uuu fb: ucmd setenv forced_update 1 + +# Update U-Boot +part_update "uboot" "${INSTALL_UBOOT_FILENAME}" 5000 + +# Set 'bootcmd' for the second part of the script that will +# - Reset environment to defaults +# - Save the environment +# - Update the 'linux' partition +# - Update the 'recovery' partition +# - Update the 'rootfs' partition +# - Erase the 'update' partition +uuu fb: ucmd setenv bootcmd " + env default -a; + setenv dualboot \${dualboot}; + setenv singlemtdsys \${singlemtdsys}; + saveenv; + echo \"\"; + echo \"\"; + echo \">> Installing Linux firmware\"; + echo \"\"; + echo \"\"; + fastboot 0; +" + +uuu fb: ucmd saveenv +uuu fb: acmd reset + +# Wait for the target to reset +sleep 3 + +# Set fastboot buffer address to $loadaddr +uuu fb: ucmd setenv fastboot_buffer \${loadaddr} + +# Create partition table +uuu "fb[-t 10000]:" ucmd run partition_nand_linux + +if [ "${SINGLEMTDSYS}" = true ]; then + uuu "fb[-t 30000]:" ucmd nand erase.part system + uuu "fb[-t 10000]:" ucmd run ubivolscript +fi + +if [ "${DUALBOOT}" = true ]; then + # Update Linux A + part_update "${LINUX_NAME}_a" "${INSTALL_LINUX_FILENAME}" 15000 + # Update Linux B + part_update "${LINUX_NAME}_b" "${INSTALL_LINUX_FILENAME}" 15000 + # Update Rootfs A + part_update "${ROOTFS_NAME}_a" "${INSTALL_ROOTFS_FILENAME}" 90000 + # Update Rootfs B + part_update "${ROOTFS_NAME}_b" "${INSTALL_ROOTFS_FILENAME}" 90000 +else + # Update Linux + part_update "${LINUX_NAME}" "${INSTALL_LINUX_FILENAME}" 15000 + # Update Recovery + part_update "${RECOVERY_NAME}" "${INSTALL_RECOVERY_FILENAME}" 15000 + # Update Rootfs + part_update "${ROOTFS_NAME}" "${INSTALL_ROOTFS_FILENAME}" 90000 +fi + +if [ "${SINGLEMTDSYS}" != true ] && [ "${DUALBOOT}" != true ]; then + # Erase the 'Update' partition + uuu "fb[-t 20000]:" ucmd nand erase.part update +fi + +if [ "${DUALBOOT}" != true ]; then + # Configure u-boot to boot into recovery mode + uuu fb: ucmd setenv boot_recovery yes + uuu fb: ucmd setenv recovery_command wipe_update +fi +uuu fb: ucmd saveenv + +# Reset the target +uuu fb: acmd reset + +echo "\033[32m" +echo "=============================================================" +echo "Done! Wait for the target to complete first boot process." +echo "=============================================================" +echo "\033[0m" + +exit diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2021.04.bb b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2021.04.bb index a7125775d..06da6aae5 100644 --- a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2021.04.bb +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2021.04.bb @@ -8,4 +8,4 @@ DEPENDS += "flex-native bison-native" SRCBRANCH = "v2021.04/master" SRCREV = "${AUTOREV}" -COMPATIBLE_MACHINE = "(ccimx8mp)" +COMPATIBLE_MACHINE = "(ccimx8mp|ccmp15)"