summaryrefslogtreecommitdiff
path: root/meta-phosphor/classes
diff options
context:
space:
mode:
authorTim Lee <timlee660101@gmail.com>2022-07-29 11:42:15 +0300
committerPatrick Williams <patrick@stwcx.xyz>2022-09-27 00:57:08 +0300
commitdd14a9110cf16a8293d619b25ba26aa7fe1b6e2a (patch)
tree400242d2b9f294e9c22d21fb2f6e3e9993e6e489 /meta-phosphor/classes
parent2b94a8ce468fa1faa6df1d9ed2cd1e0cf26a3240 (diff)
downloadopenbmc-dd14a9110cf16a8293d619b25ba26aa7fe1b6e2a.tar.xz
meta-nuvoton: add support to generate full flash image for npcm8xx
Nuvoton's npcm8xx full flash image includes TIP FW, Bootblock, ATF, OPTEE and UBOOT with headers. Generating headers and merging images are being done by Nuvoton's binary generator tool (Bingo) which uses external parameters from XML files for that. Thus, we need to add related fitimage and image type for npcm8xx. However, before merge this commit, we must wait for below commits were merged. meta-nuvoton: arm-trusted-firmware: add arm trusted firmware recipe https://gerrit.openbmc.org/c/openbmc/openbmc/+/55234 meta-nuvoton: add npcm8xx-bootblock recipe https://gerrit.openbmc.org/c/openbmc/openbmc/+/55117 meta-nuvoton: add npcm8xx-igps recipe https://gerrit.openbmc.org/c/openbmc/openbmc/+/55099 meta-nuvoton: npcm7xx-bingo: upgrade latest version 0.0.5 support Arbel https://gerrit.openbmc.org/c/openbmc/openbmc/+/55128 Signed-off-by: Tim Lee <timlee660101@gmail.com> Change-Id: I4599e39d3873f07cde6904d0f10161964fc45c7a
Diffstat (limited to 'meta-phosphor/classes')
-rw-r--r--meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass128
1 files changed, 128 insertions, 0 deletions
diff --git a/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass b/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass
new file mode 100644
index 0000000000..93ff3e99ce
--- /dev/null
+++ b/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass
@@ -0,0 +1,128 @@
+UBOOT_BINARY := "u-boot.${UBOOT_SUFFIX}"
+BOOTBLOCK = "BootBlockAndHeader.bin"
+ATF_BINARY := "bl31AndHeader.bin"
+OPTEE_BINARY := "teeAndHeader.bin"
+KMT_TIPFW_BINARY := "Kmt_TipFwL0_Skmt_TipFwL1.bin"
+KMT_TIPFW_BB_BINARY = "Kmt_TipFw_BootBlock.bin"
+KMT_TIPFW_BB_BL31_BINARY = "Kmt_TipFw_BootBlock_BL31.bin"
+KMT_TIPFW_BB_BL31_TEE_BINARY = "Kmt_TipFw_BootBlock_BL31_Tee.bin"
+KMT_TIPFW_BB_UBOOT_BINARY = "u-boot.bin.merged"
+FULL_SUFFIX = "full"
+MERGED_SUFFIX = "merged"
+
+IGPS_DIR = "${STAGING_DIR_NATIVE}/${datadir}/npcm8xx-igps"
+inherit logging
+
+# Prepare the Bootblock and U-Boot images using npcm8xx-bingo
+do_prepare_bootloaders() {
+ local olddir="$(pwd)"
+ cd ${DEPLOY_DIR_IMAGE}
+
+ bingo ${IGPS_DIR}/BL31_AndHeader.xml \
+ -o ${DEPLOY_DIR_IMAGE}/${ATF_BINARY}
+
+ bingo ${IGPS_DIR}/OpTeeAndHeader.xml \
+ -o ${DEPLOY_DIR_IMAGE}/${OPTEE_BINARY}
+
+ bingo ${IGPS_DIR}/BootBlockAndHeader_${DEVICE_GEN}_${IGPS_MACHINE}.xml \
+ -o ${DEPLOY_DIR_IMAGE}/${BOOTBLOCK}
+
+ bingo ${IGPS_DIR}/UbootHeader_${DEVICE_GEN}.xml \
+ -o ${UBOOT_BINARY}.${FULL_SUFFIX}
+
+ cd "$olddir"
+}
+
+python do_merge_bootloaders() {
+
+ def Merge_bin_files_and_pad(inF1, inF2, outF, align, padding_at_end):
+ padding_size = 0
+ padding_size_end = 0
+ F1_size = os.path.getsize(inF1)
+ F2_size = os.path.getsize(inF2)
+
+ if ((F1_size % align) != 0):
+ padding_size = align - (F1_size % align)
+
+ if ((F2_size % align) != 0):
+ padding_size_end = align - (F2_size % align)
+
+ with open(outF, "wb") as file3:
+ with open(inF1, "rb") as file1:
+ data = file1.read()
+ file3.write(data)
+
+ file3.write(b'\xFF' * padding_size)
+
+ with open(inF2, "rb") as file2:
+ data = file2.read()
+ file3.write(data)
+
+ file3.write(b'\xFF' * padding_size_end)
+
+ Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BOOTBLOCK',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BINARY',True)),
+ 0x1000, 0x20)
+
+ Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('ATF_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_BINARY',True)),
+ 0x1000, 0x20)
+
+ Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('OPTEE_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_TEE_BINARY',True)),
+ 0x1000, 0x20)
+
+ Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_TEE_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s.full' % d.getVar('UBOOT_BINARY',True)),
+ os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_UBOOT_BINARY',True)),
+ 0x1000, 0x20)
+}
+
+do_prepare_bootloaders[depends] += " \
+ npcm8xx-tip-fw:do_deploy \
+ npcm8xx-bootblock:do_deploy \
+ trusted-firmware-a:do_deploy \
+ optee-os:do_deploy \
+ npcm7xx-bingo-native:do_populate_sysroot \
+ npcm8xx-igps-native:do_populate_sysroot \
+ "
+
+# link images for we only need to flash partial image with idea name
+do_generate_ext4_tar:append() {
+ cd ${DEPLOY_DIR_IMAGE}
+ ln -sf ${UBOOT_BINARY}.${MERGED_SUFFIX} image-u-boot
+ ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
+ ln -sf ${S}/ext4/${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst image-rofs
+ ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} image-rwfs
+ ln -sf ${IMAGE_NAME}.rootfs.wic.gz image-emmc.gz
+}
+
+addtask do_prepare_bootloaders before do_generate_static after do_generate_rwfs_static
+addtask do_merge_bootloaders before do_generate_static after do_prepare_bootloaders
+addtask do_merge_bootloaders before do_generate_ext4_tar after do_prepare_bootloaders
+
+# Include the full bootblock and u-boot in the final static image
+python do_generate_static:append() {
+ _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
+ 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
+ int(d.getVar('FLASH_UBOOT_OFFSET', True)),
+ int(d.getVar('FLASH_KERNEL_OFFSET', True)))
+}
+
+do_make_ubi:append() {
+ # Concatenate the uboot and ubi partitions
+ dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
+ if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
+ of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
+}
+
+do_make_ubi[depends] += "${PN}:do_prepare_bootloaders"
+do_generate_ubi_tar[depends] += "${PN}:do_prepare_bootloaders"
+do_generate_ubi_tar[depends] += "${PN}:do_merge_bootloaders"
+do_generate_static_tar[depends] += "${PN}:do_prepare_bootloaders"
+do_generate_static_tar[depends] += "${PN}:do_merge_bootloaders"
+do_generate_ext4_tar[depends] += "${PN}:do_prepare_bootloaders"
+do_generate_ext4_tar[depends] += "${PN}:do_merge_bootloaders"