summaryrefslogtreecommitdiffstats
path: root/classes/imx-boot-container.bbclass
diff options
context:
space:
mode:
authorAndrey Zhizhikin <andrey.z@gmail.com>2021-03-03 16:33:33 +0000
committerOtavio Salvador <otavio@ossystems.com.br>2021-03-17 10:53:42 -0300
commit2bc347d473ec9545e761fa06205727a825b446d0 (patch)
tree9df92f007b142770da98b49ff6c7c250bf7d2190 /classes/imx-boot-container.bbclass
parentbadc0f6a1b278c1d7012556efa78aefcdd80ed68 (diff)
downloadmeta-freescale-2bc347d473ec9545e761fa06205727a825b446d0.tar.gz
classes: imx-boot-container: add class to provide boot container
Add a class which extends the u-boot build mechanism with providing a separate "flash.bin" binary that replaces the imx-boot in the WIC file. This class is inherited in u-boot-fslc recipe and extends it only to those machines that have a corresponding "imx-boot-container" machine override set. Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
Diffstat (limited to 'classes/imx-boot-container.bbclass')
-rw-r--r--classes/imx-boot-container.bbclass107
1 files changed, 107 insertions, 0 deletions
diff --git a/classes/imx-boot-container.bbclass b/classes/imx-boot-container.bbclass
new file mode 100644
index 00000000..003f997a
--- /dev/null
+++ b/classes/imx-boot-container.bbclass
@@ -0,0 +1,107 @@
1#
2# This class provides a support to build the boot container for
3# i.MX8M derivatives
4#
5# imx8m machines require a separate build target to be executed
6# due to the fact that final boot image is constructed using flash.bin
7# taget. It produces a boot binary image, which is constructed from
8# various binary components (u-boot with separate dtb, atf, DDR
9# firmware and optional op-tee) into a single image using FIT format.
10# This flash.bin file is then parsed and loaded either via
11# SPL directly (imx8mm), or using bootrom code (imx8mn and imx8mp).
12#
13# In order to use flash.bin binary boot image, it is required that
14# the U-Boot build is to be invoked for an additional build target.
15# This class extendes the U-Boot build targets with the "flash.bin",
16# which effectively serves as a boot container. It replaces the boot
17# container `imx-boot` provided by NXP.
18#
19# Class inheritance is performed in u-boot-fslc recipe, and is controlled
20# by variable UBOOT_PROVIDES_BOOT_CONTAINER, which is defined in the
21# base machine include file (imx-base.inc), and is set to "1" when the
22# 'imx-boot-container' is present in MACHINEOVERRIDES.
23
24# Extend the UBOOT_MAKE_TARGET with additional target for U-Boot build
25# system to produce the boot container
26UBOOT_MAKE_TARGET += "flash.bin"
27
28# Define ATF binary file to be deployed to the U-Boot build folder
29ATF_MACHINE_NAME = "bl31-${ATF_PLATFORM}.bin"
30ATF_MACHINE_NAME_append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee', '-optee', '', d)}"
31
32# This package aggregates output deployed by other packages, so set the
33# appropriate dependencies for populate binaries task
34do_resolve_and_populate_binaries[depends] += " \
35 ${@' '.join('%s:do_deploy' % r for r in '${IMX_EXTRA_FIRMWARE}'.split() )} \
36 imx-atf:do_deploy \
37 ${@bb.utils.contains('MACHINE_FEATURES', 'optee', 'optee-os:do_deploy', '', d)} \
38"
39
40# Append make flags to include ATF load address
41EXTRA_OEMAKE += "ATF_LOAD_ADDR=${ATF_LOAD_ADDR}"
42
43# Define an additional task that collects binary output from dependent packages
44# and deploys them into the U-Boot build folder
45do_resolve_and_populate_binaries() {
46 if [ ! -n "${ATF_LOAD_ADDR}" ]; then
47 bberror "ATF_LOAD_ADDR is undefined, result binary would be unusable!"
48 fi
49
50 if [ -n "${UBOOT_CONFIG}" ]; then
51 for config in ${UBOOT_MACHINE}; do
52 i=$(expr $i + 1);
53 for type in ${UBOOT_CONFIG}; do
54 j=$(expr $j + 1);
55 if [ $j -eq $i ]; then
56 for ddr_firmware in ${DDR_FIRMWARE_NAME}; do
57 # Sanitize the FW name as U-Boot expects it to be without version
58 if [ -n "${DDR_FIRMWARE_VERSION}" ]; then
59 ddr_firmware_name=$(echo $ddr_firmware | sed s/_${DDR_FIRMWARE_VERSION}//)
60 else
61 ddr_firmware_name="$ddr_firmware"
62 fi
63 bbnote "Copy ddr_firmware: ${ddr_firmware} from ${DEPLOY_DIR_IMAGE} -> ${B}/${config}/${ddr_firmware_name}"
64 cp ${DEPLOY_DIR_IMAGE}/${ddr_firmware} ${B}/${config}/${ddr_firmware_name}
65 done
66 if [ -n "${ATF_MACHINE_NAME}" ]; then
67 cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${ATF_MACHINE_NAME} ${B}/${config}/bl31.bin
68 else
69 bberror "ATF binary is undefined, result binary would be unusable!"
70 fi
71 fi
72 done
73 unset j
74 done
75 unset i
76 fi
77}
78addtask do_resolve_and_populate_binaries before do_compile after do_configure
79
80# Append the u-boot do_deploy task to deploy also the result flash.bin
81# boot container as a replacement for the one provided by NXP BSP.
82#
83# Deploy task renames the target file from flash.bin to imx-boot to match
84# the name WKS file requires.
85#
86# This effectively would allow the usage of the same WKS file for those
87# derivatives that are using the boot container from U-Boot and those
88# that are not yet have support for it enabled.
89do_deploy_append() {
90 # Deploy the resulted flash.bin for WIC to pick it up
91 if [ -n "${UBOOT_CONFIG}" ]; then
92 for config in ${UBOOT_MACHINE}; do
93 i=$(expr $i + 1);
94 for type in ${UBOOT_CONFIG}; do
95 j=$(expr $j + 1);
96 if [ $j -eq $i ]
97 then
98 install -m 0644 ${B}/${config}/flash.bin ${DEPLOYDIR}/flash.bin-${MACHINE}-${UBOOT_CONFIG}
99 ln -sf flash.bin-${MACHINE}-${UBOOT_CONFIG} imx-boot
100 ln -sf flash.bin-${MACHINE}-${UBOOT_CONFIG} flash.bin
101 fi
102 done
103 unset j
104 done
105 unset i
106 fi
107}