swu: ccmp2: add support for updating U-boot/TFA through SWU packages

Refactored some functions to make them more generic, allowing for
greater parameter reusability.

https://onedigi.atlassian.net/browse/DEL-9526

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
This commit is contained in:
Francisco Gil 2025-03-11 11:35:50 +01:00
parent 161f6fbe9a
commit a28079cc7e
2 changed files with 34 additions and 13 deletions

View File

@ -116,9 +116,11 @@ SWUPDATE_UBOOT_EXT_TFA ?= ".stm32"
SWUPDATE_UBOOT_NAME ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccimx6sbc ?= "${SWUPDATE_UBOOT_PREFIX}-ccimx6qsbc${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-nand${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee-emmc${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME_TFA ?= ""
SWUPDATE_UBOOT_NAME_TFA:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-nand${SWUPDATE_UBOOT_EXT_TFA}${TFA_SIGN_SUFFIX}"
SWUPDATE_UBOOT_NAME_TFA:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-optee-emmc${SWUPDATE_UBOOT_EXT_TFA}"
SWUPDATE_UBOOT_OFFSET ?= "${BOOTLOADER_SEEK_BOOTPART}"

View File

@ -17,7 +17,9 @@ UBOOT_NAME="$1"
UBOOT_ENC="$2"
UBOOT_SEEK_KB="$3"
UBOOT_REDUNDANT="$4"
UBOOT_TFA_NAME="$5"
UBOOT_FILE="/tmp/${UBOOT_NAME}"
UBOOT_TFA_FILE="/tmp/${UBOOT_TFA_NAME}"
UBOOT_BLOCK_MAIN="mmcblk0boot0"
UBOOT_BLOCK_REDUNDANT="mmcblk0boot1"
UBOOT_MMC_DEV_MAIN="/dev/${UBOOT_BLOCK_MAIN}"
@ -235,22 +237,28 @@ append_dek ()
UBOOT_FILE="${UBOOT_ENCRYPTED_DEK}"
}
write_uboot_emmc ()
write_artifact_emmc ()
{
local UBOOT_BLOCK="$1"
local BLOCK_TO_WRITE="$1"
local FILE_TO_WRITE="$2"
local ENABLE_WRITE_ACCESS="$3"
# Enable write access in the U-Boot partition.
echo 0 > "/sys/block/${UBOOT_BLOCK}/force_ro"
# Write the U-Boot into the eMMC.
dd if="${UBOOT_FILE}" of="/dev/${UBOOT_BLOCK}" seek="${UBOOT_SEEK_KB}" bs=1K 2>/dev/null
if [ "${ENABLE_WRITE_ACCESS}" -eq 1 ]; then
# Enable write access in the partition.
echo 0 > "/sys/block/${BLOCK_TO_WRITE}/force_ro"
fi
# Write the file into the eMMC.
dd if="${FILE_TO_WRITE}" of="/dev/${BLOCK_TO_WRITE}" seek="${UBOOT_SEEK_KB}" bs=1K 2>/dev/null
local rc=$?
# Disable write access in U-Boot partition.
echo 1 > "/sys/block/${UBOOT_BLOCK}/force_ro"
if [ "${ENABLE_WRITE_ACCESS}" -eq 1 ]; then
# Disable write access in partition.
echo 1 > "/sys/block/${BLOCK_TO_WRITE}/force_ro"
fi
# Check update operation result.
if [ "${rc}" -ne 0 ]; then
exit_error "## ERROR: failed to write file ${UBOOT_FILE} to /dev/${UBOOT_BLOCK}" "${rc}"
exit_error "## ERROR: failed to write file ${FILE_TO_WRITE} to /dev/${BLOCK_TO_WRITE}" "${rc}"
fi
echo "U-Boot successfully writen to /dev/${UBOOT_BLOCK}"
echo "U-Boot successfully writen to /dev/${BLOCK_TO_WRITE}"
}
# If U-Boot is encrypted, the DEK key blob needs to be extracted from existing U-Boot
@ -258,11 +266,22 @@ write_uboot_emmc ()
if [ "${UBOOT_ENC}" = "enc" ]; then
append_dek
fi
# Write TFA.
if expr "${PLATFORM}" : "ccmp2.*" >/dev/null; then
# Write TFA artifact into eMMC BOOT1 and BOOT2 partitions.
write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_TFA_FILE} 1
if [ "${UBOOT_REDUNDANT}" = "redundant" ]; then
write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_TFA_FILE} 1
fi
# Redefine block devices to write FIP artifact into 'fip-a' and 'fip-b' partitions.
UBOOT_BLOCK_MAIN="mmcblk0p3"
UBOOT_BLOCK_REDUNDANT="mmcblk0p4"
fi
# Write U-Boot
write_uboot_emmc ${UBOOT_BLOCK_MAIN}
write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_FILE} 0
# Check if redundant U-Boot update is requested.
if [ "${UBOOT_REDUNDANT}" = "redundant" ]; then
write_uboot_emmc ${UBOOT_BLOCK_REDUNDANT}
write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_FILE} 0
fi
# Clean intermediate artifacts.
clean_artifacts