[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/AutoGen/postBuild/AMMS_POSinfo.pm b/mcu/tools/AutoGen/postBuild/AMMS_POSinfo.pm
new file mode 100644
index 0000000..fcbabfe
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/AMMS_POSinfo.pm
@@ -0,0 +1,98 @@
+#!/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:
+#* ---------
+#* AMMS_POSInfo.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get linker symbol for setting EMI RMPU
+#*
+#*
+#* Author:
+#* -------
+#* Tee-Yuen Chun (mtk10524)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+
+BEGIN { push @INC, './tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package AMMS_POSinfo;
+
+
+
+#######################################
+
+my $version = "u0.01";
+ # u0.01, 2018/01/16, tee yuen, for AMMS POS usage
+sub retrieveAMMS_POS_Support
+{
+ my ($isTurnOn) = $_[0];
+ my ($mdVersion) = $_[1];
+
+ if( $isTurnOn eq "TRUE" )
+ {
+ if( $mdVersion eq "MT6293" )
+ {
+ return (0x00400000);
+ }
+ if( $mdVersion eq "MT6295" )
+ {
+ return (0x00800000);
+ }
+
+ if( $mdVersion eq "MT6297" )
+ {
+ return (0);
+ }
+ }
+ else
+ {
+ return (0);
+ }
+}
+
diff --git a/mcu/tools/AutoGen/postBuild/BAT_buffer_info.pm b/mcu/tools/AutoGen/postBuild/BAT_buffer_info.pm
new file mode 100644
index 0000000..b0fe41c
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/BAT_buffer_info.pm
@@ -0,0 +1,104 @@
+#!/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:
+#* ---------
+#* BAT_buffer_info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get linker symbol for setting EMI RMPU
+#*
+#*
+#* Author:
+#* -------
+#* Tee-Yuen Chun (mtk10524)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+
+BEGIN { push @INC, './tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package BAT_buffer_info;
+
+#######################################
+
+my $version = "u0.01";
+
+sub retrieveBAT_Buffer_Info
+{
+ my ($prj_fo_hash) = @_;
+
+ my $totalBATSize = 0x0;
+
+ #ENLARGE_BAT_OPTION
+ if($prj_fo_hash->{'enlarge_bat_option'} eq "0")
+ {
+ $totalBATSize = 0x2000;
+ }
+ elsif($prj_fo_hash->{'enlarge_bat_option'} eq "1")
+ {
+ $totalBATSize = 0x2800;
+ }
+ elsif($prj_fo_hash->{'enlarge_bat_option'} eq "2")
+ {
+ $totalBATSize = 0x3000;
+ }
+ elsif($prj_fo_hash->{'enlarge_bat_option'} eq "3")
+ {
+ $totalBATSize = 0x3800;
+ }
+ elsif($prj_fo_hash->{'enlarge_bat_option'} eq "4")
+ {
+ $totalBATSize = 0x4000;
+ }
+ elsif($prj_fo_hash->{'enlarge_bat_option'} eq "5")
+ {
+ $totalBATSize = 0x2000;
+ }
+
+ return($totalBATSize);
+}
+
diff --git a/mcu/tools/AutoGen/postBuild/CONSYS_info.pm b/mcu/tools/AutoGen/postBuild/CONSYS_info.pm
new file mode 100644
index 0000000..734a15b
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/CONSYS_info.pm
@@ -0,0 +1,98 @@
+#!/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:
+#* ---------
+#* CONSYS_info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get linker symbol for setting EMI RMPU
+#*
+#*
+#* Author:
+#* -------
+#* Tee-Yuen Chun (mtk10524)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+
+BEGIN { push @INC, './tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package CONSYS_info;
+
+#######################################
+
+my $version = "u0.02";
+
+sub retrieveCONSYS_Support
+{
+ #my ($isCtrlBuffTurnOn,$isDataBuffTurnOn,$mdVersion) = @_;
+ my ($prj_fo_hash, $mdVersion) = @_;
+
+ my $totalBuffSize = 0;
+
+ #if( $mdVersion eq "MT6295" )
+ #{
+ #}
+
+ #(Control Path only) 256KB = 256*1024B = 0x40000
+ $totalBuffSize = 0x00040000;
+
+ if( $prj_fo_hash->{'mcif_wifi_support'} eq "TRUE" )
+ {
+ #(Control Path + Data Path for IMS only) 1.5MB = 1536*1024B = 0x180000B
+ $totalBuffSize = 0x00180000;
+ }
+
+ if( $prj_fo_hash->{'mddp_wh_support'} eq "TRUE" )
+ {
+ #(Control Path + Data Path for IMS and MDDP-WH) 13.5MB = 1.5MB + 12MB(WH) = 0xD80000B
+ $totalBuffSize = 0x00D80000;
+ }
+
+ return($totalBuffSize);
+}
+
diff --git a/mcu/tools/AutoGen/postBuild/EMI_MPUinfo.pm b/mcu/tools/AutoGen/postBuild/EMI_MPUinfo.pm
new file mode 100644
index 0000000..c17d4ea
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/EMI_MPUinfo.pm
@@ -0,0 +1,237 @@
+#!/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:
+#* ---------
+#* EMI_MPIinfo.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get linker symbol for setting EMI RMPU
+#*
+#*
+#* Author:
+#* -------
+#* KC Tsai (mtk06471)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+
+BEGIN { push @INC, './common/tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package EMI_MPUinfo;
+
+use constant ATTR__NO_PROTECTION => 0x0;
+use constant ATTR_________SEC_RW => 0x1;
+use constant ATTR__SEC_RW_NSEC_R => 0x2;
+use constant ATTR__SEC_RW_NSEC_W => 0x3;
+use constant ATTR___SEC_R_NSEC_R => 0x4;
+use constant ATTR______FORBIDDEN => 0x5;
+use constant ATTR__SEC_R_NSEC_RW => 0x6;
+use constant ATTR________UNUNSED => 0xF;
+
+
+
+############# user configuration##############
+
+my $nKBalign = 64; # 64KB alignment
+#
+# please align this setting with EMI_MPU_REGION in custom_scatstruct.c.template
+#
+my @aEMI_MPU_config = (
+ # Bas of MCURO HWRW
+ [LinkerSymPrefix::Image, "MCURO_HWRW",LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 0
+ # Bas of MCURW HWRO
+ [LinkerSymPrefix::Image,"EXTSRAM" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 1
+ # Bas of MCURW HWRW
+ [LinkerSymPrefix::Image,"EXTSRAM_MCURW_HWRW",LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 2
+ # Bas of MD end
+ [LinkerSymPrefix::Image,"DUMMY_END" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 3
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 4
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 5
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 6
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 7
+);
+
+#######################################
+
+my $version = "u0.08";
+ # u0.08, 2016/05/17, Carl, refine setting for ELBRUS
+ # u0.07, 2016/03/09, Carl, refine setting for ELBRUS
+ # u0.06, 2015/08/26, Carl, return directly for ELBRUS
+ # u0.05, 2015/07/06, Carl, return directly when processing TCM only load
+ # u0.04, 2015/04/15, Carl, refine setting for (MCU RO, MDHW RW) DNC+NC, (MCU RW, MDHW RW) DNC+NC
+ # u0.03, 2015/04/02, Carl, refine setting
+ # u0.02, 2015/03/30, Carl, refine setting
+ # u0.01, 2015/01/31, Carl, return EMI RMPU settion
+
+sub retrieveEMI_MPU_info()
+{
+ my ($strFilePath, $themf) = @_;
+ my $nAvailableChannel=-1;
+ my @aEMI_MPU;
+ my @aEMI_Domain;
+
+
+ &FileInfo::Parse_MAKEFILE($themf, \%g_MAKEFILE_OPTIONS);
+ if (FileInfo::is("MTK_MODEM_ARCH", "MT6297") or FileInfo::is("MTK_MODEM_ARCH", "MT6297P")) {
+ @aEMI_MPU_config = (
+ # Bas of MCURO HWRW
+ [LinkerSymPrefix::Image,"MCURO_HWRW" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 0
+ # Bas of MCURW HWRO
+ [LinkerSymPrefix::Image,"EXTSRAM" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 1
+ # Bas of MCURW HWRW
+ [LinkerSymPrefix::Image,"DYNAMIC_CACHEABLE_EXTSRAM_DEFAULT_NONCACHEABLE_MCURW_HWRW",LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 2
+ # Bas of MD end
+ [LinkerSymPrefix::Image,"DUMMY_END" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 3
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 4
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 5
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 6
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 7
+ );
+ } else {
+ @aEMI_MPU_config = (
+ # Bas of MCURO HWRW
+ [LinkerSymPrefix::Image, "MCURO_HWRW",LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 0
+ # Bas of MCURW HWRO
+ [LinkerSymPrefix::Image,"EXTSRAM" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 1
+ # Bas of MCURW HWRW
+ [LinkerSymPrefix::Image,"EXTSRAM_MCURW_HWRW",LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 2
+ # Bas of MD end
+ [LinkerSymPrefix::Image,"DUMMY_END" ,LinkerSymPostfix::Base, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 3
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 4
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 5
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 6
+ [0 ,"" ,0 , ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED, ATTR________UNUNSED], # 7
+ );
+ }
+ if( &FileInfo::find("TCM_ONLY_LOAD", "TRUE") )
+ {
+ return (0, undef, undef);
+ }
+
+
+ LinkerOutputParser::FileParse($strFilePath);
+
+
+# offset(base), size
+ my $base=0;
+ for( my $i=0; $i<scalar(@aEMI_MPU_config); ++$i)
+ {
+ my $channel_ref = @aEMI_MPU_config[$i];
+ if( @{$channel_ref}[1] ne "" )
+ {
+ my $end_addr = &get_Physical_Addr(@{$channel_ref}[0],@{$channel_ref}[1],@{$channel_ref}[2]);
+ push @aEMI_MPU, [$base, $end_addr-$base];
+ $base = $end_addr;
+ }
+ else
+ {
+ $nAvailableChannel = $i if ($nAvailableChannel==-1);
+ push @aEMI_MPU, [0,0];
+ $base = 0;
+ }
+ }
+
+# domain, 4 = nNumEmiMuDomain
+ for( my $i=0; $i<4; ++$i)
+ {
+ my $nChannelAttr = 0;
+ for( my $j=0; $j<scalar(@aEMI_MPU_config); ++$j)
+ {
+ my $channel_ref = @aEMI_MPU_config[$j];
+ $nChannelAttr |= @{$channel_ref}[3+$i] << ($j*4);
+ }
+ push @aEMI_Domain, $nChannelAttr;
+ }
+
+ return ($nAvailableChannel, \@aEMI_MPU, \@aEMI_Domain);
+}
+
+sub get_Physical_Addr()
+{
+ my ($nPrefix, $strName, $nPostfix) = @_;
+
+ my $strSymbol = "0x0FFFFFFF & ";
+
+ $strSymbol.= "Image\$\$" if( $nPrefix == LinkerSymPrefix::Image );
+ $strSymbol.= "Load\$\$" if( $nPrefix == LinkerSymPrefix::Load );
+ $strSymbol.= $strName;
+ $strSymbol.= "\$\$Base" if( $nPostfix == LinkerSymPostfix::Base );
+ $strSymbol.= "\$\$Limit" if( $nPostfix == LinkerSymPostfix::Limit );
+ $strSymbol.= "\$\$ZIBase" if( $nPostfix == LinkerSymPostfix::ZIBase );
+ $strSymbol.= "\$\$ZILimit" if( $nPostfix == LinkerSymPostfix::ZILimit );
+
+ my $strAddr = &LinkerOutputParser::GetLinkerSymbolAddress( $strName, $nPostfix, $nPrefix );
+ &EMP_MPUinfo_die("no linker symbol $strSymbol") if (defined $strAddr == undef);
+
+ my $nAddr = hex($strAddr);
+ #mask the Bank bits
+ if(($nAddr & 0xF0000000) == 0x70000000) {
+ $nAddr = $end_addr & 0x1FFFFFFF;
+ } elsif(($nAddr & 0xF0000000) > 0x10000000) {
+ $nAddr = $nAddr & 0x0FFFFFFF;
+ }
+ $strAddr = CommonUtil::Dec2Hex($nAddr);
+ &EMP_MPUinfo_die("symbol $strSymbol address $strAddr is not $nKBalign KB alignment") if ($nAddr != &CommonUtil::GetKBAligned($nAddr, $nKBalign));
+
+ $strSymbol.= " = $strAddr = $nAddr\n";
+ print $strSymbol;
+
+ return $nAddr;
+}
+
+sub EMP_MPUinfo_die
+{
+ my ($error_msg, $file, $line_no) = @_;
+ my $pack_name = undef;
+ if(!defined $file or !defined $line_no)
+ {
+ ($pack_name, $file, $line_no) = caller;
+ }
+ &CommonUtil::error_handler($error_msg, $file, $line_no, 'EMP_MPUinfo');
+}
+
+
diff --git a/mcu/tools/AutoGen/postBuild/FreeRam_info.pm b/mcu/tools/AutoGen/postBuild/FreeRam_info.pm
new file mode 100644
index 0000000..8ffe513
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/FreeRam_info.pm
@@ -0,0 +1,121 @@
+#!/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).
+#
+#*****************************************************************************
+
+use strict;
+BEGIN { push @INC, './common/tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package FreeRam_info;
+
+my @symbol_list = (["LOAD_VIEW_END",LinkerSymPostfix::ZILimit,0],
+ ["MCURO_HWRW", LinkerSymPostfix::Base,0],
+ ["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,1],
+ ["EXTSRAM",LinkerSymPostfix::Base,1],
+ ["CACHED_EXTSRAM_NVRAM_LTABLE", LinkerSymPostfix::ZILimit,2],
+ ["EXTSRAM_MCURW_HWRW", LinkerSymPostfix::Base,2],
+ ["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,3],
+ ["EXTSRAM_DSP_TX", LinkerSymPostfix::Base,3],
+ ["EXTSRAM_DSP_TX", LinkerSymPostfix::ZILimit,4],
+ ["EXTSRAM_DSP_RX", LinkerSymPostfix::Base,4],
+ ["EXTSRAM_DSP_RX", LinkerSymPostfix::ZILimit,5],
+ ["CACHED_EXTSRAM_IOCU2_MCURW_HWRW", LinkerSymPostfix::Base,5],
+ ["CACHED_EXTSRAM_IOCU2_MCURW_HWRW", LinkerSymPostfix::ZILimit,6],
+ ["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::Base,6],
+ ["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::ZILimit,7],
+ ["CACHED_EXTSRAM_L2CACHE_LOCK_DATA", LinkerSymPostfix::Base,7],
+ ["CACHED_EXTSRAM_L2CACHE_LOCK_DATA", LinkerSymPostfix::ZILimit,8],
+ ["DYNAMIC_SECTION_L2CACHE_LOCK_0", LinkerSymPostfix::Base,8],
+ ["DYNAMIC_SECTION_L2CACHE_LOCK_0", LinkerSymPostfix::ZILimit,9],
+ ["EXTSRAM_CORE0", LinkerSymPostfix::Base,9],
+ ["CACHED_EXTSRAM_CORE0", LinkerSymPostfix::ZILimit,10],
+ ["EXTSRAM_CORE1", LinkerSymPostfix::Base,10],
+ ["CACHED_EXTSRAM_CORE1", LinkerSymPostfix::ZILimit,11],
+ ["DRDI", LinkerSymPostfix::Base,11],
+ ["DRDI", LinkerSymPostfix::Limit,12],
+ ["EXTSRAM_L1DSP_ZI", LinkerSymPostfix::Base,12],
+ ["EXTSRAM_L1DSP_ZI", LinkerSymPostfix::ZILimit,13],
+ ["DUMMY_END", LinkerSymPostfix::Base,13]);
+
+
+
+#&GetFreeRamInfo(shift);
+
+
+sub GetFreeRamInfo
+ {
+ my ($g_sym_file) = @_;
+ my $g_area_begin = 0;
+ my $g_area_end = 0;
+ my $g_area_length = 0;
+ my @freemem =([0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]);
+
+ LinkerOutputParser::FileParse($g_sym_file) if(-e $g_sym_file) or die("Can't open symbol file: $g_sym_file\n");
+
+ for(my $i = 0 ; $i<$#symbol_list; $i = $i+2) {
+ $g_area_begin = hex(LinkerOutputParser::GetLinkerSymbolAddress($symbol_list[$i][0],$symbol_list[$i][1], 0));
+ $g_area_begin &= 0x0fffffff if($g_area_begin > 0x10000000);
+ $g_area_begin &= 0x0fffffff if($g_area_begin > 0x10000000);
+ # Adjust Free area begin address to 64kB
+ $g_area_begin = ($g_area_begin + hex("ffff") >> 16) << 16;
+ $g_area_end = hex(LinkerOutputParser::GetLinkerSymbolAddress($symbol_list[$i+1][0],$symbol_list[$i+1][1], 0));
+ $g_area_end &= 0x0fffffff if($g_area_end > 0x10000000);
+ $g_area_end &= 0x0fffffff if($g_area_end > 0x10000000);
+
+ # Adjust Free area end address to 64kB
+ $g_area_end = ($g_area_end >> 16) << 16;
+ # Calculate length
+ $g_area_length = $g_area_end - $g_area_begin;
+ print $symbol_list[$i][0] . " Start: " .&CommonUtil::Dec2Hex($g_area_begin) . " ". $symbol_list[$i+1][0]. " Start: " .&CommonUtil::Dec2Hex($g_area_end) . " Length :$g_area_length\n";
+ if ($g_area_length > 0) {
+ #Check that can we merge new free area to previous free area if not add as new free region
+ if (($freemem[-1][0]+$freemem[-1][1]) == $g_area_begin) {
+ print "Insert from ".&CommonUtil::Dec2Hex($g_area_begin)." Length ".&CommonUtil::Dec2Hex($g_area_length) . " to " . &CommonUtil::Dec2Hex($freemem[-1][0]+$freemem[-1][1]) ."\n";
+ $freemem[-1][1]+=$g_area_length;
+ } else {
+ push @freemem,[$g_area_begin, $g_area_length];
+# print &CommonUtil::Dec2Hex($g_area_begin) . "\t(" . $g_area_begin . ")\t\t" . &CommonUtil::Dec2Hex($g_area_length) . "\t(" . $g_area_length . ")\n";
+ }
+ }
+ }
+ foreach my $entry (@freemem) {
+ print &CommonUtil::Dec2Hex($entry->[0]) . "\t(" . $entry->[0] . ")\t\t" . &CommonUtil::Dec2Hex($entry->[1]) . "\t(" . $entry->[1] . ")\n";
+ }
+ @freemem = sort {$b->[1] <=> $a->[1]} @freemem;
+ splice @freemem, 8;
+ return @freemem;
+ }
diff --git a/mcu/tools/AutoGen/postBuild/NV_cache_shm_info.pm b/mcu/tools/AutoGen/postBuild/NV_cache_shm_info.pm
new file mode 100644
index 0000000..1b0148a
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/NV_cache_shm_info.pm
@@ -0,0 +1,91 @@
+#!/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:
+#* ---------
+#* CONSYS_info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get linker symbol for setting EMI RMPU
+#*
+#*
+#* Author:
+#* -------
+#* Tee-Yuen Chun (mtk10524)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+
+BEGIN { push @INC, './tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package NV_cache_shm_info;
+
+#######################################
+
+my $version = "u0.01";
+
+sub retrieveNV_CACHE_Support
+{
+ #my ($isCtrlBuffTurnOn,$isDataBuffTurnOn,$mdVersion) = @_;
+ my ($prj_fo_hash) = @_;
+
+ my $totalNVCacheSHMSize = 0x0;
+
+ #NVRAM_LID_CACHE, NVRAM_PARTIAL_CACHE
+ if( $prj_fo_hash->{'nvram_lid_cache'} eq "TRUE" )
+ {
+ if( $prj_fo_hash->{'nvram_partial_cache'} eq "TRUE" )
+ {
+ $totalNVCacheSHMSize = 0x700000;
+ }else
+ {
+ $totalNVCacheSHMSize = 0x1200000;
+ }
+ }
+
+ return($totalNVCacheSHMSize);
+}
+
diff --git a/mcu/tools/AutoGen/postBuild/Parsing_ARM7_info.pm b/mcu/tools/AutoGen/postBuild/Parsing_ARM7_info.pm
new file mode 100644
index 0000000..c88f0d3
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/Parsing_ARM7_info.pm
@@ -0,0 +1,107 @@
+#!/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:
+#* ---------
+#* Parsing_ARM7_info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This module collects the ARM7 ROM base address and return. User: Append2.pl
+#*
+#*
+#* Author:
+#* -------
+#* Carl Kao (mtk08237)
+#*
+#****************************************************************************/
+use strict;
+BEGIN { push @INC, './pcore/tools/', './common/tools/MemoryUtility/' } # add additional library path
+use SymFileParser;
+use sysGenUtility;
+
+package Parsing_ARM7_info;
+
+my $VERNO = " u0.01";
+ # u0.01 , 2015/07/24, Carl, Initial revision. Provide ARM7 ROM space information for MD header
+
+sub getARM7symbol{
+
+ my $MAIN_SYM_FILE = shift;
+ my $INFO_MAKE_FILE = shift;
+ my $SYM_NAME = "spc_rom_base";
+
+
+ my %CmplOption;
+ my %relOption;
+
+ BuildInfo::Parse_InfoMakeLog($INFO_MAKE_FILE,\%CmplOption,\%relOption);
+ if(!BuildInfo::exist(BuildOPT::CMPL, "__SPEECH_EVS_SUPPORT__"))
+ {
+ print "no ARM7 in this flavor!\n";
+ return (0xCDCDCDAA, 0x0);
+ }
+
+
+ SymFileParser::ParseSYM($MAIN_SYM_FILE);
+
+
+ my $symbol_ref = SymFileParser::GetSymbol();
+
+ if( defined $symbol_ref->{$SYM_NAME} )
+ {
+ #print map {$_." "} @{$symbol_ref->{$SYM_NAME}};
+ #print "\n";
+
+ my $addr = hex(@{$symbol_ref->{$SYM_NAME}}[Symbol::Addr]);
+ my $size = hex(@{$symbol_ref->{$SYM_NAME}}[Symbol::Size]);
+
+ $addr -= (&sysUtil::GetCacheablePrefix()) if ($addr >= &sysUtil::GetCacheablePrefix());
+
+ return ($addr, $size);
+
+ }
+ else
+ {
+ #print "NO~~\n";
+ return (0xCDCDCDAA, 0x0);
+ }
+
+}
diff --git a/mcu/tools/AutoGen/postBuild/Parsing_Padding_Info.pm b/mcu/tools/AutoGen/postBuild/Parsing_Padding_Info.pm
new file mode 100644
index 0000000..df58ff1
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/Parsing_Padding_Info.pm
@@ -0,0 +1,204 @@
+#!/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:
+#* ---------
+#* Parsing_Padding_Info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get unused memory info.
+#*
+#*
+#* Author:
+#* -------
+#* Yao Liu (mtk15073)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+use strict;
+
+BEGIN { push @INC, './tools/MemoryUtility/' } # add additional library path
+use BasicMemInfoQuery;
+use LinkerOutputParser;
+
+package Parsing_Padding_Info;
+use constant LOG => 0;
+use constant WARNING => 1;
+use constant FATAL => 2;
+
+sub get_padding_info
+{
+ my ($platform, $c2k_mode_support, $themf, $scat, $map_file, $sym_file) = @_;
+
+ my ($nRAMUsage, @raminfo);
+ if ($platform eq "MT6297" || $platform eq "MT6885" || $platform eq "MT6873" || $platform eq "MT6893" || $platform eq "MT6853") {
+ ($nRAMUsage, @raminfo) = &BasicMemInfo::DispatchCommand("CMD_GetRAMUsage", $themf, $scat, $map_file, $sym_file, undef);
+ return @raminfo;
+ } else {
+ &LinkerOutputParser::FileParse($sym_file);
+ my $ERinRAM_aref = &BasicMemInfo::GetERsInRAM($themf, $scat, $map_file, $sym_file, undef);
+
+ my $nDummyEndBase = hex(&LinkerOutputParser::Get_DUMMY_END_Base());
+ my $ROM_size = &BasicMemInfo::CMD_GetROMSize($themf, $scat, $map_file, $sym_file);
+ my @FreeRAMAreas;
+ my @UsedRAMAreas;
+
+ foreach my $ER (@$ERinRAM_aref) #Go through all regions in ram
+ {
+ my $strERsize = LinkerOutputParser::GetExeRegionInfo($ER, Region::Size);
+ my $strERbase = &LinkerOutputParser::GetExeRegionInfo($ER, Region::VMA);
+ my $nERaddr = get_EMI_offset(hex($strERbase), $ER, $platform, $c2k_mode_support);
+ msg_handler(FATAL, "Section $ER base address($strERbase) or end address($strERbase + $strERsize) is bigger than total memory size!\nEMI offset is $nERaddr.\n")
+ if ($nERaddr > $nDummyEndBase || ($nERaddr + hex($strERsize)) > $nDummyEndBase);
+
+ if (hex($strERsize)) {
+ my $ERsize = hex($strERsize);
+ my $append = 0;
+ my $note = undef;
+
+ foreach my $used (@UsedRAMAreas) {
+ if(($used->[0]<=$nERaddr) and (($used->[0]+$used->[1])>=$nERaddr)) {
+ if (($used->[0]+$used->[1])<($nERaddr+$ERsize)){
+ $used->[1]= ($nERaddr+$ERsize)-$used->[0];
+ }
+ $append = 1;
+ } elsif (($used->[0]<=($nERaddr+$ERsize)) and (($used->[0]+$used->[1])>=($nERaddr+$ERsize))) {
+ if ($used->[0] > $nERaddr) {
+ $used->[1] += $used->[0] - $nERaddr;
+ $used->[0] = $nERaddr;
+ }
+ $append = 1;
+ }
+ if ($append == 1) {
+ $used->[2] = $note if($note ne undef);
+ }
+ }
+
+ if ($append == 1) {
+ $append = 0;
+ } else {
+ push @UsedRAMAreas, [$nERaddr, $ERsize, $note]
+ }
+ }
+ }
+
+ @UsedRAMAreas = sort {$a->[0]<=>$b->[0]} @UsedRAMAreas;
+
+ if($ROM_size < $UsedRAMAreas[0][0]) {
+ push @FreeRAMAreas, [$ROM_size,$UsedRAMAreas[0][0] - $ROM_size];
+ }
+ for( my $i = 0;$i < $#UsedRAMAreas;$i+=1)
+ {
+ my $freeStart =$UsedRAMAreas[$i][0]+$UsedRAMAreas[$i][1];
+ my $freeSize =$UsedRAMAreas[$i+1][0]-$freeStart;
+ push @FreeRAMAreas, [$freeStart,$freeSize] if ($freeSize > 0);
+ }
+
+ @FreeRAMAreas =sort {$b->[1] <=> $a->[1]} @FreeRAMAreas;
+ my @RAMMargins;
+ foreach my $refUsed (@FreeRAMAreas) {
+ my $MarginStart = ($refUsed->[0]+ 0xffff) & 0xffff0000;
+ my $MarginLength = (($refUsed->[0] + $refUsed->[1]) & 0xffff0000) - $MarginStart;
+ next if($MarginLength < 0x10000);
+
+ push @RAMMargins, [$MarginStart,$MarginLength];
+ }
+
+ for (my $item_count = $#RAMMargins+1; $item_count < 8; $item_count+=1) {
+ push @RAMMargins, [0,0];
+ }
+ @RAMMargins = sort {$b->[1] <=> $a->[1]} @RAMMargins;
+ splice @RAMMargins, 8;
+
+ return @RAMMargins;
+ }
+}
+
+
+sub get_EMI_offset()
+{
+ my ($address, $section_name, $platform, $c2k_support) = @_;
+ my $addr_mask = 0x0fffffff;
+ my $bank = $address>>28;
+ if (($bank == 1) || ($bank == 7))
+ {
+ $addr_mask = 0x1fffffff;
+ }
+ my $phsical_addr = $address & $addr_mask;
+ if ($section_name eq "EXTSRAM_L1DSP_ZI" and ($platform eq "MT6880" or $platform eq "MT6890" or $platform eq "MT2735")) {
+ if ($c2k_support eq "NONE"){
+ $phsical_addr -= 0xE000000;
+ } elsif ($c2k_support ne "NONE") {
+ $phsical_addr -= 0xA000000;
+ } else {
+ msg_handler(FATAL, "Please check the C2K_SUPPORT status($c2k_support).\n");
+ }
+ }
+
+ return $phsical_addr;
+}
+
+sub msg_handler
+{
+ my ($type, $msg, $line_no, $file_name) = (@_);
+ my $prompt_prefix;
+ if($type == LOG) {
+ print $msg . "\n";
+ }
+ elsif($type == WARNING) {
+ $prompt_prefix = ">> AAIS Warning : ";
+ my $location = (defined $file_name) ? "[$file_name] " : "";
+ print $prompt_prefix . $location . $msg . "\n";
+ }
+ elsif($type == FATAL) {
+ $prompt_prefix = ">> *** AAIS Fatal : ";
+ my $location = (defined $file_name) ? "[$file_name] " : "";
+ $location .= "[at line $line_no] ";
+ die $prompt_prefix . $location . $msg . "\n";
+ }
+}
+
+
+
+1;
+
diff --git a/mcu/tools/AutoGen/postBuild/Parsing_Ramdisk_Info.pm b/mcu/tools/AutoGen/postBuild/Parsing_Ramdisk_Info.pm
new file mode 100644
index 0000000..e4b9849
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/Parsing_Ramdisk_Info.pm
@@ -0,0 +1,99 @@
+#!/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:
+#* ---------
+#* Parsing_Ramidisk_Info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This module return base address and length of ramdisk section. User: Append2.pl
+#*
+#*
+#* Author:
+#* -------
+#* Carl Kao (mtk08237)
+#*
+#****************************************************************************/
+use strict;
+BEGIN { push @INC, './pcore/tools/', './common/tools/MemoryUtility/' } # add additional library path
+use SymFileParser;
+use sysGenUtility;
+
+package Parsing_Ramdisk_Info;
+
+my $VERNO = " LR12_0.01";
+ # LR12_0.01 , 2016/06/03, Carl, Initial revision. Provide ramdisk space information for MD header
+
+sub getRamdisksymbol{
+
+ my $MAIN_SYM_FILE = shift;
+ my $INFO_MAKE_FILE = shift;
+
+ my ($hexRamdisk_Base, $hexRamdisk_End) = (0,0 );
+ my ($nRamdisk_Base, $nRamdisk_Length) = (0xCDCDCDAA, 0x0);
+
+ my %CmplOption;
+ my %relOption;
+
+ BuildInfo::Parse_InfoMakeLog($INFO_MAKE_FILE,\%CmplOption,\%relOption);
+ if(!BuildInfo::exist(BuildOPT::CMPL, "__FS_RAMDISK__"))
+ {
+ print "no ramdisk in this flavor!\n";
+ return ($nRamdisk_Base, $nRamdisk_Length);
+ }
+
+ SymFileParser::ParseSYM($MAIN_SYM_FILE);
+
+ $hexRamdisk_Base = SymFileParser::GetLinkerSymbolAddress("EXTSRAM_FS_ZI", LinkerSymPostfix::Base, LinkerSymPrefix::Image);
+ $hexRamdisk_End = SymFileParser::GetLinkerSymbolAddress("EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit, LinkerSymPrefix::Image);
+
+ #print " hexRamdisk_Base = $hexRamdisk_Base, hexRamdisk_End = $hexRamdisk_End\n";
+
+ if( 0 != hex($hexRamdisk_Base) )
+ {
+ $nRamdisk_Base = hex($hexRamdisk_Base);
+ $nRamdisk_Length = hex($hexRamdisk_End) - $nRamdisk_Base;
+
+ $nRamdisk_Base -= (&sysUtil::GetCacheablePrefix()) if ($nRamdisk_Base >= &sysUtil::GetCacheablePrefix());
+ }
+
+ return ($nRamdisk_Base, $nRamdisk_Length);
+}
diff --git a/mcu/tools/AutoGen/postBuild/Parsing_VoLTE_Core_Info.pm b/mcu/tools/AutoGen/postBuild/Parsing_VoLTE_Core_Info.pm
new file mode 100644
index 0000000..8d3a997
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/Parsing_VoLTE_Core_Info.pm
@@ -0,0 +1,102 @@
+#!/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:
+#* ---------
+#* Parsing_VoLTE_Core_Info.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This module return base address and length of VoLTE core section. User: Append2.pl
+#*
+#*
+#* Author:
+#* -------
+#* Carl Kao (mtk08237)
+#*
+#****************************************************************************/
+use strict;
+BEGIN { push @INC, './pcore/tools/', './common/tools/MemoryUtility/' } # add additional library path
+use SymFileParser;
+use sysGenUtility;
+
+package Parsing_VoLTE_Core_Info;
+
+my $VERNO = " LR12_0.02";
+ # LR12_0.02 , 2015/12/23, Carl, rename CACHED_EXTSRAM_VOLTE_CORE_ZI to CACHED_EXTSRAM_ZI_VOLTE_CORE3
+ # LR12_0.01 , 2015/12/22, Carl, Initial revision. Provide VoLTE Linux space information for MD header
+
+sub getVoLTECoresymbol{
+
+ my $MAIN_SYM_FILE = shift;
+ my $INFO_MAKE_FILE = shift;
+
+ my ($hexVoLTECore_Base, $hexVoLTECore_End) = (0,0 );
+ my ($nVoLTECore_Base, $nVoLTECore_Length) = (0xCDCDCDAA, 0x0);
+
+if(0){
+ my %CmplOption;
+ my %relOption;
+
+ BuildInfo::Parse_InfoMakeLog($INFO_MAKE_FILE,\%CmplOption,\%relOption);
+ if(!BuildInfo::exist(BuildOPT::CMPL, "__DUOS_HAS_VOLTECORE__"))
+ {
+ print "no VoLTE Core in this flavor!\n";
+ return ($nVoLTECore_Base, $nVoLTECore_Length);
+ }
+}
+
+ SymFileParser::ParseSYM($MAIN_SYM_FILE);
+
+ $hexVoLTECore_Base = SymFileParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_ZI_VOLTE_CORE3", LinkerSymPostfix::Base, LinkerSymPrefix::Image);
+ $hexVoLTECore_End = SymFileParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_ZI_VOLTE_CORE3", LinkerSymPostfix::ZILimit, LinkerSymPrefix::Image);
+
+ #print " hexVoLTECore_Base = $hexVoLTECore_Base, hexVoLTECore_End = $hexVoLTECore_End\n";
+
+ if( 0 != hex($hexVoLTECore_Base) )
+ {
+ $nVoLTECore_Base = hex($hexVoLTECore_Base);
+ $nVoLTECore_Length = hex($hexVoLTECore_End) - $nVoLTECore_Base;
+
+ $nVoLTECore_Base -= (&sysUtil::GetCacheablePrefix()) if ($nVoLTECore_Base >= &sysUtil::GetCacheablePrefix());
+ }
+
+ return ($nVoLTECore_Base, $nVoLTECore_Length);
+}
diff --git a/mcu/tools/AutoGen/postBuild/ckL2CacheSection.pl b/mcu/tools/AutoGen/postBuild/ckL2CacheSection.pl
new file mode 100644
index 0000000..4401bd4
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/ckL2CacheSection.pl
@@ -0,0 +1,222 @@
+#!/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) 2018
+#
+# 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:
+#* ---------
+#* ckL2CacheSection.pl
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This scripts is used to check if all symbols allocated in L2$ Lock section register to config file.
+#*
+#* Author:
+#* -------
+#* Yao Liu (mtk15073)
+#*
+#****************************************************************************/
+
+use strict;
+use warnings;
+
+BEGIN { push @INC , './tools/' } # add additional library path
+use FileInfoParser;
+use constant {
+ LOG => 0,
+ WARNING => 1,
+ FATAL => 2,
+};
+
+my ($MapFile, $Tempdir) = (@ARGV);
+&msg_handler(LOG, "Input file: $MapFile, $Tempdir\n");
+
+#record all official config info
+my %official_config;
+#record all symbols in L2Cache Lock Section
+my %symbol_hash;
+#record all symbols info from sym file
+my %addr_to_symbol;
+
+my $official_config = $Tempdir."~official_config.ldf";
+&msg_handler(FATAL, "official config file do not exist!\n") if(!-e $official_config);
+
+&Parse_Config_File();
+&Parse_MAP_File($MapFile);
+
+&Symbol_Check();
+
+exit 0;
+
+sub Parse_Config_File
+{
+ open CFG, "$official_config" or &msg_handler(FATAL, "Can not open $official_config!", __LINE__);
+ local $/ = undef;
+ my $tempOutput = <CFG>;
+ close CFG;
+
+ my ($SubSection, $bFlag, $sFlag) = (undef, 0, 0);
+ my @TotalSecArray;
+ my $BreakRegExp = "[\\*]{20}\\s[<]\\sGROUP\\s*CFG\\s[>]\\s[\\*]{20}";
+
+ #split entire config file into several configuration groups.
+ foreach my $line (split /\n/, $tempOutput) {
+ if($bFlag == 0) {
+ $bFlag = 1 if(($line =~ m/^\[Symbol\]\s+\[Obj\]\s+\[Lib\]$/));
+ next;
+ }
+ next if($line =~ m/^\s*$/);
+
+ if($line =~ m/^\s*$BreakRegExp\s*$/) {
+ $sFlag = 1;
+ if(defined $SubSection) {
+ push @TotalSecArray, $SubSection;
+ undef $SubSection;
+ }
+ next;
+ }
+ $SubSection .= $line."\n" if($sFlag == 1);
+ }
+ push @TotalSecArray, $SubSection if(defined $SubSection);
+
+ foreach my $content (@TotalSecArray) {
+ my @tempArray = split /\n/, $content;
+ my ($Section_ID, $name_flag, $size_flag);
+ foreach my $line (@tempArray) {
+ if($line =~ /^Section ID\s*:\s*(.*)$/) {
+ $Section_ID = $1;
+ $name_flag = 1;
+ next;
+ } elsif($line =~ /^Reserved size\s*:\s*(.*)$/ && $name_flag == 1) {
+ $official_config{$Section_ID}{"size"} = $1;
+ $size_flag = 1;
+ next;
+ } elsif(!($name_flag == 1 && $size_flag == 1)) {
+ &msg_handler(FATAL, "Wrong config format in $Section_ID!", __LINE__, $official_config);
+ }
+
+ if($line =~ m/^(\S+)\s+(\S+)\s+(\S+)\s*$/) {
+ $official_config{$Section_ID}{$1.":".$2.":".$3}{"symbol_name"} = $1;
+ $official_config{$Section_ID}{$1.":".$2.":".$3}{"obj"} = $2;
+ $official_config{$Section_ID}{$1.":".$2.":".$3}{"lib"} = $3;
+ } elsif($Section_ID =~ /L2CACHE_LOCK_RO_SECTION_\w+/) {
+ my $msg = "Illegal Line Format: $line";
+ &msg_handler(FATAL, "Illegal Line Format: $line", __LINE__, $official_config);
+ next;
+ }
+ }
+ }
+}
+
+sub Parse_MAP_File
+{
+ my ($map) = @_;
+ my $sym = $MapFile;
+ $sym =~ s/map/sym/;
+
+ open SYM, "<$sym" or &msg_handler(FATAL, "Can not open map $sym!", __LINE__);
+ map {$addr_to_symbol{uc($1)} = $5 if(/^(\w{8})\s+(\w)\s+(\w\s+)?CACHED_EXTSRAM_L2CACHE_LOCK_RO\s+(\w{8})\s+(\w+)$/)} (<SYM>);
+ close SYM;
+
+ my $flag = 0;
+ my ($input_section, $addr, $lib, $obj);
+ open MAP, "<$map" or &msg_handler(FATAL, "Can not open map $map!", __LINE__);
+ foreach my $line (<MAP>){
+ $flag = 1 if ($line =~ /^CACHED_EXTSRAM_L2CACHE_LOCK_RO$/);
+ next if (!($line =~ /^CACHED_EXTSRAM_L2CACHE_LOCK_RO$/ || $flag == 1));
+ last if ($line =~ /Image\$\$CACHED_EXTSRAM_L2CACHE_LOCK_RO\$\$ZI\$\$Limit = \.$/ && $flag == 1);
+
+ if ($line =~ /^\s(\w+)$/){
+ $input_section = $1;
+ ($addr, $lib, $obj) = (undef, undef, undef);
+ } elsif ($line =~ /\s+(\S+)?\s+0x(\w+)\s+(0x\w+)\s+.*\/?\/(\w+\.a)\((\w+\.obj)\)/){
+ # 0x91e5e3c0 0x8a ./build/MT6885_SP/NLWCTG/bin/lib/libsys_drv.a(idle_task.obj)
+ ($addr, $lib, $obj) = (uc($2), $4, $5);
+ my $symbol_name = $addr_to_symbol{$addr};
+ my $key = $symbol_name.":".$obj.":".$lib;
+ $symbol_hash{$input_section}{$key}{"symbol_name"} = $symbol_name;
+ $symbol_hash{$input_section}{$key}{"obj"} = $obj;
+ $symbol_hash{$input_section}{$key}{"lib"} = $lib;
+ } elsif ($line =~ /^\s+0x(\w+)\s+(\w+)$/) {
+ my $symbol_name = $2;
+ my $key = $symbol_name.":".$obj.":".$lib;
+ next if (exists $symbol_hash{$input_section}{$key});
+ $symbol_hash{$input_section}{$key}{"symbol_name"} = $symbol_name;
+ $symbol_hash{$input_section}{$key}{"obj"} = $obj;
+ $symbol_hash{$input_section}{$key}{"lib"} = $lib;
+ }
+ }
+}
+
+sub Symbol_Check
+{
+ foreach my $section (keys %symbol_hash){
+ next if(!exists $official_config{$section});
+ foreach my $key (keys %{$symbol_hash{$section}}){
+ &msg_handler(FATAL, "Symbol $symbol_hash{$section}{$key}{\"symbol_name\"} doesn't register to official congfig file!", __LINE__) if(!exists $official_config{$section}{$key});
+ }
+ }
+ &msg_handler(LOG, "The following symbols don't exist in current load:\n");
+ my $index = 0;
+ foreach my $section (keys %official_config){
+ foreach my $key (keys %{$official_config{$section}}){
+ next if ($key eq "size");
+ &msg_handler(LOG, "[$index] $official_config{$section}{$key}{\"symbol_name\"} $official_config{$section}{$key}{\"obj\"} $official_config{$section}{$key}{\"lib\"}", __LINE__) if(!exists $symbol_hash{$section}{$key});
+ $index++;
+ }
+ }
+ &msg_handler(LOG, "[Done]: Section check!");
+}
+
+sub msg_handler
+{
+ my ($type, $msg, $line_no) = (@_);
+ my $prompt_prefix;
+ if($type == LOG) {
+ print $msg . "\n";
+ }
+ elsif($type == WARNING) {
+ $prompt_prefix = ">> AAIS Warning : ";
+ print $prompt_prefix . $msg . "\n";
+ }
+ elsif($type == FATAL) {
+ $prompt_prefix = ">> *** AAIS Fatal : ";
+ my $location = "[at line $line_no] ";
+ die $prompt_prefix . $location . $msg . "\n";
+ }
+}
diff --git a/mcu/tools/AutoGen/postBuild/ckRegion.pl b/mcu/tools/AutoGen/postBuild/ckRegion.pl
new file mode 100644
index 0000000..35b970d
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/ckRegion.pl
@@ -0,0 +1,148 @@
+#!/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:
+#* ---------
+#* ckRegion.pl
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This scripts parses symbolfile and checks does it have any overlapping
+#* regions in physical SRAM
+#*
+#*
+#* Author:
+#* -------
+#* Tero Jarkko (mtk09602)
+#*
+#****************************************************************************/
+
+#****************************************************************************
+# Verno
+#****************************************************************************
+my $version = "Gen93_v0.02";
+ # Gen93_v0.02, 2017/09/01, Carl, support overlapped drdi sections
+ # Gen93_v0.01, 2017/06/16, Carl, support overlapped rom sections
+ # LR12_v0.03, 2016/05/26, Carl, avoid checking dynamic sections
+ # LR12_v0.02, 2016/03/17, Carl, avoid checking SIGNATURE section
+ # LR12_v0.01, 2015/12/04, Tero, 1st version
+
+use strict;
+BEGIN { push @INC, './tools/MemoryUtility/' } # add additional library path
+use SymFileParser;
+my @ex_reg = qw(ISPRAM DSPRAM CACHED_EXTSRAM_MCURO_HWRW_DRDI_);
+
+my $g_sym_file = $ARGV[0];
+my $g_exit_val = 0;
+if (!-e $g_sym_file) { die "$g_sym_file does not exist!!!\n";}
+SymFileParser::ParseSYM($g_sym_file);
+my $exe_regions =SymFileParser::ListAllExeRegion(1);
+my @regions;
+my $index=0;
+foreach my $region (@$exe_regions) {
+ foreach my $strPattern (@ex_reg) {
+ if($region =~ /$strPattern/) {
+ delete @$exe_regions[$index];
+ }
+ }
+ $index++;
+}
+foreach my $region (@$exe_regions) {
+ my $reg_begin =SymFileParser::GetExeRegionInfo($region,Region::VMA);
+ my $reg_size = SymFileParser::GetExeRegionInfo($region,Region::Size);
+ my $phy_loc = sprintf("0x%.8x",hex(get_physical_address($reg_begin)));
+ if(hex($reg_size)) {
+# print("\tpush $region\n");
+ push @regions,[$reg_begin,$reg_size,$phy_loc,$region];
+ }
+}
+@regions = sort {$a->[0] cmp $b->[0] } @regions;
+#print("\nSections which has data:\n");
+#print("|Begin |Length |SRAM addr |Section name\n");
+#foreach my $reg (@regions) {
+# print(" @$reg[0] @$reg[1] @$reg[2] @$reg[3]\n");
+#}
+print("\nCheck overlapping sections...\n");
+foreach my $reg (@regions) {
+ my $reg_begin = hex(@$reg[2]);
+ my $reg_end = $reg_begin + hex(@$reg[1])-1;
+ my ($index) = grep { $regions[$_][3] eq @$reg[3] } 0..$#regions;
+ my @sregions =();
+ push @sregions,@regions[$index..$#regions];
+ foreach my $reg_lap (@sregions) {
+ if (!(@$reg[3] eq @$reg_lap[3])) {
+ my $reg_lap_begin = hex(@$reg_lap[2]);
+ my $reg_lap_end = $reg_lap_begin+hex(@$reg_lap[1])-1;
+ if((($reg_begin > $reg_lap_begin) and ($reg_begin < $reg_lap_end)) or (($reg_end > $reg_lap_begin) and ($reg_end < $reg_lap_end))) {
+ my $begin1 = sprintf("0x%.8x",$reg_begin);
+ my $begin2 = sprintf("0x%.8x",$reg_lap_begin);
+ my $end1 = sprintf("0x%.8x",$reg_end);
+ my $end2 = sprintf("0x%.8x",$reg_lap_end);
+ if (($reg_begin < $reg_lap_begin) and ($reg_end > $reg_lap_end)) {
+ print(" @$reg[3] ($begin1-$end1) is inside of @$reg_lap[3] ($begin2-$end2)\n");
+ $g_exit_val = 1;
+ } elsif (($reg_begin > $reg_lap_begin) and ($reg_begin < $reg_lap_end)) {
+ my $ol_size = $reg_lap_end - $reg_begin;
+ $ol_size = sprintf("0x%.8x",$ol_size);
+ print(" @$reg[3] ($begin1-$end1) begin overlaps ($ol_size) @$reg_lap[3] ($begin2-$end2)\n");
+ $g_exit_val = 1;
+ } elsif (($reg_end > $reg_lap_begin) and ($reg_end < $reg_lap_end)) {
+ my $ol_size = $reg_end - $reg_lap_begin;
+ $ol_size = sprintf("0x%.8x",$ol_size);
+ print(" @$reg[3] ($begin1-$end1) end overlaps ($ol_size) @$reg_lap[3] ($begin2-$end2)\n");
+ $g_exit_val = 1;
+ }
+ }
+ }
+ }
+}
+print("\nDone, check overlapping sections\n");
+exit $g_exit_val;
+
+sub get_physical_address
+ {
+ my ($str_address) = @_;
+ my $addr_mask = 0x0fffffff;
+ my $bank = hex($str_address)>>28;
+ if (($bank == 1) || ($bank == 7)) {
+ $addr_mask = 0x1fffffff;
+ }
+ return sprintf("0x%.8x",hex($str_address) & $addr_mask);
+ }
diff --git a/mcu/tools/AutoGen/postBuild/drdi_info.pm b/mcu/tools/AutoGen/postBuild/drdi_info.pm
new file mode 100644
index 0000000..0f072bf
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/drdi_info.pm
@@ -0,0 +1,142 @@
+#!/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:
+#* ---------
+#* EMI_MPIinfo.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is used to get linker symbol for setting EMI RMPU
+#*
+#*
+#* Author:
+#* -------
+#* KC Tsai (mtk06471)
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*------------------------------------------------------------------------------
+#* $Revision: $
+#* $Modtime: $
+#* $Log: $
+#*
+#* 12 06 2019 yao.liu
+#* [MOLY00462117] [VMOLY] Extend DRDI set to 64.
+#* [VMOLY] Extend DRDI set to 64.
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#* 12 27 2017 carl.kao
+#* [MOLY00294629] [Gen93] [SystemService] [Auto-Gen] [MT6763] [ZION] [AMMS] [DRDI] AMMS-DRDI and Security Boot can be enabled simultaneously
+#* .
+#*
+#*
+#****************************************************************************/
+
+
+use strict;
+BEGIN { push @INC, './common/tools/MemoryUtility/' } # add additional library path
+use LinkerOutputParser;
+use CommonUtility;
+use FileInfoParser;
+
+package drdi_info;
+return 1;
+sub GetDRDIInfo
+ {
+ my ($g_sym_file) = @_;
+ my $g_area_begin = 0;
+ my $g_area_end = 0;
+ my $g_area_length = 0;
+ my @drdi_info = (0xCDCDCDAA,0,0xCDCDCDAA,0);
+ LinkerOutputParser::FileParse($g_sym_file) if(-e $g_sym_file) or die("Can't open symbol file: $g_sym_file\n");
+
+ # LOAD VIEW
+ $g_area_begin = hex(LinkerOutputParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_MCURO_HWRW_DRDI_2G_00", LinkerSymPostfix::Base, LinkerSymPrefix::Load));
+ $g_area_end = hex(LinkerOutputParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_MCURO_HWRW_DRDI_NR_63", LinkerSymPostfix::Base, LinkerSymPrefix::Load))
+ + hex(LinkerOutputParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_MCURO_HWRW_DRDI_NR_63", LinkerSymPostfix::Length, LinkerSymPrefix::Image));
+ $g_area_length = $g_area_end - $g_area_begin;
+ if ($g_area_length > 0)
+ {
+ # (0) load base
+ $drdi_info[0] = $g_area_begin & 0x0fffffff;
+ # (1) load length
+ $drdi_info[1] = $g_area_length;
+
+ # EXEC VIEW
+ # (2) exec base
+ $g_area_begin = hex(LinkerOutputParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_MCURO_HWRW_DRDI_2G_00", LinkerSymPostfix::Base, LinkerSymPrefix::Image));
+ $drdi_info[2] = $g_area_begin & 0x0fffffff;
+ # (3) exec length
+ $drdi_info[3]=0;
+ for (my $i=0; $i < 64; $i++) {
+ my $str_section_name = "CACHED_EXTSRAM_MCURO_HWRW_DRDI_LTE_";
+ $str_section_name = $str_section_name."0" if ($i<10);
+ my $n_tmp_len = hex(LinkerOutputParser::GetLinkerSymbolAddress($str_section_name.$i, LinkerSymPostfix::Length, LinkerSymPrefix::Image));
+ $drdi_info[3] = $n_tmp_len if ($drdi_info[3]<$n_tmp_len);
+ }
+ $drdi_info[3] += hex(LinkerOutputParser::GetLinkerSymbolAddress("CACHED_EXTSRAM_MCURO_HWRW_DRDI_LTE_00", LinkerSymPostfix::Base, LinkerSymPrefix::Image));
+ $drdi_info[3] -= $g_area_begin;
+ }
+ return @drdi_info;
+ }
diff --git a/mcu/tools/AutoGen/postBuild/update_drdi_table.pl b/mcu/tools/AutoGen/postBuild/update_drdi_table.pl
new file mode 100644
index 0000000..5fc2597
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/update_drdi_table.pl
@@ -0,0 +1,215 @@
+#!/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) 2018
+#
+# 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:
+#* ---------
+#* update_drdi_table.pl
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This scripts is used to gen md5 checksum of all RATs DRDI, which will be used to check if data corruption
+#* occurs during run-time or exception stage
+#*
+#* Author:
+#* -------
+#* Frank Hu (mtk12175)
+#*
+#****************************************************************************/
+
+use strict;
+use warnings;
+
+package Region;
+use constant Size => 0;
+use constant VMA => 1;
+use constant LMA => 2;
+use constant Fileoffset => 3;
+
+package Symbol;
+use constant VMA => 0;
+use constant Region => 1;
+use constant Size => 2;
+
+package MSG;
+use constant Log => 0;
+use constant Warning => 1;
+use constant Fatal => 2;
+
+my ($output, $warning) = (undef, undef);
+
+&msg_handler(MSG::Fatal, "Wrong Parameters, Usage: update_drdi_table.pl <ELF_FILE> <SYM_FILE>", __LINE__)
+ if($#ARGV != 1);
+
+my ($elf_file, $sym_file) = @ARGV;
+
+my $templog = "Input: ELF is $elf_file\n SYM is $sym_file\n\n";
+$templog .= sprintf("%-10s%-50s%-15s%-15s%-15s%-s\n", "Idx", "SectionName", "LMA", "VMA", "Size", "RCU_CS");
+&msg_handler(MSG::Log, $templog, __LINE__);
+
+my @rat_array = qw/2G 3GFDD 3GTDD MMRF C2K LTE NR/;
+my @symbol_array = qw/DRDI_RCUCS_Array DRDI_VMA_Array/;
+
+my %sym_file_hash;
+map{ $sym_file_hash{'symbol_info'}->{$_} = 0 } (@symbol_array);
+
+&parse_sym_file();
+
+my @rcu_cs_array;
+my @drdi_vma_info_array;
+
+&drdi_gen_rcu_cs();
+&drdi_update_elf();
+
+exit 0;
+
+sub parse_sym_file
+{
+ my ($bBegin, $sum_hit_sym) = (undef, 0);
+ open SYM, "< $sym_file" or &msg_handler(MSG::Fatal, "fail to open $sym_file", __LINE__);
+ while(my $line = <SYM>) {
+ $bBegin = 1 if($line =~ /^Sections:$/);
+ $bBegin = 2 if($line =~ /^SYMBOL TABLE:$/);
+ next unless(defined $bBegin);
+
+ #Idx Name Size VMA LMA File off Algn
+ # 0 ROM_GFH 0000084c 00000000 00000000 00000fd4 2**2
+ if($bBegin == 1 and $line =~ /\s*(\d+)\s+(\S+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\S+)/) {
+ my $section_name = $2;
+ $sym_file_hash{'section_info'}->{$section_name} = [$3, $4, $5, $6];
+ }
+ #91437ed0 g O ROM 00000180 DRDI_RCUCS_Array
+ elsif($bBegin == 2 and $line =~ /^([0-9a-fA-F]{8})\s+g\s+O\s+(\S+)\s+(\S+)\s+(?:\S+\s+)?(\S+)$/) {
+ my $symbol_name = $4;
+ next unless(exists $sym_file_hash{'symbol_info'}->{$symbol_name});
+ $sym_file_hash{'symbol_info'}->{$symbol_name} = [$1, $2, $3];
+ last if(($sum_hit_sym ++) == $#symbol_array);
+ }
+ }
+ close SYM;
+}
+
+sub drdi_gen_rcu_cs
+{
+ open (ELF_FILE, "< $elf_file") or die "Open $elf_file file failed\n";
+ binmode ELF_FILE;
+ my $idx = 0;
+ foreach my $rat (@rat_array) {
+ foreach my $index (0 .. 63) {
+ my $section_name = 'CACHED_EXTSRAM_MCURO_HWRW_DRDI_' . $rat . '_' . sprintf("%02d", $index);
+ &msg_handler(MSG::Fatal, "can't find the section: $section_name", __LINE__)
+ unless(exists $sym_file_hash{'section_info'}->{$section_name});
+
+ my $offset = hex($sym_file_hash{'section_info'}->{$section_name}->[Region::Fileoffset]);
+ my $length = hex($sym_file_hash{'section_info'}->{$section_name}->[Region::Size]);
+
+ &msg_handler(MSG::Fatal, "$section_name is not 4 Byte alignment(Length is $length)", __LINE__)
+ if($length % 4);
+
+ seek ELF_FILE, $offset, 0;
+ my ($content, $temp_rcu_cs) = (undef, 0);
+ &msg_handler(MSG::Fatal, "fail to read the data fragment of $section_name", __LINE__)
+ if(read(ELF_FILE, $content, $length) != $length);
+
+ my @tmp = unpack("V*", $content);
+ map { $temp_rcu_cs = $temp_rcu_cs ^ $_ } (@tmp);
+
+ push @rcu_cs_array, $temp_rcu_cs;
+ push @drdi_vma_info_array, hex($sym_file_hash{'section_info'}->{$section_name}->[Region::VMA]), $length;
+
+ $templog = sprintf("%-10s%-50s%-15s%-15s%-15s%-08x", $idx, $section_name,
+ $sym_file_hash{'section_info'}->{$section_name}->[Region::LMA],
+ $sym_file_hash{'section_info'}->{$section_name}->[Region::VMA],
+ $sym_file_hash{'section_info'}->{$section_name}->[Region::Size], $temp_rcu_cs);
+ &msg_handler(MSG::Log, $templog, __LINE__);
+ $idx = $idx + 1;
+ }
+ }
+ close ELF_FILE;
+}
+
+sub drdi_update_elf
+{
+ open (ELF_FILE, "+< $elf_file") or die "Open $elf_file file failed\n";
+ binmode ELF_FILE;
+ foreach my $symbol (@symbol_array) {
+ if($sym_file_hash{'symbol_info'}->{$symbol} == 0) {
+ &msg_handler(MSG::Fatal, "can't find symbol: $symbol", __LINE__);
+ next;
+ }
+ my $sym_region = $sym_file_hash{'symbol_info'}->{$symbol}->[Symbol::Region];
+ my $offset = (hex($sym_file_hash{'symbol_info'}->{$symbol}->[Symbol::VMA]) - hex($sym_file_hash{'section_info'}->{$sym_region}->[Region::VMA])) +
+ hex($sym_file_hash{'section_info'}->{$sym_region}->[Region::Fileoffset]);
+
+ seek ELF_FILE, $offset, 0;
+ my ($sym_size, $data_frag, $updated_content_size) = (hex($sym_file_hash{'symbol_info'}->{$symbol}->[Symbol::Size]), undef, undef);
+ if($symbol eq 'DRDI_RCUCS_Array') {
+ $updated_content_size = ($#rcu_cs_array + 1) * 4;
+ $data_frag = pack('V*',@rcu_cs_array);
+ }
+ elsif($symbol eq 'DRDI_VMA_Array') {
+ $updated_content_size = ($#drdi_vma_info_array + 1) * 4;
+ $data_frag = pack('V*',@drdi_vma_info_array);
+ }
+
+ &msg_handler(MSG::Fatal, $templog, __LINE__)
+ if($sym_size != $updated_content_size);
+
+ print ELF_FILE $data_frag;
+ }
+ close ELF_FILE;
+ &msg_handler(MSG::Log, "\n\nUpdate Elf succeed ^O^", __LINE__);
+}
+
+sub msg_handler
+{
+ my ($type, $msg, $line_no) = (@_);
+ my $prompt_prefix;
+ if($type == MSG::Log) {
+ print $msg . "\n";
+ }
+ elsif($type == MSG::Warning) {
+ $prompt_prefix = ">> DRDI Warning : ";
+ print "\n" . $prompt_prefix . "[at line $line_no] " . $msg . "\n";
+ }
+ elsif($type == MSG::Fatal) {
+ $prompt_prefix = ">> *** DRDI Fatal : ";
+ die $prompt_prefix . "[at line $line_no] " . "$msg" . "\n";
+ }
+}
\ No newline at end of file
diff --git a/mcu/tools/AutoGen/postBuild/update_dump_table.pl b/mcu/tools/AutoGen/postBuild/update_dump_table.pl
new file mode 100644
index 0000000..3f39188
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/update_dump_table.pl
@@ -0,0 +1,228 @@
+#!/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) 2018
+#
+# 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:
+#* ---------
+#* update_dump_table.pl
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is to update the value of dump table.
+#*
+#* Author:
+#* -------
+#* Yao Liu (mtk15073)
+#*
+#****************************************************************************/
+
+use strict;
+use warnings;
+BEGIN { push @INC, './tools/', './tools/MemoryUtility/' }
+use FileInfoParser;
+use constant {
+ Section_Size =>0,
+ Section_VMA =>1,
+ Section_LMA =>2,
+ Section_Fileoffset =>3,
+ Symbol_VMA =>0,
+ Symbol_Section =>1,
+ Symbol_Size =>2,
+};
+#****************************************************************************
+# Input
+#****************************************************************************
+my $debug = 1;
+&msg_handler("Fatal", "Wrong Parameters, Usage: update_drdi_table.pl <ELF_FILE> <SYM_FILE> <DUMP_FILE> <MAKEFILE>", __LINE__) if($#ARGV != 3);
+
+my ($elf_file, $sym_file, $dump_file, $makefile) = @ARGV;
+
+my $templog = "Input: ELF is $elf_file\nSYM is $sym_file\nDUMP_TABLE is $dump_file\nmakefile is $makefile\n\n";
+&msg_handler("Log", $templog, __LINE__);
+
+my %g_MAKEFILE_OPTIONS;
+&msg_handler("Fatal", "Failed to parse makefile!!!\n", __LINE__) if(1!=&FileInfo::Parse_MAKEFILE($makefile, \%g_MAKEFILE_OPTIONS));
+&msg_handler("Log", "This load do not support DHL!!!\n", __LINE__) if(FileInfo::is("DHL_SUPPORT", "FALSE"));
+exit 0 if(FileInfo::is("DHL_SUPPORT", "FALSE"));
+
+my @symbol_array = qw/dhl_dump_profile/;
+
+my %sym_file_hash;
+map{ $sym_file_hash{'symbol_info'}->{$_} = 0 } (@symbol_array);
+&parse_sym_file();
+
+my @CRC32_Table;
+&Init_CRC32_Table();
+
+my $init = 0x1A424650;
+my $constant = 1; #If the value of $init is not 0xFFFFFFFF, please set $constant to 1.
+my $update_content = &get_table_info();
+
+&dump_update_elf();
+
+exit 0;
+
+sub parse_sym_file
+{
+ my ($bBegin, $sum_hit_sym) = (undef, 0);
+ open SYM, "< $sym_file" or &msg_handler("Fatal", "fail to open $sym_file", __LINE__);
+ while(my $line = <SYM>) {
+ $bBegin = 1 if($line =~ /^Sections:$/);
+ $bBegin = 2 if($line =~ /^SYMBOL TABLE:$/);
+ next unless(defined $bBegin);
+
+ #Idx Name Size VMA LMA File off Algn
+ # 0 ROM_GFH 0000084c 00000000 00000000 00000fd4 2**2
+ if($bBegin == 1 and $line =~ /\s*(\d+)\s+(\S+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\S+)/) {
+ my $section_name = $2;
+ $sym_file_hash{'section_info'}->{$section_name} = [$3, $4, $5, $6];
+ }
+ #91437ed0 g O ROM 00000180 DRDI_RCUCS_Array
+ elsif($bBegin == 2 and $line =~ /^([0-9a-fA-F]{8})\s+g\s+O\s+(\S+)\s+(\S+)\s+(?:\S+\s+)?(\S+)$/) {
+ my $symbol_name = $4;
+ next unless(exists $sym_file_hash{'symbol_info'}->{$symbol_name});
+ $sym_file_hash{'symbol_info'}->{$symbol_name} = [$1, $2, hex($3)];
+ &msg_handler("Log", "[Symbol]:$symbol_name [VMA]:0x$1 [Section]:$2 [Size]:0x$3\n", __LINE__) if($debug);
+ last if(($sum_hit_sym ++) == $#symbol_array);
+ }
+ }
+ close SYM;
+ map {&msg_handler("Fatal", "can't find symbol: $_!!!", __LINE__) if ($sym_file_hash{'symbol_info'}->{$_} == 0)} (@symbol_array);
+}
+
+ sub get_table_info
+{
+ my @temp = stat($dump_file);
+ #Check total size
+ &msg_handler("Fatal", "The sie of $dump_file is biffer than symbol size!!!\n", __LINE__) if($temp[7] > $sym_file_hash{'symbol_info'}->{"dhl_dump_profile"}->[Symbol_Size]);
+
+ my $header = unpack("V", read_memory_from_file($dump_file, 0, 4,__LINE__));
+ my $table_value = read_memory_from_file($dump_file, 0, ($temp[7] - 4),__LINE__);
+ my $check_sum = unpack("V", read_memory_from_file($dump_file, ($temp[7] - 4), 4,__LINE__));
+ my $content = read_memory_from_file($dump_file, 0, $temp[7],__LINE__);
+
+ #Check header
+ &msg_handler("Fatal", "The magic pattern mismatch!!!\n", __LINE__) if($header != 0x1A424650);
+ #Check CRC32 checksum
+ my $check_value = CRC32_CheckSum($table_value);
+ &msg_handler("Log", "[File Size]:$temp[7] [Old CHecksum]:$check_sum [New Checksum]:$check_value\n", __LINE__) if($debug);
+
+ &msg_handler("Fatal", "The checksum mismatch!!!\n", __LINE__) if($check_value != $check_sum);
+ return $content;
+}
+
+sub dump_update_elf
+{
+ open (ELF_FILE, "+< $elf_file") or &msg_handler("Fatal", "Open $elf_file file failed!!!\n", __LINE__);
+ binmode ELF_FILE;
+ foreach my $symbol (@symbol_array) {
+ if($sym_file_hash{'symbol_info'}->{$symbol} == 0) {
+ &msg_handler("Fatal", "can't find symbol: $symbol", __LINE__);
+ next;
+ }
+ my $sym_region = $sym_file_hash{'symbol_info'}->{$symbol}->[Symbol_Section];
+ my $offset = (hex($sym_file_hash{'symbol_info'}->{$symbol}->[Symbol_VMA]) - hex($sym_file_hash{'section_info'}->{$sym_region}->[Section_VMA])) +
+ hex($sym_file_hash{'section_info'}->{$sym_region}->[Section_Fileoffset]);
+ &msg_handler("Log", "The addr of symbol in ELF is $offset.\n", __LINE__);
+
+ seek ELF_FILE, $offset, 0;
+ print ELF_FILE $update_content;
+ }
+ close ELF_FILE;
+ &msg_handler("Log", "\n\nUpdate Elf succeed ^O^", __LINE__);
+}
+
+sub read_memory_from_file
+{
+ &msg_handler("Fatal", "[Error]: argument of $0 is insufficient\n", __LINE__) if(@_ != 4);
+ my ($file,$off,$len,$file_line_no) = @_;
+
+ my $content;
+ open(FH, $file) or &msg_handler("Fatal", "Fail to open $file: $!\n", __LINE__);
+ binmode FH;
+ &msg_handler("Fatal", "Can not seek to $off\n", __LINE__) if not seek FH, $off, 0;
+ &msg_handler("Fatal", "At line $file_line_no! Can't read offset $off, length $len from file $file\n", __LINE__) if read(FH, $content, $len) != $len;
+ close FH;
+ return $content;
+}
+
+sub Init_CRC32_Table
+{
+ foreach my $index (0..255){
+ my $crc = $index;
+ foreach (0..7){
+ $crc = ($crc >> 1) ^ ($crc & 1 && 0xEDB88320);
+ }
+ my $value = $crc & 2 ** 32 - 1;
+ push @CRC32_Table, $value;
+ }
+}
+
+sub CRC32_CheckSum
+{
+ my ($data) = @_;
+ $init ^= 0xFFFFFFFF if ($constant);
+ my $check_sum = $init;
+ my $len = length $data;
+ foreach my $pos (0..$len-1){
+ my $temp = ($check_sum ^ ord(substr($data, $pos, 1))) & 0xFF;
+ $check_sum = ($check_sum >> 8) ^ $CRC32_Table[$temp];
+ }
+ $check_sum ^= 0xFFFFFFFF;
+ return ($check_sum & 0xFFFFFFFF);
+}
+
+sub msg_handler
+{
+ my ($type, $msg, $line_no) = (@_);
+ my $prompt_prefix;
+ if($type eq "Log") {
+ print $msg . "\n";
+ }
+ elsif($type eq "Warning") {
+ $prompt_prefix = ">> Warning : ";
+ print "\n" . $prompt_prefix . "[at line $line_no] " . $msg . "\n";
+ }
+ elsif($type eq "Fatal") {
+ $prompt_prefix = ">> Fatal : ";
+ die $prompt_prefix . "[at line $line_no] " . "$msg" . "\n";
+ }
+}
+
+
diff --git a/mcu/tools/AutoGen/postBuild/update_mpu_table.pl b/mcu/tools/AutoGen/postBuild/update_mpu_table.pl
new file mode 100644
index 0000000..2907290
--- /dev/null
+++ b/mcu/tools/AutoGen/postBuild/update_mpu_table.pl
@@ -0,0 +1,847 @@
+#!/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) 2011
+#
+# 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).
+#
+#
+#*****************************************************************************
+#*============================================================================
+#* HISTORY
+#* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*------------------------------------------------------------------------------
+#* $Revision$
+#* $Modtime$
+#* $Log$
+#*
+#* 11 11 2020 elvin.wang
+#* [MOLY00593559] [Gen97][Colgin] NR15.R3.MD700.MP branch out & call for check-in
+#* Merge patch from NR15.R3.T700.MP to NR15.R3.MD700.MP
+#*
+#* 09 18 2020 yao.liu
+#* [MOLY00569908] [Layout] Colgin patch back to NR15.R3.MP.
+#* [NR15.R3.MP] Porting Colgin layout to R3.MP branch.
+#*
+#* 09 08 2020 yao.liu
+#* [MOLY00372891] [MT6297][CM] Code change
+#* [Petrus-P] Move CSIF section to Bank0.
+#*
+#* 07 15 2020 yao.liu
+#* [MOLY00546498] [MT6893] Porting layout for Palmer.
+#* [NR15.R3.MP] Porting layout for MT6893.
+#*
+#* 06 11 2020 yao.liu
+#* [MOLY00521482] [MT6297][NR][SMT]Petrus NA SKU SMT4 for ATT & VZW Sku ???
+#*
+#* [NR15.R3.MP] Move CSIF section to Bank0.
+#*
+#* 04 17 2020 yao.liu
+#* [MOLY00511795] [NR15.R3.MP]L2cache lock new solution
+#* [NR15.R3.MP] New L2Cache Lock-AutoGen patch.
+#*
+#* 01 09 2020 yao.liu
+#* [MOLY00470528] [VMOLY]Remove L2C lock feature
+#* [VMOLY] Remove L2$ LOCK sections.
+#*
+#* 01 08 2020 yao.liu
+#* [MOLY00470423] [GEN98 FPGA Phone Call][Gen97] MPU/AutoGen bug fix. NMI cannot be servicve by non-offending VPEs.
+#*
+#* [VMOLY] Add mpu to protect bootslave.
+#*
+#* 12 06 2019 yao.liu
+#* [MOLY00462117] [VMOLY] Extend DRDI set to 64.
+#* [VMOLY] Extend DRDI set to 64.
+#*
+#* 12 04 2019 yao.liu
+#* [MOLY00462595] [VMOLY] Rename sections for memory utility.
+#*
+#* [VMOLY] Rename section for memory utility.
+#*
+#* 12 02 2019 yao.liu
+#* [MOLY00462186] [VMOLY] Change mpu setting for Security Develop.
+#* [Gen97] MPU setting review.
+#*
+#* 10 08 2019 yao.liu
+#* [MOLY00447280] [Gen97][Image Layout] DRDI feature cause DSP Base address move to Bank 1 from Bank 0
+#* [MT6885] Move DSP to the end of Bank1.
+#*
+#* 08 21 2019 yao.liu
+#* [MOLY00433621] Porting feature and add Mercury option to AutoGen.
+#* [VMOLY.APOLLO.SQC]Porting ALPS03884302 feature and add Mercury option for Auto-Gen.
+#*
+#* 07 04 2019 yao.liu
+#* [MOLY00418931] [VMOLY] Change Gen97 prefetch range.
+#* [VMOLY] Adjust prefetch range.
+#*
+#* 03 18 2019 yao.liu
+#* [MOLY00391736] Change L2CACHE_LOCK attribute from RW to RO.
+#* [VMOLY] Adjust L2C_LOCK vma= lma.
+#*
+#* 01 14 2019 frank.hu
+#* [MOLY00363660] [Auto-Gen] Merge 2 links to 1 link to save more build time.
+#*
+#* VMOLY.DEV.SEPT - Merge 2Links -> 1Link.
+#*
+#* 12 11 2018 tero.jarkko
+#* [MOLY00372134] [Gen97][SystemService][AutoGen]Fixed MT6885_FPGA mpu table
+#*
+#* .
+#*
+#* 12 07 2018 tero.jarkko
+#* [MOLY00371534] [Gen97][SystemService]Increased HARQ buffer size for MT6297 EVB
+#*
+#* .
+#*
+#* 12 03 2018 tero.jarkko
+#* [MOLY00369424] [Gen97][SystemService]Fix build error for MT6297
+#*
+#* .
+#*
+#* 11 13 2018 tero.jarkko
+#* [MOLY00364280] [Gen97][SystemService][AutoGen]Added ULTRA region to memory layout
+#*
+#* .
+#*
+#* 11 07 2018 tero.jarkko
+#* [MOLY00363118] [BusMPU][Gen97] the IOCU protection framework
+#*
+#* .
+#*
+#* 11 02 2018 tero.jarkko
+#* [MOLY00359227] [Gen97][SystemService][AutoGen]512MB memory map configured for MT6297 EVB
+#*
+#* .
+#*
+#* 10 29 2018 tero.jarkko
+#* [MOLY00359227] [Gen97][SystemService][AutoGen]512MB memory map configured for MT6297 EVB
+#*
+#* .
+#*
+#* 10 26 2018 tero.jarkko
+#* [MOLY00359227] [Gen97][SystemService][AutoGen]512MB memory map configured for MT6297 EVB
+#*
+#* .
+#*
+#* 10 17 2018 tero.jarkko
+#* [MOLY00359227] [Gen97][SystemService][AutoGen]512MB memory map configured for MT6297 EVB
+#*
+#* .
+#*
+#* 09 26 2018 tero.jarkko
+#* [MOLY00355587] [Gen97][SystemService]Updated MT6297 MPU maximum region count
+#*
+#* .
+#*
+#* 09 24 2018 tero.jarkko
+#* [MOLY00351701] [Gen97][SystemService][Auto-Gen]Added L2-WB areas
+#*
+#* .
+#*
+#* 09 04 2018 tero.jarkko
+#* [MOLY00349311] [VMOLY build] Solve VMOLY build error
+#*
+#* .
+#*
+#* 08 29 2018 tero.jarkko
+#* [MOLY00345457] [Gen97][SystemService][AutoGen]MT6297 merge
+#*
+#* .
+#*
+#* 08 14 2018 tero.jarkko
+#* [MOLY00345457] [Gen97][SystemService][AutoGen]MT6297 merge
+#*
+#* .
+#*
+#* 07 30 2018 frank.hu
+#* [MOLY00343013] [Create New Project][PMA used]
+#* Add LDS for MT6779.
+#*
+#* 07 13 2018 tero.jarkko
+#* [MOLY00338780] [MT6295] New MPU APIs for pretecting Consys MD-AP share memory.
+#*
+#* .
+#*
+#* 06 19 2018 tero.jarkko
+#* [MOLY00334042] [System Service][MOLY Kernel Internal Request] DRDI Patch on LR13
+#*
+#* .
+#*
+#* 05 28 2018 tero.jarkko
+#* [MOLY00327744] [Gen95][SystemService][Auto-Gen]Added L2-WB areas
+#*
+#* .
+#*
+#* 05 22 2018 tero.jarkko
+#* [MOLY00327744] [Gen95][SystemService][Auto-Gen]Added L2-WB areas
+#*
+#* .
+#*
+#* 02 27 2018 tero.jarkko
+#* [MOLY00310353] [Gen95][System Service][Auto-Gen]Static L2C locked input sections are placed into EMI
+#*
+#* .
+#*
+#* 01 18 2018 tero.jarkko
+#* [MOLY00303145] [Gen95] [SystemService][DSMGR] Dynamic L2CACHE lock implementation
+#*
+#* .
+#*
+#* 01 18 2018 tero.jarkko
+#* [MOLY00303145] [Gen95] [SystemService][DSMGR] Dynamic L2CACHE lock implementation
+#*
+#* .
+#*
+#* 12 05 2017 tero.jarkko
+#* [MOLY00294063] [Gen93][MT6739][SystemService][Auto-Gen]Fix DRDI memory dump
+#*
+#* .
+#*
+#* 11 22 2017 tero.jarkko
+#* [MOLY00290966] [Gen93][MT6739][SystemService][Auto-Gen] AMMS DRDI stage 4 (Modify layout)
+#*
+#* .
+#*
+#* 11 10 2017 tero.jarkko
+#* [MOLY00281660] [MT6295M][SystemService][Autogen] Updated MT6295M memory map
+#*
+#* .
+#*
+#* 08 29 2017 tero.jarkko
+#* [MOLY00269781] [Gen93][SystemService][Auto-Gen]I/DSPRAM MPU settings update
+#*
+#* .
+#*
+#* 08 28 2017 tero.jarkko
+#* [MOLY00269781] [Gen93][SystemService][Auto-Gen]I/DSPRAM MPU settings update
+#*
+#* .
+#*
+#* 08 23 2017 tero.jarkko
+#* [MOLY00269781] [Gen93][SystemService][Auto-Gen]I/DSPRAM MPU settings update
+#*
+#* .
+#*
+#* 08 10 2017 tero.jarkko
+#* [MOLY00269510] [BIANCO][MT6763][RDIT][PHONE][PHYTest][SW] Modem only load can't boot in trunk/R2 branch
+#*
+#* .
+#*
+#* 07 31 2017 carl.kao
+#* [MOLY00267693] [Gen93] [SystemService] [Auto-Gen] Modify MPU for setting RAMDISK to RW
+#* .
+#*
+#* 07 25 2017 carl.kao
+#* [MOLY00265930] [Gen93] [SystemService] [Auto-Gen] AMMS DRDI stage 3 (integrate AMMS with MD DRDI)
+#* [AMMS STAGE 3/DRDI] main code
+#*
+#* 07 12 2017 tero.jarkko
+#* [MOLY00263922] [Gen93][SystemService][Auto-Gen]MPU size optimization
+#*
+#* .
+#*
+#* 06 08 2017 tero.jarkko
+#* [MOLY00256019] [BIANCO][MT6763][RDIT][FT][FDD][CU][SH][SIM1:CU][SIM2:NA][Fatal error(task)] err_code1:0x00003104 err_code2:0x00000000 err_code3:0xCCCCCCCC
+#*
+#* .
+#*
+#* 05 18 2017 tero.jarkko
+#* [MOLY00250578] [System Software]change backdoor as UC to avoid coherence issue
+#*
+#* .
+#*
+#* 05 16 2017 tero.jarkko
+#* [MOLY00249784] [Gen93][SystemService][Auto-Gen]Split static L2C LOCK and dynamic L2C LOCK section to different output section
+#*
+#* .
+#*
+#* 05 03 2017 carl.kao
+#* [MOLY00245670] [Gen93] [SystemService] [Auto-Gen] (1) Reduce MPU entry and (2) Set CUIF bank6 as cacheable
+#* Set EXTSRAM as RW
+#*
+#* 05 03 2017 carl.kao
+#* [MOLY00245670] [Gen93] [SystemService] [Auto-Gen] (1) Reduce MPU entry and (2) Set CUIF bank6 as cacheable
+#* 1 MB MPU granularity taken in use
+#*
+#* 05 02 2017 carl.kao
+#* [MOLY00245670] [Gen93] [SystemService] [Auto-Gen] (1) Reduce MPU entry and (2) Set CUIF bank6 as cacheable
+#* Rollback "cross core access to I/DSPRAM enabled" to save MPU entries
+#*
+#* 05 02 2017 carl.kao
+#* [MOLY00245670] [Gen93] [SystemService] [Auto-Gen] (1) Reduce MPU entry and (2) Set CUIF bank6 as cacheable
+#* AutoGen, regioninit, DSM part
+#*
+#* 04 04 2017 tero.jarkko
+#* [MOLY00239310] [Gen93/LR13][SystemService][Auto-Gen][MT6763]Fix core1 null protection
+#*
+#* .
+#*
+#* 03 02 2017 tero.jarkko
+#* [MOLY00232738] [Gen93][MT6763][SystemService][DSMGR]DSMGR support for MT6763
+#*
+#* .
+#*
+#* 01 20 2017 tero.jarkko
+#* [MOLY00226093] [Gen93/LR13][SystemService][Auto-Gen][Bianco Bring-up]Modify SPRAM size and address
+#*
+#* .
+#*
+#* 01 20 2017 tero.jarkko
+#* [MOLY00226093] [Gen93/LR13][SystemService][Auto-Gen][Bianco Bring-up]Modify SPRAM size and address
+#*
+#* .
+#*
+#* 01 18 2017 tero.jarkko
+#* [MOLY00225658] [Gen93/LR13][SystemService][Auto-Gen][Bianco Bring-up]Modify/Add IOCU section in bank 2/3
+#*
+#* .
+#*
+#* 12 13 2016 tero.jarkko
+#* [MOLY00218335] [Gen93/LR13][SystemService][Auto-Gen][MPU]Bank1 MPU protection
+#*
+#* .
+#*
+#* 11 29 2016 tero.jarkko
+#* [MOLY00215759] [Gen93/LR13][SystemService][Auto-Gen][MPU] Null pointer protection
+#*
+#* .
+#*
+#* 11 17 2016 tero.jarkko
+#* [MOLY00213928] [Gen93/LR13][SystemService][Auto-Gen] AutoGen generated lds file
+#*
+#* .
+#*
+#* 11 08 2016 tero.jarkko
+#* [MOLY00205040] [Gen93/LR13][SystemService][Auto-Gen] AutoGen generated MPU settings
+#*
+#* .
+#*
+#* 10 20 2016 tero.jarkko
+#* [MOLY00205040] [Gen93/LR13][SystemService][Auto-Gen] AutoGen generated MPU settings
+#*
+#* .
+#*
+#*------------------------------------------------------------------------------
+#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+#*============================================================================
+#****************************************************************************/
+#****************************************************************************
+# Included Modules
+#****************************************************************************
+use strict;
+BEGIN { push @INC, './tools/', './tools/MemoryUtility/' }
+use LinkerOutputParser;
+use FileInfoParser;
+use scatInfo;
+use CommonUtility;
+use Switch;
+use constant {
+ MPU_NA => 0x00000038,
+ MPU_RO => 0x00000018,
+ MPU_ROEX => 0x00000010,
+ MPU_WO => 0x00000028,
+ MPU_RW => 0x00000008,
+ MPU_RWEX => 0x00000000,
+ MPU_CCA_UC => 0x00000002,
+ MPU_CCA_WB => 0x00000003,
+ MPU_CCA_CWBE => 0x00000004,
+ MPU_CCA_CWB => 0x00000005,
+ MPU_CCA_UCA => 0x00000007,
+ MPU_DYNAMIC => 0,
+ MPU_FIXED => 1,
+ MPU_NULL => 2,
+};
+#****************************************************************************
+# Variables
+#****************************************************************************
+my @MPU_table_core0;
+my @MPU_table_core1;
+my @MPU_table_core2;
+my @MPU_table_core3;
+my $mpu_null_index = undef;
+my $g_MakeFile_ref = undef;
+my @dynamic_regions = undef;
+my $g_bb = undef;
+my $mpu_dynamic_max = 0;
+#****************************************************************************
+# Input
+#****************************************************************************
+my ($elf_file, $sym_file, $lds_file, $MakeFile) = @ARGV;
+
+print "Parse symbol file $sym_file\n";
+LinkerOutputParser::FileParse($sym_file);
+my $dummy_end = hex(LinkerOutputParser::Get_DUMMY_END_Base());
+
+print "Parse lds file $lds_file\n\n";
+my $LinkInfo = lds_new scatInfo($lds_file, "ROM");
+my %MemInfo;
+map { $MemInfo{$_->[0]} = [hex($_->[1]),hex($_->[2])] } (@{$LinkInfo->{ldsInfo}->{MEMORYInfo}});
+
+$g_MakeFile_ref = &FileInfo::GetMakeFileRef($MakeFile);
+$g_bb = &sysUtil::SwitchToClonedChip(&FileInfo::get("BOARD_VER"));
+print "Modem Arch: ".$g_MakeFile_ref->{MTK_MODEM_ARCH}."\n";
+print "Board ver: ".$g_bb."\n";
+if ($g_MakeFile_ref->{MTK_MODEM_ARCH} =~ /MT6295/)
+{
+ $mpu_null_index =27;
+ $mpu_dynamic_max = 13;
+ @dynamic_regions = (
+ [[0] ,["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_UCA,0x111],
+ [["MCURO_HWRW",LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2CACHE_LOCK", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x111,0],
+ [["EXTSRAM_FS_ZI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x111,0],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,2],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU2_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x111,2],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image],MPU_RW ,MPU_CCA_CWB,0x111,6],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,6],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,0],
+ [["L2CACHE_LOCK", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2CACHE_LOCK", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RWEX,MPU_CCA_CWB,0x111,9],
+ [["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image],["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image],MPU_RW ,MPU_CCA_CWB,0x111,3],
+ [["EXTSRAM_CORE0", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE0", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_WB ,0x001,2],
+ [["EXTSRAM_CORE0", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE0", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_NA ,MPU_CCA_UCA,0x110,0],
+ [["EXTSRAM_CORE1", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE1", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_WB ,0x010,2],
+ [["EXTSRAM_CORE1", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE1", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_NA ,MPU_CCA_UCA,0x101,0],
+ [[0x1f000000] ,[0x1f020000] ,MPU_RW ,MPU_CCA_UC ,0x111],
+ [[0x1fC00000] ,[0x1fC20000] ,MPU_RW ,MPU_CCA_UC ,0x111]);
+} elsif ($g_MakeFile_ref->{MTK_MODEM_ARCH} =~ /MT6297/) {
+ $mpu_null_index =31;
+ $mpu_dynamic_max = 19;
+ if ((($g_bb =~ /MT6297_FPGA/) and (FileInfo::get("CUSTOM_FLAVOR") =~/_SAP/)) or ($g_bb =~ /MT6885_FPGA/)) {
+ @dynamic_regions = (
+ [[0] ,["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_UCA,0x1111],
+ [["MCURO_HWRW",LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x1111,0],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,6],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,2],
+ #[["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU2_ULTRA_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,2],
+ [["EXTSRAM_ULTRA_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU3_MCURW_HWRW_15", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,3],
+ [["EXTSRAM_FS_ZI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,0],
+ [["L2SRAM_L2C_CODE", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RWEX,MPU_CCA_CWB,0x1111,9],
+ [["USPRAM_CODE", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["USPRAM_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RWEX,MPU_CCA_CWB,0x1111,9],
+ [[0x1f000000] ,[0x1f020000] ,MPU_RW ,MPU_CCA_UC ,0x1111],
+ [[0x1fC00000] ,[0x1fC20000] ,MPU_RW ,MPU_CCA_UC ,0x1111]);
+ } elsif (FileInfo::is("PLATFORM", "MT6297")){
+ @dynamic_regions = (
+ [[0] ,["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_UCA,0x1111],
+ [["MCURO_HWRW",LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x1111,0],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,6],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,2],
+ #[["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_DSP_RX_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,0],
+ [[0x10000000] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,1],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_DSP_RX_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,6],
+ [[0x70000000] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,7],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU2_ULTRA_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,2],
+ [["EXTSRAM_ULTRA_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU3_MCURW_HWRW_15", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,3],
+ [["EXTSRAM_FS_ZI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,1],
+ [["L2SRAM_L2C_CODE", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_CODE", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_CWB,0x1111,9],
+ [["L2SRAM_L2C_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,9],
+ [[0x1f000000] ,[0x1f020000] ,MPU_RW ,MPU_CCA_UC ,0x1111],
+ [[0x1fC00000] ,[0x1fC20000] ,MPU_RW ,MPU_CCA_UC ,0x1111])
+
+ } elsif (FileInfo::is("PLATFORM", "MT6885") || FileInfo::is("PLATFORM", "MT6873")) {
+ @dynamic_regions = (
+ [[0] ,["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_UCA,0x1111],
+ [["MCURO_HWRW",LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x1111,0],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU2_ULTRA_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,2],
+ [["EXTSRAM_ULTRA_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU3_MCURW_HWRW_ZI_15", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,3],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x1111,0],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM_FS_ZI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,1],
+ [["L2SRAM_L2C_CODE", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_CODE", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_CWB,0x1111,9],
+ [["L2SRAM_L2C_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,9],
+ [["MCURW_HWRW_DNC_SS_EXT_CSIF", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["MCURW_HWRW_DNC_NL1_EXT_CSIF", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,0],
+ [["MCURW_HWRW_DNC_SS_EXT_CSIF", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["MCURW_HWRW_DNC_NL1_EXT_CSIF", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,6],
+ [[0x1f000000] ,[0x1f020000] ,MPU_RW ,MPU_CCA_UC ,0x1111],
+ [[0x1fC00000] ,[0x1fC20000] ,MPU_RW ,MPU_CCA_UC ,0x1111])
+ } else {
+ @dynamic_regions = (
+ [[0] ,["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_UCA,0x1111],
+ [["MCURO_HWRW",LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x1111,0],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU2_ULTRA_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,2],
+ [["EXTSRAM_ULTRA_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU3_MCURW_HWRW_ZI_15", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,3],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x1111,0],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x1111,6],
+ [["EXTSRAM_FS_ZI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x1111,1],
+ [["L2SRAM_L2C_CODE", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_CODE", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_CWB,0x1111,9],
+ [["L2SRAM_L2C_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2SRAM_L2C_DATA", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x1111,9],
+ [[0x1f000000] ,[0x1f020000] ,MPU_RW ,MPU_CCA_UC ,0x1111],
+ [[0x1fC00000] ,[0x1fC20000] ,MPU_RW ,MPU_CCA_UC ,0x1111])
+ }
+ unshift @dynamic_regions, [[0],["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image],MPU_ROEX,MPU_CCA_CWB,0x1111,9] if(FileInfo::is("MTK_MODEM_ARCH", "MT6297") or FileInfo::is("MTK_MODEM_ARCH", "MT6297P"));
+} else {
+ $mpu_null_index =21;
+ $mpu_dynamic_max = 13;
+ @dynamic_regions = (
+ [[0] ,["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,MPU_ROEX,MPU_CCA_UCA,0x111],
+ [["MCURO_HWRW",LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_UCA,0x111,0],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["L2CACHE_LOCK", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x111,0],
+ [["EXTSRAM_FS_ZI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["EXTSRAM_FS_ZI", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_UCA,0x111],
+ [["MCURO_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_MCURO_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,6],
+ [["EXTSRAM", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image],MPU_RW ,MPU_CCA_CWB,0x111,6],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,6],
+ [["DRDI", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DRDI", LinkerSymPostfix::Limit,LinkerSymPrefix::Image] ,MPU_RO ,MPU_CCA_CWB,0x111,0],
+ [["CACHED_EXTSRAM_L2CACHE_LOCK_DATA", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DYNAMIC_SECTION_L2CACHE_LOCK_0", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RWEX,MPU_CCA_CWB,0x111,9],
+ [["DYNAMIC_SECTION_L2CACHE_LOCK_L_IDLE", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["DYNAMIC_SECTION_L2CACHE_LOCK_C_DO_DATALINK", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image],MPU_RWEX,MPU_CCA_CWB,0x111,9],
+ [["CACHED_EXTSRAM_IOCU2_MCURW_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_IOCU2_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_CWB,0x111,2],
+ [["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::Base,LinkerSymPrefix::Image],["CACHED_EXTSRAM_IOCU3_READ_ALLOC_MCURW_HWRW", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image],MPU_RW ,MPU_CCA_CWB,0x111,3],
+ [["EXTSRAM_CORE0", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE0", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_WB ,0x001,6],
+ [["EXTSRAM_CORE0", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE0", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_NA ,MPU_CCA_UCA,0x110,0],
+ [["EXTSRAM_CORE1", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE1", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_RW ,MPU_CCA_WB ,0x010,6],
+ [["EXTSRAM_CORE1", LinkerSymPostfix::Base,LinkerSymPrefix::Image] ,["CACHED_EXTSRAM_CORE1", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_NA ,MPU_CCA_UCA,0x101,0],
+ [[0x1f000000] ,[0x1f020000] ,MPU_RW ,MPU_CCA_UC ,0x111],
+ [[0x1fC00000] ,[0x1fC20000] ,MPU_RW ,MPU_CCA_UC ,0x111]);
+ }
+
+
+
+my @fixed_core0 = ([[0x9FB00000] ,[0x9FB3FFFF] ,MPU_ROEX ,MPU_CCA_CWB ,0x0001]);# bootslave
+
+my @fixed_core1 = ([[0x9FB40000] ,[0x9FB7FFFF] ,MPU_ROEX ,MPU_CCA_CWB ,0x0010]);
+
+my @fixed_core2 = ([[0x9FB80000] ,[0x9FBBFFFF] ,MPU_ROEX ,MPU_CCA_CWB ,0x0100]);
+
+my @fixed_core3 = ([[0x9FBC0000] ,[0x9FBFFFFF] ,MPU_ROEX ,MPU_CCA_CWB ,0x1000]);
+
+my @null_prot = ( [[0] ,["ROM", LinkerSymPostfix::ZILimit,LinkerSymPrefix::Image] ,MPU_NA ,MPU_CCA_UC ,0x1111,0]);#21
+#****************************************************************************
+# >>> Main Flow
+#****************************************************************************
+# Parse regions table and create MPU region tables
+print "\nCalculate dynamic MPU entries:\n";
+Parse_regions(\@dynamic_regions,MPU_DYNAMIC);
+if(($#MPU_table_core0 >= $mpu_dynamic_max) or ($#MPU_table_core1 >= $mpu_dynamic_max) or ($#MPU_table_core2 >= $mpu_dynamic_max) or ($#MPU_table_core3 >= $mpu_dynamic_max)) {
+ print "\nERROR: Dynamic mpu entry count exceeded max count ".$mpu_dynamic_max."\n";
+ print "\nCORE 0 MPU table:\n";
+ PrintMPUTable(\@MPU_table_core0);
+ print "\nCORE 1 MPU table:\n";
+ PrintMPUTable(\@MPU_table_core1);
+ print "\nCORE 2 MPU table:\n";
+ PrintMPUTable(\@MPU_table_core2);
+ print "\nCORE 3 MPU table:\n";
+ PrintMPUTable(\@MPU_table_core3);
+ exit 1;
+}
+if ($g_MakeFile_ref->{MTK_MODEM_ARCH} =~ /MT6297/) {
+ FillTable(\@MPU_table_core0,19);
+ FillTable(\@MPU_table_core1,19);
+ FillTable(\@MPU_table_core2,19);
+ FillTable(\@MPU_table_core3,19);
+
+ print "\nCalculate CORE0 MPU entries:\n";
+ Parse_regions(\@fixed_core0,MPU_FIXED);
+ print "\nCalculate CORE1 MPU entries:\n";
+ Parse_regions(\@fixed_core1,MPU_FIXED);
+ print "\nCalculate CORE2 MPU entries:\n";
+ Parse_regions(\@fixed_core2,MPU_FIXED);
+ print "\nCalculate CORE3 MPU entries:\n";
+ Parse_regions(\@fixed_core3,MPU_FIXED);
+}
+FillTable(\@MPU_table_core0,$mpu_null_index);
+FillTable(\@MPU_table_core1,$mpu_null_index);
+FillTable(\@MPU_table_core2,$mpu_null_index);
+FillTable(\@MPU_table_core3,$mpu_null_index);
+
+Parse_regions(\@null_prot,MPU_NULL);
+FillTable(\@MPU_table_core0,32);
+FillTable(\@MPU_table_core1,32);
+FillTable(\@MPU_table_core2,32);
+FillTable(\@MPU_table_core3,32);
+
+print "\nCORE 0 MPU table:\n";
+PrintMPUTable(\@MPU_table_core0);
+print "\nCORE 1 MPU table:\n";
+PrintMPUTable(\@MPU_table_core1);
+print "\nCORE 2 MPU table:\n";
+PrintMPUTable(\@MPU_table_core2);
+print "\nCORE 3 MPU table:\n";
+PrintMPUTable(\@MPU_table_core3);
+print "\nUpdate ELF file: $elf_file\n";
+print "\nUpdate Core 0 MPU info to ELF file: $elf_file\n";
+UpdateMPUtoELF($elf_file,\@MPU_table_core0,GetSymbolAddressFromElf("mpu_region_config_core0"));
+print "\nUpdate Core 1 MPU info to ELF file: $elf_file\n";
+UpdateMPUtoELF($elf_file,\@MPU_table_core1,GetSymbolAddressFromElf("mpu_region_config_core1"));
+print "\nUpdate Core 2 MPU info to ELF file: $elf_file\n";
+UpdateMPUtoELF($elf_file,\@MPU_table_core2,GetSymbolAddressFromElf("mpu_region_config_core2"));
+print "\nUpdate Core 3 MPU info to ELF file: $elf_file\n";
+UpdateMPUtoELF($elf_file,\@MPU_table_core3,GetSymbolAddressFromElf("mpu_region_config_core3"));
+print "End\n";
+exit 0;
+
+#****************************************************************************
+# Subroutines
+#****************************************************************************
+sub Parse_regions
+{
+ my ($table_ref,$mode) = @_;
+ foreach my $region_ref (@{$table_ref}) {
+ my $area_begin = 0;
+ my $area_end = 0;
+ my $area_length = 0;
+ if(($region_ref->[0][0]^$region_ref->[0][0])) {
+ $area_begin = hex(LinkerOutputParser::GetLinkerSymbolAddress($region_ref->[0][0],$region_ref->[0][1],$region_ref->[0][2]));
+ } else {
+ $area_begin = $region_ref->[0][0];
+ }
+ if(($region_ref->[1][0]^$region_ref->[1][0])) {
+ $area_end = hex(LinkerOutputParser::GetLinkerSymbolAddress($region_ref->[1][0],$region_ref->[1][1],$region_ref->[1][2]));
+ } else {
+ $area_end = $region_ref->[1][0];
+ }
+ if (defined $region_ref->[5]) {
+ $area_begin = get_physical_address($area_begin)| $region_ref->[5]<<28;
+ $area_end = get_physical_address($area_end) | $region_ref->[5]<<28;
+ }
+ $area_length = $area_end - $area_begin;
+
+ print "Start: " .&CommonUtil::Dec2Hex($area_begin)." End: " .&CommonUtil::Dec2Hex($area_end)." Length: " .&CommonUtil::Dec2Hex($area_length). " ". get_mpu($region_ref->[2]|$region_ref->[3]) . "\n";
+ if ($area_length > 0) {
+ my @mpu_info = @{GetMPUinfo($area_begin,$area_length,$mode)};
+ foreach my $mpu (@mpu_info) {
+ my $control_reg = (0<<15)|($mpu->[1]<<10)|(($mpu->[2]-1)<<6)|$region_ref->[2]|$region_ref->[3];
+ InsertMPURegion($mpu->[0],$control_reg,$region_ref->[4]);
+ }
+ } elsif (($mode == MPU_FIXED) || ($mode == MPU_NULL)) {
+ InsertMPURegion(0,0,$region_ref->[4]);
+ }
+ }
+}
+
+sub FillTable
+{
+ my ($table_ref, $elements) = @_;
+ my $index = $#{$table_ref};
+ for ($index+=1;$index<$elements;$index+=1) {
+ push @{$table_ref}, [0,0];
+ }
+}
+
+sub UpdateMPUtoELF
+{
+ my ($elf,$table_ref,$offset) = @_;
+ if ($offset == 0) {
+ print "MPU table address invalid. $elf not updated\n";
+ return;
+ }
+ open (my $BIN_FILE, "+<$elf") or die "Open $elf file failed\n";
+ binmode $BIN_FILE;
+ seek $BIN_FILE, $offset,0;
+ foreach my $region (@$table_ref) {
+ print $BIN_FILE pack('L<[2]',@{$region});
+ }
+ close $BIN_FILE;
+ print "$elf file updated successfully\n";
+}
+
+sub InsertMPURegion
+{
+ my ($base,$control,$core) = @_;
+ push @MPU_table_core0, [$base,$control] if ($core & 0x0001);
+ push @MPU_table_core1, [$base,$control] if ($core & 0x0010);
+ push @MPU_table_core2, [$base,$control] if ($core & 0x0100);
+ push @MPU_table_core3, [$base,$control] if ($core & 0x1000);
+}
+
+sub msb
+{
+ my ($n, $base) = (shift, 0);
+ $base++ while $n >>= 1;
+ return $base;
+}
+
+sub lsb
+{
+ my $n = shift;
+ return msb($n & -$n);
+}
+
+sub get_mpu
+{
+ my ($mpu) = @_;
+ my $rval ="";
+ switch ($mpu & 0x38) {
+ case MPU_NA { $rval .= "MPU_NA "; }
+ case MPU_RO { $rval .= "MPU_RO "; }
+ case MPU_ROEX { $rval .= "MPU_ROEX"; }
+ case MPU_WO { $rval .= "MPU_WO "; }
+ case MPU_RW { $rval .= "MPU_RW "; }
+ case MPU_RWEX { $rval .= "MPU_RWEX"; }
+ }
+ switch ($mpu & 0x7) {
+ case MPU_CCA_UC { $rval .= " MPU_CCA_UC "; }
+ case MPU_CCA_WB { $rval .= " MPU_CCA_WB "; }
+ case MPU_CCA_CWBE { $rval .= " MPU_CCA_CWBE"; }
+ case MPU_CCA_CWB { $rval .= " MPU_CCA_CWB "; }
+ case MPU_CCA_UCA { $rval .= " MPU_CCA_UCA ";}
+ }
+ return $rval;
+}
+
+sub GetPageSize
+{
+ my ($addr) = @_;
+ my $pagesize = 1<<$addr;
+ return sprintf("%4.dB ",$pagesize) if($pagesize <= 1024);
+ $pagesize /= 1024;
+ if ($pagesize <= 1024) {
+ return sprintf("%4.dKB",$pagesize);
+ } else {
+ return sprintf("%4.dMB",$pagesize/1024);
+ }
+}
+
+sub GetGran
+{
+ my ($val) = @_;
+ return 28 if ($val == 0);
+ return lsb($val);
+}
+
+sub GetMPUinfo
+{
+ my ($start, $length,$type) = @_;
+ my $addr_gran = GetGran($start);
+ my @mpu_pages;
+ if ($type == MPU_NULL) {
+ my $page_size = msb($length)-3;
+ $page_size = 5 if($page_size < 5);
+ if ($addr_gran >= $page_size) {
+ my $page_count = ($length>>$page_size);
+ $page_size += lsb($page_count);
+ $page_count >>= lsb($page_count);
+ push @mpu_pages,[$start, $page_size, $page_count];
+ }
+ } else {
+ if ($length != 0) {
+ #set MPU area total resrvation size to 0
+ my $reserved_size = 0;
+ #current length MPU area to be allocated
+ my $current_length = $length;
+ #initial allocated page count
+ my $page_count = 0;
+ #initial page size is determined from length
+ my $page_size = msb($current_length)-3;
+ #check that if we still need to make MPU allocation
+ while ($reserved_size < $length) {
+ #Page size cannot be less than 32 bytes
+ $page_size = 5 if($page_size < 5);
+ #Check if we are using address or length granularity to determine page size.
+ if ($addr_gran < $page_size) {
+ $page_size = $addr_gran;
+ }
+ $page_count = ($current_length>>$page_size);
+ #check do we need add one more page if we have tailing bytes in current allocation
+ $page_count += 1 if (((1<<$page_size)-1) & $current_length);
+ if (($page_count+(($start>>$page_size) &0xf)) > 16) {
+ #if we are allocating more than 16 pages we increase page_size but not exceed address granularity
+ if ($page_size<$addr_gran) {
+ $page_size +=1;
+ next;
+ }
+ #if we cannot increase page size we allocate as many pages as possible.
+ $page_count = 16-(($start>>$page_size) &0xf);
+ }
+ #check if we can use larger page granularity for allocation. Without exceeding address granularity
+ my $i = lsb($page_count);
+ if ($i!=0) {
+ if ($addr_gran < ($page_size+$i)) {
+ $i = $addr_gran-$page_size;
+ }
+ $page_count >>=$i;
+ $page_size +=$i;
+ }
+ push @mpu_pages,[$start, $page_size, $page_count];
+ #calculate total reservation size
+ $reserved_size += $page_count<<$page_size;
+ #calculate remaining reservation start address
+ $start += $page_count<<$page_size;
+ #calculate new address page granularity
+ $addr_gran = GetGran($start);
+ #remaining area to be allocated
+ $current_length -= $page_count<<$page_size;
+ #new initial page size
+ $page_size = msb($current_length)-3;
+ }
+ }
+ }
+ if (($type == MPU_FIXED)|| ($type == MPU_NULL)) {
+ push @mpu_pages, [0,0,0] if (@mpu_pages == undef);
+ }
+ return \@mpu_pages;
+}
+
+sub PrintMPUTable
+{
+ my ($table_ref) = @_;
+ #Print table
+ my $index = 0;
+ print "Index Base Control Attr CCA Size Count\n";
+ foreach my $region (@$table_ref) {
+ if ($region->[1]) {
+ print " $index " .&CommonUtil::Dec2Hex($region->[0]) . " " .&CommonUtil::Dec2Hex($region->[1]). " ".&get_mpu($region->[1]);
+ my $page_size = GetPageSize(($region->[1]>>10)&0x1f);
+ my $page_count= (($region->[1]>>6)&0xf)+1;
+ print " $page_size $page_count\n";
+ } else {
+ print " $index " .&CommonUtil::Dec2Hex($region->[0]) . " " .&CommonUtil::Dec2Hex($region->[1])."\n";
+ }
+ $index +=1;
+ }
+}
+
+sub GetSymbolAddressFromElf
+{
+ my ($symName) = @_;
+ my $refSymbols = LinkerOutputParser::GetSymbol();
+ my $syminfo = $refSymbols->{$symName};
+ my $nSectionOffset = hex(LinkerOutputParser::GetExeRegionInfo($syminfo->[Symbol::Region], Region::Offsets));
+ my $nSectionStart = hex(LinkerOutputParser::GetExeRegionInfo($syminfo->[Symbol::Region], Region::VMA)) & 0x0fffffff;
+ return ($nSectionOffset - $nSectionStart) + (hex($syminfo->[Symbol::Addr]) & 0x0fffffff);
+}
+
+sub get_physical_address
+{
+ my ($address) = @_;
+ my $addr_mask = 0x0fffffff;
+ my $bank = $address>>28;
+ if (($bank == 1) || ($bank == 7)) {
+ $addr_mask = 0x1fffffff;
+ }
+ return ($address & $addr_mask);
+}