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;
+}
