summaryrefslogtreecommitdiffstats
path: root/meta-xilinx-core/recipes-bsp
diff options
context:
space:
mode:
authorMark Hatle <mhatle@xilinx.com>2022-05-18 11:16:49 -0700
committerMark Hatle <mhatle@xilinx.com>2022-05-24 10:53:49 -0700
commit6fdccd557b55ee47dac57f42854d52179547c3eb (patch)
tree3865e85693e52c019052dff1d80debc3ed5a9133 /meta-xilinx-core/recipes-bsp
parent0178d0642b335ffbe41651578a03cee737d188e7 (diff)
downloadmeta-xilinx-6fdccd557b55ee47dac57f42854d52179547c3eb.tar.gz
u-boot-xlnx: Move all u-boot FIT image (blob) implementation to here
The implementation appeared to have been split between meta-som and meta-xilinx-core. The core implementation should be generic and in meta-xilinx-core. Specifics for the som board (or other boards) will be captured in the board specific layers. Note: This code may be moved in the future as part of a consolidation of device tree related items. Signed-off-by: Mark Hatle <mhatle@xilinx.com> (cherry picked from commit b3470a5676ffb13addb446d0e8842e83b9c05eb2) Signed-off-by: Mark Hatle <mhatle@xilinx.com>
Diffstat (limited to 'meta-xilinx-core/recipes-bsp')
-rw-r--r--meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb2
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc156
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc5
3 files changed, 159 insertions, 4 deletions
diff --git a/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb b/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb
index adf89c55..83ae7722 100644
--- a/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb
+++ b/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb
@@ -8,7 +8,7 @@ BRANCH ?= "xlnx_rel_v2022.1"
8REPO ?= "git://github.com/Xilinx/libdfx.git;protocol=https" 8REPO ?= "git://github.com/Xilinx/libdfx.git;protocol=https"
9BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" 9BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
10SRC_URI = "${REPO};${BRANCHARG}" 10SRC_URI = "${REPO};${BRANCHARG}"
11SRCREV = "1a1454ed0c3a56912250182f591c051f355fbf47" 11SRCREV = "96d8462a72b9b64e1057f8864795b5f60a2fc884"
12 12
13COMPATIBLE_MACHINE = "^$" 13COMPATIBLE_MACHINE = "^$"
14COMPATIBLE_MACHINE:zynqmp = "zynqmp" 14COMPATIBLE_MACHINE:zynqmp = "zynqmp"
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc
new file mode 100644
index 00000000..717b8dd3
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc
@@ -0,0 +1,156 @@
1# U-boot fitimage/blob generator
2
3UBOOT_IMAGE_BLOB ?= ""
4DT_BLOB_DIR ?= "${B}/arch/arm/dts/dt-blob"
5UBOOT_BLOB_NAME ?= "${MACHINE}-fit-dtb${IMAGE_VERSION_SUFFIX}.blob"
6
7IMPORT_CC_DTBS ?= ""
8CC_DTBS_DUP ?= ""
9
10MKIMAGE_DTBLOB_OPTS ?= "-E -B 0x8"
11
12# Everything is swtiched on with UBOOT_IMAGE_BLOB = '1'
13inherit ${@'image-artifact-names' if d.getVar('UBOOT_IMAGE_BLOB') == "1" else ''}
14
15python() {
16 if d.getVar('UBOOT_IMAGE_BLOB') == "1":
17 d.appendVarFlag('do_compile', 'postfuncs', ' do_blob_generate')
18 d.appendVarFlag('do_compile', 'cleandirs', ' ${DT_BLOB_DIR}')
19 d.appendVar('PROVIDES', ' u-boot-xlnx-fit-blob')
20 d.appendVar('DEPENDS', ' u-boot-mkimage-native')
21}
22
23dtblob_emit_its_section() {
24 case $2 in
25 header)
26 cat << EOF > $1
27/dts-v1/;
28
29/ {
30 description = "DT Blob Creation";
31EOF
32 ;;
33 imagestart)
34 cat << EOF >> $1
35
36 images {
37EOF
38 ;;
39 confstart)
40 cat << EOF >> $1
41
42 configurations {
43EOF
44 ;;
45 sectend)
46 cat << EOF >> $1
47 };
48EOF
49 ;;
50 fitend)
51 cat << EOF >> $1
52};
53EOF
54 ;;
55 esac
56}
57
58dtblob_emit_dtb () {
59 dtb_csum="md5"
60 cat << EOF >> $1
61 fdt-$2 {
62 description = "$(basename $3 .dtb)";
63 data = /incbin/("$3");
64 type = "flat_dt";
65 arch = "arm64";
66 compression = "none";
67 hash-1 {
68 algo = "$dtb_csum";
69 };
70 };
71EOF
72}
73
74#1.file name
75#2.config node
76#3.config node description
77#4.DTB count
78dtblob_emit_config () {
79 default_dtb=1
80 if [ $4 -eq $default_dtb ]; then
81 cat << EOF >> $1
82 default = "config_$4";
83EOF
84 fi
85 cat << EOF >> $1
86 config_$4 {
87 description = "$3";
88 fdt = "fdt-$2";
89 };
90EOF
91}
92
93do_blob_generate () {
94 oe_runmake -C ${S} O=${B} dtbs
95 install -d ${DT_BLOB_DIR}
96 for CC_DTB in ${IMPORT_CC_DTBS}; do
97 DTBO=$(echo $CC_DTB | cut -d: -f1)
98 DTB=$(echo $CC_DTB | cut -d: -f2)
99 bbnote "fdtoverlay -o ${DT_BLOB_DIR}/${DTB} -i ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME} ${B}/arch/arm/dts/${DTBO}"
100 if [ -f ${B}/arch/arm/dts/${DTBO} ]; then
101 fdtoverlay -o ${DT_BLOB_DIR}/${DTB} \
102 -i ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME} ${B}/arch/arm/dts/${DTBO}
103 fi
104 done
105
106 cd ${DT_BLOB_DIR}
107 its_filename="dtblob.its"
108 dtblob_emit_its_section "${its_filename}" "header"
109 dtblob_emit_its_section "${its_filename}" "imagestart"
110 for dtb in ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME} $(find ${DT_BLOB_DIR} -name '*.dtb' | sort); do
111 dtblob_emit_dtb "${its_filename}" "$(basename $dtb .dtb)" "$dtb"
112 done
113 dtblob_emit_its_section "${its_filename}" "sectend"
114 dtblob_emit_its_section "${its_filename}" "confstart"
115 dtbcount=1
116 for dtb in ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME} $(find ${DT_BLOB_DIR} -name '*.dtb' | sort); do
117 dtblob_emit_config "${its_filename}" "$(basename $dtb .dtb)" "$(basename $dtb .dtb)" "$dtbcount"
118 dtbcount=`expr $dtbcount + 1`
119 done
120
121 for CC_DTB_DUP in ${CC_DTBS_DUP}; do
122 DTB=$(echo $CC_DTB_DUP | cut -d: -f1)
123 DUP_DTB=$(echo $CC_DTB_DUP | cut -d: -f2)
124 if [ -f ${DT_BLOB_DIR}/${DTB}.dtb ]; then
125 bbnote "Node ${DT_BLOB_DIR}/${DTB} with ${DT_BLOB_DIR}/${DUP_DTB}"
126 dtblob_emit_config "${its_filename}" "$DTB" "$DUP_DTB" "$dtbcount"
127 dtbcount=`expr $dtbcount + 1`
128 fi
129 done
130
131 dtblob_emit_its_section "${its_filename}" "sectend"
132 dtblob_emit_its_section "${its_filename}" "fitend"
133
134 mkimage ${MKIMAGE_DTBLOB_OPTS} -f "${its_filename}" "${UBOOT_BLOB_NAME}"
135}
136
137do_install:append() {
138 (
139 cd ${B}
140
141 if [ -e "${DT_BLOB_DIR}/${UBOOT_BLOB_NAME}" ]; then
142 install -d ${D}/boot
143 install -m 0644 ${DT_BLOB_DIR}/${UBOOT_BLOB_NAME} ${D}/boot
144 ln -sf `basename ${UBOOT_BLOB_NAME}` ${D}/boot/fit-dtb.blob
145 fi
146 )
147}
148
149do_deploy:prepend() {
150 cd ${B}
151
152 if [ -e "${DT_BLOB_DIR}/${UBOOT_BLOB_NAME}" ]; then
153 install -m 0644 ${DT_BLOB_DIR}/${UBOOT_BLOB_NAME} ${DEPLOYDIR}/
154 ln -sf `basename ${UBOOT_BLOB_NAME}` ${DEPLOYDIR}/fit-dtb.blob
155 fi
156}
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
index f0ea2ca3..909dd72a 100644
--- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
@@ -32,11 +32,10 @@ python __anonymous () {
32 d.appendVarFlag('do_configure', 'depends', ' virtual/dtb:do_populate_sysroot') 32 d.appendVarFlag('do_configure', 'depends', ' virtual/dtb:do_populate_sysroot')
33 if d.getVar("DTB_NAME") is not None: 33 if d.getVar("DTB_NAME") is not None:
34 d.setVar('DTB_NAME', d.getVar('BASE_DTS')+ '.dtb') 34 d.setVar('DTB_NAME', d.getVar('BASE_DTS')+ '.dtb')
35
36 if d.getVar('UBOOT_IMAGE_BLOB') == "1":
37 d.appendVarFlag('do_compile', 'postfuncs', ' do_blob_generate')
38} 35}
39 36
37require u-boot-xlnx-blob.inc
38
40UBOOTELF_NODTB_IMAGE ?= "u-boot-nodtb.elf" 39UBOOTELF_NODTB_IMAGE ?= "u-boot-nodtb.elf"
41UBOOTELF_NODTB_BINARY ?= "u-boot" 40UBOOTELF_NODTB_BINARY ?= "u-boot"
42do_deploy:prepend() { 41do_deploy:prepend() {