blob: f433c0c1776765d510025c9290694192b380b26f [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#* ChkMemUsage.pl
40#*
41#* Project:
42#* --------
43#*
44#*
45#* Description:
46#* ------------
47#* This perl is used to check memory usage.
48#* If the memory usage is more than 95%, then warning is send back.
49#*
50#*
51#* Author:
52#* -------
53#* I-Chun Liu (mtk06123)
54#*
55#****************************************************************************/
56
57BEGIN { push @INC, '../', './tools/', './tools/MemoryUtility/' } # add additional library path
58use systemInfo;
59use LinkerOutputParser;
60use CommonUtility;
61use FileInfoParser;
62use BasicMemInfoQuery;
63use strict;
64
65#****************************************************************************
66# Constants
67#****************************************************************************
68my $ChkMemUsage_VERNO = " u0.01";
69 # u0.01 , 2015/01/19, Initial revision for Memory Utility Refinement
70 # m0.01 , 2014/02/26, Initial revision
71
72#****************************************************************************
73# Global variable
74#****************************************************************************
75my $DebugPrint = 0;
76
77#****************************************************************************
78# Subroutine: ChkMemUsage_verno - to query this package's version number
79# Parameters: x
80# Returns: version number string
81#****************************************************************************
82sub ChkMemUsage_verno
83{
84 return $ChkMemUsage_VERNO;
85}
86
87#****************************************************************************
88# 1 >>> Get in put parameters
89#****************************************************************************
90&Usage() if($#ARGV != 3);
91my ($makeFile, $lds_path, $map_path, $sym_path) = @ARGV;
92
93#****************************************************************************
94# 2 >>> Parse make file
95#****************************************************************************
96my %MAKEFILE_OPTIONS;
97&FileInfo::Parse_MAKEFILE($makeFile, \%MAKEFILE_OPTIONS);
98
99#****************************************************************************
100# 3 >>> ChkMemUsage
101#****************************************************************************
102&ChkMemUsage();
103
104#****************************************************************************
105# oo >>> Finished
106#****************************************************************************
107exit 0;
108
109#****************************************************************************
110# subroutine: ChkMemUsage - Check memory usage. If the memory usage is more than 95%, then warning is send back.
111# Input: x
112# Output: x
113#****************************************************************************
114sub ChkMemUsage
115{
116 my $nPRAMUsage = 0;
117 my $nPRAM = 0;
118 my $threshold_val = 0;
119 my $percentage = 95; #95%
120 my $current_percentage = 0 ;
121
122 my $platform = &FileInfo::get("PLATFORM", \%MAKEFILE_OPTIONS);
123 print "platform = $platform\n";
124
125 my $coprocessor = &FileInfo::is_with_AP(\%MAKEFILE_OPTIONS);
126 print "isWithAP = $coprocessor\n";
127
128 #get ram size
129
130 if($platform =~ /MT6595/) #MT6595
131 {
132 $nPRAM = 0x6000000; #96M
133 print "MT6595 memory size = $nPRAM\n";
134 }
135
136 else #MT6280, MT6290
137 {
138 $nPRAM = BasicMemInfo::DispatchCommand("GetTotalRAMUsageFromLDS", $makeFile, $lds_path, $map_path, $sym_path, undef);
139 print "RAMUsageFromLDS = $nPRAM\n";
140 }
141
142 #set threshold size
143 $threshold_val = ($nPRAM * $percentage)/100 ;
144 print "Threshold_val = $threshold_val\n";
145
146 #get current usage size
147 $nPRAMUsage = BasicMemInfo::DispatchCommand("CMD_GetPhysicalRAMUsage", $makeFile, $lds_path, $map_path, $sym_path, undef);
148 print "RAM usage = $nPRAMUsage\n";
149
150 #calculate current usage percentage
151 $current_percentage = ($nPRAMUsage * 100)/$nPRAM ;
152 my $current_percentage = sprintf "%.2f", $current_percentage;
153 print "Current usage: $current_percentage%\n";
154
155 if ($nPRAMUsage >= $threshold_val && $threshold_val != 0)
156 {
157 #send warning
158 print "Warning: The memory usage is $nPRAMUsage over the memory usage threshold $threshold_val which is $percentage% of RAM size !\n";
159 }
160 else
161 {
162 print "Memory usage check OK!\n";
163 }
164}
165
166#****************************************************************************
167# subroutine: Usage - usage template
168# Input: x
169# Output: x
170#****************************************************************************
171sub Usage
172{
173 print <<"__EOFUSAGE";
174
175usage: perl ChkMemUsage.pl makefile_path lds_file_path map_file_path sym_file_path
176
177e.g.
178perl ChkMemUsage.pl "/[path]/~MT6290E2_EVB(LWG).mak" "/[path]/ldsMT6290E2_EVB.txt" "/[path]/MT6290E2_EVB_PCB01_MT6290_S01.map" "/[path]/MT6290E2_EVB_PCB01_MT6290_S01.sym"
179
180__EOFUSAGE
181
182 exit 1;
183}
184