blob: 82b39c1e68b5bfd251b3ad57e3b3492a79145f12 [file] [log] [blame]
#!/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