FIP: t5m package uboot inherit form s5 [1/1]

PD#SWPL-90075

Problem:
t5m need storage boot

Solution:
refine package scripts for t5m

Verify:
z1/ptm

Change-Id: I519386e673c7979beacf441c9c05ab4665cc4c42
Signed-off-by: Bo Lv <bo.lv@amlogic.com>
diff --git a/t5m/Makefile b/t5m/Makefile
index 2fb439f..0144743 100644
--- a/t5m/Makefile
+++ b/t5m/Makefile
@@ -3,9 +3,10 @@
 # Rules
 #
 
-DEVICE_SCS_KEY_TOP ?= $(CURDIR)/keys/dev-keys/sc2/device/
+DEVICE_SCS_KEY_TOP ?= $(CURDIR)/keys/dev-keys/s5/device/
 DEVICE_ROOTRSA_INDEX ?= 0
-PROJECT ?= s905x4
+PROJECT ?= s928x
+SOC_FAMILY ?= s5
 DEVICE_SCS_SEGID ?= 0x0
 DEVICE_VENDOR_SEGID ?= 0x0
 DEVICE_SCS_VERS ?= 0x0
@@ -15,6 +16,7 @@
 ARGS += "DEVICE_SCS_KEY_TOP=$(DEVICE_SCS_KEY_TOP)"
 ARGS += "DEVICE_ROOTRSA_INDEX=$(DEVICE_ROOTRSA_INDEX)"
 ARGS += "PROJECT=$(PROJECT)"
+ARGS += "SOC_FAMILY=$(SOC_FAMILY)"
 ARGS += "DEVICE_INPUT_PATH=${DEVICE_INPUT_PATH}"
 ARGS += "DEVICE_OUTPUT_PATH=${DEVICE_OUTPUT_PATH}"
 ARGS += "DEVICE_VARIANT_SUFFIX=${DEVICE_VARIANT_SUFFIX}"
diff --git a/t5m/aml_ddr.fw b/t5m/aml_ddr.fw
deleted file mode 100755
index 390275a..0000000
--- a/t5m/aml_ddr.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/bin/add-dvinit-params.sh b/t5m/bin/add-dvinit-params.sh
index 293fc54..08084ec 100755
--- a/t5m/bin/add-dvinit-params.sh
+++ b/t5m/bin/add-dvinit-params.sh
@@ -19,6 +19,7 @@
 BASEDIR_TEMPLATE=$1
 BASEDIR_PAYLOAD=$2
 BASEDIR_OUTPUT_BLOB=$3
+SOC_FAMILY=$4
 
 #
 # Arguments
@@ -32,6 +33,8 @@
 ### Input: payloads ###
 BB1ST_ARGS="${BB1ST_ARGS} --infile-dvinit-params=${BASEDIR_PAYLOAD}"
 
+BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC_FAMILY}"
+
 ### Output: blobs ###
 BB1ST_ARGS="${BB1ST_ARGS} --outfile-bb1st=${BASEDIR_OUTPUT_BLOB}"
 
diff --git a/t5m/bin/device-vendor-scs-signing.sh b/t5m/bin/device-vendor-scs-signing.sh
index 7488caa..a0ec91c 100755
--- a/t5m/bin/device-vendor-scs-signing.sh
+++ b/t5m/bin/device-vendor-scs-signing.sh
@@ -86,18 +86,18 @@
 	sector=512
 	seek=0
 	seek_sector=0
-	dateStamp=SC2-`date +%Y%m%d%H%M%S`
+	dateStamp=T5M-${part}-`date +%y%m%d%H%M%S`
 
 	echo @AMLBOOT > ${file_info_cfg_temp}
 	dd if=${file_info_cfg_temp} of=${file_info_cfg} bs=1 count=8 conv=notrunc &> /dev/null
 	nItemNum=5
 	nSizeHDR=$[64+nItemNum*16]
-	printf "01 %02x %02x %02x 00 00 00 00" $[(nItemNum)&0xFF] $[(nSizeHDR)&0xFF] $[((nSizeHDR)>>8)&0xFF] \
+	printf "02 %02x %02x %02x" $[(nItemNum)&0xFF] $[(nSizeHDR)&0xFF] $[((nSizeHDR)>>8)&0xFF] \
 		| xxd -r -ps > ${file_info_cfg_temp}
 	cat ${file_info_cfg_temp} >> ${file_info_cfg}
 
 	echo ${dateStamp} > ${file_info_cfg_temp}
-	dd if=${file_info_cfg_temp} of=${file_info_cfg} bs=1 count=16 oflag=append conv=notrunc &> /dev/null
+	dd if=${file_info_cfg_temp} of=${file_info_cfg} bs=1 count=20 oflag=append conv=notrunc &> /dev/null
 
 	index=0
 	arrPayload=("BBST" "BL2E" "BL2X" "DDRF" "DEVF");
@@ -131,7 +131,7 @@
 	rm -f ${file_info_cfg}
 	mv -f ${file_info_cfg}.sha256 ${file_info_cfg}
 
-	dd if=${file_info_cfg} of=${bootloader} bs=512 seek=332 conv=notrunc status=none
+	dd if=${file_info_cfg} of=${bootloader} bs=512 seek=404 conv=notrunc status=none
 
 	if [ ${storage_type_suffix} == ".sto" ]; then
 		total_size=$[total_size+512]
@@ -222,7 +222,6 @@
 		;;
             --out-dir)
                 output_dir="${argv[$i]}"
-                check_dir "${output_dir}"
 		;;
             *)
                 echo "Unknown option $arg";
@@ -244,7 +243,6 @@
 trace "  arb-config ${arb_config}"
 trace "  out-dir ${output_dir}"
 
-
 if [ -z "${key_dir}" ]; then
 	usage
 fi
@@ -320,4 +318,4 @@
 
 if [ -d ${temp_dir} ]; then
 	rm -rf ${temp_dir}
-fi
\ No newline at end of file
+fi
diff --git a/t5m/bin/efuse-gen.sh b/t5m/bin/efuse-gen.sh
index 7db68b1..f6de0fd 100755
--- a/t5m/bin/efuse-gen.sh
+++ b/t5m/bin/efuse-gen.sh
@@ -50,8 +50,7 @@
     cat << EOF
 Usage: $(basename $0) --help
        $(basename $0) --version
-       $(basename $0) [--input base.efuse.bin] \\
-                      [--device-roothash device_roothash.bin] \\
+       $(basename $0) [--device-roothash device_roothash.bin] \\
                       [--dvgk dvgk.bin] \\
                       [--dvuk dvuk.bin] \\
                       [--enable-usb-password true] \\
@@ -61,6 +60,10 @@
                       -o pattern.efuse
        $(basename $0) --audio-id audio_id_value \\
                       -o audio_id.efuse
+       $(basename $0) --device-scs-segid seg_id_value \\
+                      -o device-scs-id.efuse
+       $(basename $0) --device-vendor-segid vend_id_value \\
+                      -o device-vendor-id.efuse
 EOF
     exit 1
 }
@@ -68,23 +71,14 @@
 function generate_efuse_device_pattern() {
     local argv=("$@")
     local i=0
-
 	local patt_text=$(mktemp --tmpdir)
 
-	local patt=$(mktemp --tmpdir)
-	local wrlock=$(mktemp --tmpdir)
-	local license0=$(mktemp --tmpdir)
-	local license1=$(mktemp --tmpdir)
-	local efusebit=$(mktemp --tmpdir)
-
     # Parse args
     while [ $i -lt $# ]; do
         arg="${argv[$i]}"
         #echo "i=$i argv[$i]=${argv[$i]}"
         i=$((i + 1))
         case "$arg" in
-            --input)
-                input="${argv[$i]}" ;;
             -o)
                 output="${argv[$i]}" ;;
             --dvgk)
@@ -121,187 +115,56 @@
     check_opt_boolean enable-dvuk-derive-with-cid "$enable_dvuk_derive_with_cid"
     check_opt_boolean enable-device-vendor-scs "$enable_device_vendor_scs"
 
-	#efuse_obj mode
-	if [ "$dvgk" != "" ]; then
-		keyinfo="$(xxd -p -c 16 $dvgk)"
-		echo "efuse_obj set DVGK $keyinfo" >> $patt_text
-		echo "efuse_obj lock DVGK" >> $patt_text
-	fi
+    if [ "$dvgk" != "" ]; then
+        keyinfo="$(xxd -p -c 16 $dvgk)"
+        echo "efuse_obj set DVGK $keyinfo" >> $patt_text
+        echo "efuse_obj lock DVGK" >> $patt_text
+    fi
 
-	if [ "$dvuk" != "" ]; then
-		keyinfo="$(xxd -p -c 16 $dvuk)"
-		echo "efuse_obj set DVUK $keyinfo" >> $patt_text
-		echo "efuse_obj lock DVUK" >> $patt_text
-	fi
+    if [ "$dvuk" != "" ]; then
+        keyinfo="$(xxd -p -c 16 $dvuk)"
+        echo "efuse_obj set DVUK $keyinfo" >> $patt_text
+        echo "efuse_obj lock DVUK" >> $patt_text
+    fi
 
-	if [ "$device_roothash" != "" ]; then
-		keyinfo="$(xxd -p -c 32 $device_roothash)"
-		echo "efuse_obj set HASH_NORMAL_DEVICE_ROOTCERT $keyinfo" >> $patt_text
-		echo "efuse_obj lock HASH_NORMAL_DEVICE_ROOTCERT" >> $patt_text
-		echo "efuse_obj set HASH_DFU_DEVICE_ROOTCERT $keyinfo" >> $patt_text
-		echo "efuse_obj lock HASH_DFU_DEVICE_ROOTCERT" >> $patt_text
-	fi
+    if [ "$device_roothash" != "" ]; then
+        keyinfo="$(xxd -p -c 32 $device_roothash)"
+        echo "efuse_obj set HASH_NORMAL_DEVICE_ROOTCERT $keyinfo" >> $patt_text
+        echo "efuse_obj lock HASH_NORMAL_DEVICE_ROOTCERT" >> $patt_text
+        echo "efuse_obj set HASH_DFU_DEVICE_ROOTCERT $keyinfo" >> $patt_text
+        echo "efuse_obj lock HASH_DFU_DEVICE_ROOTCERT" >> $patt_text
+    fi
 
-	if [ "$enable_device_vendor_scs" == "true" ]; then
-		echo "efuse_obj set FEAT_ENABLE_DEVICE_ROOT_PUBRSA_PROT 01" >> $patt_text
-		echo "efuse_obj set FEAT_ENABLE_DEVICE_LVL1_PUBRSA_PROT 01" >> $patt_text
-		echo "efuse_obj set FEAT_ENABLE_DEVICE_LVLX_PUBRSA_PROT 01" >> $patt_text
-		echo "efuse_obj set FEAT_ENABLE_DEVICE_VENDOR_SIG 01" >> $patt_text
-		echo "efuse_obj set FEAT_ENABLE_DEVICE_PROT 01" >> $patt_text
-		echo "efuse_obj set FEAT_ENABLE_DEVICE_SCS_SIG 01" >> $patt_text
-	fi
+    if [ "$enable_device_vendor_scs" == "true" ]; then
+        echo "efuse_obj set FEAT_ENABLE_DEVICE_ROOT_PUBRSA_PROT 01" >> $patt_text
+        echo "efuse_obj set FEAT_ENABLE_DEVICE_LVL1_PUBRSA_PROT 01" >> $patt_text
+        echo "efuse_obj set FEAT_ENABLE_DEVICE_LVLX_PUBRSA_PROT 01" >> $patt_text
+        echo "efuse_obj set FEAT_ENABLE_DEVICE_VENDOR_SIG 01" >> $patt_text
+        echo "efuse_obj set FEAT_ENABLE_DEVICE_PROT 01" >> $patt_text
+        echo "efuse_obj set FEAT_ENABLE_DEVICE_SCS_SIG 01" >> $patt_text
+    fi
 
-	if [ "$enable_usb_password" == "true" ]; then
-		echo "efuse_obj set FEAT_ENABLE_USB_AUTH 01" >> $patt_text
-	fi
+    if [ "$enable_usb_password" == "true" ]; then
+        echo "efuse_obj set FEAT_ENABLE_USB_AUTH 01" >> $patt_text
+    fi
 
-	if [ "$enable_dif_password" == "true" ]; then
-		echo "efuse_obj set FEAT_ENABLE_DIF_MASTER_PROT 01" >> $patt_text
-	fi
+    if [ "$enable_dif_password" == "true" ]; then
+        echo "efuse_obj set FEAT_ENABLE_DIF_MASTER_PROT 01" >> $patt_text
+    fi
 
-	if [ "$enable_dvuk_derive_with_cid" == "true" ]; then
-		echo "efuse_obj set FEAT_ENABLE_DVUK_DERIVE_WITH_CID 01" >> $patt_text
-	fi
+    if [ "$enable_dvuk_derive_with_cid" == "true" ]; then
+        echo "efuse_obj set FEAT_ENABLE_DVUK_DERIVE_WITH_CID 01" >> $patt_text
+    fi
 
-	cp $patt_text $output.obj
-
-	rm -f $patt_text
-
-	# Generate empty eFUSE pattern data
-	if [ -n "$input" ]; then
-		dd if="$input" of=$patt count=1024 bs=1 &> /dev/null
-	else
-		dd if=/dev/zero of=$patt count=1024 bs=1 &> /dev/null
-	fi
-
-	# Construct wrlock bits
-	dd if=$patt of=$wrlock bs=16 skip=29 count=1 &> /dev/null
-	b_1d2=$(xxd -ps -s2 -l1 $wrlock)
-	b_1d3=$(xxd -ps -s3 -l1 $wrlock)
-	b_1d6=$(xxd -ps -s6 -l1 $wrlock)
-
-	if [ "$dvgk" != "" ]; then
-		dd if="$dvgk" of="$patt" bs=16 seek=50 count=1 \
-			conv=notrunc >& /dev/null
-		b_1d6="$(printf %02x $(( 0x$b_1d6 | 0x04 )))"
-	fi
-
-	if [ "$dvuk" != "" ]; then
-		dd if="$dvuk" of="$patt" bs=16 seek=51 count=1 \
-			conv=notrunc >& /dev/null
-		b_1d6="$(printf %02x $(( 0x$b_1d6 | 0x08 )))"
-	fi
-
-	if [ "$device_roothash" != "" ]; then
-		dd if="$device_roothash" of="$patt" bs=16 seek=23 count=2 \
-			conv=notrunc >& /dev/null
-		dd if="$device_roothash" of="$patt" bs=16 seek=25 count=2 \
-			conv=notrunc >& /dev/null
-		b_1d2="$(printf %02x $(( 0x$b_1d2 | 0x80 )))"
-		b_1d3="$(printf %02x $(( 0x$b_1d3 | 0x07 )))"
-	fi
-
-	echo $b_1d2 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$wrlock bs=1 seek=2 count=1 conv=notrunc >& /dev/null
-	echo $b_1d3 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$wrlock bs=1 seek=3 count=1 conv=notrunc >& /dev/null
-	echo $b_1d6 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$wrlock bs=1 seek=6 count=1 conv=notrunc >& /dev/null
-
-	filesize=$(wc -c < $wrlock)
-	if [ $filesize -ne 16 ]; then
-		echo Internal Error -- Invalid write-lock pattern length
-		exit 1
-	fi
-	dd if=$wrlock of=$patt bs=16 seek=29 count=1 conv=notrunc >& /dev/null
-
-	dd if=$patt of=$license0 bs=16 skip=0 count=1 &> /dev/null
-	b_001=$(xxd -ps -s1 -l1 $license0)
-	b_002=$(xxd -ps -s2 -l1 $license0)
-	b_003=$(xxd -ps -s3 -l1 $license0)
-	if [ "$enable_device_vendor_scs" == "true" ]; then
-		b_001="$(printf %02x $(( 0x$b_001 | 0x0C )))"
-		b_002="$(printf %02x $(( 0x$b_002 | 0xFF )))"
-		b_003="$(printf %02x $(( 0x$b_003 | 0x03 )))"
-	fi
-	echo $b_001 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$license0 bs=1 seek=1 count=1 conv=notrunc >& /dev/null
-	echo $b_002 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$license0 bs=1 seek=2 count=1 conv=notrunc >& /dev/null
-	echo $b_003 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$license0 bs=1 seek=3 count=1 conv=notrunc >& /dev/null
-
-	b_007=$(xxd -ps -s7 -l1 $license0)
-	if [ "$enable_usb_password" == "true" ]; then
-		b_007="$(printf %02x $(( 0x$b_007 | 0x80 )))"
-	fi
-	echo $b_007 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$license0 bs=1 seek=7 count=1 conv=notrunc >& /dev/null
-
-	filesize=$(wc -c < $license0)
-	if [ $filesize -ne 16 ]; then
-		echo Internal Error -- Invalid license0 pattern length
-		exit 1
-	fi
-	dd if=$license0 of=$patt bs=16 seek=0 count=1 conv=notrunc >& /dev/null
-
-	dd if=$patt of=$license1 bs=16 skip=1 count=1 &> /dev/null
-	b_010=$(xxd -ps -s0 -l1 $license1)
-	if [ "$enable_dif_password" == "true" ]; then
-		b_010="$(printf %02x $(( 0x$b_010 | 0x01 )))"
-	fi
-	echo $b_010 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$license1 bs=1 seek=0 count=1 conv=notrunc >& /dev/null
-
-	b_015=$(xxd -ps -s5 -l1 $license1)
-	if [ "$enable_dvuk_derive_with_cid" == "true" ]; then
-		b_015="$(printf %02x $(( 0x$b_015 | 0x02 )))"
-	fi
-	echo $b_015 | xxd -r -p > $efusebit
-	dd if=$efusebit of=$license1 bs=1 seek=5 count=1 conv=notrunc >& /dev/null
-
-	filesize=$(wc -c < $license1)
-	if [ $filesize -ne 16 ]; then
-		echo Internal Error -- Invalid license1 pattern length
-		exit 1
-	fi
-	dd if=$license1 of=$patt bs=16 seek=1 count=1 conv=notrunc >& /dev/null
-
-	${BASEDIR_TOP}/aml_encrypt_t3 --efsproc --input $patt --output $output --option=debug
-
-	rm -f $patt
-	rm -f $wrlock
-	rm -f $license0
-	rm -f $license1
-	rm -f $efusebit
-}
-
-function append_uint32_le() {
-    local input=$1
-    local output=$2
-    local v=
-    local vrev=
-    v=$(printf %08x $input)
-    # 00010001
-    vrev=${v:6:2}${v:4:2}${v:2:2}${v:0:2}
-
-    echo $vrev | xxd -r -p >> $output
+    cp $patt_text $output
+    rm -f $patt_text
 }
 
 function generate_audio_id_pattern() {
     local argv=("$@")
     local i=0
-
 	local patt_text=$(mktemp --tmpdir)
 
-	local patt=$(mktemp --tmpdir)
-	local audio_id_efuse=$(mktemp --tmpdir)
-	# default audio_id_offset 0xB8
-	local audio_id_offset=184
-	local audio_id_size=4
-	local wrlock=$(mktemp --tmpdir)
-	local efusebit=$(mktemp --tmpdir)
-
     # Parse args
     i=0
     while [ $i -lt $# ]; do
@@ -328,40 +191,94 @@
         exit 1
     fi
 
-	#efuse_obj mode
-	v=$(printf %08x $audio_id_value)
-	id_info=${v:6:2}${v:4:2}${v:2:2}${v:0:2}
-	echo "efuse_obj set AUDIO_VENDOR_ID $id_info" >> $patt_text
-	echo "efuse_obj lock AUDIO_VENDOR_ID" >> $patt_text
-	cp $patt_text $output.obj
-	rm -f $patt_text
+    v=$(printf %08x $audio_id_value)
+    id_info=${v:6:2}${v:4:2}${v:2:2}${v:0:2}
+    echo "efuse_obj set AUDIO_VENDOR_ID $id_info" >> $patt_text
+    echo "efuse_obj lock AUDIO_VENDOR_ID" >> $patt_text
 
-	# Generate empty eFUSE pattern data
-	dd if=/dev/zero of=$patt count=1024 bs=1 &> /dev/null
+    cp $patt_text $output
+    rm -f $patt_text
+}
 
-	append_uint32_le $audio_id_value $audio_id_efuse
-	dd if=$audio_id_efuse of=$patt bs=1 seek=$audio_id_offset count=$audio_id_size \
-		conv=notrunc >& /dev/null
 
-	dd if=$patt of=$wrlock bs=16 skip=29 count=1 &> /dev/null
-	b_1dd=$(xxd -ps -s13 -l1 $wrlock)
-	b_1dd="$(printf %02x $(( 0x$b_1dd | 0x04 )))"
-	echo $b_1dd | xxd -r -p > $efusebit
-	dd if=$efusebit of=$wrlock bs=1 seek=13 count=1 conv=notrunc >& /dev/null
+function generate_mkt_id_pattern() {
+    local argv=("$@")
+    local i=0
+    local patt_text=$(mktemp --tmpdir)
 
-	filesize=$(wc -c < $wrlock)
-	if [ $filesize -ne 16 ]; then
-		echo Internal Error -- Invalid write-lock pattern length
-		exit 1
-	fi
-	dd if=$wrlock of=$patt bs=16 seek=29 count=1 conv=notrunc >& /dev/null
+    # Parse args
+    i=0
+    while [ $i -lt $# ]; do
+        arg="${argv[$i]}"
+        #echo "i=$i argv[$i]=${argv[$i]}"
+        i=$((i + 1))
+        case "$arg" in
+            --device-scs-segid)
+                mkt_id_value="${argv[$i]}" ;;
+           -o)
+                output="${argv[$i]}" ;;
+            *)
+                echo "Unknown option $arg"; exit 1
+                ;;
+        esac
+        i=$((i + 1))
+    done
 
-	${BASEDIR_TOP}/aml_encrypt_t3 --efsproc --input $patt --output $output --option=debug
+    # Verify args
+    if [ -z "$output" ]; then echo Error: Missing output file option -o; exit 1; fi
 
-	rm -f $patt
-	rm -f $audio_id_efuse
-	rm -f $wrlock
-	rm -f $efusebit
+    if [ -z $mkt_id_value ]; then
+        echo Error: invalid mkt_id_value
+        exit 1
+    fi
+
+    v=$(printf %08x $mkt_id_value)
+    id_info=${v:6:2}${v:4:2}${v:2:2}${v:0:2}
+    echo "efuse_obj set DEVICE_SCS_SEGID $id_info" >> $patt_text
+    echo "efuse_obj lock DEVICE_SCS_SEGID" >> $patt_text
+
+    cp $patt_text $output
+    rm -f $patt_text
+}
+
+function generate_vendor_id_pattern() {
+    local argv=("$@")
+    local i=0
+    local patt_text=$(mktemp --tmpdir)
+
+    # Parse args
+    i=0
+    while [ $i -lt $# ]; do
+        arg="${argv[$i]}"
+        #echo "i=$i argv[$i]=${argv[$i]}"
+        i=$((i + 1))
+        case "$arg" in
+            --device-vendor-segid)
+                vend_id_value="${argv[$i]}" ;;
+           -o)
+                output="${argv[$i]}" ;;
+            *)
+                echo "Unknown option $arg"; exit 1
+                ;;
+        esac
+        i=$((i + 1))
+    done
+
+    # Verify args
+    if [ -z "$output" ]; then echo Error: Missing output file option -o; exit 1; fi
+
+    if [ -z $vend_id_value ]; then
+        echo Error: invalid vendor_id_value
+        exit 1
+    fi
+
+    v=$(printf %08x $vend_id_value)
+    id_info=${v:6:2}${v:4:2}${v:2:2}${v:0:2}
+    echo "efuse_obj set DEVICE_VENDOR_SEGID $id_info" >> $patt_text
+    echo "efuse_obj lock DEVICE_VENDOR_SEGID" >> $patt_text
+
+    cp $patt_text $output
+    rm -f $patt_text
 }
 
 parse_main() {
@@ -375,6 +292,12 @@
         *--audio-id*)
             generate_audio_id_pattern "$@"
             ;;
+       *--device-vendor-segid*)
+            generate_vendor_id_pattern "$@"
+            ;;
+        *--device-scs-segid*)
+            generate_mkt_id_pattern "$@"
+            ;;
         *-o*)
             generate_efuse_device_pattern "$@"
             ;;
diff --git a/t5m/bin/gen-boot-blob-bl2-final.sh b/t5m/bin/gen-boot-blob-bl2-final.sh
index 9e0d54d..a3f79f9 100755
--- a/t5m/bin/gen-boot-blob-bl2-final.sh
+++ b/t5m/bin/gen-boot-blob-bl2-final.sh
@@ -22,22 +22,22 @@
 
 CHIPSET_NAME=$3
 KEY_TYPE=$4
-SOC=$5
+SOC_FAMILY=$5
 CHIPSET_VARIANT_SUFFIX=$6
 
-BASEDIR_AESKEY_PROT_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl2/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl2/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl2/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl2/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl31/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl31/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl31/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl31/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl32/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl32/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl32/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl32/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl40/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl40/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl40/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl40/rsa/${CHIPSET_NAME}"
 
-BASEDIR_TEMPLATE="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/cert-template/${CHIPSET_NAME}"
+BASEDIR_TEMPLATE="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/cert-template/${CHIPSET_NAME}"
 
 BASEDIR_OUTPUT_BLOB=$2
 postfix=.signed
@@ -67,7 +67,7 @@
 ### Features, flags and switches ###
 BB1ST_ARGS="${BB1ST_ARGS} --switch-chipset-sign-bl2=0"
 
-#BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC}"
+BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC_FAMILY}"
 
 ### Output: blobs ###
 BB1ST_ARGS="${BB1ST_ARGS} --outfile-bb1st=${BASEDIR_OUTPUT_BLOB}/bb1st${FEAT_BL2_TEMPLATE_TYPE}${CHIPSET_VARIANT_SUFFIX}.bin${postfix}"
diff --git a/t5m/bin/gen-boot-blob-bl2-only.sh b/t5m/bin/gen-boot-blob-bl2-only.sh
index 36704a4..08a49c9 100755
--- a/t5m/bin/gen-boot-blob-bl2-only.sh
+++ b/t5m/bin/gen-boot-blob-bl2-only.sh
@@ -22,22 +22,22 @@
 
 CHIPSET_NAME=$3
 KEY_TYPE=$4
-SOC=$5
+SOC_FAMILY=$5
 CHIPSET_VARIANT_SUFFIX=$6
 
-BASEDIR_AESKEY_PROT_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl2/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl2/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl2/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl2/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl31/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl31/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl31/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl31/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl32/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl32/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl32/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl32/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl40/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl40/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl40/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl40/rsa/${CHIPSET_NAME}"
 
-BASEDIR_TEMPLATE="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/cert-template/${CHIPSET_NAME}"
+BASEDIR_TEMPLATE="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/cert-template/${CHIPSET_NAME}"
 
 BASEDIR_OUTPUT_BLOB=$2
 postfix=.signed
@@ -62,6 +62,8 @@
 ### Input: pre-generated ProtKey for payloads
 BB1ST_ARGS="${BB1ST_ARGS} --infile-aes256-bl2-payload=${BASEDIR_AESKEY_PROT_BL2}/genkey-prot-bl2.bin"
 
+BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC_FAMILY}"
+
 ### Features, flags and switches ###
 
 ### Output: blobs ###
diff --git a/t5m/bin/gen-boot-blobs.sh b/t5m/bin/gen-boot-blobs.sh
index 368b981..b16dd5e 100755
--- a/t5m/bin/gen-boot-blobs.sh
+++ b/t5m/bin/gen-boot-blobs.sh
@@ -22,22 +22,22 @@
 
 CHIPSET_NAME=$3
 KEY_TYPE=$4
-SOC=$5
+SOC_FAMILY=$5
 CHIPSET_VARIANT_SUFFIX=$6
 
-BASEDIR_AESKEY_PROT_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl2/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl2/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl2/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL2="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl2/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl31/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl31/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl31/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL31="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl31/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl32/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl32/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl32/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL32="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl32/rsa/${CHIPSET_NAME}"
 
-BASEDIR_AESKEY_PROT_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl40/aes/${CHIPSET_NAME}"
-BASEDIR_RSAKEY_LVLX_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/bl40/rsa/${CHIPSET_NAME}"
+BASEDIR_AESKEY_PROT_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl40/aes/${CHIPSET_NAME}"
+BASEDIR_RSAKEY_LVLX_BL40="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/bl40/rsa/${CHIPSET_NAME}"
 
-BASEDIR_TEMPLATE="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC}/chipset/cert-template/${CHIPSET_NAME}"
+BASEDIR_TEMPLATE="${BASEDIR_TOP}/keys/${KEY_TYPE}/${SOC_FAMILY}/chipset/cert-template/${CHIPSET_NAME}"
 
 BASEDIR_OUTPUT_BLOB=$2
 postfix=.signed
@@ -87,7 +87,7 @@
 	BB1ST_ARGS="${BB1ST_ARGS} --feature-bl2e-sigprot-mode"
 fi
 
-#BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC}"
+BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC_FAMILY}"
 
 ### Output: blobs ###
 BB1ST_ARGS="${BB1ST_ARGS} --outfile-bb1st=${BASEDIR_OUTPUT_BLOB}/bb1st${FEAT_BL2_TEMPLATE_TYPE}${CHIPSET_VARIANT_SUFFIX}.bin${postfix}"
diff --git a/t5m/bin/sign-blx.sh b/t5m/bin/sign-blx.sh
index 0ea0a56..62941e9 100755
--- a/t5m/bin/sign-blx.sh
+++ b/t5m/bin/sign-blx.sh
@@ -9,52 +9,29 @@
 #BASEDIR_BUILD="${BASEDIR_TOP}/output"
 BASEDIR_BUILD="${BASEDIR_TOP}/`date +%Y%m%d%H%M%S%N`"
 postfix=.signed
-declare -a BLX_BIN_SIZE=("183200" "65536" "65536" "2048" "86016" "262144" "524288"  "98304")
+declare -a BLX_BIN_SIZE=("183200" "65536" "65536" "2048" "212992" "262144" "524288"  "98304")
 
-function process_ddrfw() {
-	local ddr_input=$1
-	local ddr_output=$2
-	local ddr_type=$3
+declare CHIPACS_SIZE=${BLX_BIN_SIZE[3]}
+declare DDRFW_SIZE=${BLX_BIN_SIZE[4]}
 
-	if [ "$ddr_type" == "ddr4" ]; then
-		dd if=${ddr_input}/ddr4_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864  &> /dev/null
-		dd if=${ddr_input}/ddr4_2d.fw of=${ddr_output}/ddrfw_2d.bin skip=96 bs=1 count=36864  &> /dev/null
-	elif [ "$ddr_type" == "ddr3" ]; then
-		dd if=${ddr_input}/ddr3_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864  &> /dev/null
-		dd if=/dev/zero of=${ddr_output}/ddrfw_2d.bin bs=36864 count=1
-	elif [ "$ddr_type" == "lpddr4" ]; then
-		dd if=${ddr_input}/lpddr4_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864  &> /dev/null
-		dd if=${ddr_input}/lpddr4_2d.fw of=${ddr_output}/ddrfw_2d.bin skip=96 bs=1 count=36864  &> /dev/null
-	elif [ "$ddr_type" == "lpddr3" ]; then
-		dd if=${ddr_input}/lpddr3_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864  &> /dev/null
-		dd if=/dev/zero of=${ddr_output}/ddrfw_2d.bin bs=36864 count=1
-	else
-		echo "un-recognized ddr_type: ${ddr_type}"
-		echo "---- use default ddr4 ----"
-		dd if=${ddr_input}/ddr4_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864  &> /dev/null
-		dd if=${ddr_input}/ddr4_2d.fw of=${ddr_output}/ddrfw_2d.bin skip=96 bs=1 count=36864  &> /dev/null
+function split_ddrfw_from_chipacs() {
+	local input=$1
+	local output1=$2
+	local output2=$3
+	local size=`expr ${CHIPACS_SIZE} + ${DDRFW_SIZE}`
+	local input_size=`stat -c %s ${input}`
+
+	if [ $input_size -ne ${size} ]; then
+		echo "$input is not chipacs and ddrfw merge !!!"
+		return
 	fi
+	dd if=${input} of=${output1}.tmp bs=1 count=${CHIPACS_SIZE}
+	dd if=${input} of=${output2}.tmp skip=${CHIPACS_SIZE} bs=1 count=${DDRFW_SIZE}
+	cat ${output1}.tmp > ${output1}
+	cat ${output2}.tmp > ${output2}
+	rm -rf ${output1}.tmp ${output2}.tmp
 
-	piei_size=`stat -c %s ${ddr_input}/piei.fw`
-	if [ $piei_size -gt 12384 ]; then
-		dd if=${ddr_input}/piei.fw of=${ddr_output}/ddrfw_piei.bin skip=96 bs=1 count=12288  &> /dev/null
-	else
-		dd if=/dev/zero of=${ddr_output}/ddrfw_piei.bin bs=12288 count=1  &> /dev/null
-		dd if=${ddr_input}/piei.fw of=${ddr_output}/ddrfw_piei.bin skip=96 bs=1 conv=notrunc  &> /dev/null
-	fi
-
-	cat ${ddr_output}/ddrfw_1d.bin ${ddr_output}/ddrfw_2d.bin \
-		${ddr_output}/ddrfw_piei.bin > ${ddr_output}/ddr-fwdata.bin
-
-	if [ ! -f ${ddr_output}/ddr-fwdata.bin ]; then
-		echo "ddr-fwdata payload does not exist in ${ddr_output} !"
-		exit -1
-	fi
-	ddrfw_data_size=`stat -c %s ${ddr_output}/ddr-fwdata.bin`
-	if [ $ddrfw_data_size -ne 86016 ]; then
-		echo "ddr-fwdata size is not equal to 84K, $ddrfw_data_size"
-		exit -1
-	fi
+	return
 }
 
 function sign_blx() {
@@ -111,7 +88,7 @@
 	fi
 
 	if [ -z ${chipset_name} ]; then
-		chipset_name="t982"
+		chipset_name="azp1"
 	fi
 
 	# select bl2/bl2e sign template
@@ -170,14 +147,17 @@
 
 	${EXEC_BASEDIR}/download-keys.sh ${key_type} ${soc} chipset
 
+	ddrfw_split_flag=0
+
 	if [ ${blxname} == "bl2" ] && [ ${build_type} == "normal" ]; then
 		if [ -z ${chip_acs} ] || [ ! -f ${chip_acs} ]; then
 			echo "chip_acs ${chip_acs} invalid"
 			exit 1
 		fi
+
 		dd if=${chip_acs} of=${BASEDIR_BUILD}/csinit-params.bin conv=notrunc  &> /dev/null
 		dd if=${input} of=${BASEDIR_BUILD}/${blxname}-payload.bin conv=notrunc  &> /dev/null
-		#process_ddrfw ${BASEDIR_TOP} ${BASEDIR_BUILD} ${ddr_type}
+
 		${EXEC_BASEDIR}/gen-boot-blobs.sh ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${chipset_variant_suffix}
 	elif [ ${blxname} == "bl2" ] && [ ${build_type} == "bl2-only" ]; then
 		dd if=${input} of=${BASEDIR_BUILD}/${blxname}-payload.bin conv=notrunc  &> /dev/null
@@ -187,8 +167,9 @@
 			echo "chip_acs ${chip_acs} invalid"
 			exit 1
 		fi
+
 		dd if=${chip_acs} of=${BASEDIR_BUILD}/csinit-params.bin conv=notrunc  &> /dev/null
-		#process_ddrfw ${BASEDIR_TOP} ${BASEDIR_BUILD} ${ddr_type}
+
 		dd if=${input} of=${BASEDIR_BUILD}/bb1st${FEAT_BL2_TEMPLATE_TYPE}${chipset_variant_suffix}.bin.bl2-only conv=notrunc  &> /dev/null
 		${EXEC_BASEDIR}/gen-boot-blob-bl2-final.sh ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${chipset_variant_suffix}
 	elif [ ${blxname} == "bl2e" ] || [ ${blxname} == "bl2x" ]; then
diff --git a/t5m/build.sh b/t5m/build.sh
index 8741087..dcab1ff 100755
--- a/t5m/build.sh
+++ b/t5m/build.sh
@@ -74,7 +74,8 @@
 
 	if [ ! -f ${output}/bl2.bin.sto ]	|| \
 	   [ ! -f ${output}/bl2.bin.usb ]	|| \
-	   [ ! -f ${output}/bl2e.bin ]	|| \
+	   [ ! -f ${output}/bl2e.bin.sto ]	|| \
+	   [ ! -f ${output}/bl2e.bin.usb ]	|| \
 	   [ ! -f ${output}/bl2x.bin ]; then
 		echo "Error: ${output}/bl2/e/x.bin does not all exist... abort"
 		ls -la ${output}
@@ -99,52 +100,6 @@
 	dd if=/dev/zero of=${payload}/bl2x.bin bs=65536 count=1
 	dd if=${output}/bl2x.bin of=${payload}/bl2x.bin conv=notrunc
 
-
-	echo "===================================================="
-	echo "------ process for Synopsys ddr fw ------"
-	INPUT_DDRFW=./${FIP_FOLDER}${CUR_SOC}
-
-	if [ "$ddr_type" == "ddr4" ]; then
-		dd if=${INPUT_DDRFW}/ddr4_1d.fw of=${payload}/ddrfw_1d.bin skip=96 bs=1 count=36864
-		dd if=${INPUT_DDRFW}/ddr4_2d.fw of=${payload}/ddrfw_2d.bin skip=96 bs=1 count=36864
-	elif [ "$ddr_type" == "ddr3" ]; then
-		dd if=${INPUT_DDRFW}/ddr3_1d.fw of=${payload}/ddrfw_1d.bin skip=96 bs=1 count=36864
-		dd if=/dev/zero of=${payload}/ddrfw_2d.bin bs=36864 count=1
-	elif [ "$ddr_type" == "lpddr4" ]; then
-		dd if=${INPUT_DDRFW}/lpddr4_1d.fw of=${payload}/ddrfw_1d.bin skip=96 bs=1 count=36864
-		dd if=${INPUT_DDRFW}/lpddr4_2d.fw of=${payload}/ddrfw_2d.bin skip=96 bs=1 count=36864
-	elif [ "$ddr_type" == "lpddr3" ]; then
-		dd if=${INPUT_DDRFW}/lpddr3_1d.fw of=${payload}/ddrfw_1d.bin skip=96 bs=1 count=36864
-		dd if=/dev/zero of=${payload}/ddrfw_2d.bin bs=36864 count=1
-	else
-		echo "un-recognized ddr_type: ${ddr_type}"
-		echo "---- use default ddr4 ----"
-		dd if=${INPUT_DDRFW}/ddr4_1d.fw of=${payload}/ddrfw_1d.bin skip=96 bs=1 count=36864
-		dd if=${INPUT_DDRFW}/ddr4_2d.fw of=${payload}/ddrfw_2d.bin skip=96 bs=1 count=36864
-	fi
-
-	piei_size=`stat -c %s ${INPUT_DDRFW}/piei.fw`
-	if [ $piei_size -gt 12384 ]; then
-		dd if=${INPUT_DDRFW}/piei.fw of=${payload}/ddrfw_piei.bin skip=96 bs=1 count=12288
-	else
-		dd if=/dev/zero of=${payload}/ddrfw_piei.bin bs=12288 count=1
-		dd if=${INPUT_DDRFW}/piei.fw of=${payload}/ddrfw_piei.bin skip=96 bs=1 conv=notrunc
-	fi
-
-	cat ${payload}/ddrfw_1d.bin ${payload}/ddrfw_2d.bin \
-		${payload}/ddrfw_piei.bin > ${payload}/ddrfw_data.bin
-
-	if [ ! -f ${payload}/ddrfw_data.bin ]; then
-		echo "ddrfw_data payload does not exist in ${payload} !"
-		exit -1
-	fi
-	ddrfw_data_size=`stat -c %s ${payload}/ddrfw_data.bin`
-	if [ $ddrfw_data_size -ne 86016 ]; then
-		echo "ddr_fwdata size is not equal to 84K, $ddrfw_data_size"
-		exit -1
-	fi
-
-
 	echo "===================================================="
 	echo "------ process for device and chip params ------"
 	INPUT_PARAMS=${output}
@@ -170,7 +125,7 @@
 	fi
 
 	if [ $dev_acs_size -gt 8192 ]; then
-		echo "chip acs size exceed limit 8192, $dev_acs_size"
+		echo "dev acs size exceed limit 8192, $dev_acs_size"
 		exit -1
 	else
 		dd if=/dev/zero of=${payload}/device_acs.bin bs=8192 count=1
@@ -496,18 +451,18 @@
 	sector=512
 	seek=0
 	seek_sector=0
-	dateStamp=SC2-`date +%Y%m%d%H%M%S`
+	dateStamp=S5-${CHIPSET_NAME}-`date +%y%m%d%H%M%S`
 
 	echo @AMLBOOT > ${file_info_cfg_temp}
 	dd if=${file_info_cfg_temp} of=${file_info_cfg} bs=1 count=8 conv=notrunc &> /dev/null
 	nItemNum=5
 	nSizeHDR=$[64+nItemNum*16]
-	printf "01 %02x %02x %02x 00 00 00 00" $[(nItemNum)&0xFF] $[(nSizeHDR)&0xFF] $[((nSizeHDR)>>8)&0xFF] \
+	printf "02 %02x %02x %02x" $[(nItemNum)&0xFF] $[(nSizeHDR)&0xFF] $[((nSizeHDR)>>8)&0xFF] \
 		| xxd -r -ps > ${file_info_cfg_temp}
 	cat ${file_info_cfg_temp} >> ${file_info_cfg}
 
 	echo ${dateStamp} > ${file_info_cfg_temp}
-	dd if=${file_info_cfg_temp} of=${file_info_cfg} bs=1 count=16 oflag=append conv=notrunc &> /dev/null
+	dd if=${file_info_cfg_temp} of=${file_info_cfg} bs=1 count=20 oflag=append conv=notrunc &> /dev/null
 
 	index=0
 	arrPayload=("BBST" "BL2E" "BL2X" "DDRF" "DEVF");
@@ -541,7 +496,7 @@
 	rm -f ${file_info_cfg}
 	mv -f ${file_info_cfg}.sha256 ${file_info_cfg}
 
-	dd if=${file_info_cfg} of=${bootloader} bs=512 seek=332 conv=notrunc status=none
+	dd if=${file_info_cfg} of=${bootloader} bs=512 seek=404 conv=notrunc status=none
 
 	if [ ${storage_type_suffix} == ".sto" ]; then
 		echo "Image SDCARD"
@@ -570,7 +525,6 @@
 	rm -f ${BUILD_PATH}/bl*.enc ${BUILD_PATH}/bl2*.sig
 }
 
-
 function encrypt_step() {
 	dbg "encrypt: $@"
 	local ret=0
@@ -580,6 +534,7 @@
 		echo "Err! aml_encrypt_${CUR_SOC} return $ret"
 		exit $ret
 	fi
+
 }
 
 function encrypt() {
@@ -607,15 +562,17 @@
 
 
 	# build final bootloader
-#mk_uboot ${BUILD_PATH} ${BUILD_PATH}
+	#mk_uboot ${BUILD_PATH} ${BUILD_PATH}
 	mk_uboot ${BUILD_PATH} ${BUILD_PATH} "" .sto ${CHIPSET_VARIANT_SUFFIX}
 	mk_uboot ${BUILD_PATH} ${BUILD_PATH} "" .usb ${CHIPSET_VARIANT_SUFFIX}
 
 	return
 }
 
-function process_blx() {
+declare CHIPACS_SIZE="8192"
+declare DDRFW_SIZE="212992"
 
+function process_blx() {
 
 	# process loop
 	for loop in ${!BLX_NAME[@]}; do
@@ -623,15 +580,27 @@
 			[ -n "${BLX_RAWBIN_NAME[$loop]}" ] && \
 			[ -f ${BUILD_PATH}/${BLX_RAWBIN_NAME[$loop]} ]; then
 			if [ -n "${CONFIG_FORMER_SIGN}" ]; then
+					if [ ${BLX_NAME[$loop]} == "bl2" ]; then
+					./${FIP_FOLDER}${CUR_SOC}/bin/gen-merge-bin.sh --input0 ${BUILD_PATH}/chip_acs.bin --size0 ${CHIPACS_SIZE} \
+						--input1 ${BUILD_PATH}/ddrfw_data.bin --size1 ${DDRFW_SIZE} --output ${BUILD_PATH}/chip_acs.bin
+					fi
 					./${FIP_FOLDER}${CUR_SOC}/bin/sign-blx.sh --blxname ${BLX_NAME[$loop]} --input ${BUILD_PATH}/${BLX_RAWBIN_NAME[$loop]} \
 						--output ${BUILD_PATH}/${BLX_BIN_NAME[$loop]} --chipset_name ${CHIPSET_NAME} --chipset_variant ${CHIPSET_VARIANT} \
 						--key_type ${AMLOGIC_KEY_TYPE} --soc ${CUR_SOC} --chip_acs ${BUILD_PATH}/chip_acs.bin --ddr_type ${DDRFW_TYPE}
 			else
 					if [ -n "${CONFIG_JENKINS_SIGN}" ]; then
+						if [ ${BLX_NAME[$loop]} == "bl2" ]; then
+						./${FIP_FOLDER}${CUR_SOC}/bin/gen-merge-bin.sh --input0 ${BUILD_PATH}/chip_acs.bin --size0 ${CHIPACS_SIZE} \
+							--input1 ${BUILD_PATH}/ddrfw_data.bin --size1 ${DDRFW_SIZE} --output ${BUILD_PATH}/chip_acs.bin
+						fi
 						/usr/bin/python3 ./sign.py --type ${BLX_NAME[$loop]} --in ${BUILD_PATH}/${BLX_RAWBIN_NAME[$loop]} \
 							--out ${BUILD_PATH}/${BLX_BIN_NAME[$loop]} --chip ${CHIPSET_NAME}  --chipVariant ${CHIPSET_VARIANT} \
 							--keyType ${AMLOGIC_KEY_TYPE}  --chipAcsFile ${BUILD_PATH}/chip_acs.bin --ddrType ${DDRFW_TYPE}
 					else
+						if [ ${BLX_NAME[$loop]} == "bl2" ]; then
+						./${FIP_FOLDER}${CUR_SOC}/bin/gen-merge-bin.sh --input0 ${BUILD_PATH}/chip_acs.bin --size0 ${CHIPACS_SIZE} \
+							--input1 ${BUILD_PATH}/ddrfw_data.bin --size1 ${DDRFW_SIZE} --output ${BUILD_PATH}/chip_acs.bin
+						fi
 						/usr/bin/python3 ./${FIP_FOLDER}/jenkins_sign.py --type ${BLX_NAME[$loop]} --in ${BUILD_PATH}/${BLX_RAWBIN_NAME[$loop]} \
 							--out ${BUILD_PATH}/${BLX_BIN_NAME[$loop]} --chip ${CHIPSET_NAME} --chipVariant ${CHIPSET_VARIANT} --keyType ${AMLOGIC_KEY_TYPE} \
 							--chipAcsFile ${BUILD_PATH}/chip_acs.bin --ddrType ${DDRFW_TYPE}
@@ -665,8 +634,8 @@
 		dd if=${BUILD_PATH}/device_acs.bin of=${BUILD_PATH}/dvinit-params.bin conv=notrunc &> /dev/null
 	fi
 
-	./${FIP_FOLDER}${CUR_SOC}/bin/add-dvinit-params.sh ${BUILD_PATH}/bb1st.sto${CHIPSET_VARIANT_SUFFIX}.bin.signed ${BUILD_PATH}/dvinit-params.bin ${BUILD_PATH}/bb1st.sto${CHIPSET_VARIANT_SUFFIX}.bin.signed
-	./${FIP_FOLDER}${CUR_SOC}/bin/add-dvinit-params.sh ${BUILD_PATH}/bb1st.usb${CHIPSET_VARIANT_SUFFIX}.bin.signed ${BUILD_PATH}/dvinit-params.bin ${BUILD_PATH}/bb1st.usb${CHIPSET_VARIANT_SUFFIX}.bin.signed
+	./${FIP_FOLDER}${CUR_SOC}/bin/add-dvinit-params.sh ${BUILD_PATH}/bb1st.sto${CHIPSET_VARIANT_SUFFIX}.bin.signed ${BUILD_PATH}/dvinit-params.bin ${BUILD_PATH}/bb1st.sto${CHIPSET_VARIANT_SUFFIX}.bin.signed ${CUR_SOC}
+	./${FIP_FOLDER}${CUR_SOC}/bin/add-dvinit-params.sh ${BUILD_PATH}/bb1st.usb${CHIPSET_VARIANT_SUFFIX}.bin.signed ${BUILD_PATH}/dvinit-params.bin ${BUILD_PATH}/bb1st.usb${CHIPSET_VARIANT_SUFFIX}.bin.signed ${CUR_SOC}
 
 	# fix size for BL30 128KB
 	if [ -f ${BUILD_PATH}/bl30.bin ]; then
@@ -684,13 +653,6 @@
 	dd if=/dev/zero of=${BUILD_PATH}/bl30-payload.bin bs=${BL30_BIN_SIZE} count=1 &> /dev/null
 	dd if=${BUILD_PATH}/bl30.bin of=${BUILD_PATH}/bl30-payload.bin conv=notrunc &> /dev/null
 
-	if [ "y" == "${CONFIG_AML_BL33_COMPRESS_ENABLE}" ]; then
-		mv -f ${BUILD_PATH}/bl33.bin  ${BUILD_PATH}/bl33.bin.org
-		encrypt_step --bl3sig  --input ${BUILD_PATH}/bl33.bin.org --output ${BUILD_PATH}/bl33.bin.org.lz4 --compress lz4 --level v3 --type bl33
-		#get LZ4 format bl33 image from bl33.bin.enc with offset 0x720
-		dd if=${BUILD_PATH}/bl33.bin.org.lz4 of=${BUILD_PATH}/bl33.bin bs=1 skip=1824 >& /dev/null
-	fi
-
 	# fix size for BL33 1024KB
 	if [ ! -f ${BUILD_PATH}/bl33.bin ]; then
 		echo "Error: ${BUILD_PATH}/bl33.bin does not exist... abort"
@@ -786,10 +748,14 @@
 function copy_other_soc() {
 	cp ${BL33_BUILD_FOLDER}${BOARD_DIR}/firmware/acs.bin ${BUILD_PATH}/device_acs.bin -f
 
+    if [ ! -f ${BUILD_PATH}/chip_acs.bin ]; then
+		cp ./${FIP_FOLDER}${CUR_SOC}/chip_acs.bin ${BUILD_PATH}/chip_acs.bin -f
+    fi
 	# device acs params parse for ddr timing
 	#./${FIP_FOLDER}parse ${BUILD_PATH}/device_acs.bin
 }
 
+
 function package() {
 	# BUILD_PATH without "/"
 	x=$((${#BUILD_PATH}-1))
diff --git a/t5m/chip_acs.bin b/t5m/chip_acs.bin
new file mode 100755
index 0000000..753af8f
--- /dev/null
+++ b/t5m/chip_acs.bin
Binary files differ
diff --git a/t5m/ddr3_1d.fw b/t5m/ddr3_1d.fw
deleted file mode 100755
index 16586ff..0000000
--- a/t5m/ddr3_1d.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/ddr4_1d.fw b/t5m/ddr4_1d.fw
deleted file mode 100755
index 1e95928..0000000
--- a/t5m/ddr4_1d.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/ddr4_2d.fw b/t5m/ddr4_2d.fw
deleted file mode 100755
index 19ba31c..0000000
--- a/t5m/ddr4_2d.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/diag_lpddr4.fw b/t5m/diag_lpddr4.fw
deleted file mode 100755
index e752fa1..0000000
--- a/t5m/diag_lpddr4.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/generate-binaires/bin/gen-boot-blobs.sh b/t5m/generate-binaires/bin/gen-boot-blobs.sh
index 6f86aee..a580b8a 100755
--- a/t5m/generate-binaires/bin/gen-boot-blobs.sh
+++ b/t5m/generate-binaires/bin/gen-boot-blobs.sh
@@ -23,6 +23,8 @@
 
 BASEDIR_OUTPUT_BLOB=$2
 
+SOC_FAMILY=$3
+
 input_postfix=.signed
 output_postfix=.device.signed
 
@@ -79,6 +81,8 @@
 ### Features, flags and switches ###
 BB1ST_ARGS="${BB1ST_ARGS} --switch-keep-device-lvl2-pubrsa=1"
 
+BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${SOC_FAMILY}"
+
 # arb info
 BB1ST_ARGS="${BB1ST_ARGS} --val-device-scs-segid=${DEVICE_SCS_SEGID}"
 BB1ST_ARGS="${BB1ST_ARGS} --val-device-vendor-segid=${DEVICE_VENDOR_SEGID}"
diff --git a/t5m/generate-binaires/run/common-rootrsa-x.mk b/t5m/generate-binaires/run/common-rootrsa-x.mk
index c20c2c3..ebc03ba 100644
--- a/t5m/generate-binaires/run/common-rootrsa-x.mk
+++ b/t5m/generate-binaires/run/common-rootrsa-x.mk
@@ -21,7 +21,7 @@
 	    PROJECT=$(PROJECT) \
 	    DEVICE_VARIANT_SUFFIX=${DEVICE_VARIANT_SUFFIX} \
 	    DEVICE_STORAGE_SUFFIX=${DEVICE_STORAGE_SUFFIX} \
-		$(GEN_BOOT_BLOBS) $(DEVICE_INPUT_PATH) $(DEVICE_OUTPUT_PATH)
+		$(GEN_BOOT_BLOBS) $(DEVICE_INPUT_PATH) $(DEVICE_OUTPUT_PATH) $(SOC_FAMILY)
 
 device_fip:
 	#@-mkdir -p output
diff --git a/t5m/generate-device-keys/bin/gen_device_root_hash.sh b/t5m/generate-device-keys/bin/gen_device_root_hash.sh
index c6d90ce..3b36963 100755
--- a/t5m/generate-device-keys/bin/gen_device_root_hash.sh
+++ b/t5m/generate-device-keys/bin/gen_device_root_hash.sh
@@ -92,6 +92,9 @@
             --device-tee-vers)
                 device_tee_vers="${argv[$i]}"
 		;;
+            --device-soc)
+                device_soc="${argv[$i]}"
+        ;;
             --output-dir)
                 output_dir="${argv[$i]}"
 		;;
@@ -119,6 +122,7 @@
 device_vendor_segid=0x0
 device_scs_vers=0x0
 device_tee_vers=0x0
+device_soc=""
 
 parse_main "$@"
 
@@ -261,6 +265,8 @@
 
 BB1ST_ARGS="${BB1ST_ARGS} --switch-device-sign-blob=0"
 
+BB1ST_ARGS="${BB1ST_ARGS} --scs-family=${device_soc}"
+
 # arb info
 BB1ST_ARGS="${BB1ST_ARGS} --val-device-scs-segid=${DEVICE_SCS_SEGID}"
 BB1ST_ARGS="${BB1ST_ARGS} --val-device-vendor-segid=${DEVICE_VENDOR_SEGID}"
diff --git a/t5m/generate-device-keys/export_signing_keys_and_sign_template.sh b/t5m/generate-device-keys/export_signing_keys_and_sign_template.sh
index aa13989..2b17c0d 100755
--- a/t5m/generate-device-keys/export_signing_keys_and_sign_template.sh
+++ b/t5m/generate-device-keys/export_signing_keys_and_sign_template.sh
@@ -57,6 +57,7 @@
 output_dir=""
 boot_blobs_arb_args=
 device_fip_arb_args=
+device_soc="s5"
 
 parse_main() {
     local i=0
@@ -86,6 +87,9 @@
             --project)
                 part="${argv[$i]}"
 		;;
+            --device-soc)
+                device_soc="${argv[$i]}"
+		;;
             --template-dir)
                 template_dir="${argv[$i]}"
 		check_dir "${template_dir}"
@@ -141,7 +145,7 @@
 
 ${EXEC_BASEDIR}/bin/gen_device_aes_protkey.sh --rootkey-index "$rootkey_index" --key-dir "$key_dir" --project "$part" --template-dir "${template_dir}" ${device_fip_arb_args}
 
-${EXEC_BASEDIR}/bin/gen_device_root_hash.sh --rootkey-index "$rootkey_index" --key-dir "$key_dir" --project "$part" --template-dir "${template_dir}" ${boot_blobs_arb_args}
+${EXEC_BASEDIR}/bin/gen_device_root_hash.sh --rootkey-index "$rootkey_index" --key-dir "$key_dir" --project "$part" --device-soc "$device_soc" --template-dir "${template_dir}" ${boot_blobs_arb_args}
 
 ${EXEC_BASEDIR}/bin/export_dv_scs_signing_keys.sh --key-dir "$key_dir" --out-dir "$output_dir" --rootkey-index "$rootkey_index" --project "$part"
 
diff --git a/t5m/generate-device-keys/gen_all_device_key.sh b/t5m/generate-device-keys/gen_all_device_key.sh
index 8fef776..1425a20 100755
--- a/t5m/generate-device-keys/gen_all_device_key.sh
+++ b/t5m/generate-device-keys/gen_all_device_key.sh
@@ -55,6 +55,7 @@
 template_dir=""
 rootkey_index=0
 output_dir=""
+device_soc="s5"
 
 parse_main() {
     local i=0
@@ -83,6 +84,9 @@
             --project)
                 part="${argv[$i]}"
 		;;
+            --device-soc)
+                device_soc="${argv[$i]}"
+		;;
             --rsa-size)
                 size="${argv[$i]}"
 		;;
@@ -148,11 +152,14 @@
 mkdir -p "$key_dir"/root/dvgk/"$part"
 ${EXEC_BASEDIR}/bin/dvgk_gen.sh "$key_dir"/root/dvgk/"$part"/dvgk
 
+mkdir -p "$key_dir"/root/dvuk/"$part"
+${EXEC_BASEDIR}/bin/dvuk_gen.sh "$key_dir"/root/dvuk/"$part"/dvuk
+
 ${EXEC_BASEDIR}/bin/derive_device_aes_rootkey.sh --key-dir "$key_dir" --mrk-bin "$key_dir"/root/dvgk/"$part"/dvgk.bin --mrk-name DVGK --project "$part"
 
 ${EXEC_BASEDIR}/bin/gen_device_aes_protkey.sh --rootkey-index "$rootkey_index" --key-dir "$key_dir" --project "$part" --template-dir "${template_dir}"
 
-${EXEC_BASEDIR}/bin/gen_device_root_hash.sh --rootkey-index "$rootkey_index" --key-dir "$key_dir" --project "$part" --template-dir "${template_dir}"
+${EXEC_BASEDIR}/bin/gen_device_root_hash.sh --rootkey-index "$rootkey_index" --key-dir "$key_dir" --project "$part" --device-soc "$device_soc" --template-dir "${template_dir}"
 
 ${EXEC_BASEDIR}/bin/export_dv_scs_signing_keys.sh --key-dir "$key_dir" --out-dir "$output_dir" --rootkey-index "$rootkey_index" --project "$part"
 
diff --git a/t5m/lpddr3_1d.fw b/t5m/lpddr3_1d.fw
deleted file mode 100755
index 7177d0d..0000000
--- a/t5m/lpddr3_1d.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/lpddr4_1d.fw b/t5m/lpddr4_1d.fw
deleted file mode 100755
index 472c9c1..0000000
--- a/t5m/lpddr4_1d.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/lpddr4_2d.fw b/t5m/lpddr4_2d.fw
deleted file mode 100755
index 2edcb0f..0000000
--- a/t5m/lpddr4_2d.fw
+++ /dev/null
Binary files differ
diff --git a/t5m/piei.fw b/t5m/piei.fw
deleted file mode 100755
index a51b550..0000000
--- a/t5m/piei.fw
+++ /dev/null
Binary files differ