diff --git a/config/sources/families/include/k3_common.inc b/config/sources/families/include/k3_common.inc new file mode 100644 index 000000000..0d74df053 --- /dev/null +++ b/config/sources/families/include/k3_common.inc @@ -0,0 +1,100 @@ +# +# SPDX-License-Identifier: GPL-2.0 +# +# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com +# +# This file is a part of the Armbian Build Framework +# https://github.com/armbian/build/ +# + +declare -g ARCH="arm64" +declare -g OVERLAY_DIR="/boot/dtb/ti/overlay" + +declare -g ATFSOURCE="https://github.com/TexasInstruments/arm-trusted-firmware" + +declare -g BOOTSCRIPT="boot-k3.cmd:uEnv.txt" +declare -g SPD_OPTEED="SPD=opteed" + +declare -g INSTALL_HEADERS="yes" + +declare -g TI_PACKAGES=() +if [[ "${CC33XX_SUPPORT}" == "yes" ]] ; then + if [[ "${RELEASE}" == "trixie" || "${RELEASE}" == "noble" ]] ; then + TI_PACKAGES+=("cc33xx-fw" "cc33xx-target-scripts" "cc33conf" "cc33calibrator") + fi +fi + +enable_extension "ti-debpkgs" +enable_extension "apa" + +ATF_PLAT="k3" +ATF_TARGET_MAP="PLAT=$ATF_PLAT TARGET_BOARD=$ATF_BOARD ${SPD_OPTEED} ${ATF_K3_USART_OFFSET} bl31;;build/$ATF_PLAT/$ATF_BOARD/release/bl31.bin:bl31.bin" + +UBOOT_TARGET_MAP="BL31=bl31.bin TEE=${SRC}/cache/sources/optee-os/out/arm-plat-k3/core/tee-raw.bin BINMAN_INDIRS=${SRC}/cache/sources/ti-linux-firmware all;;tiboot3.bin ${SYSFW_FILE:+sysfw.itb} tispl.bin u-boot.img" + +# To match what our current SDK produces +BOOT_FS_LABEL="boot" +ROOT_FS_LABEL="root" + +function add_host_dependencies__k3_python3_dep() { + display_alert "Preparing K3 U-Boot host-side dependencies" "${EXTENSION}" "info" + declare -g EXTRA_BUILD_DEPS="${EXTRA_BUILD_DEPS} python3-yaml python3-jsonschema yamllint python3-cryptography python3-pyelftools python3-setuptools" +} + +function compile_k3_bootgen() { + # Source code checkout + (fetch_from_repo "https://github.com/TexasInstruments/ti-linux-firmware" "ti-linux-firmware" ${TI_LINUX_FIRMWARE_BRANCH}) + + pushd ${SRC}/cache/sources/u-boot-worktree/${BOOTDIR}/${BOOTBRANCH##*:} || exit + + run_host_command_logged make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=build-r5 ${TIBOOT3_BOOTCONFIG} + run_host_command_logged make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=build-r5 BINMAN_INDIRS=${SRC}/cache/sources/ti-linux-firmware + + popd +} + +function compile_k3_optee() { + (fetch_from_repo "https://github.com/OP-TEE/optee_os.git" "optee-os" ${OPTEE_BRANCH}) + pushd ${SRC}/cache/sources/optee-os || exit + run_host_command_logged make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf- CFG_ARM64_core=y PLATFORM=${OPTEE_PLATFORM} ${OPTEE_ARGS} + popd +} + +function pre_config_uboot_target__build_first_stage() { + # Compile first stage bootloader + compile_k3_optee + compile_k3_bootgen + + cp ${SRC}/cache/sources/u-boot-worktree/${BOOTDIR}/${BOOTBRANCH##*:}/build-r5/${TIBOOT3_FILE} tiboot3.bin + cp ${SRC}/cache/sources/u-boot-worktree/${BOOTDIR}/${BOOTBRANCH##*:}/build-r5/${SYSFW_FILE} sysfw.itb || true +} + +function post_uboot_custom_postprocess__update_uboot_names() { + cp ${TISPL_FILE} tispl.bin || true + cp ${UBOOT_FILE} u-boot.img || true +} + +function pre_prepare_partitions() { + # Filesystem must fill partition regardless of alignment + mkopts[fat]='-a' +} + +function post_create_partitions() { + display_alert "Setting boot partition flags on" "${SDCARD}.raw" "debug" + + # ROM is very particular about boot flags + run_host_command_logged parted "${SDCARD}".raw set 1 boot on + run_host_command_logged parted "${SDCARD}".raw set 1 bls_boot off +} + +function format_partitions() { + # ROM is very particular about partition IDs + run_host_command_logged sfdisk --part-type ${LOOP} 1 e +} + +function write_uboot_platform() { + cp $1/tiboot3.bin ${MOUNT}/boot + cp $1/sysfw.itb ${MOUNT}/boot || true + cp $1/tispl.bin ${MOUNT}/boot + cp $1/u-boot.img ${MOUNT}/boot +} diff --git a/config/sources/families/k3.conf b/config/sources/families/k3.conf index 79c158a5b..4d7bbd04d 100644 --- a/config/sources/families/k3.conf +++ b/config/sources/families/k3.conf @@ -7,29 +7,12 @@ # https://github.com/armbian/build/ # -declare -g ARCH="arm64" +source "${BASH_SOURCE%/*}/include/k3_common.inc" + declare -g LINUXFAMILY="k3" -declare -g OVERLAY_DIR="/boot/dtb/ti/overlay" - declare -g KERNELSOURCE="https://github.com/TexasInstruments/ti-linux-kernel" -declare -g ATFSOURCE="https://github.com/TexasInstruments/arm-trusted-firmware" declare -g BOOTSOURCE="https://github.com/TexasInstruments/ti-u-boot" -declare -g BOOTSCRIPT="boot-k3.cmd:uEnv.txt" -declare -g SPD_OPTEED="SPD=opteed" - -declare -g INSTALL_HEADERS="yes" - -declare -g TI_PACKAGES=() -if [[ "${CC33XX_SUPPORT}" == "yes" ]] ; then - if [[ "${RELEASE}" == "trixie" || "${RELEASE}" == "noble" ]] ; then - TI_PACKAGES+=("cc33xx-fw" "cc33xx-target-scripts" "cc33conf" "cc33calibrator") - fi -fi - -enable_extension "ti-debpkgs" -enable_extension "apa" - case "${BRANCH}" in current | current-rt) @@ -59,75 +42,3 @@ case "${BRANCH}" in ;; esac - -ATF_PLAT="k3" -ATF_TARGET_MAP="PLAT=$ATF_PLAT TARGET_BOARD=$ATF_BOARD ${SPD_OPTEED} ${ATF_K3_USART_OFFSET} bl31;;build/$ATF_PLAT/$ATF_BOARD/release/bl31.bin:bl31.bin" - -UBOOT_TARGET_MAP="BL31=bl31.bin TEE=${SRC}/cache/sources/optee-os/out/arm-plat-k3/core/tee-raw.bin BINMAN_INDIRS=${SRC}/cache/sources/ti-linux-firmware all;;tiboot3.bin ${SYSFW_FILE:+sysfw.itb} tispl.bin u-boot.img" - -# To match what our current SDK produces -BOOT_FS_LABEL="boot" -ROOT_FS_LABEL="root" - -function add_host_dependencies__k3_python3_dep() { - display_alert "Preparing K3 U-Boot host-side dependencies" "${EXTENSION}" "info" - declare -g EXTRA_BUILD_DEPS="${EXTRA_BUILD_DEPS} python3-yaml python3-jsonschema yamllint python3-cryptography python3-pyelftools python3-setuptools" -} - -function compile_k3_bootgen() { - # Source code checkout - (fetch_from_repo "https://github.com/TexasInstruments/ti-linux-firmware" "ti-linux-firmware" ${TI_LINUX_FIRMWARE_BRANCH}) - - pushd ${SRC}/cache/sources/u-boot-worktree/${BOOTDIR}/${BOOTBRANCH##*:} || exit - - run_host_command_logged make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=build-r5 ${TIBOOT3_BOOTCONFIG} - run_host_command_logged make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=build-r5 BINMAN_INDIRS=${SRC}/cache/sources/ti-linux-firmware - - popd -} - -function compile_k3_optee() { - (fetch_from_repo "https://github.com/OP-TEE/optee_os.git" "optee-os" ${OPTEE_BRANCH}) - pushd ${SRC}/cache/sources/optee-os || exit - run_host_command_logged make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf- CFG_ARM64_core=y PLATFORM=${OPTEE_PLATFORM} ${OPTEE_ARGS} - popd -} - -function pre_config_uboot_target__build_first_stage() { - # Compile first stage bootloader - compile_k3_optee - compile_k3_bootgen - - cp ${SRC}/cache/sources/u-boot-worktree/${BOOTDIR}/${BOOTBRANCH##*:}/build-r5/${TIBOOT3_FILE} tiboot3.bin - cp ${SRC}/cache/sources/u-boot-worktree/${BOOTDIR}/${BOOTBRANCH##*:}/build-r5/${SYSFW_FILE} sysfw.itb || true -} - -function post_uboot_custom_postprocess__update_uboot_names() { - cp ${TISPL_FILE} tispl.bin || true - cp ${UBOOT_FILE} u-boot.img || true -} - -function pre_prepare_partitions() { - # Filesystem must fill partition regardless of alignment - mkopts[fat]='-a' -} - -function post_create_partitions() { - display_alert "Setting boot partition flags on" "${SDCARD}.raw" "debug" - - # ROM is very particular about boot flags - run_host_command_logged parted "${SDCARD}".raw set 1 boot on - run_host_command_logged parted "${SDCARD}".raw set 1 bls_boot off -} - -function format_partitions() { - # ROM is very particular about partition IDs - run_host_command_logged sfdisk --part-type ${LOOP} 1 e -} - -function write_uboot_platform() { - cp $1/tiboot3.bin ${MOUNT}/boot - cp $1/sysfw.itb ${MOUNT}/boot || true - cp $1/tispl.bin ${MOUNT}/boot - cp $1/u-boot.img ${MOUNT}/boot -}