#!/bin/bash

INSTALLER_DIR="`dirname ${0}`"
ECHO_PREFIX="=== "

# for cases that don't run "lunch hikey960-userdebug"
if [ -z "${ANDROID_BUILD_TOP}" ]; then
    ANDROID_BUILD_TOP=${INSTALLER_DIR}/../../../../../
    ANDROID_PRODUCT_OUT="${ANDROID_BUILD_TOP}/out/target/product/hikey960"
fi

if [ ! -d "${ANDROID_PRODUCT_OUT}" ]; then
    echo ${ECHO_PREFIX}"error in locating out directory, check if it exist"
    exit
fi

echo ${ECHO_PREFIX}"android out dir:${ANDROID_PRODUCT_OUT}"

function check_partition_table_version () {
	fastboot erase reserved
	if [ $? -eq 0 ]
	then
		IS_PTABLE_1MB_ALIGNED=true
	else
		IS_PTABLE_1MB_ALIGNED=false
	fi
}

function flashing_atf_uefi () {
	fastboot flash ptable "${INSTALLER_DIR}"/prm_ptable.img
	fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
	fastboot reboot-bootloader

	fastboot flash fastboot "${INSTALLER_DIR}"/l-loader.bin
	fastboot flash fip "${INSTALLER_DIR}"/fip.bin
	fastboot flash nvme "${INSTALLER_DIR}"/hisi-nvme.img
	fastboot flash fw_lpm3   "${INSTALLER_DIR}"/hisi-lpm3.img
	fastboot flash trustfirmware   "${INSTALLER_DIR}"/hisi-bl31.bin
	fastboot reboot-bootloader

	fastboot flash ptable "${INSTALLER_DIR}"/prm_ptable.img
	fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
	fastboot flash fastboot "${INSTALLER_DIR}"/l-loader.bin
	fastboot flash fip "${INSTALLER_DIR}"/fip.bin

	fastboot flash boot "${ANDROID_PRODUCT_OUT}"/boot.img
	fastboot flash system "${ANDROID_PRODUCT_OUT}"/system.img
	fastboot flash cache "${ANDROID_PRODUCT_OUT}"/cache.img
	fastboot flash userdata "${ANDROID_PRODUCT_OUT}"/userdata.img
}

function upgrading_ptable_1mb_aligned () {
	fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
	fastboot flash ptable "${INSTALLER_DIR}"/hisi-ptable.img
	fastboot flash fastboot "${INSTALLER_DIR}"/hisi-fastboot.img
	fastboot reboot-bootloader
}

echo ${ECHO_PREFIX}"Checking partition table version..."
check_partition_table_version

if [ "${IS_PTABLE_1MB_ALIGNED}" == "true" ]
then
	echo ${ECHO_PREFIX}"Partition table is 1MB aligned. Flashing ATF/UEFI..."
	flashing_atf_uefi
else
	echo ${ECHO_PREFIX}"Partition table is 512KB aligned."
	echo ${ECHO_PREFIX}"Upgrading to 1MB aligned version..."
	upgrading_ptable_1mb_aligned
	echo ${ECHO_PREFIX}"Flasing ATF/UEFI..."
	flashing_atf_uefi
	echo ${ECHO_PREFIX}"Done"
fi

fastboot reboot
