1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 #include <stdio.h>
79 #include <string.h>
80
81 #if defined(_MIPS_PLATFORM_) && defined(_M4VE_BIG2_)
82 #include "shellcfg.h"
83
84
85 #include "com_type.h"
86
87 //#define EMI_MEASURE_OFF 0
88 //#define EMI_MEASURE_ON 1
89 #define EMI_TIMER_INTERVAL 10 //ms
90 int reg_ind = 0;
91 U16 times_prt=0; // print message
92 U16 times_mnt=0; // change monitor client ID
93 U32 measure[2][8] = {{0, 0, 0, 0, 0, 0, 0, 0},
94 {0, 0, 0, 0, 0, 0, 0, 0}};
95 U32 emi_report[2] = {0, 0};
96
97 const unsigned short emi_client_input[6][5]={ {0x0, 0x4100, 0x4342, 0x4544, 0x4746}
98 , {0x090e, 0x5100, 0x5352, 0x5554, 0x5756}
99 , {0x38fe, 0x6000, 0x6261, 0x6463, 0x6665}
100 , {0xc2f2, 0x6800, 0x6a69, 0x6c6b, 0x706d}
101 , {0xbcfe, 0x7100, 0x7473, 0x7675, 0x7877}
102 , {0x141c, 0x4f00, 0x7a79, 0x7c7b, 0x007d}};
103
mp4rec_emi_measure(U8 mode)104 void mp4rec_emi_measure(U8 mode)
105 {
106 static U32 avgtimes = 0;
107 U16 temp1=0, temp2=0, i;
108 U32 bps, me_cnt = 1, me_clk = 156;//104;//52; // MHz
109 /*
110 if(EMI_MEASURE_OFF == mode)
111 {
112 WRITE_REG(0xbf8020c0, U16, 0x00);
113 diag_printf("=== BANDWIDTH REPORT === \n");
114 diag_printf("avg: %d max: %d\n", (emi_report[0]*me_clk/me_cnt)>>10, (emi_report[1]*me_clk/me_cnt)>>10 );
115 emi_report[0] = 0;
116 emi_report[1] = 0;
117 avgtimes = 0;
118 return;
119 }
120 */
121 // diag_printf("in mp4rec_emi_measure %d %d %d %d %d %d %d\n", times_mnt
122 // , reg_ind, emi_client_input[0][0], emi_client_input[1][0], emi_client_input[2][0], measure[0][0], measure[0][1]);
123 // report for every one second
124 if(times_prt >= (1000/EMI_TIMER_INTERVAL))
125 {
126 emi_report[0] = (emi_report[0]*avgtimes + (measure[0][0]/times_prt))/(avgtimes+1);
127 avgtimes++;
128 emi_report[1] = emi_report[1] > measure[1][0] ? emi_report[1] : measure[1][0];
129 for(i=0; i<8; i++)
130 {
131 diag_printf("[%x] avg: %d max: %d\n", (emi_client_input[reg_ind][(i/2)+1]>>((i%2)*8))&0x3F, ((measure[0][i]/times_prt)*me_clk/me_cnt)>>10, (measure[1][i]*me_clk/me_cnt)>>10 );
132 measure[0][i] = 0;
133 measure[1][i] = 0;
134 }
135 times_prt = 0;
136 }
137
138 // change monitor ID every 10 seconds
139 if (0 == (times_mnt % (10000/EMI_TIMER_INTERVAL))) {
140 reg_ind = (reg_ind+1)%6;
141 READ_REG(0xbf802084, U16, temp1);
142 diag_printf("reg_ind: %d PSRAM clk reg: %d (%x)\n", reg_ind, temp1, *(U16*)0xBF810740);
143 WRITE_REG(0xbf8020c0, U16, 0x100); //*(short *)(0xbf8020c0) = 0x100;
144 WRITE_REG(0xbf8020c0, U16, 0x00); //*(short *)(0xbf8020c0) = 0;
145 WRITE_REG(0xbf8020c4, U16, emi_client_input[reg_ind][0]);
146 WRITE_REG(0xbf8020c8, U16, emi_client_input[reg_ind][1]);
147 WRITE_REG(0xbf8020cc, U16, emi_client_input[reg_ind][2]);
148 WRITE_REG(0xbf8020d0, U16, emi_client_input[reg_ind][3]);
149 WRITE_REG(0xbf8020d4, U16, emi_client_input[reg_ind][4]);
150 WRITE_REG(0xbf8020d8, U16, 0x1111); //DRAM, 0000: PSRAM
151 WRITE_REG(0xbf8020dC, U16, 0x1111); //DRAM, 0000: PSRAM
152 //set clk (M+1) -> 52Mhz
153 WRITE_REG(0xbf8020e0, U16, ((me_cnt-1)<<16) || ((me_cnt-1)<<16));
154 WRITE_REG(0xbf8020e4, U16, ((me_cnt-1)<<16) || ((me_cnt-1)<<16));
155 WRITE_REG(0xbf8020e8, U16, ((me_cnt-1)<<16) || ((me_cnt-1)<<16));
156 WRITE_REG(0xbf8020ec, U16, ((me_cnt-1)<<16) || ((me_cnt-1)<<16));
157 //start to measure
158 WRITE_REG(0xbf8020b0, U16, 0xFFFF); //*(short *)(0xbf8020b0) = 0xFFFF;
159 times_mnt = 0;
160 // clear statics info
161 times_prt = 0;
162 for(i=0; i<8; i++)
163 {
164 measure[0][i] = 0;
165 measure[1][i] = 0;
166 }
167 }
168
169 for(i=0; i<8; i++)
170 {
171 READ_REG((0xbf802100+i*8), U16, temp1); //low bytes
172 READ_REG((0xbf802104+i*8), U16, temp2); //high bytes
173 bps = (U32)(temp2<<16)|(U32)temp1;
174 measure[0][i] += bps;
175 measure[1][i] = measure[1][i] > bps ? measure[1][i] : bps;
176 }
177
178 times_prt++;
179 times_mnt++;
180 return;
181 }
182
183 #endif
184