[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6

MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF  modem version: NA

Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/tools/ldsInfoWrap.pm b/mcu/tools/ldsInfoWrap.pm
new file mode 100644
index 0000000..0f4067b
--- /dev/null
+++ b/mcu/tools/ldsInfoWrap.pm
@@ -0,0 +1,250 @@
+#!/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:
+#* ---------
+#*   ldsInfoWrap.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#*   This script is to provide functions for parsing linker script and getting information
+#*   It helps to cover linker script's insufficient syntax part.
+#*   e.g. no Load View, no max size...etc
+#*   
+#* Author:
+#* -------
+#*   Qmei Yang (mtk03726)
+#*
+#****************************************************************************/
+#****************************************************************************
+# Included Modules
+#****************************************************************************
+use strict;
+BEGIN { push @INC, './pcore/tools/' }  # add additional library path
+use CommonUtility;
+use ldsInfo;
+package ldsInfoWrap;
+#****************************************************************************
+# oo >>>  Finished
+#****************************************************************************
+return 1;
+
+#****************************************************************************
+# ldsInfoWrap Version
+#****************************************************************************
+sub ldsInfoWrap_verno
+{
+    return " u0.06";
+           # u0.06 ,  20160801 by tero, Removed TCM support
+           # u0.05 ,  20141125 by carl, Added support for SPRAM in SetTCMSize
+           # u0.04 ,  20141125 by carl, Merge ATCM and BTCM as a single TCM
+           # u0.03 ,  20140801 by carl, Refine GetL1COREDumpExeRegions() for dump L1CORE TCM
+           # u0.02 ,  20140503 by carl, Remove unused library path
+           # u0.01 ,  20140220 by BM,  Initial revision
+           # ...
+           # m0.07 , 20131023 by mei, Fix SECURE_RO's bug
+           # m0.06 , 20130503 by mei, Export GetMEMROYInfo and GetMEMROYInfoByName from ldsInfo.pm
+           # m0.05_From WR8 , 20121219 by mei, Support SECURE_RO
+           # m0.05 , 20121002 by mei, Support MT7208 BTCM1
+           # m0.04 , 20120911 by mei, Support setting Load Region
+           # m0.03 , 20120724 by mei, Use MaxSize directly except getting TCMSize from MEMORY
+           # m0.02 , 20120528 by mei, Support path and filename case sensitive on Linux
+           # m0.01 , 20120528 by mei, initial version
+}
+
+
+sub new
+{
+    my $class = shift;
+    my $self = {};
+    my ($strFakeLoadRegionName) = @_;           
+    #default value
+    $self->{ldsInfo} = new ldsInfo;
+    #default value
+    $self->{ldsPath} = undef;
+    $self->{MEMORY} = undef;   #=string
+    $self->{SECTIONS} = undef; #=string
+    
+    $self->{FAKE_LRName} = $strFakeLoadRegionName;
+    
+    $self->{ExeRegion} = {};            #%g_ExeRegion; (start from 1) 
+                                        # nIndex => [$1=Region name, $2=strBaseAddress, $3=strOffset, $4=nMaxSize, $5=\@Attribute]
+    $self->{ExeRegionCount} = 0;        #$g_ExeRegionCount = 0;
+    $self->{ExeRegionLookUpTable} = {}; #%g_ExeRegionLookUpTable; # RegionName -> Index
+
+    $self->{MemoryView} = {};      # %g_MemoryView; (start from 1)
+                                   # $RegionName => [$ExecutionView, $LoadView];
+    $self->{InputSection} = {}; # $self->{InputSection}{$strRegionName} = @InputSections;
+    #$self->{EXCLUDE_FILE} = {}; # $self->{EXCLUDE_FILE}{$strInputSection} = @files;
+    $self->{RegionMap} = undef;
+    bless $self, $class;
+    return $self;
+}
+sub ParseLinkerScript
+{
+    my $self = shift;
+    my ($strLDSPath) = @_;
+    $self->{ldsInfo}->ParseLinkerScript($strLDSPath);
+    #default value
+    $self->{ldsPath} = $self->{ldsInfo}->{ldsPath};
+    $self->{MEMORY} = $self->{ldsInfo}->{MEMORY};   #=string
+    $self->{SECTIONS} = $self->{ldsInfo}->{SECTIONS}; #=string
+    $self->{MEMORYInfo} = $self->{ldsInfo}->{MEMORYInfo}; #aref: [$strName, $strBase, $strLength]
+    $self->{ExeRegion} = $self->{ldsInfo}->{ExeRegion};            #%g_ExeRegion; (start from 1) 
+                                        # nIndex => [$1=Region name, $2=strBaseAddress, $3=strOffset, $4=nMaxSize, $5=\@Attribute]
+    $self->{ExeRegionCount} = $self->{ldsInfo}->{ExeRegionCount};        #$g_ExeRegionCount = 0;
+    $self->{ExeRegionLookUpTable} = $self->{ldsInfo}->{ExeRegionLookUpTable}; #%g_ExeRegionLookUpTable; # RegionName -> Index
+
+    $self->{MemoryView} = $self->{ldsInfo}->{MemoryView};      # %g_MemoryView; (start from 1)
+                                   # $RegionName => [$ExecutionView, $LoadView];
+    $self->{InputSection} = $self->{ldsInfo}->{InputSection}; # $self->{InputSection}{$strRegionName} = @InputSections;
+
+    $self->SetLoadRegion();
+    $self->SetTCMSize(); #Set TCMSize due to linker script using MEMORY to limit TCM not ASSERT
+}
+
+sub GetMEMROYInfo
+{
+    my $self = shift;
+    return $self->{ldsInfo}->GetMEMROYInfo();
+}
+
+sub GetMEMORYInfoByName
+{
+    my $self = shift;
+    my ($strRegionName) = @_;
+    return $self->{ldsInfo}->GetMEMORYInfoByName($strRegionName);
+}
+
+sub SetTCMSize
+{
+    my $self = shift;
+    foreach (@{$self->{MEMORYInfo}})
+    {
+	if($_->[0] =~ /^[ID]SPRAM[0-2]/)
+	  {
+	    my $SPRAMIndex = $self->{ExeRegionLookUpTable}{$_->[0]};
+	    $self->{ExeRegion}{$SPRAMIndex}->[InfoIndex::MaxSize] = hex($_->[2]);
+	  }
+    }
+}
+#****************************************************************************
+# subroutine:  SetLoadRegion
+#              helps to setting HardCode Load Region in linker script 
+#              for prompting cfggen and binfile generation
+# input:       N/A
+# output:      N/A
+#****************************************************************************
+sub SetLoadRegion
+{
+    my $self = shift;
+    my $strFakeLRName = $self->{FAKE_LRName};
+    foreach (1..$self->{ExeRegionCount})
+    {
+        my $ER = $self->{ExeRegion}{$_};
+        # nIndex => [$1=Region name, $2=strBaseAddress, $3=strOffset, $4=nMaxSize, $5=\@Attribute]
+        my $strERName = $ER->[0];
+        if($strERName =~ /BOOT_CERT/)
+        {
+            ++$self->{LoadRegionCount};
+            $self->{LoadRegionLookUpTable}{$strERName} = $self->{LoadRegionCount};
+            #%g_LoadRegionLookUpTable; # RegionName -> Index          
+            $self->{LoadRegion}{$self->{LoadRegionCount}} = [$strERName, $ER->[1], $ER->[2], $ER->[3], $ER->[4], ()];
+                                                     #   => [$1=Region name, $2=ImageLimit(Previous region) or strBaseAddress, $3=strOffset, $4=nMaxSize, $5=\@Attribute]
+            push( @{$self->{RegionMap}{$strERName}}, $strERName);
+        }
+        elsif($strERName =~ /SECURE_RO/)
+        {
+            if(!exists $self->{RegionMap}{SECURE_RO})
+            {
+                ++$self->{LoadRegionCount};
+                $self->{LoadRegionLookUpTable}{SECURE_RO} = $self->{LoadRegionCount};
+                #%g_LoadRegionLookUpTable; # RegionName -> Index          
+                $self->{LoadRegion}{$self->{LoadRegionCount}} = ["SECURE_RO", $ER->[1], $ER->[2], $ER->[3], $ER->[4], ()];
+                                                         #   => [$1=Region name, $2=ImageLimit(Previous region) or strBaseAddress, $3=strOffset, $4=nMaxSize, $5=\@Attribute]
+            }
+            push( @{$self->{RegionMap}{SECURE_RO}}, $strERName);
+        }		
+        else
+        {
+            if(!exists $self->{LoadRegionLookUpTable}{$strFakeLRName})
+            {
+                ++$self->{LoadRegionCount};
+                $self->{LoadRegionLookUpTable}{$strFakeLRName} = $self->{LoadRegionCount};
+                $self->{LoadRegion}{$self->{LoadRegionCount}} = [$strFakeLRName, $ER->[1], $ER->[2], $ER->[3], $ER->[4], ()];
+            }
+            push( @{$self->{RegionMap}{$strFakeLRName}}, $strERName);
+        }
+    }
+    #map{print "$_\n"}keys %{$self->{RegionMap}};
+}
+
+#****************************************************************************
+# subroutine:  SearchExeRegionName
+#              to get the first execution region name by keyword searching
+# input:       Keyword
+# output:      RegionName: undef means it's not existent
+#****************************************************************************
+sub SearchExeRegionName
+{
+    my $self = shift;
+    my ($strKey) = @_;
+    my $strRegion = undef;
+    foreach my $strTemp (keys %{$self->{ExeRegionLookUpTable}})
+    {
+        if($strTemp =~ /$strKey/)
+        {
+            $strRegion = $strTemp;
+            last;
+        }
+    }
+    return $strRegion;
+}
+
+#****************************************************************************
+# subroutine:  ldsWrap_die
+# sample code: (message, __FILE__, __LINE__)
+# input:       $error_msg, $file, $line_no
+#****************************************************************************
+sub ldsWrap_die
+{
+    my ($error_msg, $file, $line_no) = (@_);
+    &CommonUtil::error_handler($error_msg, $file, $line_no, 'ldsInfoWrap');    
+}