blob: 913286e842aa17c03b6b78b9082f36d9e972c5cb [file] [log] [blame]
Tim Leedd14a912022-07-29 16:42:15 +08001UBOOT_BINARY := "u-boot.${UBOOT_SUFFIX}"
2BOOTBLOCK = "BootBlockAndHeader.bin"
3ATF_BINARY := "bl31AndHeader.bin"
4OPTEE_BINARY := "teeAndHeader.bin"
5KMT_TIPFW_BINARY := "Kmt_TipFwL0_Skmt_TipFwL1.bin"
6KMT_TIPFW_BB_BINARY = "Kmt_TipFw_BootBlock.bin"
7KMT_TIPFW_BB_BL31_BINARY = "Kmt_TipFw_BootBlock_BL31.bin"
8KMT_TIPFW_BB_BL31_TEE_BINARY = "Kmt_TipFw_BootBlock_BL31_Tee.bin"
9KMT_TIPFW_BB_UBOOT_BINARY = "u-boot.bin.merged"
10FULL_SUFFIX = "full"
11MERGED_SUFFIX = "merged"
Tim Lee3af4d262022-09-27 15:01:43 +080012UBOOT_SUFFIX:append = ".${MERGED_SUFFIX}"
Tim Leedd14a912022-07-29 16:42:15 +080013
14IGPS_DIR = "${STAGING_DIR_NATIVE}/${datadir}/npcm8xx-igps"
Tim Leedd14a912022-07-29 16:42:15 +080015
Tim Lee7f23e3a2022-11-30 13:53:50 +080016BB_BIN = "arbel_a35_bootblock.bin"
17BL31_BIN = "bl31.bin"
18OPTEE_BIN = "tee.bin"
19UBOOT_BIN = "u-boot.bin"
20
21# Align images if needed
22python do_pad_binary() {
23 def Pad_bin_file_inplace(inF, align):
24 padding_size = 0
25 padding_size_end = 0
26
27 F_size = os.path.getsize(inF)
28
29 padding_size = align - (F_size % align)
30
31 infile = open(inF, "ab")
32 infile.seek(0, 2)
33 infile.write(b'\x00' * padding_size)
34 infile.close()
35
36 Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
37 '%s' % d.getVar('BB_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
38
39 Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
40 '%s' % d.getVar('BL31_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
41
42 Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
43 '%s' % d.getVar('OPTEE_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
44
45 Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
46 '%s' % d.getVar('UBOOT_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
47}
48
Tim Leedd14a912022-07-29 16:42:15 +080049# Prepare the Bootblock and U-Boot images using npcm8xx-bingo
50do_prepare_bootloaders() {
51 local olddir="$(pwd)"
52 cd ${DEPLOY_DIR_IMAGE}
53
54 bingo ${IGPS_DIR}/BL31_AndHeader.xml \
55 -o ${DEPLOY_DIR_IMAGE}/${ATF_BINARY}
56
57 bingo ${IGPS_DIR}/OpTeeAndHeader.xml \
58 -o ${DEPLOY_DIR_IMAGE}/${OPTEE_BINARY}
59
60 bingo ${IGPS_DIR}/BootBlockAndHeader_${DEVICE_GEN}_${IGPS_MACHINE}.xml \
61 -o ${DEPLOY_DIR_IMAGE}/${BOOTBLOCK}
62
63 bingo ${IGPS_DIR}/UbootHeader_${DEVICE_GEN}.xml \
64 -o ${UBOOT_BINARY}.${FULL_SUFFIX}
65
66 cd "$olddir"
67}
68
69python do_merge_bootloaders() {
70
Tim Lee9d9d9e32022-10-28 16:57:26 +080071 def Merge_bin_files_and_pad(inF1, inF2, outF, align, align_end):
Tim Leedd14a912022-07-29 16:42:15 +080072 padding_size = 0
73 padding_size_end = 0
74 F1_size = os.path.getsize(inF1)
75 F2_size = os.path.getsize(inF2)
76
77 if ((F1_size % align) != 0):
78 padding_size = align - (F1_size % align)
79
Tim Lee9d9d9e32022-10-28 16:57:26 +080080 if ((F2_size % align_end) != 0):
81 padding_size_end = align_end - (F2_size % align_end)
Tim Leedd14a912022-07-29 16:42:15 +080082
83 with open(outF, "wb") as file3:
84 with open(inF1, "rb") as file1:
85 data = file1.read()
86 file3.write(data)
87
88 file3.write(b'\xFF' * padding_size)
89
90 with open(inF2, "rb") as file2:
91 data = file2.read()
92 file3.write(data)
93
94 file3.write(b'\xFF' * padding_size_end)
95
96 Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BINARY',True)),
97 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BOOTBLOCK',True)),
98 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BINARY',True)),
Tim Lee9d9d9e32022-10-28 16:57:26 +080099 int(d.getVar('BB_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
Tim Leedd14a912022-07-29 16:42:15 +0800100
101 Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BINARY',True)),
102 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('ATF_BINARY',True)),
103 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_BINARY',True)),
Tim Lee9d9d9e32022-10-28 16:57:26 +0800104 int(d.getVar('ATF_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
Tim Leedd14a912022-07-29 16:42:15 +0800105
106 Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_BINARY',True)),
107 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('OPTEE_BINARY',True)),
108 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_TEE_BINARY',True)),
Tim Lee9d9d9e32022-10-28 16:57:26 +0800109 int(d.getVar('OPTEE_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
Tim Leedd14a912022-07-29 16:42:15 +0800110
111 Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_TEE_BINARY',True)),
112 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s.full' % d.getVar('UBOOT_BINARY',True)),
113 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_UBOOT_BINARY',True)),
Tim Lee9d9d9e32022-10-28 16:57:26 +0800114 int(d.getVar('UBOOT_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
Tim Leedd14a912022-07-29 16:42:15 +0800115}
116
Tim Lee30d2a112022-12-01 14:19:46 +0800117do_pad_binary[depends] += " \
Tim Leedd14a912022-07-29 16:42:15 +0800118 npcm8xx-tip-fw:do_deploy \
119 npcm8xx-bootblock:do_deploy \
Tim Lee3af4d262022-09-27 15:01:43 +0800120 u-boot-nuvoton:do_deploy \
Tim Leedd14a912022-07-29 16:42:15 +0800121 trusted-firmware-a:do_deploy \
122 optee-os:do_deploy \
123 npcm7xx-bingo-native:do_populate_sysroot \
124 npcm8xx-igps-native:do_populate_sysroot \
125 "
126
127# link images for we only need to flash partial image with idea name
128do_generate_ext4_tar:append() {
129 cd ${DEPLOY_DIR_IMAGE}
130 ln -sf ${UBOOT_BINARY}.${MERGED_SUFFIX} image-u-boot
131 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
132 ln -sf ${S}/ext4/${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst image-rofs
133 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} image-rwfs
134 ln -sf ${IMAGE_NAME}.rootfs.wic.gz image-emmc.gz
135}
136
Tim Lee7f23e3a2022-11-30 13:53:50 +0800137addtask do_pad_binary before do_prepare_bootloaders
Tim Leedd14a912022-07-29 16:42:15 +0800138addtask do_prepare_bootloaders before do_generate_static after do_generate_rwfs_static
139addtask do_merge_bootloaders before do_generate_static after do_prepare_bootloaders
140addtask do_merge_bootloaders before do_generate_ext4_tar after do_prepare_bootloaders
141
142# Include the full bootblock and u-boot in the final static image
143python do_generate_static:append() {
144 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
145 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
146 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
147 int(d.getVar('FLASH_KERNEL_OFFSET', True)))
148}
149
150do_make_ubi:append() {
151 # Concatenate the uboot and ubi partitions
152 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
153 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
154 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
155}
156
157do_make_ubi[depends] += "${PN}:do_prepare_bootloaders"
158do_generate_ubi_tar[depends] += "${PN}:do_prepare_bootloaders"
159do_generate_ubi_tar[depends] += "${PN}:do_merge_bootloaders"
160do_generate_static_tar[depends] += "${PN}:do_prepare_bootloaders"
161do_generate_static_tar[depends] += "${PN}:do_merge_bootloaders"
162do_generate_ext4_tar[depends] += "${PN}:do_prepare_bootloaders"
163do_generate_ext4_tar[depends] += "${PN}:do_merge_bootloaders"