xref: /utopia/UTPA2-700.0.x/modules/mfe/api/mfe/emi_measure.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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