[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/sysGenUtility.pm b/mcu/tools/sysGenUtility.pm
new file mode 100644
index 0000000..4657646
--- /dev/null
+++ b/mcu/tools/sysGenUtility.pm
@@ -0,0 +1,958 @@
+#!/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) 2006
+#
+# 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:
+#* ---------
+#* sysGenUtility.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This module collects the subroutines for common utility.
+#*
+#*
+#* Author:
+#* -------
+#* Carl Kao (mtk08237)
+#*
+#****************************************************************************/
+
+#****************************************************************************
+# SYSGEN ERROR MESSAGE
+#****************************************************************************
+use FileInfoParser;
+
+package genERR;
+use constant SYSERR_1_1 => "SYSGEN ERROR: [1.1][Feature Option Related]";
+use constant SYSERR_1_2 => "SYSGEN ERROR: [1.2][Memory Expired]";
+use constant SYSERR_1_3 => "SYSGEN ERROR: [1.3][UnSupported/Wrong Configuration]";
+use constant SYSERR_1_4 => "SYSGEN ERROR: [1.4][File/Path doesn't exist]";
+use constant SYSERR_1_5 => "SYSGEN ERROR: [1.5][Other errors]";
+use constant SYSERR_2_0 => "SYSGEN ERROR: [2.0]";
+use constant SYSERR_3_1 => "SYSGEN ERROR: [3.1]";
+use constant SYSERR_3_2 => "SYSGEN ERROR: [3.2]";
+
+package sysUtil;
+use strict;
+use Cwd;
+#use warnings;
+
+#****************************************************************************
+# Constants
+#****************************************************************************
+
+my $SYSGENUTILITY_VERNO = " LR13_v0.08";
+ # LR13_v0.08 , 2018/07/30 , Frank, Added support for MT6779
+ # LR13_v0.07 , 2018/05/04 , Tero, Increased DSP TX size for EL1S
+ # LR13_v0.06 , 2017/12/17 , Tero, Added support for MT3967
+ # LR13_v0.05 , 2017/11/01 , Tero, Added support for MT6765
+ # LR13_v0.04 , 2017/09/27 , Tero, MT6771 Memory map updated
+ # LR13_v0.03 , 2017/08/22 , Tero, Add support for MT6771
+ # LR13_v0.02 , 2017/04/21 , Tero, Add support for MT6739
+ # LR13_v0.01 , 2016/12/22 , Tero, Enable AAPMC for MT6763
+ # LR12_v0.05 , 2016/02/17 , Tero, Added ELBRUS support for VoLTE_core_query_length
+ # LR12_v0.04 , 2016/01/31 , Tero, Added ELBRUS support for DSPTXRX_query_length
+ # LR12_v0.03 , 2016/01/18 , Tero, Temporaly Disable AAPMC for ELBRUS
+ # LR12_v0.02 , 2015/12/28 , Carl, Support user specifec lds
+ # LR12_v0.01, 2015/12/23, Carl, Change GetCacheablePrefix to bank6
+ # u0.21, 2015/07/20, Carl, Support ldsGen for MT6797
+ # u0.20, 2015/07/03, Carl, Add GetDefaultSharedMemorySize for setting default shared memory size
+ # u0.19, 2015/06/04, Carl, Support ldsGen for MT6755
+ # u0.18, 2015/05/11, Carl, Support Ramdisk for TK6291
+ # u0.17, 2015/02/06, disable isSupportedToAdjustLoadView for ESL COSIM
+ # u0.16, 2015/01/06, lds refinement: 1) auto adjust shared region size, 2) reserve pcore, l1core SWLA space
+ # u0.15, 2014/11/05, Align start address of shared memory section to 1MB
+ # u0.14, 2014/10/06, Increase default shared memory size to 48 MB
+ # u0.13, 2014/09/26, Support GFH + SIG
+ # u0.12, 2014/09/22, Rename MT6291 to TK6291
+ # u0.11, 2014/09/09, Revert default shared memory size since there are still shared memory users
+ # u0.10, 2014/09/05, Reduce default shared memory size for PCORE ONLY project
+ # ...
+ # m0.32, 2014/01/02, Let aapmc apply on modem only load for load view part
+ # m0.31, 2013/11/06, Support MT6595
+ # m0.30, 2013/09/11, MT6290=SV5
+ # m0.29, 2013/05/21, Support MT6290_COPRO
+ # m0.28, 2013/03/21, Support GetMD_AlignmentByChip()
+ # m0.27, 2013/02/03, Rename MT7208 to MT6290
+ # m0.26, 2013/01/24, Enable MT6280 to be able to auto-config LoadView part
+ # m0.25, 2013/01/16, Add isSupportedToAdjustLoadView() and isSupportedToAdjustRAMSize()
+ # m0.24, 2013/01/15, Support address prefix query function
+ # Remove useless chip
+ # m0.22, 2012/12/28, Add MT7208 into XIP_Shadowing
+ # m0.21, 2012/10/31, Refine Error Message not to meet \w+ for easier function naming in ldsGen
+ # m0.20, 2012/10/02, Support MT7208
+ # m0.17, 2012/09/02, Support ALPS database check-in history
+ # m0.16, [Reserved for WR8]
+ # m0.15, 2012/08/17, Support Total RAM size in smartphone
+ # Support MT6583 MD1/MD2
+ # m0.14, 2012/08/13, Support MT6577
+ # m0.13, 2012/08/07, Move Dec2Hex to CommonUtility.pm and add isDummyScatter()
+ # m0.12, 2012/07/24, Support sysgen common error code/messages.
+ # m0.11, 2012/07/12, Remove booting type query to FileInfoParser.pm
+ # m0.10, 2012/07/02, Remove PrintDependency() to use tools::pack_dep_gen; PrintDependModule();
+ # m0.09, 2012/07/02, Support SwitchToClonedChip
+ # m0.08, 2012/06/28, Support MOLY database check-in history
+ # m0.07, 2012/05/28, Support path and filename case sensitive on Linux
+ # m0.06, 2012/05/01, Support lds description_file_header
+ # m0.05, 2012/01/20, Support NOR for CR4
+ # m0.04, 2012/01/13, Support MT6280 BLscatGen
+ # m0.03, 2012/01/13, Remove MT6280 from SmartPhone
+ # m0.02, 2012/01/08, Support MT6280
+ # m0.01 , 2012/05/07, Move DSPTXRX_query_length from scatGenLib.pl to here.
+ # v0.22 , 2012/04/12, Modify GetIntsramInfo() to enhance 6250 FTE performance
+ # v0.21 , 2012/03/26, Modify the query method of vivaHelper.pm in query_viva_size()
+ # v0.20 , 2012/03/22, Add query_viva_size to support VIVA
+ # v0.19 , 2012/03/21, Support MT6250
+ # v0.18 , 2012/04/17, Support EWS to print file dependency
+ # v0.17 , 2012/02/14, Add check_cs1_base() and modify query_cs1_addr() to determine CS1 base address
+ # v0.16 , 2012/01/30, Support MT6922
+ # v0.15 , 2012/01/28, Add is_NOR() without supporting smartphone part
+ # v0.14 , 2012/01/08, Add is_CR4(), GetIntsramHWBoundary() and Support TK6280
+ # v0.13 , 2012/01/08, Add GetIntsramInfo() to get intsram CODE/DATA's information
+ # v0.12 , 2012/01/08, Remove has_cache()
+ # v0.11 , 2011/11/04, Remove phased-out chips and add is_arm7()
+ # v0.10 , 2011/10/29, modify query_cs1_addr for MT6255 bootloader workaround
+ # v0.09 , 2011/10/28, To support MT6255
+ # v0.08 , 2011/10/28, print an error message if the file can't be deleted
+ # v0.07 , 2011/10/10, Add has_cache()
+ # v0.06 , 2011/09/25, Move ChangeDefineValue() to auto_adjust_mem.pm and
+ # seperate HasCheckinHistory out from del_noCheckinHistory_file
+ # v0.05 , 2011/09/16, Add ChangeDefineValue() for common usage
+ # if needed to modify define value in some header files.
+ # v0.04 , 2011/09/15, Collect common functions which can be reused
+ # v0.02 , 2011/05/24, Support MT6921 in arm9 family
+ # v0.01 , 2011/03/30, Initial revision
+
+#****************************************************************************
+# oo >>> Finished
+#****************************************************************************
+return 1;
+
+#****************************************************************************
+# Subroutine: sysgenUtility_verno - to query this package's version number
+# Parameters: x
+# Returns: version number string
+#****************************************************************************
+sub sysgenUtility_verno
+{
+ return $SYSGENUTILITY_VERNO;
+}
+
+#****************************************************************************
+# Subroutine: GetIntsramInfo - to query INTSRAM_CODE and INTSRAM_DATA's Base/MaxSize
+# Parameters: BB chip (eg. MT6276)
+# Returns: $strCODEBase, $strCODESize, $strDATABase, $strDATASize
+#****************************************************************************
+sub GetIntsramInfo
+{#unsupported on ldsGen's chip
+ my ($bb) = @_;
+ my ($strCODEBase, $strCODESize, $strDATABase, $strDATASize) = (undef, undef, undef, undef);
+ my %BB_INTSRAM_tbl =
+ ( # $bb => [INTSRAM_CODE_Base, INTSRAM_CODE_Size, INTSRAM_DATA_Base, INTSRAM_DATA_Size]
+ # 'TK6291' => ["0xBF000000", "0x40000", "0xBF040000", "0x00040000"],
+ );
+ if(exists $BB_INTSRAM_tbl{$bb})
+ {
+ $strCODEBase = $BB_INTSRAM_tbl{$bb}[0];
+ $strCODESize = $BB_INTSRAM_tbl{$bb}[1];
+ $strDATABase = $BB_INTSRAM_tbl{$bb}[2];
+ $strDATASize = $BB_INTSRAM_tbl{$bb}[3];
+ }
+ return ($strCODEBase, $strCODESize, $strDATABase, $strDATASize);
+}
+#****************************************************************************
+# Subroutine: GetIntsramHWBoundary - to query INTSRAM_PHYSICAL_BOUNDARY's Base/MaxSize
+# Parameters: BB chip (eg. MT6276)
+# Returns: $strBase, $strSize
+#****************************************************************************
+sub GetIntsramHWBoundary
+{#unsupported on ldsGen's chip
+ my ($bb) = @_;
+ my ($strBase, $strSize) = (undef, undef);
+ my %BB_tbl =
+ ( # $bb => [ Base, Size]
+ #'MT6290' => ["0xBF040000", "0x00040000"],
+ );
+ if(&is_CR4($bb)==1 and exists $BB_tbl{$bb})
+ {
+ $strBase = $BB_tbl{$bb}[0];
+ $strSize = $BB_tbl{$bb}[1];
+ }
+ return ($strBase, $strSize);
+}
+#****************************************************************************
+# Subroutine: is_arm7 - Query if it's ARM7 Family
+# Parameters: BB chip (eg. MT6276)
+# Returns: 1=belongs arm7 family, undef=not arm7 family
+#****************************************************************************
+sub is_arm7
+{
+ my ($bb) = @_;
+ my %BBtbl_ARM7_Family =
+ (
+ #'MT6290_COPRO' => 1,
+ );
+ return $BBtbl_ARM7_Family{$bb};
+}
+#****************************************************************************
+# subroutine: is_mpu_capable - Query if it has mpu capability
+# Input: BB chip (eg. MT6276)
+# Output: 1=has mpu capability, others=doesn't have mpu capability
+#****************************************************************************
+sub is_mpu_capable
+{
+ my ($bb) = (@_);
+ my $nDefault_MPU_Capability = 1;
+ my %BBtbl_MPU_Capability =
+ (
+ #'TK6291' => 1,
+ #'MT6755' => 1,
+ );
+ return (exists $BBtbl_MPU_Capability{$bb} ?
+ $BBtbl_MPU_Capability{$bb} : $nDefault_MPU_Capability);
+}
+
+#****************************************************************************
+# Subroutine: is_arm9 - Query if it's ARM9 Family
+# Parameters: BB chip (eg. MT6235)
+# Returns: 1=belongs arm9 family, undef=not arm9 family
+#****************************************************************************
+sub is_arm9
+{
+ my ($bb) = @_;
+ my %BBtbl_ARM9_Family =
+ (
+ #'MT6589_MD2' => 1,
+ );
+ return $BBtbl_ARM9_Family{$bb};
+}
+
+
+#****************************************************************************
+# Subroutine: is_arm11 - Query if it's ARM11 Family
+# Parameters: BB chip (eg. MT6276)
+# Returns: 1=belongs arm11 family, undef=not arm11 family
+#****************************************************************************
+sub is_arm11
+{
+ my ($bb) = @_;
+ my %BBtbl_ARM11_Family =
+ (
+ # 'MT6577' => 1,
+ );
+ return $BBtbl_ARM11_Family{$bb};
+}
+
+#****************************************************************************
+# Subroutine: is_CR4 - Query if it's CR4
+# Parameters: BB chip (eg. MT6280)
+# Returns: 1=belongs CR4, undef=not CR4
+#****************************************************************************
+sub is_CR4
+{
+ my ($bb) = @_;
+ my $nDefault_CR4_Family = 1;
+ my %BBtbl_CR4_Family =
+ (
+ #'TK6291' => 1,
+ #'MT6755' => 1,
+ );
+ return (exists $BBtbl_CR4_Family{$bb}
+ ? $BBtbl_CR4_Family{$bb} : $nDefault_CR4_Family);
+}
+
+#****************************************************************************
+# Subroutine: is_LTE - Query if it's LTE project
+# Parameters: BB chip (eg. MT6280)
+# Returns: 1=belongs CR4, undef=not CR4
+#****************************************************************************
+sub is_LTE
+{
+ my ($bb) = @_;
+ my $nDefault_LTE_Family = 1;
+ my %BBtbl_LTE_Family =
+ (
+ #'TK6291' => 1,
+ #'MT6755' => 1,
+ );
+ return (exists $BBtbl_LTE_Family{$bb}
+ ? $BBtbl_LTE_Family{$bb}: $nDefault_LTE_Family);
+}
+
+
+#****************************************************************************
+# subroutine: Query if it has MMU(arm9, arm11, mtkmmu) or MPU (CR4)
+# to map the address like 0xf-------
+# input: BB chip (eg. MT6276)
+# Output: 0=non-mmu, 1=it has mmu
+#****************************************************************************
+sub is_mmu
+{
+ my ($bb) = (@_);
+ my $nIsMMU = 0; #0=non-MMU, 1=hasMMU;
+ my %BBtbl_MTKMMU_Family =
+ (
+ 'MT6252' => 1,
+ 'MT6252H' => 1,
+ 'MT6250' => 1,
+ );
+ #############
+ # WARNING, return 1 if $bb = CR4
+ #############
+ if(&is_arm9($bb) or &is_arm11($bb) or defined $BBtbl_MTKMMU_Family{$bb} or &is_CR4($bb))
+ {
+ $nIsMMU = 1;
+ }
+ return $nIsMMU;
+}
+#****************************************************************************
+# subroutine: is_sv5 - Query if it's SV5 Family
+# Input: BB chip (eg. MT6276)
+# Output: 1=belongs sv5 family, undef=not sv5 family
+#****************************************************************************
+sub is_sv5
+{
+ my ($bb) = (@_);
+ my $nDefault_SV5_Family = 1;
+ my %BBtbl_SV5_Family =
+ (
+ #'TK6291' => 1,
+ #'MT6755' => 1,
+ );
+ return (exists $BBtbl_SV5_Family{$bb}
+ ? $BBtbl_SV5_Family{$bb}: $nDefault_SV5_Family);
+}
+
+#****************************************************************************
+# subroutine: DSPTXRX_query_length
+# purpose : Exec View :: DSP TX RX :: Size Of TX RX query
+# Input: 1. $bb: e.g. MT6280
+# 2. $mode: e.g. BASIC, L1S, GSM, GPRS, UMTS
+# Output: (nTXLength, nRXLength)
+#****************************************************************************
+sub DSPTXRX_query_length
+{
+ my ($bb, $mode) = @_;
+ # --- --- ---
+ my %BBtbl_l1s_tx =
+ (
+ #'TK6291' => 0x20000, # format: '"chip"' -> 'size'
+ 'ELBRUS' => 0x20000,
+ 'MT6763' => 0x20000,
+ 'MT6739' => 0x20000,
+ 'MT6771' => 0x20000,
+ 'MT6295M' => 0x20000
+ );
+ #map {print $_, "\n";} keys %BBtbl;
+ my %BBtbl_l1s_rx =
+ (
+ 'ELBRUS' => 0x20000,
+ 'MT6763' => 0x20000,
+ 'MT6739' => 0x20000,
+ 'MT6771' => 0x20000,
+ 'MT6295M' => 0x20000
+ );
+ #map {print $_, "\n";} keys %BBtbl;
+ # --- --- ---
+
+ my ($nTX, $nRX) = (0x20000, 0x20000); #default on MD
+
+ if ($mode =~ /L1S/i)
+ {
+ if ((exists $BBtbl_l1s_tx{$bb}) and (exists $BBtbl_l1s_rx{$bb}))
+ {
+ ($nTX, $nRX) = ($BBtbl_l1s_tx{$bb}, $BBtbl_l1s_rx{$bb});
+ }
+ }
+
+ return ($nTX, $nRX)
+}
+
+#****************************************************************************
+# subroutine: VoLTE_core_query_length
+# purpose : for refurn length of SS1 DSP
+# Input: 1. $bb: e.g. MT6763
+
+# Output: nVoLTE_len
+#****************************************************************************
+sub VoLTE_core_query_length
+{
+ my ($bb) = @_;
+
+ my %BBtbl_VoLTE_len =
+ (
+ # format: '"chip"' => 'size'1
+ 'MT6763' => 0x1000000
+ );
+
+ my $nVoLTE_len = 0;
+ $nVoLTE_len = $BBtbl_VoLTE_len{$bb} if (exists $BBtbl_VoLTE_len{$bb});
+ return $nVoLTE_len;
+}
+
+#****************************************************************************
+# subroutine: determine CS1 base address
+# input: BB chip
+# Output: 1 = CS1 base address is 0x08000000, others = CS1 base address is 0x10000000
+#****************************************************************************
+sub check_cs1_base
+{
+ my ($bb) = (@_);
+ my %BBtbl_cs1_base =
+ (
+ #'MT6251' => 1,
+ );
+ return $BBtbl_cs1_base{$bb};
+
+}
+
+#****************************************************************************
+# subroutine: SCHEME Configure Routines :: Query :: CS1 base address
+# Note : this function doesn't guarantee if the chip needs to remap.
+# it only returns the address if needing remapping.
+# input: BB chip, base address(if no input, it's 0 in default), isBootloader(undef or 0= not bootloader)
+# Output: CS1 default base address
+#****************************************************************************
+sub query_cs1_addr
+{
+ my ($bb, $nBaseAddress, $bisBL) = @_;
+ $nBaseAddress = 0 if(!defined $nBaseAddress);
+ my $nCS1BaseAddress = $nBaseAddress;
+ if (&check_cs1_base($bb) == 1)
+ {
+ $nCS1BaseAddress = $nBaseAddress ^ 0x08000000;
+ }
+ else
+ {
+ $nCS1BaseAddress = $nBaseAddress ^ 0x10000000;
+ }
+ if(defined $bisBL and $bisBL != 0)
+ {
+ if($bb eq "MT6255")
+ {
+ $nCS1BaseAddress = $nBaseAddress;
+ }
+ }
+ return $nCS1BaseAddress;
+}
+#****************************************************************************
+# subroutine: SCHEME Configure Routines :: Query :: viva header size
+# note: This function is used to get viva header size if
+# DCMP support or ZIMAGE support or ALICE support
+# input: BB chip
+# Output: viva header size
+#****************************************************************************
+sub query_viva_size
+{
+ require "pcore/tools/vivaHelper.pm";
+ my ($bb) = @_;
+ my $viva_size = &vivaHelper::GetVIVAHeaderSize_NI(&is_sv5($bb));
+ return $viva_size;
+}
+#****************************************************************************
+# subroutine: is_XIP_Shadowing
+# Note : this function is to query which chip needs to do shadowing
+# due to speeding up on NOR or Serial Flash
+# input: BB chip
+# Output: 0=unsupported, 1=supported
+#****************************************************************************
+sub is_XIP_Shadowing
+{
+ my ($bb) = @_;
+ my $nDefault_XIP_Family = 1;
+ my %BBtbl_XIP_Family =
+ (
+ #'TK6291' => 1,
+ #'MT6755' => 1,
+ );
+ return (exists $BBtbl_XIP_Family{$bb}
+ ? $BBtbl_XIP_Family{$bb}: $nDefault_XIP_Family);
+}
+
+#****************************************************************************
+# subroutine: SwitchToClonedChip
+# Note : this function is to get original cloned chip
+# otherwises it returns input chip.
+# input: strBBChip (e.g. MT6280)
+# Output: strBBChip (e.g. MT6280)
+#****************************************************************************
+sub SwitchToClonedChip
+{
+ my ($bb) = @_;
+ my %BBtbl_Family =
+ (
+# "TK6291" => "MT6290",
+ "MT6765" => "MT6771",
+ "MT3967" => "MT6295M",
+ "MT6779" => "MT6295M",
+ "MT6785" => "MT6295M",
+ "MT6885" => "MT6297",
+ "MERCURY" => "MT6297",
+ "MT6873" => "MT6297",
+ "MT6853" => "MT6297",
+ "MT6833" => "MT6297",
+ "MT6893" => "MT6297",
+ "MT6880" => "MT6297",
+ "MT6890" => "MT6297",
+ "MT2735" => "MT6297",
+ "MT6877" => "MT6297",
+ );
+ $bb = $BBtbl_Family{$bb} if(defined $BBtbl_Family{$bb});
+ return $bb;
+}
+
+#****************************************************************************
+# subroutine: isSupportedtoAdjustLoadView
+# Note : this function is to get if this chip supported AAPMC to adjust rom length and ram base
+# input: strBBChip (e.g. MT6280)
+# Output: 0: not supported, 1= supported by default
+#****************************************************************************
+sub isSupportedToAdjustLoadView
+{
+ my ($bb) = @_;
+ my $bSupported = 1; # support to adjust ROM Length and RAM base by default
+ $bb = SwitchToClonedChip($bb);
+ my %BBtbl_Family =
+ (
+ #"TK6291" => 1,
+ "ELBRUS" => 0,
+ "MT6763" => 1,
+ "MT6739" => 1,
+ "MT6771" => 1,
+ "MT6295M" => 1,
+ );
+ $bSupported = $BBtbl_Family{$bb} if(defined $BBtbl_Family{$bb});
+ $bSupported = 1 if(FileInfo::is("ORIGINAL_FLAVOR", "SLT")); #SLT default = md only load
+ $bSupported = 0 if(BuildInfo::exist(BuildOPT::CMPL, "__ESL_COSIM_LTE__"));
+ return $bSupported;
+}
+#****************************************************************************
+# subroutine: isSupportedToAdjustRAMSize
+# Note : this function is to get if this chip supported AAPMC to adjust RAM Length
+# input: strBBChip (e.g. MT6280)
+# Output: 0: not supported by default, 1= supported
+#****************************************************************************
+sub isSupportedToAdjustRAMSize
+{
+ my ($bb) = @_;
+ my $bSupported = 1; # do support to adjust RAM Length by default
+ $bb = SwitchToClonedChip($bb);
+ my %BBtbl_Family =
+ (
+ "ELBRUS" => 0,
+ "MT6763" => 1,
+ "MT6739" => 1,
+ "MT6771" => 1,
+ "MT6295M" => 1,
+ );
+ $bSupported = $BBtbl_Family{$bb} if(defined $BBtbl_Family{$bb});
+ $bSupported = 0 if(FileInfo::is("SMART_PHONE_CORE", "MODEM_ONLY"));
+ $bSupported = 1 if(FileInfo::is("ORIGINAL_FLAVOR", "SLT")); #SLT default = md only load
+ return $bSupported;
+}
+
+#****************************************************************************
+# subroutine: GetDefaultSharedMemorySize
+# Note : this function is to get default shared memory size by chip, for 1st linking
+# input: strBBChip (e.g. MT6280)
+# Output: $nAlignment: default =1
+#****************************************************************************
+sub GetDefaultSharedMemorySize
+{ #remember to check MD total size in GetMDTotolSize (ldsGenLib.pl)
+
+ my ($bb) = @_;
+
+ my %BBtbl_SHMsize =
+ (
+ 'TK6291' => 0x8000000, # 128 MB
+ 'MT6755' => 0x5000000, # 80 MB
+ 'MT6797' => 0x5000000, # 80 MB
+ );
+
+ my $SHM_with_ramdisk_default_size = 0x8000000; # 128 MB
+ my %BBtbl_SHM_with_ramdisk_size =
+ ( # format: '"chip"' -> 'size'
+ );
+
+ &error_handler("No default shared memory size for this chip $bb", __FILE__, __LINE__)
+ if(! exists $BBtbl_SHMsize{$bb});
+
+ # for ramdisk or MD only load
+ if ( FileInfo::is("FS_RAMDISK", "TRUE")
+ or FileInfo::is("SMART_PHONE_CORE", "MODEM_ONLY") )
+ {
+ return $BBtbl_SHM_with_ramdisk_size{$bb} if (exists $BBtbl_SHM_with_ramdisk_size{$bb});
+ return $SHM_with_ramdisk_default_size;
+ }
+
+ # return default size
+ return $BBtbl_SHMsize{$bb};
+}
+
+#****************************************************************************
+# subroutine: GetMD_AlignmentByChip
+# Note : this function is to get MD Ram Alignment by chip
+# input: strBBChip (e.g. MT6280)
+# Output: $nAlignment: default =1
+#****************************************************************************
+sub GetMD_AlignmentByChip
+{
+ my ($bb) = @_;
+ my $nAlignment = 1; #1MB aligned
+ my %BBtbl_Alignment =
+ (
+ #'MT6582' => 2,
+ );
+ if(exists $BBtbl_Alignment{$bb})
+ {
+ $nAlignment = $BBtbl_Alignment{$bb};
+ }
+ return $nAlignment;
+}
+
+#****************************************************************************
+# subroutine: GetMD_AlignmentByChip
+# Note : this function is to get MD Ram Alignment by chip
+# input: strBBChip (e.g. MT6280)
+# Output: $nAlignment: default =1
+#****************************************************************************
+sub GetCopro_KBAlignment
+{
+ my ($strCopro) = @_;
+ my $nAlignment = 1024; # 1MB aligned
+ my %BBtbl_Alignment =
+ (
+ # 'L1CORE' => 4,
+ );
+ if(exists $BBtbl_Alignment{$strCopro})
+ {
+ $nAlignment = $BBtbl_Alignment{$strCopro};
+ }
+ return $nAlignment;
+}
+
+
+#****************************************************************************
+# Subroutine: GetNonCacheablePrefix
+# Parameters: strBBChip (e.g. MT6280)
+# Returns: an bank adress for OR
+# default: 0x0
+#****************************************************************************
+sub GetNonCacheablePrefix
+{
+ my ($bb) = @_;
+ my %BBtbl_Family =
+ (
+
+ );
+ my $prefix = 0;
+ $prefix = $BBtbl_Family{$bb} if(defined $BBtbl_Family{$bb});
+ return $prefix;
+}
+#****************************************************************************
+# Subroutine: GetCacheablePrefix
+# Parameters: strBBChip (e.g. MT6280)
+# Returns: an bank adress for OR
+# default: 0xF0000000
+#****************************************************************************
+sub GetCacheablePrefix
+{
+ my ($bb) = @_;
+ my %BBtbl_Family =
+ (
+
+ );
+ my $prefix = 0x60000000;
+ $prefix = $BBtbl_Family{$bb} if(defined $BBtbl_Family{$bb});
+ return $prefix;
+
+}
+#****************************************************************************
+# Subroutine: del_noCheckinHistory_file
+# Parameters: one file path
+# Returns: N/A
+#****************************************************************************
+sub del_noCheckinHistory_file
+{
+ my ($filepath) = @_;
+ return unless (-e $filepath);
+
+ my $nHas = &HasCheckinHistory($filepath);
+ if($nHas == 1)
+ {
+ print "$filepath: Check-in message is found. No need to update.\n";
+ }
+ elsif($nHas == 0)
+ {
+ unlink $filepath;
+ print "delete $filepath since no manual check-in pattern!\n" if(!-f $filepath);
+ print "$filepath can't be deleted properly!\n" if(-f $filepath);
+ }
+ return;
+}
+#****************************************************************************
+# Subroutine: HasCheckinHistory
+# Parameters: one file path
+# Returns: undef=not exists, 0=no history, 1=has history
+#****************************************************************************
+sub HasCheckinHistory
+{
+ my ($filepath) = @_;
+ return undef unless (-e $filepath);
+ my $nReturn = 0; # Empty=not exists, 0=no history, 1=has history
+
+ ## Now check if the $target file check-in or auto-gen
+ open SRC_FILE_R , "<$filepath" or &error_handler("$filepath: file error!", __FILE__, __LINE__);
+ my $reading;
+ {
+ local $/;
+ $reading = <SRC_FILE_R>;
+ }
+ close SRC_FILE_R;
+
+ ## Look for check-in pattern ##
+ if (($reading =~ /\[MAUI_\d{8}\]|\[MOLY\d{8}\]|\[ALPS\d{8}\]/) or ($reading =~ /MANUAL-CHECKIN/i))
+ {
+ return 1;
+ }
+ return 0;
+}
+
+#****************************************************************************
+# subroutine: CopyFileWithReplacement
+# input: $SrcPath - source file path
+# $DestPath - destination path
+# $Array_ref : An array of strings to be replaced to empty string
+# output: N/A
+# Description: 1. if the file name doesn't contain .template, replace sysgen1 verno on it
+# 2. replace the string in $Array_ref to empty string
+#****************************************************************************
+sub CopyFileWithReplacement
+{
+ my ($SrcPath, $DestPath, $Array_ref, $StrVersion) = @_;
+ my $content;
+ open FILE, "<$SrcPath" or &sysUtil::sysgen_die("$SrcPath: open file error!", __FILE__, __LINE__);
+ {
+ local $/;
+ $content = <FILE>;
+ }
+ close FILE;
+
+ if($SrcPath !~ /\.template$/)
+ {
+ #Add sysgen1.pl's verno to the file
+ $content =~ s/system\s*auto\s*generator(.*)//;
+ $content =~ s/Author\s*:\s+(.*)\s+(.*)/Author:\n $1\n $2 $StrVersion /;
+ }
+
+ #replace the string in $Array_ref to empty string
+ map {$content =~ s/$_//ig} @$Array_ref;
+
+ open FILE, ">$DestPath" or &sysUtil::sysgen_die("$DestPath: open file error!", __FILE__, __LINE__);
+ print FILE $content;
+ close FILE;
+}
+
+#****************************************************************************
+# Subroutine: isDummyScatter
+# Parameters: $bINSIDE_MTK = 0 or 1, $strDUMMY_SCATTER_FORCE = TRUE or FALSE
+# Returns: 0=not dummy , 1=is dummy
+#****************************************************************************
+sub isDummyScatter
+{
+ my ($bINSIDE_MTK, $strDUMMY_SCATTER_FORCE) = @_;
+ my $bIsDummy = 0; #not dummy by default
+ if (1 == &FileInfo::is_NOR())
+ {
+ if(&FileInfo::is('dummy_scatter_enable', "TRUE"))
+ {
+ $bIsDummy = 1 if($bINSIDE_MTK == 1);
+ }
+ }
+ $bIsDummy = 1 if($strDUMMY_SCATTER_FORCE eq 'TRUE');
+ return $bIsDummy;
+}
+
+sub GetSigSize
+{
+ return 256;
+}
+
+
+
+
+#****************************************************************************
+# subroutine: error_handler
+# input: $error_msg: error message
+#****************************************************************************
+sub error_handler
+{
+ my ($error_msg, $file, $line_no, $strTitle) = @_;
+
+ my $final_error_msg = "$strTitle ERROR: $error_msg at $file line $line_no : $!\n";
+ print $final_error_msg;
+ die $final_error_msg;
+}
+
+sub sysgen_die
+{
+ my ($error_msg, $file, $line_no) = @_;
+ &error_handler($error_msg, $file, $line_no, 'SYSGEN');
+}
+sub sysUtil_die
+{
+ my ($error_msg, $file, $line_no) = @_;
+ &error_handler($error_msg, $file, $line_no, 'SYSGENUTILITY');
+}
+
+#****************************************************************************
+# subroutine: description_file_header
+# return: file header -- description
+# input: $filename: filename
+# input: $description: one line description
+# input: $author: optional
+# input: $strComment: optional
+# input: $bAutoGen optional: 1=AutoGen, 0 or undef = not AutoGen
+#****************************************************************************
+sub description_file_header
+{
+ my ($filename, $description, $author, $strComment, $bAutoGen) = @_;
+ $filename =~ s/.*\///;
+ my $strAutoGeneratedDate = " *\n";
+ my $strWarning;
+ if($bAutoGen == 1)
+ {
+ my ($day, $month, $year) = (localtime)[3,4,5]; $month++; $year+=1900;
+ $strAutoGeneratedDate = <<"__TEMPLATE";
+ *
+ * Auto Generated Date:
+ * -------
+ * $year/$month/$day
+ *
+__TEMPLATE
+ $strWarning = <<"__TEMPLATE";
+ * This file is auto-generated and please DO NOT change the content at will
+ *=========================================================================
+__TEMPLATE
+ $strComment = $strWarning.$strComment;
+ }
+ my $template = <<"__TEMPLATE";
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * $filename
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * $description
+ *
+ * Author:
+ * -------
+ * $author
+$strAutoGeneratedDate
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * \$Revision\$
+ * \$Modtime\$
+ * \$Log\$
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+$strComment
+ ****************************************************************************/
+
+__TEMPLATE
+
+ return $template;
+}
+
+#****************************************************************************
+# subroutine: copyright_file_header
+# return: file header -- copyright
+#****************************************************************************
+sub copyright_file_header
+{
+ my $template = <<"__TEMPLATE";
+/*****************************************************************************
+* 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) 2006
+*
+* 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).
+*
+*****************************************************************************/
+
+__TEMPLATE
+
+ return $template;
+}