diff --git a/meta-nuvoton/conf/machine/evb-npcm845.conf b/meta-nuvoton/conf/machine/evb-npcm845.conf
index 92641ab..b6a4778 100644
--- a/meta-nuvoton/conf/machine/evb-npcm845.conf
+++ b/meta-nuvoton/conf/machine/evb-npcm845.conf
@@ -18,8 +18,6 @@
 FLASH_ROFS_OFFSET:flash-65536 = "12288"
 FLASH_RWFS_OFFSET:flash-65536 = "61440"
 
-BB_ALIGN = "524288"
-
 IMAGE_FSTYPES += "cpio.${INITRAMFS_CTYPE}.u-boot"
 IMAGE_FSTYPES += "${@bb.utils.contains('DISTRO_FEATURES', \
         'phosphor-mmc', \
diff --git a/meta-nuvoton/conf/machine/include/igps-keys.inc b/meta-nuvoton/conf/machine/include/igps-keys.inc
deleted file mode 100644
index dcc5f7c..0000000
--- a/meta-nuvoton/conf/machine/include/igps-keys.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-# There are two valid types: "openssl" or "HSM".
-# Currently, default support openssl only.
-SIGN_TYPE ?= "openssl"
-
-KEY_BB_INDEX ?= "1"
-SKMT_BL31_KEY_INDEX ?= "1"
-SKMT_BL32_KEY_INDEX ?= "1"
-SKMT_BL33_KEY_INDEX ?= "1"
-
-KEY_BB_ID ?= "11"
-KEY_BL31_ID ?= "11"
-KEY_OPTEE_ID ?= "11"
-KEY_UBOOT_ID ?= "11"
-
-KEY_FOLDER ?= ""
-KEY_FOLDER_DEFAULT ?= "${DEPLOY_DIR_IMAGE}/${SIGN_TYPE}"
-KEY_BB ?= "skmt_ecc_key_1.der"
-KEY_BL31 ?= "skmt_ecc_key_1.der"
-KEY_OPTEE ?= "skmt_ecc_key_1.der"
-KEY_UBOOT ?= "skmt_ecc_key_1.der"
diff --git a/meta-nuvoton/conf/machine/include/npcm8xx.inc b/meta-nuvoton/conf/machine/include/npcm8xx.inc
index 218b81f..84f4bdf 100644
--- a/meta-nuvoton/conf/machine/include/npcm8xx.inc
+++ b/meta-nuvoton/conf/machine/include/npcm8xx.inc
@@ -3,7 +3,6 @@
 #@DESCRIPTION: Common machine configuration for Nuvoton NPCM8XX Chip
 
 require conf/machine/include/nuvoton.inc
-require conf/machine/include/igps-keys.inc
 
 KERNEL_IMAGETYPE ?= "Image"
 
@@ -29,14 +28,6 @@
 
 SERIAL_CONSOLES ?= "115200;ttyS0"
 
-BB_ALIGN ?= "524288"
-ATF_ALIGN ?= "4096"
-OPTEE_ALIGN ?= "4096"
-UBOOT_ALIGN ?= "4096"
-ALIGN_END ?= "4096"
-PAD_ALIGN ?= "32"
-SA_ALIGN ?= "524288"
-
 SOC_FAMILY = "npcm8xx"
 include conf/machine/include/soc-family.inc
 MACHINEOVERRIDES .= ":npcm8xx"
@@ -57,8 +48,6 @@
 
 OPTEEMACHINE ?= "nuvoton"
 
-SECURED_IMAGE ?= "True"
-
 TIP_IMAGE ?= "True"
 
 SA_TIP_IMAGE ?= "False"
diff --git a/meta-nuvoton/recipes-bsp/images/npcm8xx-bootloader/settings.json b/meta-nuvoton/recipes-bsp/images/npcm8xx-bootloader/settings.json
new file mode 100644
index 0000000..8a741dc
--- /dev/null
+++ b/meta-nuvoton/recipes-bsp/images/npcm8xx-bootloader/settings.json
@@ -0,0 +1,13 @@
+{
+    "BootBlockAndHeader.xml":
+    {
+        "MC_CONFIG": "0x04"
+    },
+    "key_setting_edit_me.py":
+    {
+        "COMBO1_OFFSET": "2048*1024"
+    },
+    "BootBlockAndHeader_no_tip.xml":
+    {
+    }
+}
diff --git a/meta-nuvoton/recipes-bsp/images/npcm8xx-bootloader_0.1.0.bb b/meta-nuvoton/recipes-bsp/images/npcm8xx-bootloader_0.1.0.bb
new file mode 100644
index 0000000..69ceeae
--- /dev/null
+++ b/meta-nuvoton/recipes-bsp/images/npcm8xx-bootloader_0.1.0.bb
@@ -0,0 +1,92 @@
+SUMMARY = "Nuvoton NPCM8XX bootloader"
+DESCRIPTION = "This is front end recipe for NPCM8XX IGPS. It replace \
+original IGPS recipe which need implement many redundant function in \
+recipe or class. After we add some hook in IGPS, now we can generate \
+full bootbloader by IGPS script. We only need collect all built images \
+from deploy folder, put them to IGPS input folder, and run script."
+HOMEPAGE = "https://github.com/Nuvoton-Israel/igps-npcm8xx"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+IGPS_BRANCH ?= "main"
+SRC_URI = " \
+    git://github.com/Nuvoton-Israel/igps-npcm8xx;branch=${IGPS_BRANCH};protocol=https \
+"
+SRCREV = "518d3f58f4f157373a5b1aaebaf22f80bb13d0d9"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = " \
+    npcm8xx-tip-fw npcm8xx-bootblock trusted-firmware-a optee-os \
+    u-boot-nuvoton npcm7xx-bingo-native openssl-native \
+"
+inherit obmc-phosphor-utils
+inherit python3native deploy
+FILE_FMT = "file://{}"
+
+# Sign keys, replace them for production
+IGPS_KEYS = ""
+# Configuration files, clean them if no need
+IGPS_CSVS = ""
+IGPS_SETTINGS = "settings.json"
+IGPS_CONFS = "${IGPS_KEYS} ${IGPS_CSVS} ${IGPS_SETTINGS}"
+SRC_URI += "${@compose_list(d, 'FILE_FMT', 'IGPS_CONFS')}"
+
+IGPS_SCRIPT_BASE = "${S}/py_scripts/ImageGeneration"
+BB_BIN = "arbel_a35_bootblock"
+BB_BIN .= "${@'_no_tip.bin' if d.getVar("TIP_IMAGE") != 'True' else '.bin'}"
+
+do_configure[dirs] = "${WORKDIR}"
+do_configure() {
+    KEY_FOLDER=${IGPS_SCRIPT_BASE}/keys/openssl
+    CSV_FOLDER=${IGPS_SCRIPT_BASE}/inputs/registers
+    # keys
+    install -d ${KEY_FOLDER}
+    if [ -n "${IGPS_KEYS}" ];then
+        cp -v ${IGPS_KEYS} ${KEY_FOLDER}
+    fi
+
+    # csv files
+    install -d ${CSV_FOLDER}
+    if [ -n "${IGPS_CSVS}" ];then
+        cp -v ${IGPS_CSVS} ${CSV_FOLDER}
+    fi
+
+    # change customized settings for XML and key setting
+    if [ -n "${IGPS_SETTINGS}" ];then
+        cd ${S}
+        python3 ${IGPS_SCRIPT_BASE}/config_replacer.py ${WORKDIR}/${IGPS_SETTINGS}
+    fi
+}
+
+do_compile() {
+    # copy Openbmc built images
+    cd ${DEPLOY_DIR_IMAGE}
+    cp -v ${BB_BIN} bl31.bin tee.bin u-boot.bin ${IGPS_SCRIPT_BASE}/inputs
+
+    cd ${IGPS_SCRIPT_BASE}
+    install -d output_binaries/tmp
+    install -d inputs/key_input
+    if [ "${TIP_IMAGE}" = "True" ] || [ "${SA_TIP_IMAGE}" = "True" ];then
+      # Do not sign combo0 image again
+      python3 ${S}/py_scripts/GenerateAll.py openssl ${DEPLOY_DIR_IMAGE}
+    else
+      # for No TIP, we can run IGPS script directly
+      python3 ${S}/py_scripts/GenerateAll.py openssl
+    fi
+}
+
+do_deploy() {
+    OUT=${IGPS_SCRIPT_BASE}/output_binaries
+    BOOTLOADER=u-boot.bin.merged
+    install -d ${DEPLOYDIR}
+    if [ "${SA_TIP_IMAGE}" = "True" ];then
+        install -m 644 ${OUT}/Secure/image_no_tip_SA.bin ${DEPLOYDIR}/${BOOTLOADER}
+    elif [ "${TIP_IMAGE}" = "True" ];then
+        install -m 644 ${OUT}/Secure/Kmt_TipFwL0_Skmt_TipFwL1_BootBlock_BL31_Tee_uboot.bin ${DEPLOYDIR}/${BOOTLOADER}
+    else
+        install -m 644 ${OUT}/Basic/image_no_tip.bin ${DEPLOYDIR}/${BOOTLOADER}
+    fi
+}
+addtask deploy before do_build after do_compile
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-nuvoton/recipes-bsp/images/npcm8xx-igps-native_04.01.03.bb b/meta-nuvoton/recipes-bsp/images/npcm8xx-igps-native_04.01.03.bb
deleted file mode 100644
index 78210af..0000000
--- a/meta-nuvoton/recipes-bsp/images/npcm8xx-igps-native_04.01.03.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-# tag IGPS_04.01.03
-SRCREV = "ae5ddb6c8ff350835d411b9e3bfb4443db596067"
-
-require npcm8xx-igps.inc
diff --git a/meta-nuvoton/recipes-bsp/images/npcm8xx-igps.inc b/meta-nuvoton/recipes-bsp/images/npcm8xx-igps.inc
deleted file mode 100644
index 7c043f8..0000000
--- a/meta-nuvoton/recipes-bsp/images/npcm8xx-igps.inc
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Image Generation and Programming Scripts for NPCM8XX (Arbel) devices"
-DESCRIPTION = "Image Generation and Programming Scripts for NPCM8XX (Arbel) devices"
-HOMEPAGE = "https://github.com/Nuvoton-Israel/igps-npcm8xx"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-IGPS_BRANCH ?= "main"
-SRC_URI = " \
-    git://github.com/Nuvoton-Israel/igps-npcm8xx;branch=${IGPS_BRANCH};protocol=https \
-"
-
-S = "${WORKDIR}/git"
-
-DEST = "${D}${datadir}/${BPN}"
-
-# Adjust paths for use with bitbake
-do_patch() {
-	sed -i -e 's,output_binaries/tmp/,,g' ${S}/py_scripts/ImageGeneration/references/*.xml \
-		${S}/py_scripts/ImageGeneration/inputs/*.xml
-}
-
-do_install() {
-	install -d ${DEST}
-    if [ "${TIP_IMAGE}" = "True" ] ; then
-        install py_scripts/ImageGeneration/references/BootBlockAndHeader_${DEVICE_GEN}_${IGPS_MACHINE}.xml ${DEST}
-	else
-        install py_scripts/ImageGeneration/references/BootBlockAndHeader_${DEVICE_GEN}_${IGPS_MACHINE}_NoTip.xml ${DEST}
-    fi
-	install py_scripts/ImageGeneration/references/UbootHeader_${DEVICE_GEN}.xml ${DEST}
-	install py_scripts/ImageGeneration/inputs/BL31_AndHeader.xml ${DEST}
-	install py_scripts/ImageGeneration/inputs/OpTeeAndHeader.xml ${DEST}
-	install py_scripts/ImageGeneration/asn1.py ${DEST}
-	install py_scripts/ImageGeneration/BinarySignatureGenerator.py ${DEST}
-}
-
-inherit deploy
-
-do_deploy () {
-	# copy default keys to deploy folder
-	install -d ${DEPLOYDIR}
-	cp -vur py_scripts/ImageGeneration/keys/${SIGN_TYPE} ${DEPLOYDIR}/
-}
-
-inherit native
-
-addtask deploy before do_build after do_compile
diff --git a/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass b/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass
index 56aa082..4d593a0 100644
--- a/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass
+++ b/meta-phosphor/classes/image_types_phosphor_nuvoton_npcm8xx.bbclass
@@ -1,291 +1,34 @@
-UBOOT_BINARY := "u-boot.${UBOOT_SUFFIX}"
-BB_HEADER_BINARY := "BootBlockAndHeader.bin"
-BL31_HEADER_BINARY := "bl31AndHeader.bin"
-OPTEE_HEADER_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"
-SA_KMT_TIPFW_BINARY := "SA_Kmt_TipFwL0.bin"
-
-BB_BL31_BINARY = "BootBlock_BL31_no_tip.bin"
-BB_BL31_TEE_BINARY = "BootBlock_BL31_Tee_no_tip.bin"
-BB_BL31_TEE_UBOOT_BINARY = "BootBlock_BL31_Tee_Uboot_no_tip.bin"
-BB_BL31_TEE_UBOOT_SA_BINARY = "BootBlock_BL31_Tee_Uboot_no_tip_SA.bin"
-
-FULL_SUFFIX = "full"
 MERGED_SUFFIX = "merged"
 UBOOT_SUFFIX:append = ".${MERGED_SUFFIX}"
-UBOOT_HEADER_BINARY := "${UBOOT_BINARY}.${FULL_SUFFIX}"
-
-IGPS_DIR = "${STAGING_DIR_NATIVE}/${datadir}/npcm8xx-igps"
-
-BB_BIN = "arbel_a35_bootblock.bin"
-BL31_BIN = "bl31.bin"
-OPTEE_BIN = "tee.bin"
-UBOOT_BIN = "u-boot.bin"
-BB_NO_TIP_BIN = "arbel_a35_bootblock_no_tip.bin"
 
 FIT_KERNEL_COMP_ALG:df-obmc-static-norootfs = "gzip"
 FIT_KERNEL_COMP_ALG_EXTENSION:df-obmc-static-norootfs = ".gz"
 
-# Align images if needed
-python do_pad_binary() {
-    TIP_IMAGE = d.getVar('TIP_IMAGE', True)
-    def Pad_bin_file_inplace(inF, align):
-        padding_size = 0
-
-        F_size = os.path.getsize(inF)
-
-        if ((F_size % align) == 0):
-            return
-
-        padding_size = align - (F_size % align)
-
-        infile = open(inF, "ab")
-        infile.seek(0, 2)
-        infile.write(b'\x00' * padding_size)
-        infile.close()
-
-    if TIP_IMAGE == "True":
-        Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
-        '%s' % d.getVar('BB_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
-    else:
-        Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
-        '%s' % d.getVar('BB_NO_TIP_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
-
-    Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
-    '%s' % d.getVar('BL31_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
-
-    Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
-    '%s' % d.getVar('OPTEE_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
-
-    Pad_bin_file_inplace(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
-        '%s' % d.getVar('UBOOT_BIN',True)), int(d.getVar('PAD_ALIGN', True)))
-}
-
-# 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 ${BL31_HEADER_BINARY}
-
-    bingo ${IGPS_DIR}/OpTeeAndHeader.xml \
-            -o ${OPTEE_HEADER_BINARY}
-
-    if [ "${TIP_IMAGE}" = "True" ]; then
-    bingo ${IGPS_DIR}/BootBlockAndHeader_${DEVICE_GEN}_${IGPS_MACHINE}.xml \
-            -o ${BB_HEADER_BINARY}
-    else
-    bingo ${IGPS_DIR}/BootBlockAndHeader_${DEVICE_GEN}_${IGPS_MACHINE}_NoTip.xml \
-            -o ${BB_HEADER_BINARY}
-    fi
-
-    bingo ${IGPS_DIR}/UbootHeader_${DEVICE_GEN}.xml \
-            -o ${UBOOT_HEADER_BINARY}
-
-    cd "$olddir"
-}
-
-check_keys() {
-    if [ -n "${KEY_FOLDER}" ]; then
-        echo "local"
-    else
-        echo "default"
-    fi
-}
-
-# Sign images for secure os be enabled and TIP mode only
-do_sign_binary() {
-    if [ "${SECURED_IMAGE}" != "True" -o "${TIP_IMAGE}" != "True" ]; then
-       return
-    fi
-    checked=`check_keys`
-    if [ "${checked}" = "local" ]; then
-        bbnote "Sign image with local keys"
-        key_bb=${KEY_FOLDER}/${KEY_BB}
-        key_bl31=${KEY_FOLDER}/${KEY_BL31}
-        key_optee=${KEY_FOLDER}/${KEY_OPTEE}
-        key_uboot=${KEY_FOLDER}/${KEY_UBOOT}
-    else
-        bbnote "Sign image with default keys"
-        key_bb=${KEY_FOLDER_DEFAULT}/${KEY_BB}
-        key_bl31=${KEY_FOLDER_DEFAULT}/${KEY_BL31}
-        key_optee=${KEY_FOLDER_DEFAULT}/${KEY_OPTEE}
-        key_uboot=${KEY_FOLDER_DEFAULT}/${KEY_UBOOT}
-    fi
-    bbnote "BB sign key from ${checked}: ${key_bb}"
-    bbnote "BL31 sign key from ${checked}: ${key_bl31}"
-    bbnote "OPTEE sign key from ${checked}: ${key_optee}"
-    bbnote "UBOOT sign key from ${checked}: ${key_uboot}"
-    # Used to embed the key index inside the image, usually at offset 0x140
-    python3 ${IGPS_DIR}/BinarySignatureGenerator.py Replace_binary_single_byte \
-        ${DEPLOY_DIR_IMAGE}/${BB_HEADER_BINARY} 140 ${KEY_BB_INDEX}
-
-    python3 ${IGPS_DIR}/BinarySignatureGenerator.py Replace_binary_single_byte \
-        ${DEPLOY_DIR_IMAGE}/${BL31_HEADER_BINARY} 140 ${SKMT_BL31_KEY_INDEX}
-
-    python3 ${IGPS_DIR}/BinarySignatureGenerator.py Replace_binary_single_byte \
-        ${DEPLOY_DIR_IMAGE}/${OPTEE_HEADER_BINARY} 140 ${SKMT_BL32_KEY_INDEX}
-
-    python3 ${IGPS_DIR}/BinarySignatureGenerator.py Replace_binary_single_byte \
-        ${DEPLOY_DIR_IMAGE}/${UBOOT_HEADER_BINARY} 140 ${SKMT_BL33_KEY_INDEX}
-
-    # Sign specific image with specific key
-    res=`python3 ${IGPS_DIR}/BinarySignatureGenerator.py Sign_binary \
-        ${DEPLOY_DIR_IMAGE}/${BB_HEADER_BINARY} 112 ${key_bb} 16 \
-        ${DEPLOY_DIR_IMAGE}/${BB_HEADER_BINARY} ${SIGN_TYPE} 0 ${KEY_BB_ID}
-
-        python3 ${IGPS_DIR}/BinarySignatureGenerator.py Sign_binary \
-        ${DEPLOY_DIR_IMAGE}/${BL31_HEADER_BINARY} 112 ${key_bl31} 16 \
-        ${DEPLOY_DIR_IMAGE}/${BL31_HEADER_BINARY} ${SIGN_TYPE} 0 ${KEY_BL31_ID}
-
-        python3 ${IGPS_DIR}/BinarySignatureGenerator.py Sign_binary \
-        ${DEPLOY_DIR_IMAGE}/${OPTEE_HEADER_BINARY} 112 ${key_optee} 16 \
-        ${DEPLOY_DIR_IMAGE}/${OPTEE_HEADER_BINARY} ${SIGN_TYPE} 0 ${KEY_OPTEE_ID}
-
-        python3 ${IGPS_DIR}/BinarySignatureGenerator.py Sign_binary \
-        ${DEPLOY_DIR_IMAGE}/${UBOOT_HEADER_BINARY} 112 ${key_uboot} 16 \
-        ${DEPLOY_DIR_IMAGE}/${UBOOT_HEADER_BINARY} ${SIGN_TYPE} 0 ${KEY_UBOOT_ID}`
-
-    # Stop full image build process when sign binary got failed
-    set +e
-    err=`echo $res | grep -E "missing|Invalid|failed"`
-    if [ -n "${err}" ]; then
-        bbfatal "Sign binary failed: keys are not found or invalid. Please check your KEY_FOLDER and KEY definition."
-    fi
-    set -e
-}
-
-python do_merge_bootloaders() {
-    TIP_IMAGE = d.getVar('TIP_IMAGE', True)
-    SA_TIP_IMAGE = d.getVar('SA_TIP_IMAGE', True)
-    def Merge_bin_files_and_pad(inF1, inF2, outF, align, align_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_end) != 0):
-            padding_size_end = align_end - (F2_size % align_end)
-
-        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)
-
-    if TIP_IMAGE == "True":
-        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('BB_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BINARY',True)),
-        int(d.getVar('BB_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-        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('BL31_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_BINARY',True)),
-        int(d.getVar('ATF_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-        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_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_BL31_TEE_BINARY',True)),
-        int(d.getVar('OPTEE_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-        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' % d.getVar('UBOOT_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_UBOOT_BINARY',True)),
-        int(d.getVar('UBOOT_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-    else:
-        Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BL31_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_BINARY',True)),
-        int(d.getVar('ATF_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-        Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('OPTEE_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_BINARY',True)),
-        int(d.getVar('OPTEE_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-        Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('UBOOT_HEADER_BINARY',True)),
-        os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_UBOOT_BINARY',True)),
-        int(d.getVar('UBOOT_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-        if SA_TIP_IMAGE == "True":
-            Merge_bin_files_and_pad(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_UBOOT_BINARY',True)),
-            os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('SA_KMT_TIPFW_BINARY',True)),
-            os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_UBOOT_SA_BINARY',True)),
-            int(d.getVar('SA_ALIGN', True)), int(d.getVar('ALIGN_END', True)))
-
-            os.rename(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_UBOOT_SA_BINARY',True)),
-            os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_UBOOT_BINARY',True)))
-        else:
-            os.rename(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('BB_BL31_TEE_UBOOT_BINARY',True)),
-            os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True), '%s' % d.getVar('KMT_TIPFW_BB_UBOOT_BINARY',True)))
-}
-
-do_pad_binary[depends] += " \
-    ${@'npcm8xx-tip-fw:do_deploy' if d.getVar('TIP_IMAGE', True) == 'True' or d.getVar('SA_TIP_IMAGE', True) == 'True' else ''} \
-    npcm8xx-bootblock:do_deploy \
-    u-boot-nuvoton: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
+    cd ${S}/ext4
+    install -m 644 image-u-boot ${IMGDEPLOYDIR}/image-u-boot
+    cd ${IMGDEPLOYDIR}
+    ln -sf ${IMAGE_LINK_NAME}.wic.gz image-emmc.gz
+    ln -sf ${FLASH_KERNEL_IMAGE} image-kernel
+    ln -sf ${IMAGE_LINK_NAME}.rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} image-rwfs
 }
 
-addtask do_pad_binary before do_prepare_bootloaders
-addtask do_sign_binary before do_merge_bootloaders after do_prepare_bootloaders
-addtask do_prepare_bootloaders before do_generate_static after do_generate_rwfs_static
-addtask do_prepare_bootloaders before do_generate_static_norootfs after do_image_cpio
-addtask do_merge_bootloaders before do_generate_static after do_sign_binary
-addtask do_merge_bootloaders before do_generate_static_norootfs after do_sign_binary
-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)))
+# clean up image-u-boot because we may generate different size bootbloder
+# with different build flags. Function do_generate_image_uboot_file use
+# notrunc flag which may generate redundant image if we don't clean deploy.
+do_clean_image_uboot() {
+    rm -rf ${IMGDEPLOYDIR}/image-u-boot
 }
 
-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
-}
+addtask do_clean_image_uboot after do_rootfs
+do_make_ubi[depends] += "npcm8xx-bootloader:do_deploy"
+do_generate_ubi_tar[depends] += "npcm8xx-bootloader:do_deploy"
+do_generate_static_tar[depends] += "npcm8xx-bootloader:do_deploy"
+do_generate_static[depends] += " \
+    npcm8xx-bootloader:do_deploy \
+    ${PN}:do_clean_image_uboot \
+"
+do_generate_static_norootfs[depends] += "npcm8xx-bootloader:do_deploy"
+do_generate_ext4_tar[depends] += "npcm8xx-bootloader:do_deploy"
 
-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_static_norootfs[depends] += "${PN}:do_prepare_bootloaders"
-do_generate_static_norootfs[depends] += "${PN}:do_merge_bootloaders"
-do_generate_ext4_tar[depends] += "${PN}:do_prepare_bootloaders"
-do_generate_ext4_tar[depends] += "${PN}:do_merge_bootloaders"
