blob: 96af5f1f861a8147df7f1a852b99e523645c447c [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#!/usr/bin/perl
2#
3# Copyright Statement:
4# --------------------
5# This software is protected by Copyright and the information contained
6# herein is confidential. The software may not be copied and the information
7# contained herein may not be used or disclosed except with the written
8# permission of MediaTek Inc. (C) 2006
9#
10# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
11# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
12# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
13# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
14# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
15# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
16# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
17# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
18# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
19# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
20# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
21# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
22#
23# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
24# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
25# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
26# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
27# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
28#
29# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
30# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
31# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
32# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
33# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
34#
35#*****************************************************************************
36#*
37#* Filename:
38#* ---------
39#* RAMmargin.pl
40#*
41#* Project:
42#* --------
43#*
44#*
45#* Description:
46#* ------------
47#* This perl is used to get RAM margin
48#*
49#*
50#* Author:
51#* -------
52#* Carina Liao (mtk04017)
53#*
54#****************************************************************************/
55
56BEGIN { push @INC, "./" , '../', './tools/', './tools/MemoryUtility/' } # add additional library path
57use systemInfo;
58use LinkerOutputParser;
59use CommonUtility;
60use FileInfoParser;
61use BasicMemInfoQuery;
62use strict;
63
64#****************************************************************************
65# Constants
66#****************************************************************************
67my $RAMMARGIN_VERNO = " u0.03";
68 # u0.03 , 2016/03/03, CMD_GetRAMUsage functions returns now RAMmargin table
69 # u0.02 , 2015/01/27, Correct pm name (CommonUtility)
70 # u0.01 , 2015/01/19, Memory Utility Refinement
71 # m0.03 , 2013/02/12, Fix RamMargin
72 # m0.02 , 2012/08/03, Push additional library path
73 # m0.01 , 2012/07/21, Initial revision
74
75#****************************************************************************
76# Global variable
77#****************************************************************************
78my $DebugPrint = 0;
79
80#****************************************************************************
81# 1 >>> Get in put parameters
82#****************************************************************************
83&Usage() if($#ARGV != 2);
84my ($makeFile, $memorymapfile, $symfile) = @ARGV;
85
86#****************************************************************************
87# 2 >>> Parse make file
88#****************************************************************************
89my %MAKEFILE_OPTIONS;
90&FileInfo::Parse_MAKEFILE($makeFile, \%MAKEFILE_OPTIONS);
91
92#****************************************************************************
93# 3 >>> Calculate RAM margin
94#****************************************************************************
95&CalcRAMmargin($makeFile, $memorymapfile, $symfile);
96
97#****************************************************************************
98# oo >>> Finished
99#****************************************************************************
100exit 0;
101
102#****************************************************************************
103# subroutine: CalcRAMmargin - calculate RAM margin
104# Input: x
105# Output: x
106#****************************************************************************
107sub CalcRAMmargin
108{
109 my ($makeFile, $memorymapfile, $symfile) = @_;
110 my $mapfile = $symfile;
111 my $nRAMUsage = 0;
112 my @RAMmargins;
113 my $i = 0;
114 if($symfile =~ /sym$/)
115 {
116 $mapfile =~ s/\.sym/\.map/;
117 ($nRAMUsage, @RAMmargins) = BasicMemInfo::DispatchCommand("CMD_GetRAMUsage", $makeFile, $memorymapfile, $mapfile, $symfile, undef);
118 }
119 else
120 {
121 &Usage();
122 }
123 foreach my $RamMargin (@RAMmargins)
124 {
125 $i += 1;
126 my $RamMarginInHex = CommonUtil::Dec2Hex(@{$RamMargin}[1]);
127 print "RAM Margin $i = $RamMarginInHex = @{$RamMargin}[1] (Bytes)\n" if(@{$RamMargin}[1] != 0);
128 }
129 print "For more information, please use \"\.\/m memquery basicinfo\" command\n";
130}
131
132#****************************************************************************
133# subroutine: Usage - usage template
134# Input: x
135# Output: x
136#****************************************************************************
137sub Usage
138{
139 print <<"__EOFUSAGE";
140
141usage: perl RAMMargin.pl makefile_path lds_file_path sym_file_path
142
143e.g.
144perl RAMMargin.pl "/[path]/MT6280_R7R8_HSPA(FULL_VERSION_RVCT).mak" "/[path]/lds_MT6280_R7R8.txt" "/[path]/MT6280_EVB_R7R8_PCB01_hspa_MT6280_S00.sym"
145
146__EOFUSAGE
147
148 exit 1;
149}
150
151#****************************************************************************
152# Subroutine: TCMmargin_verno - to query this package's version number
153# Parameters: x
154# Returns: version number string
155#****************************************************************************
156sub RAMmargin_verno
157{
158 return $RAMMARGIN_VERNO;
159}