#!/bin/bash

NAND=${1:-toshiba}
[ "$FLASH_TYPE" = "" -o "$CUST_SELFKEY_IMAGE" = "" ] && {
	source ../../berlin_config/config
	if [ -z $CPUPLL ];then
		CPUPLL=1000
	fi
	if [ -z $MEMPLL ];then
		MEMPLL=1600
	fi
	if [ -z $SYSPLL ];then
		SYSPLL=800
	fi
	export PLATFORM
	export CPUPLL
	export PV_COMP
	export NFCECCCLK
	export LINUX_ON_CPU1
	export CPU_TYPE
	export CPU_PLL
	export MEMPLL
	export SYSPLL
	export SYSTEM_CONFIGURATION_PATH
	export PLATFORM_INFO
	export BUILD_GOOGLETV
	export BOOT_TYPE
	export RANDOMIZER
	export CONFIG_NAND_READ_RETRY
	export CONFIG_ENHANCED_SLC
	export CONFIG_SLC
	export SM_IMAGE_ACTIVE
	export SM_IMAGE_PATH
	export SM_IMAGE_FORMAT
	export CPU0_START_ADDR
	export CONFIG_GPT
	export DISABLE_CRASH_COUNTER
	export BERLIN_CHIP
	top_data_dir=../../berlin_config/
	export top_data_dir
}
pagesize=`echo $FLASH_TYPE | cut -d _ -f1`
page_per_block=`echo $FLASH_TYPE | cut -d _ -f3`
block_size=`expr $pagesize \* $page_per_block`
block_size_kB=`expr $block_size / 1024`
echo "pagesize=$pagesize , page_per_block=$page_per_block"
echo "block_size_kB=$block_size_kB"
WORKING_DIR=`pwd`

if [ $BOOT_TYPE = "NAND_BOOT" ]; then
	BOOT_DEV=nand
else
	BOOT_DEV=emmc
fi

# copy the linux parameters (bootargs)
if [ ! -f ../.temp/linux_param.h ]; then
	echo run \"make linux_param\" under MV88DE3100_Tools/ first
	exit 1
fi
cp -f ../.temp/linux_param.h include/.

# check platform info
if [ \( ! -f $top_data_dir/$PLATFORM_INFO \) -a \( ! -L $top_data_dir/$PLATFORM_INFO \) ]; then
	echo "Error: Pin setting file $top_data_dir/$PLATFORM_INFO does not exist."
	exit 1
fi
cp -f $top_data_dir/$PLATFORM_INFO include/pin_settings.h ||exit 1

case "$BERLIN_CHIP" in
  BG2CDP)
    if [ $CPU_TYPE = "Z1" -o $CPU_TYPE = "Z2" ];then
      SYS_INIT_DIR=../sys_init_bg2cdp
    else
      SYS_INIT_DIR=../sys_init_bg2cdp_a0
    fi
    ;;
  BG4CDP)
    if [ $CPU_TYPE = "Z1" ];then
      SYS_INIT_DIR=../sys_init_bg4cdp_z1
    else
      SYS_INIT_DIR=../sys_init_bg4cdp_a0
    fi
    ;;
  AS370)
    SYS_INIT_DIR=../sys_init_as370_a0
    ;;
  *)
    echo "ERROR: unknown $BERLIN_CHIP"
    exit 1
    ;;
esac

SYS_INIT_BIN_FILE=sys_init_${BOOT_DEV}_secure_CPU"$CPUPLL"_MEM"$MEMPLL"_SYS"$SYSPLL"_$CPU_TYPE.bin

[ $# = 1 ] && VT_PATH=$1 || VT_PATH=../.temp/version_table

SYS_INIT_BIN_DIR=$SYS_INIT_DIR/$PLATFORM
SYS_INIT_BIN_FILE=${NAND}_sysinit.bin
echo "sys_init binary file: $SYS_INIT_BIN_DIR/$SYS_INIT_BIN_FILE"
cp $SYS_INIT_BIN_DIR/image1/release/bcm_erom.bin init_erom.bin || exit 1
cp $SYS_INIT_BIN_DIR/image1/release/drm_erom.bin drm_erom.bin || exit 1
cp $SYS_INIT_BIN_DIR/image2/release/${NAND}_sysinit.bin init_boot.bin || exit 1
cp $SYS_INIT_BIN_DIR/image2/release/tz_loader_en.bin tz_loader_en.bin || exit 1
# Preserve TZ (MPR enabled) version of TZ loader
cp $SYS_INIT_BIN_DIR/image2/release/tz_loader_en_tz.bin tz_loader_en_tz.bin || exit 1

if [ ! -f $VT_PATH ];then
	echo "please generate $VT_PATH first."
	exit 1
fi

make clean &&\
make  && \
rm -f pin_settings.h || exit 1

TOOL_DIR=$WORKING_DIR/..

SIGN_TOOL=$TOOL_DIR/sign_image
SIGN_TOOL_CMD=$TOOL_DIR/sign_image_cmd.sh

readelf -h bootloader_en.elf | grep "Entry point" >bootloader_en.info
#echo "  Entry point address:               0x680000" >bootloader.info
cp -f $SIGN_TOOL $SIGN_TOOL_CMD ../gen_layout.sh ../set_layout.sh . && \
	$SIGN_TOOL_CMD $TOOL_DIR -d 0x5 -i bootloader.bin -o bootloader_en.bin -v -g > bootloader.log 2>&1 || {
	echo fail to generate bootloader_en.img
	exit 1
}

if [ "$ROM_KEY_DISABLE" = "" ];then
    echo "ROM_KEY_DISABLE is not set in config file, please update your config file"
    exit 1
fi

echo --------------------
echo Generate pre bootloader image
echo --------------------

target=init_loader.img
LAST2K=`expr $block_size - 2048`

#layout: erom, im2, tzl, tsm, version

#make version 1KiB
dd if=$VT_PATH of=version.bin conv=notrunc && \
SIZE=`stat -c %s version.bin` && \
dd if=script/random.bin of=version.bin bs=1 seek=$SIZE count=`expr 1024 - $SIZE` conv=notrunc || exit 1
echo "  Entry point address:               0x600000" >version.info

#eval filler size
cat init_erom.bin init_boot.bin tz_loader_en.bin drm_erom.bin > $target || exit 1
INIT_LOADER_FINAL_SIZE=`stat -c %s $target`
if [ $INIT_LOADER_FINAL_SIZE -gt $LAST2K ]; then
  echo "Error: size of preloader images image size is too big."
  exit 1;
fi
head -c `expr $LAST2K - $INIT_LOADER_FINAL_SIZE` script/random.bin >filler.bin
echo "  Entry point address:               0x000000" >filler.info

head -c 1024 script/random.bin > filler2.bin

# Generate ".info' file (not used in BG4-CD+)
echo "  Entry point address:               0x2c001" > init_rom.info
echo "  Entry point address:               0x2e001" > drm_erom.info
echo "  Entry point address:               0xf7a40000" > init_boot.info
echo "  Entry point address:               0x08000000" > tz_loader_en.info

# Generate layout table
GEN_LAYOUT=./gen_layout.sh # tool to generate block1 layout data
SET_LAYOUT=./set_layout.sh # tool to inject block1 layout
echo "$WORKING_DIR/init_erom 0x10001" >layout.seq
echo "$WORKING_DIR/init_boot 2" >>layout.seq
echo "$WORKING_DIR/tz_loader_en 3" >>layout.seq
echo "$WORKING_DIR/drm_erom 0x10002" >>layout.seq
echo "$WORKING_DIR/filler 0x100200ff" >>layout.seq
echo "$WORKING_DIR/version 0x10020008" >>layout.seq
$GEN_LAYOUT layout.seq layout.bin
$SET_LAYOUT layout.bin init_erom.bin init_layout.bin $(( 8192-512 ))

# Generate final image of pre-bootloader
cat init_layout.bin init_boot.bin tz_loader_en.bin drm_erom.bin filler.bin version.bin filler2.bin > init_loader.img || exit 1

#
# Pre bootloader image generation complete
#

#
# Generate post bootloader image
#
$TOOL_DIR/prepend_image_info.sh bootloader_en.bin post-init_loader.img || exit 1

# Save a copy of the post-bootloader prior to padding
cp post-init_loader.img post-bootloader_nopadding.img
cp init_loader.img bootloader_nopadding.img

# Sanity check size of init_loader.img
INIT_LOADER_FINAL_SIZE=`stat -c %s init_loader.img`
if [ $INIT_LOADER_FINAL_SIZE -gt $block_size ]; then
    echo "Error: bootloader partition image size is greater than block size."
    exit 1;
fi

# expand post-init_loader to align to block_size
target2=post-init_loader.img
s=`stat -c %s $target2` && \
mask=$(( block_size - 1 ))
d=$((( (s + mask) & ~mask ) - s))
if [ $d -gt 0 ]; then
    dd if=script/random.bin of=$target2 bs=1 seek=$s count=$d conv=notrunc || exit 1
    echo "expand $target2 from $s with $d"
fi
