[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/tools/SLT/MT6290_LTE_PCB01_MT6290_S00.MOLY_W13_34.bin b/mcu/tools/SLT/MT6290_LTE_PCB01_MT6290_S00.MOLY_W13_34.bin
new file mode 100644
index 0000000..9f100e2
--- /dev/null
+++ b/mcu/tools/SLT/MT6290_LTE_PCB01_MT6290_S00.MOLY_W13_34.bin
Binary files differ
diff --git a/mcu/tools/SLT/config_6290 b/mcu/tools/SLT/config_6290
new file mode 100644
index 0000000..ed456c1
--- /dev/null
+++ b/mcu/tools/SLT/config_6290
@@ -0,0 +1,52 @@
+#
+# Compile Option Define
+#
+MOLY_ATEST_LIB_PATH=/project/moly_usr/MOLY.W13.44.LTE.p2
+PROJECT_LOADER=MT6290E2_EVB(LFWG).mak
+PROJECT_ATEST=MT6290E2_EVB(LFWG).mak
+PROJECT_SDIO=MT6290E2_EVB(LFWG).mak
+PROJECT_FDD=MT6290E2_EVB(LFWG).mak
+PROJECT_TDD=MT6290E2_EVB(LWG).mak
+NANDFLASH=S34ML02G1
+#NANDFLASH=MT29F2G08ABBEA
+
+#
+# Define 6290 SLT Test Load Location
+# ex.SLT_xxx_LOAD=$BINPATH/MT6290E2_EVB_PCB01_MT6290_S01.*.bin
+#
+SLT_HVT_MD_LOAD=slt_6290_md.elf.bin.6290_md
+SLT_HVT_AP_LOAD=slt_6290_ap.elf.bin.6290_ap
+SLT_ATEST_LOAD=../BinFile/MT6290E2_ATEST/MT6290E2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_SDIO_LOAD=../BinFile/MT6290E2_SDIO/MT6290E2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_MSDC1_LOAD=msdc.elf.bin.6290_ap
+SLT_FDD_LOAD=../BinFile/MT6290E2_FDD/MT6290E2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_TDD_LOAD=../BinFile/MT6290E2_FDD/MT6290E2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_CFG_FILE=../BinFile/MT6290E2_FDD/MT6290E2_EVB.cfg
+SLT_BL_FILE=$BINPATH/MT6290E2_EVB_BOOTLOADER_V005_MT6290_MOLY_*.bin
+
+#
+# Config Test Load Attribute
+# ex.LOAD=filename[,MD/AP][,HVT/MOLY]
+#
+SLT_TEST_LOAD_0=SLT_HVT_MD_LOAD,MD,HVT
+SLT_TEST_LOAD_1=SLT_HVT_AP_LOAD,AP,HVT
+SLT_TEST_LOAD_2=SLT_ATEST_LOAD,MD,MOLY
+SLT_TEST_LOAD_3=
+SLT_TEST_LOAD_4=
+SLT_TEST_LOAD_5=
+SLT_TEST_LOAD_6=SLT_TDD_LOAD,MD,MOLY
+PRIMARY_MAUI=SLT_FDD_LOAD,MD,MOLY
+
+#
+# Set Test Load Sequence
+# ex.SLT_SQ_ADD=MdRstCnt,ApRstCnt,MdLoad,ApLoad,ApMcuType,ErrIdx
+# MdLoad / ApLoad = [SLT_TEST_LOAD_0 ~ SLT_TEST_LOAD_6, PRIMARY_MAUI]
+# ApMcuType = [SLT_APMCU_LOAD / SLT_APMCU_KEEP / SLT_APMCU_PDN]
+# ErrIdx = [0~2] // Report error index to PC
+#
+SLT_SQ_ADD=0,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_KEEP,0
+SLT_SQ_ADD=0,1,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,1,SLT_TEST_LOAD_2,NULL,SLT_APMCU_PDN,0
+SLT_SQ_ADD=2,1,NULL,NULL,SLT_APMCU_PDN,0
+
diff --git a/mcu/tools/SLT/config_6290m b/mcu/tools/SLT/config_6290m
new file mode 100644
index 0000000..a0c91be
--- /dev/null
+++ b/mcu/tools/SLT/config_6290m
@@ -0,0 +1,51 @@
+#
+# Compile Option Define
+#
+MOLY_ATEST_LIB_PATH=/project/moly_usr/MOLY.W13.44.LTE.p2
+PROJECT_LOADER=MT6290ME2_EVB(LFWG).mak
+PROJECT_ATEST=MT6290ME2_EVB(LFWG).mak
+PROJECT_SDIO=MT6290ME2_EVB(LFWG).mak
+PROJECT_FDD=MT6290ME2_EVB(LFWG).mak
+PROJECT_TDD=MT6290ME2_EVB(LWG).mak
+NANDFLASH=S34ML02G1
+
+#
+# Define 6290m SLT Test Load Location
+# ex.SLT_xxx_LOAD=$BINPATH/MT6290E2_EVB_PCB01_MT6290_S01.*.bin
+#
+SLT_HVT_MD_LOAD=slt_6290m_md.elf.bin.6290m_md
+SLT_HVT_AP_LOAD=slt_6290m_ap.elf.bin.6290m_ap
+SLT_ATEST_LOAD=../BinFile/MT6290ME2_ATEST/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_SDIO_LOAD=../BinFile/MT6290ME2_SDIO/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_FDD_LOAD=../BinFile/MT6290ME2_FDD/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_TDD_LOAD=../BinFile/MT6290ME2_TDD/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_CFG_FILE=../BinFile/MT6290ME2_ATEST/MT6290ME2_EVB.cfg
+SLT_BL_FILE=$BINPATH/MT6290ME2_EVB_BOOTLOADER_V005_MT6290_MOLY_*.bin
+
+#
+# Config Test Load Attribute
+# ex.LOAD=filename[,MD/AP][,HVT/MOLY]
+#
+SLT_TEST_LOAD_0=SLT_HVT_MD_LOAD,MD,HVT
+SLT_TEST_LOAD_1=SLT_HVT_AP_LOAD,AP,HVT
+SLT_TEST_LOAD_2=SLT_ATEST_LOAD,MD,MOLY
+SLT_TEST_LOAD_3=SLT_SDIO_LOAD,MD,MOLY
+SLT_TEST_LOAD_4=
+SLT_TEST_LOAD_5=
+SLT_TEST_LOAD_6=SLT_FDD_LOAD,MD,MOLY
+PRIMARY_MAUI=SLT_TDD_LOAD,MD,MOLY
+
+#
+# Set Test Load Sequence
+# ex.SLT_SQ_ADD=MdRstCnt,ApRstCnt,MdLoad,ApLoad,ApMcuType,ErrIdx
+# MdLoad / ApLoad = [SLT_TEST_LOAD_0 ~ SLT_TEST_LOAD_6, PRIMARY_MAUI]
+# ApMcuType = [SLT_APMCU_LOAD / SLT_APMCU_KEEP / SLT_APMCU_PDN]
+# ErrIdx = [0~2] // Report error index to PC
+#
+SLT_SQ_ADD=0,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_KEEP,0
+SLT_SQ_ADD=0,1,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,1,SLT_TEST_LOAD_2,NULL,SLT_APMCU_PDN,0
+SLT_SQ_ADD=2,1,PRIMARY_MAUI,NULL,SLT_APMCU_PDN,1
+SLT_SQ_ADD=3,1,NULL,NULL,SLT_APMCU_PDN,0
+SLT_CHECK_EFUSE=CHIP_TYPE_P
diff --git a/mcu/tools/SLT/config_6290m_c b/mcu/tools/SLT/config_6290m_c
new file mode 100755
index 0000000..412de42
--- /dev/null
+++ b/mcu/tools/SLT/config_6290m_c
@@ -0,0 +1,51 @@
+#
+# Compile Option Define
+#
+MOLY_ATEST_LIB_PATH=/project/moly_usr/MOLY.W13.44.LTE.p2
+PROJECT_LOADER=MT6290ME2_EVB(LFWG).mak
+PROJECT_ATEST=MT6290ME2_EVB(LFWG).mak
+PROJECT_SDIO=MT6290ME2_EVB(LFWG).mak
+PROJECT_FDD=MT6290ME2_EVB(LFWG).mak
+PROJECT_TDD=MT6290ME2_EVB(LWG).mak
+NANDFLASH=S34ML02G1
+
+#
+# Define 6290m SLT Test Load Location
+# ex.SLT_xxx_LOAD=$BINPATH/MT6290E2_EVB_PCB01_MT6290_S01.*.bin
+#
+SLT_HVT_MD_LOAD=slt_6290m_md.elf.bin.6290m_md
+SLT_HVT_AP_LOAD=slt_6290m_ap.elf.bin.6290m_ap
+SLT_ATEST_LOAD=../BinFile/MT6290ME2_ATEST/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_SDIO_LOAD=../BinFile/MT6290ME2_SDIO/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_FDD_LOAD=../BinFile/MT6290ME2_FDD/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_TDD_LOAD=../BinFile/MT6290ME2_TDD/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_CFG_FILE=../BinFile/MT6290ME2_ATEST/MT6290ME2_EVB.cfg
+SLT_BL_FILE=$BINPATH/MT6290ME2_EVB_BOOTLOADER_V005_MT6290_MOLY_*.bin
+
+#
+# Config Test Load Attribute
+# ex.LOAD=filename[,MD/AP][,HVT/MOLY]
+#
+SLT_TEST_LOAD_0=SLT_HVT_MD_LOAD,MD,HVT
+SLT_TEST_LOAD_1=SLT_HVT_AP_LOAD,AP,HVT
+SLT_TEST_LOAD_2=SLT_ATEST_LOAD,MD,MOLY
+SLT_TEST_LOAD_3=SLT_SDIO_LOAD,MD,MOLY
+SLT_TEST_LOAD_4=
+SLT_TEST_LOAD_5=
+SLT_TEST_LOAD_6=
+PRIMARY_MAUI=SLT_TDD_LOAD,MD,MOLY
+
+#
+# Set Test Load Sequence
+# ex.SLT_SQ_ADD=MdRstCnt,ApRstCnt,MdLoad,ApLoad,ApMcuType,ErrIdx
+# MdLoad / ApLoad = [SLT_TEST_LOAD_0 ~ SLT_TEST_LOAD_6, PRIMARY_MAUI]
+# ApMcuType = [SLT_APMCU_LOAD / SLT_APMCU_KEEP / SLT_APMCU_PDN]
+# ErrIdx = [0~2] // Report error index to PC
+#
+SLT_SQ_ADD=0,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_KEEP,0
+SLT_SQ_ADD=0,1,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,1,SLT_TEST_LOAD_2,NULL,SLT_APMCU_PDN,0
+SLT_SQ_ADD=2,1,PRIMARY_MAUI,NULL,SLT_APMCU_PDN,1
+SLT_SQ_ADD=3,1,NULL,NULL,SLT_APMCU_PDN,0
+SLT_CHECK_EFUSE=CHIP_TYPE_C
diff --git a/mcu/tools/SLT/config_6290m_f b/mcu/tools/SLT/config_6290m_f
new file mode 100755
index 0000000..f7ba43e
--- /dev/null
+++ b/mcu/tools/SLT/config_6290m_f
@@ -0,0 +1,51 @@
+#
+# Compile Option Define
+#
+MOLY_ATEST_LIB_PATH=/project/moly_usr/MOLY.W13.44.LTE.p2
+PROJECT_LOADER=MT6290ME2_EVB(LFWG).mak
+PROJECT_ATEST=MT6290ME2_EVB(LFWG).mak
+PROJECT_SDIO=MT6290ME2_EVB(LFWG).mak
+PROJECT_FDD=MT6290ME2_EVB(LFWG).mak
+PROJECT_TDD=MT6290ME2_EVB(LWG).mak
+NANDFLASH=S34ML02G1
+
+#
+# Define 6290m SLT Test Load Location
+# ex.SLT_xxx_LOAD=$BINPATH/MT6290E2_EVB_PCB01_MT6290_S01.*.bin
+#
+SLT_HVT_MD_LOAD=slt_6290m_md.elf.bin.6290m_md
+SLT_HVT_AP_LOAD=slt_6290m_ap.elf.bin.6290m_ap
+SLT_ATEST_LOAD=../BinFile/MT6290ME2_ATEST/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_SDIO_LOAD=../BinFile/MT6290ME2_SDIO/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_FDD_LOAD=../BinFile/MT6290ME2_FDD/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_TDD_LOAD=../BinFile/MT6290ME2_TDD/MT6290ME2_EVB_PCB01_MT6290_S01.MOLY_*.bin
+SLT_CFG_FILE=../BinFile/MT6290ME2_ATEST/MT6290ME2_EVB.cfg
+SLT_BL_FILE=$BINPATH/MT6290ME2_EVB_BOOTLOADER_V005_MT6290_MOLY_*.bin
+
+#
+# Config Test Load Attribute
+# ex.LOAD=filename[,MD/AP][,HVT/MOLY]
+#
+SLT_TEST_LOAD_0=SLT_HVT_MD_LOAD,MD,HVT
+SLT_TEST_LOAD_1=SLT_HVT_AP_LOAD,AP,HVT
+SLT_TEST_LOAD_2=SLT_ATEST_LOAD,MD,MOLY
+SLT_TEST_LOAD_3=SLT_SDIO_LOAD,MD,MOLY
+SLT_TEST_LOAD_4=
+SLT_TEST_LOAD_5=
+SLT_TEST_LOAD_6=
+PRIMARY_MAUI=SLT_FDD_LOAD,MD,MOLY
+
+#
+# Set Test Load Sequence
+# ex.SLT_SQ_ADD=MdRstCnt,ApRstCnt,MdLoad,ApLoad,ApMcuType,ErrIdx
+# MdLoad / ApLoad = [SLT_TEST_LOAD_0 ~ SLT_TEST_LOAD_6, PRIMARY_MAUI]
+# ApMcuType = [SLT_APMCU_LOAD / SLT_APMCU_KEEP / SLT_APMCU_PDN]
+# ErrIdx = [0~2] // Report error index to PC
+#
+SLT_SQ_ADD=0,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,0,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_KEEP,0
+SLT_SQ_ADD=0,1,SLT_TEST_LOAD_0,SLT_TEST_LOAD_1,SLT_APMCU_LOAD,0
+SLT_SQ_ADD=1,1,SLT_TEST_LOAD_2,NULL,SLT_APMCU_PDN,0
+SLT_SQ_ADD=2,1,PRIMARY_MAUI,NULL,SLT_APMCU_PDN,1
+SLT_SQ_ADD=3,1,NULL,NULL,SLT_APMCU_PDN,0
+SLT_CHECK_EFUSE=CHIP_TYPE_F
diff --git a/mcu/tools/SLT/fileinfo.conf b/mcu/tools/SLT/fileinfo.conf
new file mode 100644
index 0000000..401468d
--- /dev/null
+++ b/mcu/tools/SLT/fileinfo.conf
@@ -0,0 +1,24 @@
+FILE_VER:0x01
+ # Description:
+ # File version
+
+FILE_TYPE:SLT_TEST_LOAD_1
+ # Description:
+ # Specify the file type of image
+ # Option Value:
+ # LTE_DSP_ROM: The file type is LTE DSP ROM
+
+FLASH_DEV:_NAND_FLASH_BOOTING_
+ # Description:
+ # Choose the SPI or NAND flash for DSP image download
+ # Option Value:
+ # __SERIAL_FLASH_EN__: Download DSP image into SPI flash
+ # _NAND_FLASH_BOOTING_: Download DSP image into NAND flash
+
+LOAD_ADDR:0x10000000
+
+MAX_SIZE:0xFFFFFFFF
+ # Description:
+ # The reserved size in flash for DSP image, please keep this value
+
+ATTRIBUTE:0x10000000
\ No newline at end of file
diff --git a/mcu/tools/SLT/modify_slt_gfh_file_info.pl b/mcu/tools/SLT/modify_slt_gfh_file_info.pl
new file mode 100644
index 0000000..99a919c
--- /dev/null
+++ b/mcu/tools/SLT/modify_slt_gfh_file_info.pl
@@ -0,0 +1,349 @@
+#!/usr/bin/perl
+#
+# Copyright Statement:
+# --------------------
+# This software is protected by Copyright and the information contained
+# herein is confidential. The software may not be copied and the information
+# contained herein may not be used or disclosed except with the written
+# permission of MediaTek Inc. (C) 2013
+#
+# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+#
+# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+#
+#
+#*****************************************************************************
+#*
+#* Filename:
+#* ---------
+#* prepend_gfh.pl
+#*
+#* Project:
+#* --------
+#* MOLY
+#*
+#* Description:
+#* ------------
+#* Add GFH header for the binary without GFH
+#*
+#* Author:
+#* -------
+#* Chin-Chieh Hung (mtk03404)
+#*
+#****************************************************************************
+use strict;
+
+
+#****************************************************************************
+# Included Modules
+#****************************************************************************
+BEGIN { push @INC, "pcore/" , './pcore/tools/' } # add additional library path
+use File::Basename;
+use File::Copy;
+#use CommonUtility;
+#use tools::pack_dep_gen;
+#PrintDependModule();
+
+#****************************************************************************
+# Constants
+#****************************************************************************
+my $PREPEND_GFH_VERNO = " m0.01";
+# v0.01 by mtk03404, initial version
+
+#Usage: modify_gfh_file_info.pl SRC_BINFILE_PATH(filename) DST_BINFILE_PATH(filename) file_info.conf
+
+#****************************************************************************
+# Global Variables
+#****************************************************************************
+my @GFH_Buffer;
+my $gfh_fileinfo_type = 1;
+my %GFH_FILE_TYPE;
+my %GFH_FLASH_DEV;
+my %GFH_SIG_TYPE;
+
+#****************************************************************************
+# GFH FileInfo Related Enum Definition
+#****************************************************************************
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_0" } = chr(0x00).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_1" } = chr(0x01).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_2" } = chr(0x02).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_3" } = chr(0x03).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_4" } = chr(0x04).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_5" } = chr(0x05).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_6" } = chr(0x06).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "PRIMARY_MAUI" } = chr(0x00).chr(0x01); #Big Endian
+
+$GFH_FLASH_DEV{ "FLASH_DEV_NONE" } = chr(0x00);
+$GFH_FLASH_DEV{ "F_NOR" } = chr(0x01);
+$GFH_FLASH_DEV{ "F_NAND_SEQUENTIAL" } = chr(0x02);
+$GFH_FLASH_DEV{ "F_NAND_TTBL" } = chr(0x03);
+$GFH_FLASH_DEV{ "F_NAND_FDM50" } = chr(0x04);
+$GFH_FLASH_DEV{ "F_EMMC_BOOT_REGION" } = chr(0x05);
+$GFH_FLASH_DEV{ "F_EMMC_DATA_REGION" } = chr(0x06);
+$GFH_FLASH_DEV{ "F_SF" } = chr(0x07);
+$GFH_FLASH_DEV{ "F_XBOOT" } = chr(0x08);
+$GFH_FLASH_DEV{ "FLASH_DEV_END" } = chr(0xFF);
+
+$GFH_SIG_TYPE{ "SIG_NONE" } = chr(0x00);
+$GFH_SIG_TYPE{ "SIG_PHASH" } = chr(0x01);
+$GFH_SIG_TYPE{ "SIG_SINGLE" } = chr(0x02);
+$GFH_SIG_TYPE{ "SIG_SINGLE_AND_PHASE" } = chr(0x03);
+$GFH_SIG_TYPE{ "SIG_MULTI" } = chr(0x04);
+$GFH_SIG_TYPE{ "SIG_TYPE_NUM" } = chr(0x05);
+$GFH_SIG_TYPE{ "SIG_TYPE_END" } = chr(0xFF);
+
+#****************************************************************************
+# Input Parameters
+#****************************************************************************
+my ($src_bin_file) = $ARGV[0];
+my ($dst_bin_file) = $ARGV[1];
+my ($file_info_cfg) = $ARGV[2];
+
+#****************************************************************************
+# Parameter Check
+#****************************************************************************
+die "source binary file $src_bin_file doesn't exist" if not -e $src_bin_file;
+die "config file $file_info_cfg doesn't exist" if not -e $file_info_cfg;
+
+
+#****************************************************************************
+# Functions
+#****************************************************************************
+if (!&IsGFH($src_bin_file))
+{
+ print "The $dst_bin_file has not GFH header, can not modify the GFH header for $dst_bin_file";
+ exit 0;
+}
+
+
+{
+ my $b;
+ my $sum;
+ my $src_bin_file_size;
+ my $nIndex = 0;
+ open (SRC_FILE_HANDLE, "<$src_bin_file") or &error_handler("$src_bin_file: open file error!");
+ binmode(SRC_FILE_HANDLE);
+ for (0..0x37)
+ {
+ read(SRC_FILE_HANDLE, $b, 1);
+ $GFH_Buffer[$nIndex++] = $b;
+ }
+ while (read(SRC_FILE_HANDLE, $b, 1))
+ {
+ $sum .= $b;
+ }
+ close SRC_FILE_HANDLE;
+
+ open (FILE_HANDLE, ">$dst_bin_file") or &error_handler("$dst_bin_file: open file error!");
+ $src_bin_file_size = (-s $src_bin_file);
+ &GFH_FileInfo_Mod($file_info_cfg, $src_bin_file_size);
+ binmode(FILE_HANDLE);
+ print FILE_HANDLE @GFH_Buffer;
+ print FILE_HANDLE $sum;
+ close FILE_HANDLE;
+
+
+
+#copy($src_bin_file, $dst_bin_file) or die "$!";
+}
+
+# GFH_FILE_INFO_v1
+# [ 3: 0] GFH_Header.m_magic_ver
+# [ 5: 3] GFH_Header.m_size, = size of GFH_FILE_INFO_v1 structure
+# [ 7: 6] GFH_Header.m_type, = GFH_FILE_INFO_v1
+# [ 19: 8] identifier, = GFH_FILE_INFO_ID = "FILE_INFO"
+# [ 23: 20] m_file_ver
+# [ 25: 24] m_file_type, = PRI_ROM, DSP_ROM, ...
+# [ : 26] m_flash_dev
+# [ : 27] m_sig_type
+# [ 31: 28] m_load_addr
+# [ 35: 32] m_file_len
+# [ 39: 36] m_max_size
+# [ 43: 40] m_content_offset
+# [ 47: 44] m_sig_len
+# [ 51: 48] m_jump_offset
+# [ 55: 52] m_attr
+sub GFH_FileInfo_Mod
+{
+ my ($config_file, $input_file_len) = @_;
+ my ($CONFIG_FILE_VER, $CONFIG_FILE_TYPE, $FLASH_DEV, $MAX_SIZE, $ATTR) = &GetFileInfoConfig($config_file);
+ my $nIndex;
+
+#m_file_type
+ $nIndex = 0x18;
+ ($GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++]) = $GFH_FILE_TYPE{ $CONFIG_FILE_TYPE };
+
+#m_max_siz
+ $nIndex = 0x24;
+ ($GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++]) = &Dec2ASCIIString($MAX_SIZE);
+
+#m_attr, no XIP in MT6290, default value is 0
+ $nIndex = 0x34;
+ ($GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++], $GFH_Buffer[$nIndex++]) = &Dec2ASCIIString($ATTR);
+}
+
+#****************************************************************************
+# subroutine: Get file config
+# input: config file
+# output: File Info config setting
+#****************************************************************************
+sub GetFileInfoConfig
+{
+ my $fileContent = &GetFileContent(@_);
+ my $parse_file_ver;
+ my $parse_file_ver_str;
+ my $parse_file_type;
+ my $parse_flash_dev;
+ my $parse_max_size;
+ my $parse_attr;
+
+ $fileContent =~ s/(.*)#(.*)/$1/g;
+
+ $fileContent =~ /FILE_VER:[\f\t]*(\w*)[\f\t]*/;
+ $parse_file_ver = hex($1);
+ $parse_file_ver_str = &Dec2ASCIIString($parse_file_ver);
+
+ $fileContent =~ /FILE_TYPE:[\f\t]*(\w*)[\f\t]*/;
+ $parse_file_type = $1;
+
+ $fileContent =~ /FLASH_DEV:[\f\t]*(\w*)[\f\t]*/;
+ $parse_flash_dev = $1;
+
+ $fileContent =~ /MAX_SIZE:[\f\t]*(\w*)[\f\t]*/;
+ $parse_max_size = hex($1);
+
+ $fileContent =~ /ATTRIBUTE:[\f\t]*(\w*)[\f\t]*/;
+ $parse_attr = hex($1);
+
+ return ($parse_file_ver_str, $parse_file_type, $parse_flash_dev, $parse_max_size, $parse_attr);
+}
+
+#****************************************************************************
+# subroutine: GetFileContent
+# input: strFilePath
+# output: strFileContent after chomp
+#****************************************************************************
+sub GetFileContent
+{
+ my ($strFilePath) = @_;
+ my $content;
+ open FILE, "<$strFilePath" or &error_handler("$strFilePath: open file error!", __FILE__, __LINE__, 'GetFileContent');
+ {
+ local $/;
+ $content = <FILE>;
+ }
+ close FILE;
+ chomp($content);
+ return $content;
+}
+
+#****************************************************************************
+# subroutine: Dec2HexASCII, without "0x" for prefix, big endian
+# input: Integer value
+# output: Hex ASCII without "0x"
+#****************************************************************************
+sub Dec2ASCIIString
+{
+ my ($dec) = @_;
+ my $str = "";
+ if ($dec > 0x00FF0000)
+ {
+ $str .= chr(($dec >> 0) & 0xFF);
+ $str .= chr(($dec >> 8) & 0xFF);
+ $str .= chr(($dec >> 16) & 0xFF);
+ $str .= chr(($dec >> 24) & 0xFF);
+ }
+ elsif($dec > 0x0000FF00)
+ {
+ $str .= chr($dec & 0xFF);
+ $str .= chr(($dec >> 8) & 0xFF);
+ $str .= chr(($dec >> 16) & 0xFF);
+ $str .= chr(0x00);
+ }
+ elsif($dec > 0x000000FF)
+ {
+ $str .= chr($dec & 0xFF);
+ $str .= chr(($dec >> 8) & 0xFF);
+ $str .= chr(0x00);
+ $str .= chr(0x00);
+ }
+ else
+ {
+ $str .= chr($dec & 0xFF);
+ $str .= chr(0x00);
+ $str .= chr(0x00);
+ $str .= chr(0x00);
+ }
+}
+
+#****************************************************************************
+# subroutine: Check GFH Header, (0-2: 4D 4D 4D, 8-16: FILE_INFO)
+# input: File Name
+# output: True/False
+#****************************************************************************
+sub IsGFH
+{
+ my ($strFilePath) = @_;
+ my $bIsGFH = 0;
+
+ if (-e $strFilePath)
+{
+# Get 17bytes (0-2: 4D 4D 4D, 8-16: FILE_INFO
+open (FILE_HANDLE, "<$strFilePath") or &error_handler("$strFilePath: open file error!");
+#binmode(FILE_HANDLE);
+ my ($nIndex, $data) = (0, undef);
+ my @Buffer;
+ while (read(FILE_HANDLE, $data, 1))
+ {
+ $Buffer[$nIndex++] = $data;
+ last if ($nIndex > 16);
+ }
+ close FILE_HANDLE;
+ my ($strFILE_INFO, $nMatchMMM) = (undef, 0);
+ for (0..2)
+ {
+ $nMatchMMM++ if (ord($Buffer[$_]) == 0x4D);
+ }
+ for (8..16)
+ {
+ $strFILE_INFO .= $Buffer[$_];
+ }
+ $bIsGFH = 1 if ($nMatchMMM == 3 and $strFILE_INFO eq "FILE_INFO");
+}
+return $bIsGFH;
+}
+
+#****************************************************************************
+# subroutine: error_handler
+# input: $error_msg: error message
+# $file: filename
+# $line_no: line number
+#****************************************************************************
+sub error_handler
+{
+ my ($error_msg) = @_;
+ my ($pack_name, $file, $line_no) = caller;
+ my $final_error_msg = "MODIFY_GFH_FILE_INFO ERROR: $error_msg at $file line $line_no\n";
+ die $final_error_msg;
+}
diff --git a/mcu/tools/SLT/prepend_slt_gfh_file_info.pl b/mcu/tools/SLT/prepend_slt_gfh_file_info.pl
new file mode 100644
index 0000000..aaac836
--- /dev/null
+++ b/mcu/tools/SLT/prepend_slt_gfh_file_info.pl
@@ -0,0 +1,420 @@
+#!/usr/bin/perl
+#
+# Copyright Statement:
+# --------------------
+# This software is protected by Copyright and the information contained
+# herein is confidential. The software may not be copied and the information
+# contained herein may not be used or disclosed except with the written
+# permission of MediaTek Inc. (C) 2013
+#
+# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+#
+# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+#
+#
+#*****************************************************************************
+#*
+#* Filename:
+#* ---------
+#* prepend_gfh.pl
+#*
+#* Project:
+#* --------
+#* MOLY
+#*
+#* Description:
+#* ------------
+#* Add GFH header for the binary without GFH
+#*
+#* Author:
+#* -------
+#* Chin-Chieh Hung (mtk03404)
+#*
+#****************************************************************************
+use strict;
+
+
+#****************************************************************************
+# Included Modules
+#****************************************************************************
+BEGIN { push @INC, "pcore/" , './pcore/tools/' } # add additional library path
+use File::Basename;
+use File::Copy;
+#use CommonUtility;
+#use tools::pack_dep_gen;
+#PrintDependModule();
+
+#****************************************************************************
+# Constants
+#****************************************************************************
+my $PREPEND_GFH_VERNO = " m0.01";
+# v0.01 by mtk03404, initial version
+
+#Usage: prepend_gfh.pl SRC_BINFILE_PATH(filename) DST_BINFILE_PATH(filename) file_info.conf
+
+#****************************************************************************
+# Global Variables
+#****************************************************************************
+my @GFH_Buffer;
+my $gfh_fileinfo_type = 1;
+my %GFH_FILE_TYPE;
+my %GFH_FLASH_DEV;
+my %GFH_SIG_TYPE;
+
+#****************************************************************************
+# GFH FileInfo Related Enum Definition
+#****************************************************************************
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_0" } = chr(0x00).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_1" } = chr(0x01).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_2" } = chr(0x02).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_3" } = chr(0x03).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_4" } = chr(0x04).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_5" } = chr(0x05).chr(0x80); #Big Endian
+$GFH_FILE_TYPE{ "SLT_TEST_LOAD_6" } = chr(0x06).chr(0x80); #Big Endian
+
+$GFH_FLASH_DEV{ "FLASH_DEV_NONE" } = chr(0x00);
+$GFH_FLASH_DEV{ "F_NOR" } = chr(0x01);
+$GFH_FLASH_DEV{ "F_NAND_SEQUENTIAL" } = chr(0x02);
+$GFH_FLASH_DEV{ "F_NAND_TTBL" } = chr(0x03);
+$GFH_FLASH_DEV{ "F_NAND_FDM50" } = chr(0x04);
+$GFH_FLASH_DEV{ "F_EMMC_BOOT_REGION" } = chr(0x05);
+$GFH_FLASH_DEV{ "F_EMMC_DATA_REGION" } = chr(0x06);
+$GFH_FLASH_DEV{ "F_SF" } = chr(0x07);
+$GFH_FLASH_DEV{ "F_XBOOT" } = chr(0x08);
+$GFH_FLASH_DEV{ "FLASH_DEV_END" } = chr(0xFF);
+
+$GFH_SIG_TYPE{ "SIG_NONE" } = chr(0x00);
+$GFH_SIG_TYPE{ "SIG_PHASH" } = chr(0x01);
+$GFH_SIG_TYPE{ "SIG_SINGLE" } = chr(0x02);
+$GFH_SIG_TYPE{ "SIG_SINGLE_AND_PHASE" } = chr(0x03);
+$GFH_SIG_TYPE{ "SIG_MULTI" } = chr(0x04);
+$GFH_SIG_TYPE{ "SIG_TYPE_NUM" } = chr(0x05);
+$GFH_SIG_TYPE{ "SIG_TYPE_END" } = chr(0xFF);
+
+#****************************************************************************
+# Input Parameters
+#****************************************************************************
+my ($src_bin_file) = $ARGV[0];
+my ($dst_bin_file) = $ARGV[1];
+my ($file_info_cfg) = $ARGV[2];
+
+#****************************************************************************
+# Parameter Check
+#****************************************************************************
+die "source binary file $src_bin_file doesn't exist" if not -e $src_bin_file;
+die "config file $file_info_cfg doesn't exist" if not -e $file_info_cfg;
+
+
+#****************************************************************************
+# Functions
+#****************************************************************************
+if (&IsGFH($src_bin_file))
+{
+ print "The $dst_bin_file has the GFH header, does not prepend the GFH header for $dst_bin_file";
+ exit 0;
+}
+else
+{
+ my $b;
+ my $sum;
+ my $src_bin_file_size;
+ open (SRC_FILE_HANDLE, "<$src_bin_file") or &error_handler("$src_bin_file: open file error!");
+ binmode(SRC_FILE_HANDLE);
+ while (read(SRC_FILE_HANDLE, $b, 1))
+ {
+ $sum .= $b;
+ }
+ close SRC_FILE_HANDLE;
+
+ open (FILE_HANDLE, ">$dst_bin_file") or &error_handler("$dst_bin_file: open file error!");
+ $src_bin_file_size = (-s $src_bin_file) + 0x1000;
+ &GFH_FileInfo_Gen($file_info_cfg, $src_bin_file_size);
+ binmode(FILE_HANDLE);
+ print FILE_HANDLE @GFH_Buffer;
+ print FILE_HANDLE $sum;
+ close FILE_HANDLE;
+
+
+
+#copy($src_bin_file, $dst_bin_file) or die "$!";
+}
+
+# GFH_FILE_INFO_v1
+# [ 3: 0] GFH_Header.m_magic_ver
+# [ 5: 3] GFH_Header.m_size, = size of GFH_FILE_INFO_v1 structure
+# [ 7: 6] GFH_Header.m_type, = GFH_FILE_INFO_v1
+# [ 19: 8] identifier, = GFH_FILE_INFO_ID = "FILE_INFO"
+# [ 23: 20] m_file_ver
+# [ 25: 24] m_file_type, = PRI_ROM, DSP_ROM, ...
+# [ : 26] m_flash_dev
+# [ : 27] m_sig_type
+# [ 31: 28] m_load_addr
+# [ 35: 32] m_file_len
+# [ 39: 36] m_max_size
+# [ 43: 40] m_content_offset
+# [ 47: 44] m_sig_len
+# [ 51: 48] m_jump_offset
+# [ 55: 52] m_attr
+sub GFH_FileInfo_Gen
+{
+ my ($config_file, $input_file_len) = @_;
+ my ($nIndex, $data) = (0, undef);
+ my ($CONFIG_FILE_VER, $CONFIG_FILE_TYPE, $FLASH_DEV, $LOAD_ADDR, $MAX_SIZE, $ATTR) = &GetFileInfoConfig($config_file);
+
+#GFH_Header.m_magic_ver
+ $GFH_Buffer[$nIndex++] = 'MMM'; #'M'
+ $GFH_Buffer[$nIndex++] = chr(0x01);
+printf("1: %d\n", $nIndex);
+#GFH_Header.m_size
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x10);
+
+#GFH_Header.m_type
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+
+#identifier
+ $GFH_Buffer[$nIndex++] = 'FILE_INFO';
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+
+#m_file_ver
+ $GFH_Buffer[$nIndex++] = $CONFIG_FILE_VER;
+
+#m_file_type
+ $GFH_Buffer[$nIndex++] = $GFH_FILE_TYPE{ $CONFIG_FILE_TYPE };
+
+#m_flash_dev
+ if($FLASH_DEV =~ /_NAND_FLASH_BOOTING_/)
+ {
+ $GFH_Buffer[$nIndex++] = $GFH_FLASH_DEV{ "F_NAND_FDM50" };
+ }
+ elsif($FLASH_DEV =~ /__EMMC_BOOTING__/)
+ {
+ $GFH_Buffer[$nIndex++] = $GFH_FLASH_DEV{ "F_EMMC_DATA_REGION" };
+ }
+ elsif($FLASH_DEV =~ /__X_BOOTING__/)
+ {
+ $GFH_Buffer[$nIndex++] = $GFH_FLASH_DEV{ "F_XBOOT" };
+ }
+ elsif($FLASH_DEV =~ /__SERIAL_FLASH_EN__/)
+ {
+ $GFH_Buffer[$nIndex++] = $GFH_FLASH_DEV{ "F_SF" };
+ }
+ else
+ {
+ $GFH_Buffer[$nIndex++] = $GFH_FLASH_DEV{ "F_NOR" };
+ }
+#m_sig_type
+ $GFH_Buffer[$nIndex++] = $GFH_SIG_TYPE{ "SIG_NONE" };
+
+#m_load_addr
+ $GFH_Buffer[$nIndex++] = &Dec2ASCIIString($LOAD_ADDR);
+
+#m_file_len
+ $GFH_Buffer[$nIndex++] = &Dec2ASCIIString($input_file_len);
+
+#m_max_size
+ $GFH_Buffer[$nIndex++] = &Dec2ASCIIString($MAX_SIZE);
+
+#m_content_offset
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x10);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+
+#m_sig_len
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+
+#m_jump_offset
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+ $GFH_Buffer[$nIndex++] = chr(0x00);
+
+#m_attr, no XIP in MT6290, default value is 0
+ $GFH_Buffer[$nIndex++] = &Dec2ASCIIString($ATTR);
+
+# 4K NAND flash page align
+ for ($nIndex = 0x38; $nIndex < 4096; $nIndex++)
+ {
+ $GFH_Buffer[$nIndex] = chr(0x00);
+ }
+
+# print pack("i*", @GFH_Buffer);
+}
+
+#****************************************************************************
+# subroutine: Get file config
+# input: config file
+# output: File Info config setting
+#****************************************************************************
+sub GetFileInfoConfig
+{
+ my $fileContent = &GetFileContent(@_);
+ my $parse_file_ver;
+ my $parse_file_ver_str;
+ my $parse_file_type;
+ my $parse_flash_dev;
+ my $parse_load_addr;
+ my $parse_max_size;
+ my $parse_attr;
+
+ $fileContent =~ s/(.*)#(.*)/$1/g;
+
+ $fileContent =~ /FILE_VER:[\f\t]*(\w*)[\f\t]*/;
+ $parse_file_ver = hex($1);
+ $parse_file_ver_str = &Dec2ASCIIString($parse_file_ver);
+
+ $fileContent =~ /FILE_TYPE:[\f\t]*(\w*)[\f\t]*/;
+ $parse_file_type = $1;
+
+ $fileContent =~ /FLASH_DEV:[\f\t]*(\w*)[\f\t]*/;
+ $parse_flash_dev = $1;
+
+ $fileContent =~ /LOAD_ADDR:[\f\t]*(\w*)[\f\t]*/;
+ $parse_load_addr = hex($1);
+
+ $fileContent =~ /MAX_SIZE:[\f\t]*(\w*)[\f\t]*/;
+ $parse_max_size = hex($1);
+
+ $fileContent =~ /ATTRIBUTE:[\f\t]*(\w*)[\f\t]*/;
+ $parse_attr = hex($1);
+
+ return ($parse_file_ver_str, $parse_file_type, $parse_flash_dev, $parse_load_addr, $parse_max_size, $parse_attr);
+}
+
+#****************************************************************************
+# subroutine: GetFileContent
+# input: strFilePath
+# output: strFileContent after chomp
+#****************************************************************************
+sub GetFileContent
+{
+ my ($strFilePath) = @_;
+ my $content;
+ open FILE, "<$strFilePath" or &error_handler("$strFilePath: open file error!", __FILE__, __LINE__, 'GetFileContent');
+ {
+ local $/;
+ $content = <FILE>;
+ }
+ close FILE;
+ chomp($content);
+ return $content;
+}
+
+#****************************************************************************
+# subroutine: Dec2HexASCII, without "0x" for prefix, big endian
+# input: Integer value
+# output: Hex ASCII without "0x"
+#****************************************************************************
+sub Dec2ASCIIString
+{
+ my ($dec) = @_;
+ my $str = "";
+ if ($dec > 0x00FF0000)
+ {
+ $str .= chr(($dec >> 0) & 0xFF);
+ $str .= chr(($dec >> 8) & 0xFF);
+ $str .= chr(($dec >> 16) & 0xFF);
+ $str .= chr(($dec >> 24) & 0xFF);
+ }
+ elsif($dec > 0x0000FF00)
+ {
+ $str .= chr($dec & 0xFF);
+ $str .= chr(($dec >> 8) & 0xFF);
+ $str .= chr(($dec >> 16) & 0xFF);
+ $str .= chr(0x00);
+ }
+ elsif($dec > 0x000000FF)
+ {
+ $str .= chr($dec & 0xFF);
+ $str .= chr(($dec >> 8) & 0xFF);
+ $str .= chr(0x00);
+ $str .= chr(0x00);
+ }
+ else
+ {
+ $str .= chr($dec & 0xFF);
+ $str .= chr(0x00);
+ $str .= chr(0x00);
+ $str .= chr(0x00);
+ }
+
+}
+
+#****************************************************************************
+# subroutine: Check GFH Header, (0-2: 4D 4D 4D, 8-16: FILE_INFO)
+# input: File Name
+# output: True/False
+#****************************************************************************
+sub IsGFH
+{
+ my ($strFilePath) = @_;
+ my $bIsGFH = 0;
+
+ if (-e $strFilePath)
+{
+# Get 17bytes (0-2: 4D 4D 4D, 8-16: FILE_INFO
+open (FILE_HANDLE, "<$strFilePath") or &error_handler("$strFilePath: open file error!");
+#binmode(FILE_HANDLE);
+ my ($nIndex, $data) = (0, undef);
+ my @Buffer;
+ while (read(FILE_HANDLE, $data, 1))
+ {
+ $Buffer[$nIndex++] = $data;
+ last if ($nIndex > 16);
+ }
+ close FILE_HANDLE;
+ my ($strFILE_INFO, $nMatchMMM) = (undef, 0);
+ for (0..2)
+ {
+ $nMatchMMM++ if (ord($Buffer[$_]) == 0x4D);
+ }
+ for (8..16)
+ {
+ $strFILE_INFO .= $Buffer[$_];
+ }
+ $bIsGFH = 1 if ($nMatchMMM == 3 and $strFILE_INFO eq "FILE_INFO");
+}
+return $bIsGFH;
+}
+
+#****************************************************************************
+# subroutine: error_handler
+# input: $error_msg: error message
+# $file: filename
+# $line_no: line number
+#****************************************************************************
+sub error_handler
+{
+ my ($error_msg) = @_;
+ my ($pack_name, $file, $line_no) = caller;
+ my $final_error_msg = "PREPEND_GFH ERROR: $error_msg at $file line $line_no\n";
+ die $final_error_msg;
+}
diff --git a/mcu/tools/SLT/slt b/mcu/tools/SLT/slt
new file mode 100644
index 0000000..33104de
--- /dev/null
+++ b/mcu/tools/SLT/slt
@@ -0,0 +1,808 @@
+#!/bin/sh
+
+BASE=../../../mcu
+MAKEFILE=make/"build.mak"
+OPTIONFILE=make/"Option.mak"
+ATESTMAKEFILE=make/module/driver/autotest/atest_drv.mak
+MTKREL=mtk_rel
+LABLEINI=label.ini
+PREPEND=tools/SLT/prepend_slt_gfh_file_info.pl
+MODIFY=tools/SLT/modify_slt_gfh_file_info.pl
+CONF=tools/SLT/fileinfo.conf
+SLTBL_C=service/sys_svc/bootloader_slt/inc/bl_slt_config.h
+SLT_NL_CONFIG=interface/service/config/middleWare_task_config.h
+LOADPATCHFILE=tools/SLT/config
+
+ctrl_c()
+# run if user hits control-c
+{
+ if [ -f "$MAKEFILE.bak" ]; then
+ mv $MAKEFILE.bak $MAKEFILE
+ fi
+ if [ -f "$CONF.bak" ]; then
+ mv $CONF.bak $CONF
+ fi
+ if [ -f "$PROJFILE.bak" ]; then
+ mv $PROJFILE.bak $PROJFILE
+ fi
+ if [ -f "$LABLEINI.bak" ]; then
+ mv $LABLEINI.bak $LABLEINI
+ fi
+ if [ -f "$MEMORYCONFIG.bak" ]; then
+ mv $MEMORYCONFIG.bak $MEMORYCONFIG
+ fi
+ if [ -f "$OPTIONFILE.bak" ]; then
+ mv $OPTIONFILE.bak $OPTIONFILE
+ fi
+ if [ -f "$SLTBL_C.bak" ]; then
+ mv $SLTBL_C.bak $SLTBL_C
+ fi
+ if [ -f "$LABLEINI.bak" ]; then
+ mv $LABLEINI.bak $LABLEINI
+ fi
+ if [ -f "$ATESTMAKEFILE.bak" ]; then
+ mv $ATESTMAKEFILE.bak $ATESTMAKEFILE
+ fi
+ if [ -f "$SLT_NL_CONFIG.bak" ]; then
+ mv $SLT_NL_CONFIG.bak $SLT_NL_CONFIG
+ fi
+ exit
+}
+
+function get_bin_path {
+ local filter=0
+ local fline=""
+ local enter=$(awk 'BEGIN{printf("\r")}')
+ echo Parsing $1
+ for line in `cat $1`
+ do
+ if [ $filter -eq 0 ]; then
+ fline=$fline$line
+ fi
+ if [ "${line:0:1}" = "#" ]; then
+ filter=1
+ fi
+ if [ "${line:${#line}-1:1}" != "$enter" ]; then
+ continue
+ fi
+ fline=${fline:0:${#fline}-1}
+ if [ "${fline%=*}" = "ORIGINAL_PROJECT_NAME" ]; then
+ ORIGINAL_PROJECT_NAME=${fline#ORIGINAL_PROJECT_NAME=}
+ fi
+ if [ "${fline%=*}" = "ORIGINAL_FLAVOR" ]; then
+ ORIGINAL_FLAVOR=${fline#ORIGINAL_FLAVOR=}
+ fi
+ if [ "${fline%=*}" = "BOARD_VER" ]; then
+ BOARD_VER=${fline#BOARD_VER=}
+ fi
+ if [ "${fline%=*}" = "CHIP_VER" ]; then
+ CHIP_VER=${fline#CHIP_VER=}
+ break
+ fi
+ fline=""
+ filter=0
+ done
+ BINPATH="build/"$ORIGINAL_PROJECT_NAME"/"$ORIGINAL_FLAVOR"/bin"
+}
+
+function parsing_project_file {
+ PROJECT=$1
+ PROJFILE=make/$PROJECT
+ get_bin_path $PROJFILE
+
+ MEMORYCONFIG="custom/system/"$BOARD_VER"/"$ORIGINAL_FLAVOR"/custom_MemoryDevice.h.conf"
+ if [ ! -f $MEMORYCONFIG ]; then
+ MEMORYCONFIG="custom/system/"$BOARD_VER"/DEFAULT/custom_MemoryDevice.h.conf"
+ if [ ! -f $MEMORYCONFIG ]; then
+ echo $MEMORYCONFIG is not exsit!
+ ctrl_c
+ exit
+ fi
+ fi
+ FEATURECONFIG="custom/system/"$BOARD_VER"/"$ORIGINAL_FLAVOR"/custom_FeatureConfig.h.conf"
+ if [ ! -f $FEATURECONFIG ]; then
+ FEATURECONFIG="custom/system/"$BOARD_VER"/DEFAULT/custom_FeatureConfig.h.conf"
+ if [ ! -f $FEATURECONFIG ]; then
+ echo $FEATURECONFIG is not exsit!
+ ctrl_c
+ exit
+ fi
+ fi
+
+ cp $PROJFILE $PROJFILE.bak
+ chmod +w $PROJFILE
+ cat $PROJFILE.bak \
+ | sed -e "s/^IC_TEST_TYPE\s*=.*/IC_TEST_TYPE = "$CHIP"_SLT/" \
+ > $PROJFILE
+}
+
+function dispatch_attribute {
+ SLT_LOAD_ATTR_MD=0
+ SLT_LOAD_ATTR_HVT=0
+ SLT_LOAD_ATTR_LOAD_AP=0
+ SLT_LOAD_ATTR_AP_IDX=0
+ attribute_array=($(echo $1 | tr ',' ' ' | tr -s ' '))
+ attribute_array_num=${#attribute_array[@]}
+ SLT_LOAD_ATTR_PARAM0=${attribute_array[0]}
+ for (( attribute_i=0; attribute_i<$attribute_array_num; attribute_i++ ))
+ do
+ if [ "${attribute_array[attribute_i]}" = "MD" ]; then
+ SLT_LOAD_ATTR_MD=1
+ elif [ "${attribute_array[attribute_i]}" = "HVT" ]; then
+ SLT_LOAD_ATTR_HVT=1
+ elif [ "${attribute_array[attribute_i]:0:8}" = "LOAD_AP_" ]; then
+ SLT_LOAD_ATTR_LOAD_AP=1
+ SLT_LOAD_ATTR_AP_IDX=${attribute_array[attribute_i]#LOAD_AP_}
+ fi
+ done
+}
+
+function gen_fileinfo {
+ SLT_TEST_LOAD_IDX=""
+ SLT_LOAD_PATH=""
+ SLT_LOAD_PATH_CHANGED=0
+ SLT_LOAD_ATTRIBUTE=0
+ SLT_LOAD_ADDR=0
+ local gen_fileinfo_clean_conf=0
+ if [ ! -f "$CONF.bak" ]; then
+ cp $CONF $CONF.bak
+ chmod +w $CONF
+ gen_fileinfo_clean_conf=1
+ fi
+ for line in `cat $LOADPATCHFILE`
+ do
+ str=${line%${line#*=$1*}}
+ if [ "${str:0:1}" != "#" ] && [ "${str#*=}" = "$1" ]; then
+ SLT_TEST_LOAD_IDX=${line%=$1*}
+ str=${line#*=$1,*},
+ dispatch_attribute $str
+
+ if [ $SLT_LOAD_ATTR_MD -eq 1 ]; then
+ SLT_LOAD_ATTRIBUTE=$(awk 'BEGIN{printf("%#x",'$SLT_LOAD_ATTRIBUTE'+0x20000000)}')
+ SLT_LOAD_ADDR=0x40000000
+ fi
+ if [ $SLT_LOAD_ATTR_HVT -eq 1 ]; then
+ SLT_LOAD_ATTRIBUTE=$(awk 'BEGIN{printf("%#x",'$SLT_LOAD_ATTRIBUTE'+0x10000000)}')
+ fi
+ if [ $SLT_LOAD_ATTR_LOAD_AP -eq 1 ]; then
+ SLT_LOAD_ATTRIBUTE=$(awk 'BEGIN{printf("%#x",'$SLT_LOAD_ATTRIBUTE'+0x40000000)}')
+ SLT_LOAD_ATTRIBUTE=$(awk 'BEGIN{printf("%#x",'$SLT_LOAD_ATTRIBUTE'+('$SLT_LOAD_ATTR_AP_IDX'*0x01000000))}')
+ fi
+ fi
+ done
+
+ if [ -z $SLT_TEST_LOAD_IDX ] && [ "$SKIP_LOAD_IDX_CHK" != "TRUE" ]; then
+ echo '"'$1'"' is invalid !
+ ctrl_c
+ exit
+ fi
+ if [ "$SLT_LOAD_ADDR" != "0x40000000" ]; then
+ if [ $CHIP = "MT6290" ]; then
+ SLT_LOAD_ADDR=0x10000000
+ else
+ SLT_LOAD_ADDR=0x02000000
+ fi
+ fi
+
+ cat $CONF.bak \
+ | sed -e 's/^FILE_TYPE\s*:.*/FILE_TYPE:'$SLT_TEST_LOAD_IDX'/' \
+ | sed -e 's/^ATTRIBUTE\s*:.*/ATTRIBUTE:'$SLT_LOAD_ATTRIBUTE'/' \
+ | sed -e 's/^LOAD_ADDR\s*:.*/LOAD_ADDR:'$SLT_LOAD_ADDR'/' \
+ | sed -e 's/^MAX_SIZE\s*:.*/MAX_SIZE:0xFFFFFFFF/' \
+ > $CONF
+
+ for line in `cat $LOADPATCHFILE`
+ do
+ if [ "${line%=*}" = "$1" ]; then
+ SLT_LOAD_PATH=${line#$1=}
+ fi
+ done
+ if [ -z $SLT_LOAD_PATH ]; then
+ SLT_LOAD_PATH=.
+ else
+ if [ "${SLT_LOAD_PATH:1:7}" = "BINPATH" ]; then
+ SLT_LOAD_PATH=$BINPATH${SLT_LOAD_PATH#?BINPATH*}
+ SLT_LOAD_PATH_CHANGED=1
+ fi
+ fi
+ if [ $gen_fileinfo_clean_conf -eq 1 ]; then
+ mv $CONF.bak $CONF
+ fi
+ SKIP_LOAD_IDX_CHK=""
+}
+
+function gen_GFH_header {
+ cp $CONF $CONF.bak
+ chmod +w $CONF
+
+ gen_fileinfo $1
+ SLT_LOAD_PATH=$(ls $SLT_LOAD_PATH)
+ if [ $? -ne 0 ]; then
+ echo Generate $1 failed!
+ ctrl_c
+ exit
+ fi
+
+ cp -f $SLT_LOAD_PATH $SLTPATH/"$CHIP"_$1
+ if [ $SLT_LOAD_ATTR_HVT -eq 0 ]; then
+ perl $MODIFY $SLTPATH/"$CHIP"_$1 $SLTPATH/"$CHIP"_$1.gfh $CONF
+ else
+ perl $PREPEND $SLTPATH/"$CHIP"_$1 $SLTPATH/"$CHIP"_$1.gfh $CONF
+ fi
+ mv $SLTPATH/"$CHIP"_$1.gfh $SLTPATH/"$CHIP"_$1
+ mv $CONF.bak $CONF
+}
+
+function backup_compile_files {
+ BAKPATH=$SLTPATH"_ORG/"$1
+ if [ -d $BAKPATH ]; then
+ rm -fr $BAKPATH
+ fi
+ mkdir -p $BAKPATH
+ cp -f $BINPATH/*.elf $BAKPATH/.
+ cp -f $BINPATH/*.bin $BAKPATH/.
+ cp -f $BINPATH/*.cfg $BAKPATH/.
+ cp -f $BINPATH/EXT_BOOTLOADER $BAKPATH/.
+}
+
+function gen_slt_loader {
+
+ SKIP_LOAD_IDX_CHK="TRUE"
+ gen_fileinfo SLT_BL_FILE
+ if [ $SLT_LOAD_PATH_CHANGED -eq 1 ]; then
+ cat $PROJFILE.bak \
+ | sed -e 's/IC_TEST_TYPE\s*=.*/IC_TEST_TYPE = MT6290_SLT_LOADER/'\
+ > $PROJFILE
+
+ cp $OPTIONFILE $OPTIONFILE.bak
+ chmod +w $OPTIONFILE
+
+ cat $OPTIONFILE.bak \
+ | sed -e 's/COM_DEFS += __IC_SLT__/COM_DEFS += __IC_SLT__ __IC_SLT_LOADER__/'\
+ > $OPTIONFILE
+
+ cp $MAKEFILE $MAKEFILE.bak
+ chmod +w $MAKEFILE
+
+ cat $MAKEFILE.bak \
+ | sed -e 's/^new\s*:\s*update/#new : update/'\
+ > $MAKEFILE
+
+ local output_load_sq=""
+ for line in `cat $LOADPATCHFILE`
+ do
+ if [ "${line%=*}" = "SLT_SQ_ADD" ]; then
+ SLT_SQ_ADD=${line#SLT_SQ_ADD=}
+ output_load_sq=$output_load_sq"{"$SLT_SQ_ADD"},"
+ fi
+ done
+
+ if [ "$output_load_sq" = "" ]; then
+ echo SLT_SQ_ADD is invalid.
+ ctrl_c
+ exit
+ fi
+ if [ -z "$SLT_CHECK_EFUSE" ]; then
+ SLT_CHECK_EFUSE=0xFFFFFFFF
+ fi
+ cp $SLTBL_C $SLTBL_C.bak
+ chmod +w $SLTBL_C
+ cat $SLTBL_C.bak \
+ | sed -e 's/#define SLT_TEST_LOAD_SEQUENCE_FROM_CFG {0,0,PRIMARY_MAUI,NULL,SLT_APMCU_PDN,0}/#define SLT_TEST_LOAD_SEQUENCE_FROM_CFG '$output_load_sq'/'\
+ | sed -e 's/#define SLT_CHECK_EFUSE_FROM_CFG 0xFFFFFFFF/#define SLT_CHECK_EFUSE_FROM_CFG '$SLT_CHECK_EFUSE'/'\
+ > $SLTBL_C
+
+ if [ -d $MTKREL ]; then
+ rm -r $MTKREL
+ fi
+
+ ./m "$PROJECT_LOADER" new
+
+ cp -f $BINPATH/"$ORIGINAL_PROJECT_NAME"_BOOTLOADER*.bin $SLTPATH
+ if [ $? -ne 0 ]; then
+ echo Generate BOOTLOADER binary error!
+ ctrl_c
+ exit
+ fi
+ rm $SLTPATH/"$ORIGINAL_PROJECT_NAME"_BOOTLOADER*_ext.bin
+
+ if [ ! -f "$BINPATH/EXT_BOOTLOADER" ]; then
+ echo Generate EXT_BOOTLOADER binary error!
+ ctrl_c
+ exit
+ fi
+
+ cp -f $BINPATH/EXT_BOOTLOADER $SLTPATH
+ backup_compile_files LOADER
+ mv $MAKEFILE.bak $MAKEFILE
+ mv $OPTIONFILE.bak $OPTIONFILE
+ mv $SLTBL_C.bak $SLTBL_C
+ else
+ SLT_LOAD_PATH=$(ls $SLT_LOAD_PATH)
+ if [ $? -ne 0 ]; then
+ echo $SLT_LOAD_PATH is not exist!
+ ctrl_c
+ exit
+ fi
+ cp -f $SLT_LOAD_PATH $SLTPATH
+
+ SLT_LOAD_PATH=${SLT_LOAD_PATH%/*}"/EXT_BOOTLOADER"
+ if [ -f "$SLT_LOAD_PATH" ]; then
+ cp -f $SLT_LOAD_PATH $SLTPATH
+ else
+ echo $SLT_LOAD_PATH is not exist.
+ ctrl_c
+ exit
+ fi
+ fi
+}
+
+function gen_hvt {
+ gen_GFH_header SLT_HVT_MD_LOAD
+ gen_GFH_header SLT_HVT_AP_LOAD
+}
+
+function gen_atest {
+ cp $ATESTMAKEFILE $ATESTMAKEFILE.bak
+ chmod +w $ATESTMAKEFILE
+ cp $LABLEINI $LABLEINI.bak
+ chmod +w $LABLEINI
+ cp $MEMORYCONFIG $MEMORYCONFIG.bak
+ chmod +w $MEMORYCONFIG
+
+ gen_fileinfo SLT_ATEST_LOAD
+ if [ $SLT_LOAD_PATH_CHANGED -eq 1 ]; then
+ if [ ! -z "$MOLY_LIB_PATH" ]; then
+ cat $LABLEINI.bak \
+ | sed -e "s,^LINUX_LIB_PATH_1\s*=.*,LINUX_LIB_PATH_1 = "$MOLY_LIB_PATH"," \
+ > $LABLEINI
+ fi
+
+ cat $PROJFILE.bak \
+ | sed -e "s/^IC_TEST_TYPE\s*=.*/IC_TEST_TYPE = "$CHIP"_SLT/" \
+ | sed -e "s/^SDS_SUPPORT\s*=.*/SDS_SUPPORT = FALSE/" \
+ > $PROJFILE
+
+ cat $ATESTMAKEFILE.bak \
+ | sed -e 's/.*CUSTOM_OPTION.*+=.*ATEST_DRV_LEVEL=5\s*$/COM_DEFS += ATEST_DRV_LEVEL=0/g' \
+ | sed -e 's/.*COM_DEFS.*+=.*ATEST_SLT\s*$/COM_DEFS += ATEST_SLT/g' \
+ | sed -e 's/.*COM_DEFS.*+=.*ATEST_SLT_U3\s*$/COM_DEFS += ATEST_SLT_U3/g' \
+ > $ATESTMAKEFILE
+
+ cat $MEMORYCONFIG.bak \
+ | sed -e 's/^#define\s*CS1_PART_NUMBER.*/#define CS1_PART_NUMBER '"$NANDFLASH"'/' \
+ | sed -e 's/^#define\s*NAND_BOOTING_NAND_FS_SIZE.*/#define NAND_BOOTING_NAND_FS_SIZE 0x01B00000/' \
+ > $MEMORYCONFIG
+
+ if [ -d $MTKREL ]; then
+ rm -r $MTKREL
+ fi
+ ./m -test=ATEST_DRIVER "$PROJECT_ATEST" new
+ backup_compile_files ATEST
+ fi
+
+ gen_GFH_header SLT_ATEST_LOAD
+
+ mv $LABLEINI.bak $LABLEINI
+ mv $ATESTMAKEFILE.bak $ATESTMAKEFILE
+ mv $MEMORYCONFIG.bak $MEMORYCONFIG
+}
+
+function gen_sdio {
+ cp $ATESTMAKEFILE $ATESTMAKEFILE.bak
+ chmod +w $ATESTMAKEFILE
+ cp $LABLEINI $LABLEINI.bak
+ chmod +w $LABLEINI
+ cp $MEMORYCONFIG $MEMORYCONFIG.bak
+ chmod +w $MEMORYCONFIG
+
+ gen_fileinfo SLT_SDIO_LOAD
+ if [ $SLT_LOAD_PATH_CHANGED -eq 1 ]; then
+ if [ $CHIP = "MT6290" ]; then
+ cat $PROJFILE.bak \
+ | sed -e "s/^SDS_SUPPORT\s*=.*/SDS_SUPPORT = FALSE/" \
+ > $PROJFILE
+
+ cat $ATESTMAKEFILE.bak \
+ | sed -e 's/.*CUSTOM_OPTION.*+=.*ATEST_DRV_LEVEL=5\s*$/COM_DEFS += ATEST_DRV_LEVEL=0/g' \
+ | sed -e 's/.*COM_DEFS.*+=.*ATEST_SLT_SDIO\s*$/COM_DEFS += ATEST_SLT_SDIO_LOAD_FOR_MSDC/g' \
+ > $ATESTMAKEFILE
+ else
+ cat $PROJFILE.bak \
+ | sed -e "s/^IC_TEST_TYPE\s*=.*/IC_TEST_TYPE = "$CHIP"_SLT/" \
+ | sed -e "s/^SDS_SUPPORT\s*=.*/SDS_SUPPORT = FALSE/" \
+ > $PROJFILE
+
+ cat $ATESTMAKEFILE.bak \
+ | sed -e 's/.*CUSTOM_OPTION.*+=.*ATEST_DRV_LEVEL=5\s*$/COM_DEFS += ATEST_DRV_LEVEL=0/g' \
+ | sed -e 's/.*COM_DEFS.*+=.*ATEST_SLT_SDIO\s*$/COM_DEFS += ATEST_SLT_SDIO/g' \
+ > $ATESTMAKEFILE
+ fi
+
+ cat $MEMORYCONFIG.bak \
+ | sed -e 's/^#define\s*CS1_PART_NUMBER.*/#define CS1_PART_NUMBER '"$NANDFLASH"'/' \
+ | sed -e 's/^#define\s*NAND_BOOTING_NAND_FS_SIZE.*/#define NAND_BOOTING_NAND_FS_SIZE 0x01B00000/' \
+ > $MEMORYCONFIG
+
+ if [ -d $MTKREL ]; then
+ rm -r $MTKREL
+ fi
+ ./m -test=ATEST_DRIVER "$PROJECT_ATEST" new
+ backup_compile_files SDIO
+ fi
+ gen_GFH_header SLT_SDIO_LOAD
+
+ mv $LABLEINI.bak $LABLEINI
+ mv $ATESTMAKEFILE.bak $ATESTMAKEFILE
+ mv $MEMORYCONFIG.bak $MEMORYCONFIG
+}
+
+function gen_msdc1 {
+ gen_GFH_header SLT_MSDC1_LOAD
+}
+
+function gen_fdd {
+ gen_fileinfo SLT_FDD_LOAD
+ if [ $SLT_LOAD_PATH_CHANGED -eq 1 ]; then
+ cp $MEMORYCONFIG $MEMORYCONFIG.bak
+ chmod +w $MEMORYCONFIG
+
+ if [ -d $MTKREL ]; then
+ rm -r $MTKREL
+ fi
+
+ cat $PROJFILE.bak \
+ | sed -e "s/^IC_TEST_TYPE\s*=.*/IC_TEST_TYPE = "$CHIP"_SLT/" \
+ | sed -e "s/^SDS_SUPPORT\s*=.*/SDS_SUPPORT = FALSE/" \
+ | sed -e "s/^HIF_USB30_SUPPORT\s*=.*/HIF_USB30_SUPPORT = FALSE/" \
+ | sed -e "s/^HIF_USB_SUPPORT\s*=.*/HIF_USB_SUPPORT = FALSE/" \
+ > $PROJFILE
+
+ cat $MEMORYCONFIG.bak \
+ | sed -e 's/^#define\s*CS1_PART_NUMBER.*/#define CS1_PART_NUMBER '"$NANDFLASH"'/' \
+ | sed -e 's/^#define\s*NAND_BOOTING_NAND_FS_SIZE.*/#define NAND_BOOTING_NAND_FS_SIZE 0x01B00000/' \
+ > $MEMORYCONFIG
+
+ ./m "$PROJECT_FDD" new
+
+ cp -f $BINPATH/*_DSPMOLY*.bin $SLTPATH
+ if [ $? -ne 0 ]; then
+ echo $BINPATH/*_DSPMOLY*.bin is not exist.
+ echo Generate FDD load error!
+ ctrl_c
+ exit
+ fi
+
+ gen_GFH_header SLT_FDD_LOAD
+ cp -f $BINPATH/cmdScript.bin $SLTPATH
+ if [ $? -ne 0 ]; then
+ echo Generate FDD load error!
+ ctrl_c
+ exit
+ fi
+
+ backup_compile_files FDD
+ mv $MEMORYCONFIG.bak $MEMORYCONFIG
+ else
+ gen_GFH_header SLT_FDD_LOAD
+
+ SLT_LOAD_PATH=${SLT_LOAD_PATH%/*}"/cmdScript.bin"
+ if [ -f "$SLT_LOAD_PATH" ]; then
+ cp -f $SLT_LOAD_PATH $SLTPATH
+ else
+ echo $SLT_LOAD_PATH is not exist.
+ ctrl_c
+ exit
+ fi
+ SLT_LOAD_PATH=${SLT_LOAD_PATH%/*}
+ SLT_LOAD_PATH=$(ls $SLT_LOAD_PATH/*_DSPMOLY_*.bin)
+ if [ -f "$SLT_LOAD_PATH" ]; then
+ cp -f $SLT_LOAD_PATH $SLTPATH
+ else
+ echo $SLT_LOAD_PATH is not exist.
+ ctrl_c
+ exit
+ fi
+
+ fi
+}
+
+function gen_tdd {
+ gen_fileinfo SLT_TDD_LOAD
+ if [ $SLT_LOAD_PATH_CHANGED -eq 1 ]; then
+ cp $MEMORYCONFIG $MEMORYCONFIG.bak
+ chmod +w $MEMORYCONFIG
+ cp $SLT_NL_CONFIG $SLT_NL_CONFIG.bak
+ chmod +w $SLT_NL_CONFIG
+
+ if [ -d $MTKREL ]; then
+ rm -r $MTKREL
+ fi
+
+ cat $PROJFILE.bak \
+ | sed -e "s/^IC_TEST_TYPE\s*=.*/IC_TEST_TYPE = MT6290_TDSCDMA_SLT/" \
+ | sed -e "s/^SDS_SUPPORT\s*=.*/SDS_SUPPORT = FALSE/" \
+ | sed -e "s/^HIF_USB30_SUPPORT\s*=.*/HIF_USB30_SUPPORT = FALSE/" \
+ | sed -e "s/^HIF_USB_SUPPORT\s*=.*/HIF_USB_SUPPORT = FALSE/" \
+ | sed -e "s/^# Common preprocessor definitions\s*/&\nCUSTOM_OPTION += __TDDSYS_SLT_FACTORY_BOOT__ /g"\
+ > $PROJFILE
+
+ cat $MEMORYCONFIG.bak \
+ | sed -e 's/^#define\s*CS1_PART_NUMBER.*/#define CS1_PART_NUMBER '"$NANDFLASH"'/' \
+ | sed -e 's/^#define\s*NAND_BOOTING_NAND_FS_SIZE.*/#define NAND_BOOTING_NAND_FS_SIZE 0x01B00000/' \
+ | sed -e 's/^#define\s*NAND_BOOTING_NAND_FS_BASE_ADDRESS.*/#define NAND_BOOTING_NAND_FS_BASE_ADDRESS 0x04400000/' \
+ > $MEMORYCONFIG
+
+ ./m "$PROJECT_TDD" new
+
+ gen_GFH_header SLT_TDD_LOAD
+ backup_compile_files TDD
+
+ mv $MEMORYCONFIG.bak $MEMORYCONFIG
+ mv $SLT_NL_CONFIG.bak $SLT_NL_CONFIG
+ else
+ gen_GFH_header SLT_TDD_LOAD
+ fi
+}
+
+function gen_cfg {
+ local CFGContent=""
+ local BLContent=""
+ local DSPContent=""
+ local load_idx=""
+ local i=0
+
+ for (( i=0; i<8; i++ ))
+ do
+ if [ $i -eq 7 ]; then
+ load_idx="PRIMARY_MAUI"
+ else
+ load_idx="SLT_TEST_LOAD_"$i
+ fi
+ for line in `cat $LOADPATCHFILE`
+ do
+ if [ "${line%=*}" = "$load_idx" ]; then
+ SLT_LOAD_NAME=${line#$load_idx=}
+ if [ "$SLT_LOAD_NAME" != "" ]; then
+ dispatch_attribute $SLT_LOAD_NAME
+ CFGContent=$CFGContent"\n - file: "$CHIP"_"$SLT_LOAD_ATTR_PARAM0
+ fi
+ break
+ fi
+ done
+ done
+
+ local DSPPATH=$(ls $SLTPATH/*_DSPMOLY_*.bin)
+ if [ -f "$DSPPATH" ]; then
+ DSPContent=" - file: "${DSPPATH##*/}
+ else
+ echo $SLTPATH/*_DSPMOLY_*.bin is not exist.
+ echo Generate CFG error!
+ ctrl_c
+ exit
+ fi
+ local BOOTLOADERPATH=$(ls $SLTPATH/*_BOOTLOADER_*.bin)
+ BLContent=" - file: "${BOOTLOADERPATH##*/}
+
+
+ SKIP_LOAD_IDX_CHK="TRUE"
+ gen_fileinfo PRIMARY_MAUI
+ if [ "$SLT_LOAD_PATH" = "." ]; then
+ echo Can not ignore PRIMARY_MAUI.
+ ctrl_c
+ exit
+ fi
+
+ SKIP_LOAD_IDX_CHK="TRUE"
+ gen_fileinfo SLT_CFG_FILE
+ local val=$(egrep $BOARD_VER"_PCB01_MT6290_"$CHIP_VER"." $SLT_LOAD_PATH)
+ if [ -z "$val" ]; then
+ echo $SLT_LOAD_PATH is not match.
+ ctrl_c
+ exit
+ fi
+ cp -f $SLT_LOAD_PATH $SLTPATH/"$CHIP"_SLT.cfg
+ cat $SLTPATH/"$CHIP"_SLT.cfg \
+ | sed -e "s/.*_BOOTLOADER_.*/$BLContent/" \
+ | sed -e "s/.*"$BOARD_VER"_PCB01_MT6290_"$CHIP_VER".*/$CFGContent/" \
+ | sed -e "s/.*_DSPMOLY_.*/$DSPContent/" \
+ > $SLTPATH/"$CHIP"_SLT.cfg.mod
+
+ mv $SLTPATH/"$CHIP"_SLT.cfg.mod $SLTPATH/"$CHIP"_SLT.cfg
+ if [ $? -ne 0 ]; then
+ echo Generate CFG error!
+ echo Please build MOLY FDD or TDD SLT load first.
+ ctrl_c
+ exit
+ fi
+
+ if [ ! -f "$SLTPATH/cmdScript.bin" ]; then
+ SLT_LOAD_PATH=${SLT_LOAD_PATH%/*}/cmdScript.bin
+ cp -f $SLT_LOAD_PATH $SLTPATH
+ if [ $? -ne 0 ]; then
+ echo ${SLT_LOAD_PATH%/*}/cmdScript.bin is not exist.
+ echo Generate CFG error!
+ ctrl_c
+ exit
+ fi
+ fi
+
+}
+
+function usage {
+ echo "usage:"
+ echo " slt <chip> [module]"
+ echo "<chip>:"
+ echo " 6290"
+ echo " 6290m_[c/f]"
+ echo "[module]:"
+ echo " loader - build SLT loader"
+ echo " hvt - prepend GFH header for HVT binary"
+ echo " atest - build MOLY SLT atest"
+ echo " fdd - build MOLY SLT FDD normal load"
+ echo " tdd - build MOLY SLT TDD normal load"
+ echo " cfg - generate cfg for FlashTool download"
+ echo
+ echo "If not select any [module], all test load for SLT wiil be generated."
+ echo
+}
+
+if [ -z "$1" ]; then
+ usage
+ exit
+fi
+
+if [ "$1" = "6290" ] || [ "${1:0:5}" == "6290_" ]; then
+ CHIP=MT6290
+ echo $CHIP
+elif [ "$1" = "6290m" ] || [ "${1:0:6}" = "6290m_" ]; then
+ CHIP=MT6290M
+ echo $CHIP
+else
+ echo Error argument
+ exit
+fi
+
+LOADPATCHFILE=$LOADPATCHFILE'_'$1
+if [ ! -f "$LOADPATCHFILE" ]; then
+ echo $LOADPATCHFILE is not exist.
+ ctrl_c
+ exit
+fi
+for line in `cat $LOADPATCHFILE`
+do
+ if [ "${line%=*}" = "SLT_CHECK_EFUSE" ]; then
+ SLT_CHECK_EFUSE=${line#SLT_CHECK_EFUSE=}
+ fi
+ if [ "${line%=*}" = "MOLY_ATEST_LIB_PATH" ]; then
+ MOLY_LIB_PATH=${line#MOLY_ATEST_LIB_PATH=}
+ fi
+ if [ "${line%=*}" = "PROJECT_LOADER" ]; then
+ PROJECT_LOADER=${line#PROJECT_LOADER=}
+ fi
+ if [ "${line%=*}" = "PROJECT_ATEST" ]; then
+ PROJECT_ATEST=${line#PROJECT_ATEST=}
+ fi
+ if [ "${line%=*}" = "PROJECT_SDIO" ]; then
+ PROJECT_SDIO=${line#PROJECT_SDIO=}
+ fi
+ if [ "${line%=*}" = "PROJECT_FDD" ]; then
+ PROJECT_FDD=${line#PROJECT_FDD=}
+ fi
+ if [ "${line%=*}" = "PROJECT_TDD" ]; then
+ PROJECT_TDD=${line#PROJECT_TDD=}
+ fi
+ if [ "${line%=*}" = "NANDFLASH" ]; then
+ NANDFLASH=${line#NANDFLASH=}
+ fi
+done
+
+SLTPATH=build/${CHIP}_SLT
+if [ ! -z "$SLT_CHECK_EFUSE" ]; then
+ SLTPATH=$SLTPATH"_"$SLT_CHECK_EFUSE
+fi
+
+case "$2" in
+ "")
+ if [ -d $SLTPATH ]; then
+ rm -r $SLTPATH
+ mkdir -p $SLTPATH
+ else
+ mkdir -p $SLTPATH
+ fi
+ parsing_project_file $PROJECT_LOADER
+ gen_slt_loader
+ mv $PROJFILE.bak $PROJFILE
+ gen_hvt
+ parsing_project_file $PROJECT_ATEST
+ gen_atest
+ mv $PROJFILE.bak $PROJFILE
+ parsing_project_file $PROJECT_FDD
+ gen_fdd
+ mv $PROJFILE.bak $PROJFILE
+ parsing_project_file $PROJECT_TDD
+ gen_tdd
+ mv $PROJFILE.bak $PROJFILE
+ gen_cfg
+ ;;
+ loader)
+ parsing_project_file $PROJECT_LOADER
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate SLT Loader...
+ gen_slt_loader
+ echo Generate SLT Finished!
+ ;;
+ hvt)
+ parsing_project_file $PROJECT_LOADER
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate HVT...
+ gen_hvt
+ echo Generate HVT Finished!
+ ;;
+ atest)
+ parsing_project_file $PROJECT_ATEST
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate MOLY ATEST...
+ gen_atest
+ echo Generate MOLY Finished!
+ ;;
+ fdd)
+ parsing_project_file $PROJECT_FDD
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate MOLY FDD Normal Load...
+ gen_fdd
+ echo Generate MOLY FDD Normal Finished!
+ ;;
+ tdd)
+ parsing_project_file $PROJECT_TDD
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate MOLY TDD Normal Load...
+ gen_tdd
+ echo Generate MOLY TDD Normal Finished!
+ ;;
+ cfg)
+ parsing_project_file $PROJECT_LOADER
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate CFG File...
+ gen_cfg
+ echo Generate CFG Finished!
+ ;;
+ sdio)
+ parsing_project_file $PROJECT_SDIO
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate SDIO File...
+ gen_sdio
+ echo Generate SDIO Finished!
+ ;;
+ msdc1)
+ parsing_project_file $PROJECT_LOADER
+ if [ ! -d $SLTPATH ]; then
+ mkdir -p $SLTPATH
+ fi
+ echo Generate MSDC1 File...
+ gen_msdc1
+ echo Generate MSDC1 Finished!
+ ;;
+ *)
+ gen_GFH_header $2
+esac
+
+if [ -f "$PROJFILE.bak" ]; then
+ mv $PROJFILE.bak $PROJFILE
+fi
+
+exit