550 lines
24 KiB
Bash
Executable File
550 lines
24 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
EXEC_BASEDIR=$(dirname $(readlink -f $0))
|
|
BASEDIR_TOP=$(readlink -f ${EXEC_BASEDIR}/..)
|
|
|
|
function read_csv_and_generate() {
|
|
local argv=("$@")
|
|
local i=0
|
|
|
|
while [ $i -lt $# ]; do
|
|
arg="${argv[$i]}"
|
|
i=$((i + 1))
|
|
case "$arg" in
|
|
-i)
|
|
input="${argv[$i]}" ;;
|
|
-o)
|
|
output="${argv[$i]}" ;;
|
|
--debug)
|
|
is_debug_enabled="true";;
|
|
esac
|
|
i=$((i + 1))
|
|
done
|
|
|
|
if [ -z "$output" ]; then echo Error: Missing output file option -o; exit 1; fi
|
|
|
|
local patt=$(mktemp -p .)
|
|
local license0=$(mktemp -p .)
|
|
local license1=$(mktemp -p .)
|
|
local dgpk1=$(mktemp -p .)
|
|
local device_scs_segid=$(mktemp -p .)
|
|
local device_vendor_segid=$(mktemp -p .)
|
|
local nsk_otp_oid=$(mktemp -p .)
|
|
local nsk_otp_vid=$(mktemp -p .)
|
|
local lic_lock_1=$(mktemp -p .)
|
|
local efusebit=$(mktemp -p .)
|
|
local temp_byte=$(mktemp -p .)
|
|
local binary_string_hash=$(mktemp -p .)
|
|
|
|
echo "reading $input, Generating $output"
|
|
dos2unix $input
|
|
sed -i -e '$a\' $input
|
|
|
|
#Generate empty efuse pattern bytes array
|
|
dd if=/dev/zero of=$patt count=4096 bs=1 &> /dev/null
|
|
|
|
# Construct zero-filled license, lock bits
|
|
dd if=/dev/zero of=$license0 count=16 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$license1 count=16 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$lic_lock_1 count=1 bs=1 &> /dev/null
|
|
dd if=/dev/zero of=$dgpk1 count=16 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$device_scs_segid count=4 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$device_vendor_segid count=4 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$nsk_otp_oid count=2 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$nsk_otp_vid count=2 bs=1 &>/dev/null
|
|
dd if=/dev/zero of=$binary_string_hash count=37 bs=1 &>/dev/null
|
|
|
|
# generate license bit array values with initial value 0
|
|
b_lic0_01=$(xxd -ps -s1 -l1 $license0)
|
|
b_lic0_02=$(xxd -ps -s2 -l1 $license0)
|
|
b_lic0_04=$(xxd -ps -s3 -l1 $license0)
|
|
b_lic0_05=$(xxd -ps -s4 -l1 $license0)
|
|
b_lic0_07=$(xxd -ps -s6 -l1 $license0)
|
|
|
|
b_lic1_00=$(xxd -ps -l1 $license1)
|
|
b_lic1_01=$(xxd -ps -s1 -l1 $license1)
|
|
b_lic1_13=$(xxd -ps -s13 -l1 $license1)
|
|
|
|
b_lic_lock_1=$(xxd -ps -l1 $lic_lock_1)
|
|
|
|
while IFS=',' read feat sz value
|
|
do
|
|
len_value=${#value}
|
|
case $feat in
|
|
FEAT_ENABLE_DEVICE_SCS_SIG_0)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_01="$(printf %02x $(( 0x$b_lic0_01 | 0x04 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=0 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DEVICE_SCS_SIG_1)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_01="$(printf %02x $(( 0x$b_lic0_01 | 0x08 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=1 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DEVICE_VENDOR_SIG_0)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_02="$(printf %02x $(( 0x$b_lic0_02 | 0x10 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=2 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DEVICE_VENDOR_SIG_1)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_02="$(printf %02x $(( 0x$b_lic0_02 | 0x20 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=3 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DEVICE_PROT_0)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_02="$(printf %02x $(( 0x$b_lic0_02 | 0x40 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=4 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DEVICE_PROT_1)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_02="$(printf %02x $(( 0x$b_lic0_02 | 0x80 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=5 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_NORMAL_SPI_NOR)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_04="$(printf %02x $(( 0x$b_lic0_04 | 0x01 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=6 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_NORMAL_NAND)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_04="$(printf %02x $(( 0x$b_lic0_04 | 0x02 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=7 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_NORMAL_EMMC)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_04="$(printf %02x $(( 0x$b_lic0_04 | 0x04 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=8 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_NORMAL_SDCARD)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_04="$(printf %02x $(( 0x$b_lic0_04 | 0x08 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=9 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_NORMAL_SPI_NAND)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_04="$(printf %02x $(( 0x$b_lic0_04 | 0x10 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=10 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_DFU_USB)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_05="$(printf %02x $(( 0x$b_lic0_05 | 0x04 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=11 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_ALTSRC)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_05="$(printf %02x $(( 0x$b_lic0_05 | 0x08 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=12 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_BOOT_NORMAL_FALLBACK2USB)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_05="$(printf %02x $(( 0x$b_lic0_05 | 0x10 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=13 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_SW_BOOT_OVERRIDE)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_05="$(printf %02x $(( 0x$b_lic0_05 | 0x40 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=14 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_EXT_BOOT_OVERRIDE)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_05="$(printf %02x $(( 0x$b_lic0_05 | 0x80 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=15 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_DDR_FIP_CONTAINER)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_07="$(printf %02x $(( 0x$b_lic0_07 | 0x40 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=16 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_USB_AUTH)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic0_07="$(printf %02x $(( 0x$b_lic0_07 | 0x80 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=17 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DIF_MASTER_PROT)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic1_00="$(printf %02x $(( 0x$b_lic1_00 | 0x01 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=18 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_ACPU_JTAG_PROT)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic1_00="$(printf %02x $(( 0x$b_lic1_00 | 0x10 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=19 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_AOCPU_JTAG_PROT)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic1_00="$(printf %02x $(( 0x$b_lic1_00 | 0x80 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=20 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_ENABLE_DSP_JTAG_PROT)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic1_01="$(printf %02x $(( 0x$b_lic1_01 | 0x08 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=21 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
FEAT_DISABLE_NSK_CONCURRENCY)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic1_13="$(printf %02x $(( 0x$b_lic1_13 | 0x20 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=22 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
NSK_PUB_OTP_OID)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if [ $len_value != $(($sz / 4)) ]; then
|
|
echo feature $feat : $value has invalid length $(($len_value * 4)).
|
|
echo expected length is $sz bits.
|
|
break
|
|
fi
|
|
if ! [[ $value =~ ^[0-9a-fA-F]{$len_value}$ ]]; then
|
|
echo $feat:$value invalid format, Only hexadecimal numbers are acceptable.
|
|
break
|
|
fi
|
|
echo $value | xxd -r -p > $nsk_otp_oid
|
|
echo $value | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=23 count=2 conv=notrunc >& /dev/null
|
|
;;
|
|
NSK_PUB_OTP_VID)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if [ $len_value != $(($sz / 4)) ]; then
|
|
echo feature $feat : $value has invalid length $(($len_value * 4)).
|
|
echo expected length is $sz bits.
|
|
break
|
|
fi
|
|
if ! [[ $value =~ ^[0-9a-fA-F]{$len_value}$ ]]; then
|
|
echo $feat:$value invalid format, Only hexadecimal numbers are acceptable.
|
|
break
|
|
fi
|
|
echo $value | xxd -r -p > $nsk_otp_vid
|
|
echo $value | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=25 count=2 conv=notrunc >& /dev/null
|
|
;;
|
|
DEVICE_SCS_SEGID)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if [ $len_value != $(($sz / 4)) ]; then
|
|
echo feature $feat : $value has invalid length $(($len_value * 4)).
|
|
echo expected length is $sz bits.
|
|
break
|
|
fi
|
|
if ! [[ $value =~ ^[0-9a-fA-F]{$len_value}$ ]]; then
|
|
echo $feat:$value invalid format, Only hexadecimal numbers are acceptable.
|
|
break
|
|
fi
|
|
echo $value | xxd -r -p > $device_scs_segid
|
|
echo $value | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=27 count=4 conv=notrunc >& /dev/null
|
|
;;
|
|
DEVICE_VENDOR_SEGID)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if [ $len_value != $(($sz / 4)) ]; then
|
|
echo feature $feat : $value has invalid length $(($len_value * 4)).
|
|
echo expected length is $sz bits.
|
|
break
|
|
fi
|
|
if ! [[ $value =~ ^[0-9a-fA-F]{$len_value}$ ]]; then
|
|
echo $feat:$value invalid format, Only hexadecimal numbers are acceptable.
|
|
break
|
|
fi
|
|
echo $value | xxd -r -p > $device_vendor_segid
|
|
echo $value | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=31 count=4 conv=notrunc >& /dev/null
|
|
;;
|
|
DGPK1)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if [ $len_value != $(($sz / 4)) ]; then
|
|
echo feature $feat : $value has invalid length $(($len_value * 4)).
|
|
echo expected length is $sz bits.
|
|
break
|
|
fi
|
|
if ! [[ $value =~ ^[0-9a-fA-F]{$len_value}$ ]]; then
|
|
echo $feat:$value invalid format, Only hexadecimal numbers are acceptable.
|
|
break
|
|
fi
|
|
echo $value | xxd -r -p > $dgpk1
|
|
;;
|
|
LICENSE_LOCK_1_B228_LOCK)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic_lock_1="$(printf %02x $(( 0x$b_lic_lock_1 | 0x10 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=35 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
NSK_OTP_WRITE_PASSWORD_PROTECT)
|
|
echo found ${feat} bit length ${sz} value ${value}
|
|
if ([ "$value" != "0" ] && [ "$value" != "1" ]); then
|
|
echo feature $feat : $value is not in expected range
|
|
break
|
|
fi
|
|
if [ "$value" == "1" ]; then
|
|
b_lic1_13="$(printf %02x $(( 0x$b_lic1_13 | 0x08 )))"
|
|
echo 01 | xxd -r -p > $temp_byte
|
|
dd if="$temp_byte" of=$binary_string_hash bs=1 seek=36 count=1 conv=notrunc >& /dev/null
|
|
fi
|
|
;;
|
|
*)
|
|
echo Feature ${feat} is not supported
|
|
;;
|
|
esac
|
|
done < <(tail -n +2 $input)
|
|
|
|
# Combine license 0 block
|
|
echo $b_lic0_01 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license0 bs=1 seek=1 count=1 conv=notrunc >& /dev/null
|
|
echo $b_lic0_02 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license0 bs=1 seek=2 count=1 conv=notrunc >& /dev/null
|
|
echo $b_lic0_04 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license0 bs=1 seek=4 count=1 conv=notrunc >& /dev/null
|
|
echo $b_lic0_05 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license0 bs=1 seek=5 count=1 conv=notrunc >& /dev/null
|
|
echo $b_lic0_07 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license0 bs=1 seek=7 count=1 conv=notrunc >& /dev/null
|
|
|
|
# Combine license 1 block
|
|
echo $b_lic1_00 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license1 bs=1 seek=0 count=1 conv=notrunc >& /dev/null
|
|
echo $b_lic1_01 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license1 bs=1 seek=1 count=1 conv=notrunc >& /dev/null
|
|
echo $b_lic1_13 | xxd -r -p > $efusebit
|
|
dd if="$efusebit" of=$license1 bs=1 seek=13 count=1 conv=notrunc >& /dev/null
|
|
|
|
# write otp lic lock 1
|
|
echo $b_lic_lock_1 | xxd -r -p > $lic_lock_1
|
|
|
|
# Combine generated blocks into a single binary
|
|
dd if="$license0" of="$patt" bs=16 seek=0 count=1 conv=notrunc >& /dev/null
|
|
dd if="$license1" of="$patt" bs=16 seek=1 count=1 conv=notrunc >& /dev/null
|
|
dd if="$device_scs_segid" of="$patt" bs=4 seek=42 count=1 conv=notrunc >& /dev/null
|
|
dd if="$device_vendor_segid" of="$patt" bs=4 seek=43 count=1 conv=notrunc >& /dev/null
|
|
dd if="$dgpk1" of="$patt" bs=16 seek=228 count=2 conv=notrunc >& /dev/null
|
|
dd if="$nsk_otp_oid" of="$patt" bs=1 seek=528 count=2 conv=notrunc >& /dev/null
|
|
dd if="$nsk_otp_vid" of="$patt" bs=1 seek=530 count=2 conv=notrunc >& /dev/null
|
|
dd if="$lic_lock_1" of="$patt" bs=1 seek=508 count=1 conv=notrunc >& /dev/null
|
|
|
|
cp $binary_string_hash ./hash_of_output
|
|
md5sum --tag hash_of_output
|
|
sha256sum --tag hash_of_output
|
|
sha1sum --tag hash_of_output
|
|
|
|
if [ "$is_debug_enabled" == "true" ];
|
|
then
|
|
echo debug mode enabled
|
|
cp $patt ./$output.bin
|
|
cp $binary_string_hash ./hash_calculation.bin
|
|
${BASEDIR_TOP}/aml_encrypt_sc2 --efsproc --input $patt --output $output.bin.efuse --option=debug
|
|
else
|
|
${BASEDIR_TOP}/aml_encrypt_sc2 --efsproc --input $patt --output $output.bin.efuse
|
|
fi
|
|
|
|
rm -f $efusebit
|
|
rm -f $patt
|
|
rm -f $license0
|
|
rm -f $license1
|
|
rm -f $device_scs_segid
|
|
rm -f $device_vendor_segid
|
|
rm -f $dgpk1
|
|
rm -f $nsk_otp_oid
|
|
rm -f $nsk_otp_vid
|
|
rm -f $lic_lock_1
|
|
rm -f $temp_byte
|
|
rm -f $binary_string_hash
|
|
rm -f ./hash_of_output
|
|
}
|
|
|
|
usage(){
|
|
cat << EOF
|
|
Usage: $(basename $0) --help
|
|
$(basename $0) --version
|
|
$(basename $0) -i input_filename.csv \\
|
|
-o output_file
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
function generate_efuse_device_pattern() {
|
|
local argv=("$@")
|
|
|
|
echo "Generating $@..."
|
|
}
|
|
|
|
parse_main() {
|
|
case "$@" in
|
|
--help)
|
|
usage
|
|
;;
|
|
--version)
|
|
echo "$(basename $0) version 0.1"
|
|
;;
|
|
*-i*)
|
|
read_csv_and_generate "$@"
|
|
;;
|
|
*)
|
|
usage "$@"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
parse_main "$@"
|