| #!/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; |
| } |