TF-A-STM32MP: update to v2.4-stm32mp-r1

Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
Change-Id: I1cbb828422280231c17e9673e8a85600ab6041e4
This commit is contained in:
Romuald JEANNE 2021-03-15 16:24:27 +01:00
parent a95cc1ec39
commit b986ba2af3
14 changed files with 17087 additions and 30279 deletions

View File

@ -10,115 +10,179 @@ COPYLEFT_LICENSE_INCLUDE_append = " BSD-3* "
inherit archiver_stm32mp_clean
archiver_create_makefile_for_sdk() {
. ${T}/tfaconfig_env
# Init internal var for tfa_config_oemake: should be 'config,extraoemake'
for config in ${TF_A_CONFIG}; do
tf_a_config_oemake="${tf_a_config_oemake} ${config},\"$(eval echo \$TF_A_CONFIG_${config})\""
done
mkdir -p ${ARCHIVER_OUTDIR}
cat << EOF > ${ARCHIVER_OUTDIR}/Makefile.sdk
#remove default variable
LDFLAGS=
CFLAGS=
CPPFLAGS=
CC=
CPP=
AS=
AR=
LD=
NM=
# Set default path
SRC_PATH ?= \$(PWD)
BLD_PATH ?= \$(SRC_PATH)/../build
DEPLOYDIR ?= \$(SRC_PATH)/../deploy
LOCAL_PATH=\$(PWD)
BL32_DEPLOYDIR ?= \$(DEPLOYDIR)/bl32
FWCONFIG_DEPLOYDIR ?= \$(DEPLOYDIR)/fwconfig
EXTRA_OEMAKE=${EXTRA_OEMAKE}
EXTRA_OEMAKE_SERIAL=\$(filter-out STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_SPI_NOR=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1,\$(EXTRA_OEMAKE)) STM32MP_UART_PROGRAMMER=1 STM32MP_USB_PROGRAMMER=1
# Set default config
ELF_DEBUG_ENABLE ?= ${ELF_DEBUG_ENABLE}
TF_A_CONFIG ?= ${TF_A_CONFIG} serialboot
# Set specific OEMAKE config
TF_A_CONFIG_OEMAKE = ${tf_a_config_oemake} serialboot,"AARCH32_SP=sp_min"
# Set default TFA_DEVICETREE
TFA_DEVICETREE ?= ${TF_A_DEVICETREE}
#Set default TF_A_ENABLE_DEBUG_WRAPPER
# Configure default TF-A features
TF_A_ENABLE_DEBUG_WRAPPER ?= ${TF_A_ENABLE_DEBUG_WRAPPER}
# Configure FIP
ENABLE_FIP ?= ${@bb.utils.contains('MACHINE_FEATURES', 'fip', '1', '', d)}
# Set default TF-A config
TF_A_CONFIG ?= ${TF_A_CONFIG}
# Default TF-A overall settings to null
TF_A_BINARY ?=
TF_A_DEVICETREE ?=
TF_A_MAKE_TARGET ?=
TF_A_EXTRA_OPTFLAGS ?=
EOF
unset i
for config in ${TF_A_CONFIG}; do
i=$(expr $i + 1)
cat << EOF >> ${ARCHIVER_OUTDIR}/Makefile.sdk
# Init default config settings
TF_A_DEVICETREE_$config ?= $(echo ${TF_A_DEVICETREE} | cut -d',' -f${i})
TF_A_EXTRA_OPTFLAGS_$config ?= $(echo ${TF_A_EXTRA_OPTFLAGS} | cut -d',' -f${i})
TF_A_BINARY_$config ?= $(echo ${TF_A_BINARIES} | cut -d',' -f${i})
TF_A_MAKE_TARGET_$config ?= $(echo ${TF_A_MAKE_TARGET} | cut -d',' -f${i})
EOF
done
cat << EOF >> ${ARCHIVER_OUTDIR}/Makefile.sdk
# Reset default variables
LDFLAGS =
CFLAGS =
CPPFLAGS =
CC =
CPP =
AS =
AR =
LD =
NM =
# Define default make options
EXTRA_OEMAKE ?= ${EXTRA_OEMAKE}
# Configure overall devicetree list for FIP
TF_A_DEVICETREE_ALL = $(echo "${TF_A_DEVICETREE}" | sed 's/,/ /g' | xargs -n1 | sort -u | xargs)
# Display TF-A config details
define tf-configs
echo " \$(1)" ; \\
echo " with device tree : \$(if \$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE_\$(1)))" ; \\
echo " extra optionflags: \$(if \$(TF_A_EXTRA_OPTFLAGS),\$(TF_A_EXTRA_OPTFLAGS),\$(TF_A_EXTRA_OPTFLAGS_\$(1)))" ; \\
echo " binary basename : \$(if \$(TF_A_BINARY),\$(TF_A_BINARY),\$(TF_A_BINARY_\$(1)) (TF_A_BINARY_\$(1)))" ; \\
echo " tf-a build target: \$(if \$(TF_A_MAKE_TARGET),\$(TF_A_MAKE_TARGET),\$(TF_A_MAKE_TARGET_\$(1)))" ;
endef
# Configure TF-A make rules
define tf-rules
tf-\$(1): \$2
@mkdir -p \$(BLD_PATH)/\$(1)
@\$(foreach dt, \$(if \$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE_\$(1))), \\
\$(MAKE) \$(EXTRA_OEMAKE) -C \$(SRC_PATH) \\
BUILD_PLAT=\$(BLD_PATH)/\$(1) \\
DTB_FILE_NAME=\$(dt).dtb \\
\$(if \$(TF_A_EXTRA_OPTFLAGS),\$(TF_A_EXTRA_OPTFLAGS),\$(TF_A_EXTRA_OPTFLAGS_\$(1))) \\
\$(if \$(TF_A_MAKE_TARGET),\$(TF_A_MAKE_TARGET),\$(TF_A_MAKE_TARGET_\$(1))) ; \\
)
endef
# Configure TF-A deploy rules
define deploy-rules
deploy-\$(1): tf-\$(1)
@mkdir -p \$(DEPLOYDIR)
@mkdir -p \$(DEPLOYDIR)/debug
@\$(foreach dt, \$(if \$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE_\$(1))), \\
if [ -f \$(BLD_PATH)/\$(1)/\$(2)-\$(dt).${TF_A_SUFFIX} ]; then \\
cp -f \$(BLD_PATH)/\$(1)/\$(2)-\$(dt).${TF_A_SUFFIX} \$(DEPLOYDIR)/\$(2)-\$(dt)-\$(1).${TF_A_SUFFIX} ; \\
if [ "\$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ] ; then \\
stm32wrapper4dbg -s \$(BLD_PATH)/\$(1)/\$(2)-\$(dt).${TF_A_SUFFIX} -d \$(DEPLOYDIR)/debug/debug-\$(2)-\$(dt)-\$(1).${TF_A_SUFFIX} ; \\
fi ; \\
fi ; \\
if [ -f \$(BLD_PATH)/\$(1)/${BL32_BASENAME}.${BL32_SUFFIX} ] ; then \\
mkdir -p \$(BL32_DEPLOYDIR) ; \\
cp -f \$(BLD_PATH)/\$(1)/${BL32_BASENAME}.${BL32_SUFFIX} \$(BL32_DEPLOYDIR)/\$(2)-${BL32_BASENAME}\$(foreach soc,${STM32MP_SOC_NAME},\$(if \$(shell echo \$(dt) | grep -c \$(soc)),-\$(soc),)).${BL32_SUFFIX} ; \\
if [ -f \$(BLD_PATH)/\$(1)/fdts/\$(dt)-${BL32_BASENAME}.${DT_SUFFIX} ]; then \\
cp -f \$(BLD_PATH)/\$(1)/fdts/\$(dt)-${BL32_BASENAME}.${DT_SUFFIX} \$(BL32_DEPLOYDIR)/ ; \\
fi ; \\
if [ -f \$(BLD_PATH)/\$(1)/${BL32_ELF} ]; then \\
mkdir -p \$(BL32_DEPLOYDIR)/debug ; \\
mv -f \$(BLD_PATH)/\$(1)/${BL32_ELF} \$(BL32_DEPLOYDIR)/debug/\$(2)-${BL32_BASENAME}\$(foreach soc,${STM32MP_SOC_NAME},\$(if \$(shell echo \$(dt) | grep -c \$(soc)),-\$(soc),)).${TF_A_ELF_SUFFIX} ; \\
fi ; \\
fi ; \\
if [ -f \$(BLD_PATH)/\$(1)/fdts/\$(dt)-${FWCONFIG_NAME}.${DT_SUFFIX} ]; then \\
mkdir -p \$(FWCONFIG_DEPLOYDIR) ; \\
cp -f \$(BLD_PATH)/\$(1)/fdts/\$(dt)-${FWCONFIG_NAME}.${DT_SUFFIX} \$(FWCONFIG_DEPLOYDIR)/\$(dt)-${FWCONFIG_NAME}-\$(1).${DT_SUFFIX} ; \\
fi ; \\
if [ -f \$(BLD_PATH)/\$(1)/${BL2_ELF} ] ; then \\
cp -f \$(BLD_PATH)/\$(1)/${BL2_ELF} \$(DEPLOYDIR)/debug/\$(2)-${BL2_BASENAME}-\$(1).${TF_A_ELF_SUFFIX} ; \\
fi ; \\
if [ -f \$(BLD_PATH)/\$(1)/${BL32_ELF} ] ; then \\
cp -f \$(BLD_PATH)/\$(1)/${BL32_ELF} \$(DEPLOYDIR)/debug/\$(2)-${BL32_BASENAME}-\$(1).${TF_A_ELF_SUFFIX} ; \\
fi ; \\
)
endef
help:
@echo
@echo "Available targets:"
@echo " all : build TF-A binaries for defined config(s)"
@echo " clean : clean build directories from generated files"
@echo
@echo "TF-A configuration:"
@echo " TF_A_CONFIG = \$(TF_A_CONFIG)"
@echo " TFA_DEVICETREE = \$(TFA_DEVICETREE)"
@echo " ELF_DEBUG_ENABLE = '\$(ELF_DEBUG_ENABLE)' ('1' to export elf files)"
@echo " TF_A_ENABLE_DEBUG_WRAPPER = '\$(TF_A_ENABLE_DEBUG_WRAPPER)' ('1' to generate tf-a for debugging)"
@echo "Config details:"
@\$(foreach config, \$(TF_A_CONFIG), \$(call tf-configs,\$(config)))
@echo
@echo "Note that each TF-A configuration settings can be updated through overall or specific config var:"
@echo " TF_A_DEVICETREE"
@echo " TF_A_EXTRA_OPTFLAGS"
@echo " TF_A_BINARY"
@echo " TF_A_MAKE_TARGET"
@echo
@echo "TF-A features configuration:"
@echo " TF_A_ENABLE_DEBUG_WRAPPER = \$(TF_A_ENABLE_DEBUG_WRAPPER) ('1' to generate tf-a for debugging)"
@echo
@echo "TF-A folder configuration:"
@echo " SRC_PATH = \$(SRC_PATH)"
@echo " BLD_PATH = \$(BLD_PATH)"
@echo " DEPLOYDIR = \$(DEPLOYDIR)"
@echo " BL32_DEPLOYDIR = \$(DEPLOYDIR)/bl32"
@echo " FWCONFIG_DEPLOYDIR = \$(DEPLOYDIR)/fwconfig"
@echo
@echo "FIP configuration:"
@echo " ENABLE_FIP = \$(ENABLE_FIP) ('1' to generate fip binary)"
ifeq (\$(ENABLE_FIP),1)
@echo " Do not forget to set FIP deploydir folders (such as FIP_DEPLOYDIR_ROOT) to provide path to needed binaries"
endif
@echo
@echo "Available targets:"
@echo " all : build TF-A binaries for defined config(s)"
@echo " fip : build FIP binaries"
@echo " stm32 : build TF-A stm32 binaries"
@echo " clean : clean build directories from generated files"
@echo
all: tf
all: \$(addprefix deploy-,\$(TF_A_CONFIG)) \$(if \$(ENABLE_FIP),fip)
host_tools:
@\$(MAKE) --no-print-directory -C \$(LOCAL_PATH)/tools/stm32image
@\$(MAKE) --no-print-directory -C \$(SRC_PATH)/tools/stm32image
tf: host_tools
for config in \$(TF_A_CONFIG) ; do \\
# Init any extraoemake \\
add_extraoemake= ; \\
for fullconfig in \$(TF_A_CONFIG_OEMAKE) ; do \\
extraconfig=\$\$(echo \$\$fullconfig | cut -d',' -f1) ; \\
if [ "\$\$extraconfig" = "\$\$config" ]; then \\
add_extraoemake=\$\$(echo \$\$fullconfig | cut -d',' -f2) ; \\
fi ; \\
done ; \\
mkdir -p \$(LOCAL_PATH)/../build/\$\$config ; \\
if test -n "\$(TFA_DEVICETREE)" ; then \\
for dt in \$(TFA_DEVICETREE) ; do \\
if [ "\$\$config" != "serialboot" ]; then \\
\$(MAKE) \$(EXTRA_OEMAKE) -C \$(LOCAL_PATH) DTB_FILE_NAME=\$\$dt.dtb BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake ; \\
else \\
\$(MAKE) \$(EXTRA_OEMAKE_SERIAL) -C \$(LOCAL_PATH) DTB_FILE_NAME=\$\$dt.dtb BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake ; \\
fi ; \\
# Copy binary file with explicit name \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt-\$\$config.${TF_A_SUFFIX} ; \\
if [ "\$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \\
# Generate wrapper for debugging \\
stm32wrapper4dbg -s \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt.${TF_A_SUFFIX} -d \$(LOCAL_PATH)/../build/\$\$config/debug-${TF_A_BASENAME}-\$\$dt-\$\$config.${TF_A_SUFFIX} ; \\
fi ; \\
done ; \\
else \\
if [ "\$\$config" != "serialboot" ]; then \\
\$(MAKE) \$(EXTRA_OEMAKE) -C \$(LOCAL_PATH) BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake; \\
else \\
\$(MAKE) \$(EXTRA_OEMAKE_SERIAL) -C \$(LOCAL_PATH) BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake; \\
fi ; \\
tf_version=\$\$(find \$(LOCAL_PATH)/../build/\$\$config -name ${TF_A_BASENAME}*.${TF_A_SUFFIX} -exec basename {} \; | sed "s/\.${TF_A_SUFFIX}//") ; \\
# Copy binary file with explicit name \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version-\$\$config.${TF_A_SUFFIX} ; \\
if [ "\$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \\
# Generate wrapper for debugging \\
stm32wrapper4dbg -s \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/debug-\$\$tf_version-\$\$config.${TF_A_SUFFIX} ; \\
fi ; \\
fi ; \\
# Copy elf files with explicit name \\
if [ "\$(ELF_DEBUG_ENABLE)" = "1" ] ; then \\
if [ -f \$(LOCAL_PATH)/../build/\$\$config/${BL2_ELF} ] ; then \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/${BL2_ELF} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-${BL2_BASENAME}-\$\$config.${TF_A_ELF_SUFFIX} ; \\
fi ; \\
if [ -f \$(LOCAL_PATH)/../build/\$\$config/${BL32_ELF} ] ; then \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/${BL32_ELF} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-${BL32_BASENAME}-\$\$config.${TF_A_ELF_SUFFIX} ; \\
fi ; \\
fi ; \\
done
# Set TF-A make rules
\$(foreach config, \$(TF_A_CONFIG), \$(eval \$(call tf-rules,\$(config),host_tools)))
# Set TF-A deploy rules
\$(foreach config, \$(TF_A_CONFIG), \$(eval \$(call deploy-rules,\$(config),\$(if \$(TF_A_BINARY),\$(TF_A_BINARY),\$(TF_A_BINARY_\$(config))))))
fip: \$(addprefix deploy-,\$(TF_A_CONFIG))
FIP_DEPLOYDIR_TFA=\$(BL32_DEPLOYDIR) FIP_DEPLOYDIR_FWCONF=\$(FWCONFIG_DEPLOYDIR) FIP_DEVICETREE="\$(if \$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE),\$(TF_A_DEVICETREE_ALL))" fiptool-stm32mp
stm32: \$(addprefix deploy-,\$(TF_A_CONFIG))
clean:
@for config in \$(TF_A_CONFIG) ; do \\
rm -rf \$(LOCAL_PATH)/../build/\$\$config ; \\
echo "Removing \$(BLD_PATH)/\$\$config ..." ; \\
rm -rf \$(BLD_PATH)/\$\$config ; \\
done
@echo "Removing \$(DEPLOYDIR) ..."
@rm -rf \$(DEPLOYDIR)
@echo
EOF
}
do_ar_original[prefuncs] += "tfaconfig_env archiver_create_makefile_for_sdk"
do_ar_original[prefuncs] += "archiver_create_makefile_for_sdk"

View File

@ -1,10 +1,29 @@
COMPATIBLE_MACHINE = "(stm32mpcommon)"
PACKAGE_ARCH = "${MACHINE_ARCH}"
FILESEXTRAPATHS_prepend := "${THISDIR}/tf-a-stm32mp:"
inherit deploy
inherit ${@bb.utils.contains('MACHINE_FEATURES', 'fip', 'fip-utils-stm32mp', '', d)}
# Include TF-A config definitions
include tf-a-stm32mp-config.inc
# ------------------------------------
# Set MBEDTLS support
TFA_MBEDTLS_DIR ?= "mbedtls"
# MBEDTLS v2.24.0
SRC_URI_MBEDTLS = "git://github.com/ARMmbed/mbedtls.git;protocol=https;destsuffix=git/${TFA_MBEDTLS_DIR};branch=master;name=mbedtls"
SRCREV_mbedtls = "523f0554b6cdc7ace5d360885c3f5bbcc73ec0e8"
LIC_FILES_CHKSUM_MBEDTLS = "file://mbedtls/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
LICENSE_MBEDTLS = "Apache-2.0"
# Add MBEDTLS to our sources
SRC_URI_append = " ${@bb.utils.contains('TF_A_SIGN_ENABLE', '1', '${SRC_URI_MBEDTLS}', '', d)}"
# Update license variables
LICENSE_append = "${@bb.utils.contains('TF_A_SIGN_ENABLE', '1', ' & ${LICENSE_MBEDTLS}', '', d)}"
LIC_FILES_CHKSUM_append = "${@bb.utils.contains('TF_A_SIGN_ENABLE', '1', ' ${LIC_FILES_CHKSUM_MBEDTLS}', '', d)}"
# Add mbed TLS to version
SRCREV_FORMAT_append = "${@bb.utils.contains('TF_A_SIGN_ENABLE', '1', '_mbedtls', '', d)}"
# ------------------------------------
B = "${WORKDIR}/build"
# Configure build dir for externalsrc class usage through devtool
@ -30,21 +49,98 @@ TF_A_ELF_SUFFIX = "elf"
BL1_NAME ?= "bl1/bl1"
BL1_ELF = "${BL1_NAME}.${TF_A_ELF_SUFFIX}"
BL1_BASENAME = "${@os.path.basename(d.getVar("BL1_NAME"))}"
BL1_BASENAME_DEPLOY ?= "${@os.path.basename(d.getVar("BL1_NAME"))}"
BL2_NAME ?= "bl2/bl2"
BL2_ELF = "${BL2_NAME}.${TF_A_ELF_SUFFIX}"
BL2_BASENAME = "${@os.path.basename(d.getVar("BL2_NAME"))}"
BL2_BASENAME_DEPLOY ?= "${@os.path.basename(d.getVar("BL2_NAME"))}"
BL31_NAME ?= "bl31/bl31"
BL31_ELF = "${BL31_NAME}.${TF_A_ELF_SUFFIX}"
BL31_BASENAME = "${@os.path.basename(d.getVar("BL31_NAME"))}"
BL31_BASENAME_DEPLOY ?= "${@os.path.basename(d.getVar("BL31_NAME"))}"
BL31_SUFFIX ?= "bin"
BL32_NAME ?= "bl32/bl32"
BL32_ELF = "${BL32_NAME}.${TF_A_ELF_SUFFIX}"
BL32_BASENAME = "${@os.path.basename(d.getVar("BL32_NAME"))}"
BL32_BASENAME_DEPLOY ?= "${@os.path.basename(d.getVar("BL32_NAME"))}"
BL32_SUFFIX ?= "bin"
DT_SUFFIX ?= "dtb"
FWCONFIG_NAME ?= "fw-config"
# Set default TF-A config
TF_A_CONFIG ?= ""
#Enable the wrapper for debug
# Enable the wrapper for debug
TF_A_ENABLE_DEBUG_WRAPPER ??= "1"
# Set default configuration to allow signing
TF_A_SIGN_ENABLE ??= "0"
# Configure specific build flags
EXTRA_OEMAKE += "${@bb.utils.contains('TF_A_SIGN_ENABLE', '1', 'TRUSTED_BOARD_BOOT=1', '', d)}"
EXTRA_OEMAKE += "${@bb.utils.contains('TF_A_SIGN_ENABLE', '1', 'MBEDTLS_DIR=${TFA_MBEDTLS_DIR}', '', d)}"
# -----------------------------------------------
# Handle TF-A config and set internal vars
# TF_A_DEVICETREE
# TF_A_EXTRA_OPTFLAGS
python () {
import re
tfaconfigflags = d.getVarFlags('TF_A_CONFIG')
# The "doc" varflag is special, we don't want to see it here
tfaconfigflags.pop('doc', None)
tfaconfig = (d.getVar('TF_A_CONFIG') or "").split()
tfabasename = d.getVar('TF_A_BASENAME')
if not tfaconfig:
raise bb.parse.SkipRecipe("TF_A_CONFIG must be set in the %s machine configuration." % d.getVar("MACHINE"))
if (d.getVar('TF_A_DEVICETREE') or "").split():
raise bb.parse.SkipRecipe("You cannot use TF_A_DEVICETREE as it is internal to TF_A_CONFIG var expansion.")
if (d.getVar('TF_A_EXTRA_OPTFLAGS') or "").split():
raise bb.parse.SkipRecipe("You cannot use TF_A_EXTRA_OPTFLAGS as it is internal to TF_A_CONFIG var expansion.")
if (d.getVar('TF_A_BINARIES') or "").split():
raise bb.parse.SkipRecipe("You cannot use TF_A_BINARIES as it is internal to TF_A_CONFIG var expansion.")
if (d.getVar('TF_A_MAKE_TARGET') or "").split():
raise bb.parse.SkipRecipe("You cannot use TF_A_MAKE_TARGET as it is internal to TF_A_CONFIG var expansion.")
if len(tfaconfig) > 0:
for config in tfaconfig:
for f, v in tfaconfigflags.items():
if config == f:
# Make sure to get var flag properly expanded
v = d.getVarFlag('TF_A_CONFIG', config)
if not v.strip():
bb.fatal('[TF_A_CONFIG] Missing configuration for %s config' % config)
items = v.split(',')
if items[0] and len(items) > 4:
raise bb.parse.SkipRecipe('Only <DEVICETREE>,<EXTRA_OPTFLAGS>,<BINARY_BASENAME>,<MAKE_TARGET> can be specified!')
# Set internal vars
bb.debug(1, "Appending '%s' to TF_A_DEVICETREE" % items[0])
d.appendVar('TF_A_DEVICETREE', items[0] + ',')
if len(items) > 1 and items[1]:
bb.debug(1, "Appending '%s' to TF_A_EXTRA_OPTFLAGS." % items[1])
d.appendVar('TF_A_EXTRA_OPTFLAGS', items[1] + ',')
else:
d.appendVar('TF_A_EXTRA_OPTFLAGS', '' + ',')
if len(items) > 2 and items[2]:
bb.debug(1, "Appending '%s' to TF_A_BINARIES." % items[2])
d.appendVar('TF_A_BINARIES', items[2] + ',')
else:
bb.debug(1, "Appending '%s' to TF_A_BINARIES." % tfabasename)
d.appendVar('TF_A_BINARIES', tfabasename + ',')
if len(items) > 3 and items[3]:
bb.debug(1, "Appending '%s' to TF_A_MAKE_TARGET." % items[3])
d.appendVar('TF_A_MAKE_TARGET', items[3] + ',')
else:
d.appendVar('TF_A_MAKE_TARGET', 'all' + ',')
break
}
# -----------------------------------------------
# Enable use of work-shared folder
TFA_SHARED_SOURCES ??= "1"
@ -83,84 +179,121 @@ base_do_unpack_append () {
os.symlink(tfasrc, s)
}
# Manage to export any specific setting for defined configs
python tfaconfig_env () {
if d.getVar('TF_A_CONFIG'):
try:
f = open( ("%s/tfaconfig_env" % d.getVar('T')), 'w')
for config in d.getVar('TF_A_CONFIG').split():
f.write( "export TF_A_CONFIG_%s=\"%s\"\n" % (config, d.getVar(('TF_A_CONFIG_' + config))) )
f.close()
except:
pass
}
do_compile[prefuncs] += "tfaconfig_env"
do_compile() {
. ${T}/tfaconfig_env
unset LDFLAGS
unset CFLAGS
unset CPPFLAGS
unset i
for config in ${TF_A_CONFIG}; do
# Get any specific EXTRA_OEMAKE for current config
eval local add_extraoemake=\"\$TF_A_CONFIG_${config}\"
if [ -n "${TF_A_DEVICETREE}" ]; then
for dt in ${TF_A_DEVICETREE}; do
oe_runmake -C ${S} DTB_FILE_NAME=${dt}.dtb BUILD_PLAT=${B}/${config} ${add_extraoemake}
cp ${B}/${config}/${TF_A_BASENAME}-${dt}.${TF_A_SUFFIX} ${B}/${config}/${TF_A_BASENAME}-${dt}-${config}.${TF_A_SUFFIX}
i=$(expr $i + 1)
# Initialize devicetree list, extra make options and tf-a basename
dt_config=$(echo ${TF_A_DEVICETREE} | cut -d',' -f${i})
extra_opt=$(echo ${TF_A_EXTRA_OPTFLAGS} | cut -d',' -f${i})
tfa_basename=$(echo ${TF_A_BINARIES} | cut -d',' -f${i})
tf_a_make_target=$(echo ${TF_A_MAKE_TARGET} | cut -d',' -f${i})
for dt in ${dt_config}; do
oe_runmake -C ${S} BUILD_PLAT=${B}/${config} DTB_FILE_NAME=${dt}.dtb ${extra_opt} ${tf_a_make_target}
# Copy TF-A binary with explicit devicetree filename
if [ -f ${B}/${config}/${tfa_basename}-${dt}.${TF_A_SUFFIX} ]; then
cp ${B}/${config}/${tfa_basename}-${dt}.${TF_A_SUFFIX} ${B}/${config}/${tfa_basename}-${dt}-${config}.${TF_A_SUFFIX}
if [ "${TF_A_ENABLE_DEBUG_WRAPPER}" = "1" ]; then
stm32wrapper4dbg -s ${B}/${config}/${TF_A_BASENAME}-${dt}.${TF_A_SUFFIX} -d ${B}/${config}/debug-${TF_A_BASENAME}-${dt}-${config}.${TF_A_SUFFIX}
stm32wrapper4dbg -s ${B}/${config}/${tfa_basename}-${dt}.${TF_A_SUFFIX} -d ${B}/${config}/debug-${tfa_basename}-${dt}-${config}.${TF_A_SUFFIX}
fi
done
else
oe_runmake -C ${S} BUILD_PLAT=${B}/${config} ${add_extraoemake}
tf_a_binary_basename=$(find ${B}/${config} -name "${TF_A_BASENAME}-*.${TF_A_SUFFIX}" -exec basename {} \; | sed 's|\.'"${TF_A_SUFFIX}"'||g')
if [ "${TF_A_ENABLE_DEBUG_WRAPPER}" = "1" ]; then
stm32wrapper4dbg -s ${B}/${config}/${tf_a_binary_basename}.${TF_A_SUFFIX} -d ${B}/${config}/debug-${tf_a_binary_basename}.${TF_A_SUFFIX}
fi
fi
done
}
do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}/arm-trusted-firmware"
do_deploy() {
install -d ${DEPLOYDIR}
for config in ${TF_A_CONFIG}; do
if [ -n "${TF_A_DEVICETREE}" ]; then
for dt in ${TF_A_DEVICETREE}; do
install -m 644 ${B}/${config}/${TF_A_BASENAME}-${dt}-${config}.${TF_A_SUFFIX} ${DEPLOYDIR}
if [ "${TF_A_ENABLE_DEBUG_WRAPPER}" = "1" ]; then
install -d ${DEPLOYDIR}/debug
install -m 644 ${B}/${config}/debug-${TF_A_BASENAME}-${dt}-${config}.${TF_A_SUFFIX} ${DEPLOYDIR}/debug
# Specific for bl32 target
if [ "$(echo ${tf_a_make_target} | grep -cw 'bl32')" = "1" ]; then
# Move 'bl32.elf' file to explicit file name with 'soc_suffix' info (same file for all devicetree build)
# This avoid unexpected deployment for other config (cf. do_deploy task)
if [ -f ${B}/${config}/${BL32_ELF} ]; then
# Init soc suffix
soc_suffix=""
if [ -n "${STM32MP_SOC_NAME}" ]; then
for soc in ${STM32MP_SOC_NAME}; do
[ "$(echo ${dt} | grep -c ${soc})" -eq 1 ] && soc_suffix="-${soc}"
done
fi
mv -f ${B}/${config}/${BL32_ELF} ${B}/${config}/${TF_A_BASENAME}-${BL32_BASENAME}${soc_suffix}.${TF_A_ELF_SUFFIX}
fi
done
else
# Get tf-a binary basename to copy
tf_a_binary_basename=$(find ${B}/${config} -name "${TF_A_BASENAME}-*.${TF_A_SUFFIX}" -exec basename {} \; | sed 's|\.'"${TF_A_SUFFIX}"'||g')
for f in ${tf_a_binary_basename}; do
install -m 644 ${B}/${config}/${f}.${TF_A_SUFFIX} ${DEPLOYDIR}/${f}-${config}.${TF_A_SUFFIX}
if [ "${TF_A_ENABLE_DEBUG_WRAPPER}" = "1" ]; then
install -d ${DEPLOYDIR}/debug
install -m 644 ${B}/${config}/debug-${f}.${TF_A_SUFFIX} ${DEPLOYDIR}/debug/debug-${f}-${config}.${TF_A_SUFFIX}
fi
done
fi
done
if [ -n "${ELF_DEBUG_ENABLE}" ]; then
for config in ${TF_A_CONFIG}; do
if [ -f ${B}/${config}/${BL1_ELF} ]; then
install -m 644 ${B}/${config}/${BL1_ELF} ${DEPLOYDIR}/${TF_A_BASENAME}-${BL1_BASENAME}-${config}.${TF_A_ELF_SUFFIX}
fi
if [ -f ${B}/${config}/${BL2_ELF} ]; then
install -m 644 ${B}/${config}/${BL2_ELF} ${DEPLOYDIR}/${TF_A_BASENAME}-${BL2_BASENAME}-${config}.${TF_A_ELF_SUFFIX}
fi
if [ -f ${B}/${config}/${BL32_ELF} ]; then
install -m 644 ${B}/${config}/${BL32_ELF} ${DEPLOYDIR}/${TF_A_BASENAME}-${BL32_BASENAME}-${config}.${TF_A_ELF_SUFFIX}
fi
done
fi
done
unset i
}
do_deploy() {
install -d ${DEPLOYDIR}
install -d ${DEPLOYDIR}/arm-trusted-firmware
unset i
for config in ${TF_A_CONFIG}; do
i=$(expr $i + 1)
# Initialize devicetree list and tf-a basename
dt_config=$(echo ${TF_A_DEVICETREE} | cut -d',' -f${i})
tfa_basename=$(echo ${TF_A_BINARIES} | cut -d',' -f${i})
for dt in ${dt_config}; do
# Install TF-A binary
if [ -f ${B}/${config}/${tfa_basename}-${dt}-${config}.${TF_A_SUFFIX} ]; then
install -m 644 ${B}/${config}/${tfa_basename}-${dt}-${config}.${TF_A_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/
if [ "${TF_A_ENABLE_DEBUG_WRAPPER}" = "1" ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/debug
install -m 644 ${B}/${config}/debug-${tfa_basename}-${dt}-${config}.${TF_A_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/debug/
fi
fi
# Init soc suffix
soc_suffix=""
if [ -n "${STM32MP_SOC_NAME}" ]; then
for soc in ${STM32MP_SOC_NAME}; do
[ "$(echo ${dt} | grep -c ${soc})" -eq 1 ] && soc_suffix="-${soc}"
done
fi
# Install BL31 files
if [ -f ${B}/${config}/${BL31_BASENAME}.${BL31_SUFFIX} ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/bl31
# Install BL31 binary
install -m 644 ${B}/${config}/${BL31_BASENAME}.${BL31_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/bl31/${tfa_basename}-${BL31_BASENAME_DEPLOY}${soc_suffix}.${BL31_SUFFIX}
if [ -n "${ELF_DEBUG_ENABLE}" ]; then
if [ -f ${B}/${config}/${tfa_basename}-${BL31_BASENAME}${soc_suffix}.${TF_A_ELF_SUFFIX} ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/bl32/debug
install -m 644 ${B}/${config}/${tfa_basename}-${BL31_BASENAME}${soc_suffix}.${TF_A_ELF_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/bl31/debug/${tfa_basename}-${BL31_BASENAME_DEPLOY}${soc_suffix}.${TF_A_ELF_SUFFIX}
fi
fi
fi
# Install BL32 files
if [ -f ${B}/${config}/${BL32_BASENAME}.${BL32_SUFFIX} ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/bl32
# Install BL32 binary
install -m 644 ${B}/${config}/${BL32_BASENAME}.${BL32_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/bl32/${tfa_basename}-${BL32_BASENAME_DEPLOY}${soc_suffix}.${BL32_SUFFIX}
# Install BL32 devicetree
if [ -f ${B}/${config}/fdts/${dt}-${BL32_BASENAME}.${DT_SUFFIX} ]; then
install -m 644 ${B}/${config}/fdts/${dt}-${BL32_BASENAME}.${DT_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/bl32/${dt}-${BL32_BASENAME}.${DT_SUFFIX}
fi
if [ -n "${ELF_DEBUG_ENABLE}" ]; then
if [ -f ${B}/${config}/${tfa_basename}-${BL32_BASENAME}${soc_suffix}.${TF_A_ELF_SUFFIX} ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/bl32/debug
install -m 644 ${B}/${config}/${tfa_basename}-${BL32_BASENAME}${soc_suffix}.${TF_A_ELF_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/bl32/debug/${tfa_basename}-${BL32_BASENAME_DEPLOY}${soc_suffix}.${TF_A_ELF_SUFFIX}
fi
fi
fi
# Install fwconfig
if [ -f ${B}/${config}/fdts/${dt}-${FWCONFIG_NAME}.${DT_SUFFIX} ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/fwconfig
install -m 644 ${B}/${config}/fdts/${dt}-${FWCONFIG_NAME}.${DT_SUFFIX} ${DEPLOYDIR}/arm-trusted-firmware/fwconfig/${dt}-${FWCONFIG_NAME}-${config}.${DT_SUFFIX}
fi
done
if [ -n "${ELF_DEBUG_ENABLE}" ]; then
install -d ${DEPLOYDIR}/arm-trusted-firmware/debug
if [ -f ${B}/${config}/${BL1_ELF} ]; then
install -m 644 ${B}/${config}/${BL1_ELF} ${DEPLOYDIR}/arm-trusted-firmware/debug/${tfa_basename}-${BL1_BASENAME_DEPLOY}-${config}.${TF_A_ELF_SUFFIX}
fi
if [ -f ${B}/${config}/${BL2_ELF} ]; then
install -m 644 ${B}/${config}/${BL2_ELF} ${DEPLOYDIR}/arm-trusted-firmware/debug/${tfa_basename}-${BL2_BASENAME_DEPLOY}-${config}.${TF_A_ELF_SUFFIX}
fi
if [ -f ${B}/${config}/${BL32_ELF} ]; then
install -m 644 ${B}/${config}/${BL32_ELF} ${DEPLOYDIR}/arm-trusted-firmware/debug/${tfa_basename}-${BL32_BASENAME_DEPLOY}-${config}.${TF_A_ELF_SUFFIX}
fi
fi
done
unset i
}
addtask deploy before do_build after do_compile

View File

@ -1,19 +0,0 @@
FILESEXTRAPATHS_prepend_stm32mpcommon := "${THISDIR}/tf-a-stm32mp:"
SECTION = "bootloaders"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031"
SRC_URI = "git://github.com/ARM-software/arm-trusted-firmware.git;protocol=https;nobranch=1"
SRCREV = "a04808c16cfc126d9fe572ae7c4b5a3d39de5796"
SRC_URI += " \
file://0001-st-update-v2.2-r2.0.0.patch \
file://0002-st-update-v2.2-r2.1.0.patch \
"
TF_VERSION = "2.2"
PV = "${TF_VERSION}.r2"
S = "${WORKDIR}/git"

View File

@ -0,0 +1,25 @@
# Configure default mode (All supported device type)
TF_A_EXTRACONF_LEGACY += "STM32MP_SDMMC=1"
TF_A_EXTRACONF_LEGACY += "STM32MP_EMMC=1"
TF_A_EXTRACONF_LEGACY += "STM32MP_SPI_NOR=1"
TF_A_EXTRACONF_LEGACY += "STM32MP_RAW_NAND=1"
TF_A_EXTRACONF_LEGACY += "STM32MP_SPI_NAND=1"
TF_A_EXTRACONF_LEGACY += "STM32MP_USE_STM32IMAGE=1"
# Define config for each TF_A_CONFIG
TF_A_CONFIG[optee] ?= "${STM32MP_DEVICETREE},AARCH32_SP=optee ${@bb.utils.contains('MACHINE_FEATURES', 'fip', '', '${TF_A_EXTRACONF_LEGACY}', d)},,${@bb.utils.contains('MACHINE_FEATURES', 'fip', bb.utils.contains('FIP_BL31_ENABLE', '1', 'bl31 dtbs', 'dtbs', d), '', d)}"
TF_A_CONFIG[trusted] ?= "${STM32MP_DEVICETREE},AARCH32_SP=sp_min ${@bb.utils.contains('MACHINE_FEATURES', 'fip', '', '${TF_A_EXTRACONF_LEGACY}', d)},,${@bb.utils.contains('MACHINE_FEATURES', 'fip', 'bl32 dtbs', '', d)}"
TF_A_CONFIG[serialboot] ?= "${STM32MP_DEVICETREE},AARCH32_SP=sp_min STM32MP_UART_PROGRAMMER=1 STM32MP_USB_PROGRAMMER=1 STM32MP_USE_STM32IMAGE=1"
TF_A_CONFIG[emmc] ?= "${DEVICE_BOARD_ENABLE_EMMC},STM32MP_EMMC=1"
TF_A_CONFIG[nand] ?= "${DEVICE_BOARD_ENABLE_NAND},STM32MP_RAW_NAND=1 ${@'STM32MP_FORCE_MTD_START_OFFSET=${TF_A_MTD_START_OFFSET_NAND}' if ${TF_A_MTD_START_OFFSET_NAND} else ''}"
TF_A_CONFIG[nor] ?= "${DEVICE_BOARD_ENABLE_NOR},STM32MP_SPI_NOR=1 ${@'STM32MP_FORCE_MTD_START_OFFSET=${TF_A_MTD_START_OFFSET_NOR}' if ${TF_A_MTD_START_OFFSET_NOR} else ''}"
TF_A_CONFIG[sdcard] ?= "${DEVICE_BOARD_ENABLE_SDCARD},STM32MP_SDMMC=1"
TF_A_CONFIG[spinand] ?= "${DEVICE_BOARD_ENABLE_SPINAND},STM32MP_SPI_NAND=1 ${@'STM32MP_FORCE_MTD_START_OFFSET=${TF_A_MTD_START_OFFSET_SPINAND}' if ${TF_A_MTD_START_OFFSET_SPINAND} else ''}"
TF_A_CONFIG[uart] ?= "${STM32MP_DEVICETREE},STM32MP_UART_PROGRAMMER=1"
TF_A_CONFIG[usb] ?= "${STM32MP_DEVICETREE},STM32MP_USB_PROGRAMMER=1"
# Define configuration for SSP
TF_A_CONFIG[uart-ssp] ?= "${STM32MP_DEVICETREE},STM32MP_UART_PROGRAMMER=1 STM32MP_SSP=1,tf-a-ssp"
TF_A_CONFIG[usb-ssp] ?= "${STM32MP_DEVICETREE},STM32MP_USB_PROGRAMMER=1 STM32MP_SSP=1,tf-a-ssp"

View File

@ -1,21 +0,0 @@
require tf-a-stm32mp-common_${PV}.inc
require tf-a-stm32mp-common.inc
SUMMARY = "Trusted Firmware-A for STM32MP1 as serial boot loader"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031"
PROVIDES += "virtual/trusted-firmware-a-serialboot"
TFA_SHARED_SOURCES = "0"
# Configure stm32mp1 make settings
EXTRA_OEMAKE += 'PLAT=stm32mp1'
EXTRA_OEMAKE += 'ARCH=aarch32'
EXTRA_OEMAKE += 'ARM_ARCH_MAJOR=7'
# Configure all serial boot supports
EXTRA_OEMAKE += 'STM32MP_UART_PROGRAMMER=1'
EXTRA_OEMAKE += 'STM32MP_USB_PROGRAMMER=1'
# Disable the wrapper for debug
TF_A_ENABLE_DEBUG_WRAPPER ?= "0"

View File

@ -1,112 +0,0 @@
#
# Archiver Configuration
#
SRC_URI_append = " file://README.HOW_TO.txt "
inherit archiver
ARCHIVER_MODE[src] = "original"
COPYLEFT_LICENSE_INCLUDE_append = " BSD-3* "
inherit archiver_stm32mp_clean
archiver_create_makefile_for_sdk() {
. ${T}/tfaconfig_env
# Init internal var for tfa_config_oemake: should be 'config,extraoemake'
for config in ${TF_A_CONFIG}; do
tf_a_config_oemake="${tf_a_config_oemake} ${config},\"$(eval echo \$TF_A_CONFIG_${config})\""
done
mkdir -p ${ARCHIVER_OUTDIR}
cat << EOF > ${ARCHIVER_OUTDIR}/Makefile.sdk
#remove default variable
LDFLAGS=
CFLAGS=
CPPFLAGS=
CC=
CPP=
AS=
AR=
LD=
NM=
LOCAL_PATH=\$(PWD)
EXTRA_OEMAKE=${EXTRA_OEMAKE}
# Set default config
ELF_DEBUG_ENABLE ?= ${ELF_DEBUG_ENABLE}
TF_A_CONFIG ?= ${TF_A_CONFIG}
# Set specific OEMAKE config
TF_A_CONFIG_OEMAKE = ${tf_a_config_oemake}
# Set default TFA_DEVICETREE
TFA_DEVICETREE ?= ${TF_A_DEVICETREE}
#Set default TF_A_ENABLE_DEBUG_WRAPPER
TF_A_ENABLE_DEBUG_WRAPPER ?= ${TF_A_ENABLE_DEBUG_WRAPPER}
help:
@echo
@echo "Available targets:"
@echo " all : build TF-A binaries for defined config(s)"
@echo " clean : clean build directories from generated files"
@echo
@echo "TF-A configuration:"
@echo " TF_A_CONFIG = \$(TF_A_CONFIG)"
@echo " TFA_DEVICETREE = \$(TFA_DEVICETREE)"
@echo " ELF_DEBUG_ENABLE = '\$(ELF_DEBUG_ENABLE)' ('1' to export elf files)"
@echo " TF_A_ENABLE_DEBUG_WRAPPER = '\$(TF_A_ENABLE_DEBUG_WRAPPER)' ('1' to generate tf-a for debugging)"
@echo
all: tf
host_tools:
@\$(MAKE) --no-print-directory -C \$(LOCAL_PATH)/tools/stm32image
tf: host_tools
for config in \$(TF_A_CONFIG) ; do \\
# Init any extraoemake \\
add_extraoemake= ; \\
for fullconfig in \$(TF_A_CONFIG_OEMAKE) ; do \\
extraconfig=\$\$(echo \$\$fullconfig | cut -d',' -f1) ; \\
if [ "\$\$extraconfig" = "\$\$config" ]; then \\
add_extraoemake=\$\$(echo \$\$fullconfig | cut -d',' -f2) ; \\
fi ; \\
done ; \\
mkdir -p \$(LOCAL_PATH)/../build/\$\$config ; \\
if test -n "\$(TFA_DEVICETREE)" ; then \\
for dt in \$(TFA_DEVICETREE) ; do \\
\$(MAKE) \$(EXTRA_OEMAKE) -C \$(LOCAL_PATH) DTB_FILE_NAME=\$\$dt.dtb BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake ; \\
# Copy binary file with explicit name \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt-\$\$config.${TF_A_SUFFIX} ; \\
if [ "\$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \\
# Generate wrapper for debugging \\
stm32wrapper4dbg -s \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt.${TF_A_SUFFIX} -d \$(LOCAL_PATH)/../build/\$\$config/debug-${TF_A_BASENAME}-\$\$dt-\$\$config.${TF_A_SUFFIX} ; \\
fi \\
done ; \\
else \\
\$(MAKE) \$(EXTRA_OEMAKE) -C \$(LOCAL_PATH) BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake; \\
tf_version=\$\$(find \$(LOCAL_PATH)/../build/\$\$config -name ${TF_A_BASENAME}*.${TF_A_SUFFIX} -exec basename {} \; | sed "s/\.${TF_A_SUFFIX}//") ; \\
# Copy binary file with explicit name \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version-\$\$config.${TF_A_SUFFIX} ; \\
if [ "\$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \\
# Generate wrapper for debugging \\
stm32wrapper4dbg -s \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/debug-\$\$tf_version-\$\$config.${TF_A_SUFFIX} ; \\
fi \\
fi ; \\
# Copy elf files with explicit name \\
if [ "\$(ELF_DEBUG_ENABLE)" = "1" ] ; then \\
if [ -f \$(LOCAL_PATH)/../build/\$\$config/${BL2_ELF} ] ; then \\
cp -f \$(LOCAL_PATH)/../build/\$\$config/${BL2_ELF} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-${BL2_BASENAME}-\$\$config.${TF_A_ELF_SUFFIX} ; \\
fi ; \\
fi ; \\
done
clean:
@for config in \$(TF_A_CONFIG) ; do \\
rm -rf \$(LOCAL_PATH)/../build/\$\$config ; \\
done
EOF
}
do_ar_original[prefuncs] += "tfaconfig_env archiver_create_makefile_for_sdk"

View File

@ -1,55 +0,0 @@
require tf-a-stm32mp-common.inc
SUMMARY = "Trusted Firmware-A SSP for STM32MP1"
SECTION = "bootloaders"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031"
SRC_URI = "git://github.com/ARM-software/arm-trusted-firmware.git;protocol=https;nobranch=1"
SRCREV = "a04808c16cfc126d9fe572ae7c4b5a3d39de5796"
SRC_URI += " \
file://0001-st-update-v2.2-r2.0.0.patch \
\
file://0100-v2.2-stm32mp-ssp-r2-rc2.patch \
"
TF_VERSION = "2.2"
PV = "${TF_VERSION}.r2"
S = "${WORKDIR}/git"
PROVIDES += "virtual/trusted-firmware-a-ssp"
TFA_SHARED_SOURCES = "0"
TF_A_BASENAME = "tf-a-ssp"
TF_A_CONFIG = "ssp"
TF_A_CONFIG_ssp = " STM32MP_SSP=1 "
# Configure stm32mp1 make settings
EXTRA_OEMAKE += 'PLAT=stm32mp1'
EXTRA_OEMAKE += 'ARCH=aarch32'
EXTRA_OEMAKE += 'ARM_ARCH_MAJOR=7'
EXTRA_OEMAKE += 'STM32MP_UART_PROGRAMMER=1'
EXTRA_OEMAKE += 'STM32MP_USB_PROGRAMMER=1'
# ---------------------------------
# Configure archiver use
# ---------------------------------
include ${@oe.utils.ifelse(d.getVar('ST_ARCHIVER_ENABLE') == '1', 'tf-a-stm32mp-ssp-archiver.inc','')}
# ---------------------------------
# Configure devupstream class usage
# ---------------------------------
BBCLASSEXTEND = "devupstream:target"
SRC_URI_class-devupstream = "git://github.com/STMicroelectronics/arm-trusted-firmware.git;protocol=https;branch=v${TF_VERSION}-r2-stm32mp-ssp"
SRCREV_class-devupstream = "91745e6389486247c8a4b11cc428f9ce235f319e"
# ---------------------------------
# Configure default preference to manage dynamic selection between tarball and github
# ---------------------------------
STM32MP_SOURCE_SELECTION ?= "tarball"
DEFAULT_PREFERENCE = "${@bb.utils.contains('STM32MP_SOURCE_SELECTION', 'github', '-1', '1', d)}"

View File

@ -65,6 +65,10 @@ NB: you can use directly the source from the community:
5. Build tf-a source code:
--------------------------------
Since OpenSTLinux has activated FIP by default, so the FIP_artifacts should be specified before launching compilation
- In case of using SOURCES-xxxx.tar.gz of Developer package the FIP_DEPLOYDIR_ROOT should be set as below:
$> export FIP_DEPLOYDIR_ROOT=$PWD/../../FIP_artifacts
To compile tf-a source code
$> make -f $PWD/../Makefile.sdk all
or for a specific config :
@ -72,47 +76,9 @@ or for a specific config :
NB: TFA_DEVICETREE flag must be set to switch to correct board configuration.
Files generated should be as follow:
#> ../build/*/tf-a-*.stm32
The generated FIP images are available in $FIP_DEPLOYDIR_ROOT/fip
6. Update software on board:
----------------------------
6.1. partitioning of binaries:
-----------------------------
TF-A build provide a binary named "tf-a-*.stm32" which MUST be copied on a
dedicated partition named "fsbl1"
Please use STM32CubeProgrammer then only tick the boot partitions means patitions 0x1 to 0x6 (more informations on the wiki website http://wiki.st.com/stm32mpu)
6.2. Update via SDCARD:
-----------------------
Copy the binary (tf-a-*.stm32) on the dedicated partition, on SDCARD/USB disk
the partition "fsbl1" are the partition 1:
- SDCARD: /dev/mmcblkXp1 (where X is the instance number)
- SDCARD via USB reader: /dev/sdX1 (where X is the instance number)
$ dd if=<tf-a binary> of=/dev/<device partition> bs=1M conv=fdatasync
FAQ: to found the partition associated to a specific label, just plug the
SDCARD/USB disk on your PC and call the following command:
$ ls -l /dev/disk/by-partlabel/
total 0
lrwxrwxrwx 1 root root 10 Jan 17 17:38 bootfs -> ../../mmcblk0p4
lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl1 -> ../../mmcblk0p1 ➔ FSBL (TF-A)
lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl2 -> ../../mmcblk0p2 ➔ FSBL backup (TF-A backup same content as FSBL)
lrwxrwxrwx 1 root root 10 Jan 17 17:38 rootfs -> ../../mmcblk0p5
lrwxrwxrwx 1 root root 10 Jan 17 17:38 ssbl -> ../../mmcblk0p3 ➔ SSBL (U-Boot)
lrwxrwxrwx 1 root root 10 Jan 17 17:38 userfs -> ../../mmcblk0p6
6.3. Update via USB mass storage on U-boot:
-------------------------------------------
* Plug the SDCARD on Board.
* Start the board and stop on U-boot shell:
Hit any key to stop autoboot: 0
STM32MP>
* plug an USB cable between the PC and the board via USB OTG port.
* On U-Boot shell, call the usb mass storage functionnality:
STM32MP> ums 0 mmc 0
ums <USB controller> <dev type: mmc|usb> <dev[:part]>
ex.:
For SDCARD: ums 0 mmc 0
For USB disk: ums 0 usb 0
* Follow section 6.2 to put tf-a-*.stm32 on SDCARD/USB disk

View File

@ -1,21 +1,30 @@
require tf-a-stm32mp-common_${PV}.inc
require tf-a-stm32mp-common.inc
SUMMARY = "Trusted Firmware-A for STM32MP1"
SECTION = "bootloaders"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031"
PROVIDES += "virtual/trusted-firmware-a"
FILESEXTRAPATHS_prepend_stm32mpcommon := "${THISDIR}/tf-a-stm32mp:"
SRC_URI = "git://github.com/ARM-software/arm-trusted-firmware.git;protocol=https;nobranch=1"
SRCREV = "e2c509a39c6cc4dda8734e6509cdbe6e3603cdfc"
SRC_URI += " \
file://0001-st-update-v2.4-r1.0.0.patch \
"
TF_VERSION = "2.4"
PV = "${TF_VERSION}.r1"
S = "${WORKDIR}/git"
# Configure stm32mp1 make settings
EXTRA_OEMAKE += 'PLAT=stm32mp1'
EXTRA_OEMAKE += 'ARCH=aarch32'
EXTRA_OEMAKE += 'ARM_ARCH_MAJOR=7'
# Configure default mode (All supported device type)
EXTRA_OEMAKE += 'STM32MP_SDMMC=1'
EXTRA_OEMAKE += 'STM32MP_EMMC=1'
EXTRA_OEMAKE += 'STM32MP_SPI_NOR=1'
EXTRA_OEMAKE += 'STM32MP_RAW_NAND=1'
EXTRA_OEMAKE += 'STM32MP_SPI_NAND=1'
EXTRA_OEMAKE += "PLAT=stm32mp1"
EXTRA_OEMAKE += "ARCH=aarch32"
EXTRA_OEMAKE += "ARM_ARCH_MAJOR=7"
# Enable the wrapper for debug
TF_A_ENABLE_DEBUG_WRAPPER ?= "1"
@ -31,7 +40,7 @@ include ${@oe.utils.ifelse(d.getVar('ST_ARCHIVER_ENABLE') == '1', 'tf-a-stm32mp-
BBCLASSEXTEND = "devupstream:target"
SRC_URI_class-devupstream = "git://github.com/STMicroelectronics/arm-trusted-firmware.git;protocol=https;branch=v${TF_VERSION}-stm32mp"
SRCREV_class-devupstream = "9d1dd642963e2b47142d1d26d09b7e4a762d6954"
SRCREV_class-devupstream = "40572e4067f205691a4dca3b5fdabe3a40c69594"
# ---------------------------------
# Configure default preference to manage dynamic selection between tarball and github

View File

@ -0,0 +1,158 @@
From a1a1376cd1cc5ef232258e3302596f6a2fb9b8e4 Mon Sep 17 00:00:00 2001
From: Lionel Debieve <lionel.debieve@st.com>
Date: Tue, 19 Jan 2021 15:40:36 +0100
Subject: [PATCH] tools: allow to use a root key password from command line
By defining the ROT_KEY_PWD, user is able to define the private
root key password. Useful for build system management.
Signed-off-by: Lionel Debieve <lionel.debieve@st.com>
Change-Id: Ie692c5c6db5ddb093ca7659d80f6137a978aa7bf
---
make_helpers/tbbr/tbbr_tools.mk | 4 +++-
tools/cert_create/include/key.h | 4 ++--
tools/cert_create/src/key.c | 6 +++---
tools/cert_create/src/main.c | 18 ++++++++++++++----
4 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/make_helpers/tbbr/tbbr_tools.mk b/make_helpers/tbbr/tbbr_tools.mk
index 853ad11bef..0aab592228 100644
--- a/make_helpers/tbbr/tbbr_tools.mk
+++ b/make_helpers/tbbr/tbbr_tools.mk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
+# Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
@@ -24,6 +24,7 @@
# KEY_SIZE
# ROT_KEY
# PROT_KEY
+# ROT_KEY_PWD
# TRUSTED_WORLD_KEY
# NON_TRUSTED_WORLD_KEY
# SCP_BL2_KEY
@@ -62,6 +63,7 @@ $(if ${HASH_ALG},$(eval $(call CERT_ADD_CMD_OPT,${HASH_ALG},--hash-alg,FWU_)))
$(if ${ROT_KEY},$(eval $(call CERT_ADD_CMD_OPT,${ROT_KEY},--rot-key)))
$(if ${ROT_KEY},$(eval $(call CERT_ADD_CMD_OPT,${ROT_KEY},--rot-key,FWU_)))
$(if ${PROT_KEY},$(eval $(call CERT_ADD_CMD_OPT,${PROT_KEY},--prot-key)))
+$(if ${ROT_KEY_PWD},$(eval $(call CERT_ADD_CMD_OPT,${ROT_KEY_PWD},--rot-key-pwd)))
$(if ${TRUSTED_WORLD_KEY},$(eval $(call CERT_ADD_CMD_OPT,${TRUSTED_WORLD_KEY},--trusted-world-key)))
$(if ${NON_TRUSTED_WORLD_KEY},$(eval $(call CERT_ADD_CMD_OPT,${NON_TRUSTED_WORLD_KEY},--non-trusted-world-key)))
diff --git a/tools/cert_create/include/key.h b/tools/cert_create/include/key.h
index 3409502d82..1a03201560 100644
--- a/tools/cert_create/include/key.h
+++ b/tools/cert_create/include/key.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -70,7 +70,7 @@ int key_init(void);
key_t *key_get_by_opt(const char *opt);
int key_new(key_t *key);
int key_create(key_t *key, int type, int key_bits);
-int key_load(key_t *key, unsigned int *err_code);
+int key_load(key_t *key, char *rot_key_pwd, unsigned int *err_code);
int key_store(key_t *key);
/* Macro to register the keys used in the CoT */
diff --git a/tools/cert_create/src/key.c b/tools/cert_create/src/key.c
index 25d7d4bd9b..9ba5028af7 100644
--- a/tools/cert_create/src/key.c
+++ b/tools/cert_create/src/key.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -137,7 +137,7 @@ int key_create(key_t *key, int type, int key_bits)
return 0;
}
-int key_load(key_t *key, unsigned int *err_code)
+int key_load(key_t *key, char *rot_key_pwd, unsigned int *err_code)
{
FILE *fp;
EVP_PKEY *k;
@@ -146,7 +146,7 @@ int key_load(key_t *key, unsigned int *err_code)
/* Load key from file */
fp = fopen(key->fn, "r");
if (fp) {
- k = PEM_read_PrivateKey(fp, &key->key, NULL, NULL);
+ k = PEM_read_PrivateKey(fp, &key->key, NULL, rot_key_pwd);
fclose(fp);
if (k) {
*err_code = KEY_ERR_NONE;
diff --git a/tools/cert_create/src/main.c b/tools/cert_create/src/main.c
index 8a1e02e62f..e79e72745b 100644
--- a/tools/cert_create/src/main.c
+++ b/tools/cert_create/src/main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -289,7 +289,12 @@ static const cmd_opt_t common_cmd_opt[] = {
{
{ "print-cert", no_argument, NULL, 'p' },
"Print the certificates in the standard output"
- }
+ },
+ {
+ { "rot-key-pwd", required_argument, NULL, 'r' },
+ "Password for the root key"
+ },
+
};
int main(int argc, char *argv[])
@@ -308,6 +313,7 @@ int main(int argc, char *argv[])
unsigned char md[SHA512_DIGEST_LENGTH];
unsigned int md_len;
const EVP_MD *md_info;
+ char *rot_key_pw = NULL;
NOTICE("CoT Generation Tool: %s\n", build_msg);
NOTICE("Target platform: %s\n", platform_msg);
@@ -345,7 +351,7 @@ int main(int argc, char *argv[])
while (1) {
/* getopt_long stores the option index here. */
- c = getopt_long(argc, argv, "a:b:hknps:", cmd_opt, &opt_idx);
+ c = getopt_long(argc, argv, "a:b:hknpr:s:", cmd_opt, &opt_idx);
/* Detect the end of the options. */
if (c == -1) {
@@ -379,6 +385,10 @@ int main(int argc, char *argv[])
case 'p':
print_cert = 1;
break;
+ case 'r':
+ rot_key_pw = malloc(sizeof(char) * strlen(optarg));
+ strncpy(rot_key_pw, optarg, strlen(optarg));
+ break;
case 's':
hash_alg = get_hash_alg(optarg);
if (hash_alg < 0) {
@@ -437,7 +447,7 @@ int main(int argc, char *argv[])
}
/* First try to load the key from disk */
- if (key_load(&keys[i], &err_code)) {
+ if (key_load(&keys[i], rot_key_pw, &err_code)) {
/* Key loaded successfully */
continue;
}
--
2.17.1

View File

@ -0,0 +1,32 @@
SUMMARY = "Cert_create & Fiptool for fip generation for Trusted Firmware-A"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031"
SRC_URI = "git://github.com/ARM-software/arm-trusted-firmware.git;protocol=https;nobranch=1"
#SRCREV corresponds to v2.4
SRCREV = "e2c509a39c6cc4dda8734e6509cdbe6e3603cdfc"
# Mandatory fix to allow feeding password through command line
SRC_URI += "file://0099-tools-allow-to-use-a-root-key-password-from-command-.patch"
DEPENDS_class-nativesdk = "nativesdk-openssl"
S = "${WORKDIR}/git"
do_compile() {
oe_runmake certtool fiptool
}
do_install() {
install -d ${D}${bindir}
# cert_create
install -m 0755 ${B}/tools/cert_create/cert_create ${D}${bindir}/cert_create
# fiptool
install -m 0755 ${B}/tools/fiptool/fiptool ${D}${bindir}/fiptool
}
FILES_${PN}_class-nativesdk = "${bindir}/cert_create ${bindir}/fiptool"
RDEPENDS_${PN}_class-nativesdk += "nativesdk-libcrypto"
BBCLASSEXTEND += "native nativesdk"