Explicitly handle line endings for this repo
[sitara-dss-files/am335x-dss-files.git] / am335x-ds0-analysis.dss
1 /*\r
2  * Copyright (c) 2006-2014, Texas Instruments Incorporated\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  *\r
9  * *  Redistributions of source code must retain the above copyright\r
10  *    notice, this list of conditions and the following disclaimer.\r
11  *\r
12  * *  Redistributions in binary form must reproduce the above copyright\r
13  *    notice, this list of conditions and the following disclaimer in the\r
14  *    documentation and/or other materials provided with the distribution.\r
15  *\r
16  * *  Neither the name of Texas Instruments Incorporated nor the names of\r
17  *    its contributors may be used to endorse or promote products derived\r
18  *    from this software without specific prior written permission.\r
19  *\r
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31  *\r
32  */\r
33 \r
34 function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}\r
35 \r
36 function printRegisterValue(ds, name, addr)\r
37 {\r
38         value = ds.memory.readWord(0,addr,false);\r
39         value_string = d2h(value);\r
40         file.write(name + " = 0x" + value_string + "\n");\r
41         return value; // return the register value for interrogation\r
42 }\r
43 \r
44 function getRegisterValue(ds, addr)\r
45 {\r
46         return ds.memory.readWord(0,addr,false);\r
47 }\r
48 \r
49 // Build a filename that includes date/time\r
50 var today = new Date();\r
51 var year4digit = today.getFullYear();\r
52 var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
53 var day2digit = ("0" + today.getDate()).slice(-2);\r
54 var hour2digit = ("0" + today.getHours()).slice(-2);\r
55 var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
56 var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
57 var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
58 var userHomeFolder = System.getProperty("user.home");\r
59 var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-analysis' + filename_date + '.txt';\r
60 \r
61 debugSessionDAP = ds.openSession("*","CS_DAP_M3");\r
62 \r
63 try {\r
64         debugSessionDAP.target.connect();\r
65 } catch (ex) {\r
66         print("\n ERROR: Could not connect to DAP_M3.\n");\r
67 }\r
68 \r
69 file = new java.io.FileWriter(filename);\r
70 \r
71 \r
72 var reg_val;\r
73 \r
74 // PRM_MPU: PM_MPU_PWRSTST \r
75 reg_val = printRegisterValue(debugSessionDAP, "PRM_MPU: PM_MPU_PWRSTST", 0x44E00E04);\r
76 if ( reg_val == 0 ) {\r
77         file.write("  * Cortex A8 is OFF.\n");\r
78 } else {\r
79         file.write("  * ERROR: Cortex A8 is still on!\n");\r
80 }\r
81 \r
82 // PRM_GFX: PM_GFX_PWRSTST\r
83 reg_val = printRegisterValue(debugSessionDAP, "PRM_GFX: PM_GFX_PWRSTST", 0x44E01110);\r
84 if ( reg_val == 0 ) {\r
85         file.write("  * SGX530 is OFF.\n");\r
86 } else {\r
87         file.write("  * ERROR: SGX530 is still on!\n");\r
88 }\r
89 \r
90 // PRM_PER: PM_PER_PWRSTST\r
91 reg_val = printRegisterValue(debugSessionDAP, "PRM_PER: PM_PER_PWRSTST", 0x44E00C08);\r
92 if ( reg_val == 0x00200001 ) {\r
93         file.write(" * PER domain in retention (OCMC RAM retained).\n");\r
94 } else if ( reg_val&3 == 3) {\r
95         file.write("  * ERROR: PER domain still on!\n");\r
96         \r
97         // CM_PER: CM_PER_L4LS_CLKSTCTRL\r
98         reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L4LS_CLKSTCTRL", 0x44E00000);\r
99         if ( reg_val & 1<<28 ) {file.write("  * ERROR: TIMER6 active!\n");}\r
100         if ( reg_val & 1<<27 ) {file.write("  * ERROR: TIMER5 active!\n");}\r
101         if ( reg_val & 1<<25 ) {file.write("  * ERROR: SPI active!\n");}\r
102         if ( reg_val & 1<<24 ) {file.write("  * ERROR: I2C active!\n");}\r
103         if ( reg_val & 1<<21 ) {file.write("  * ERROR: GPIO3 active!\n");}\r
104         if ( reg_val & 1<<20 ) {file.write("  * ERROR: GPIO2 active!\n");}\r
105         if ( reg_val & 1<<19 ) {file.write("  * ERROR: GPIO1 active!\n");}\r
106         if ( reg_val & 1<<17 ) {file.write("  * ERROR: LCDC active!\n");}\r
107         if ( reg_val & 1<<16 ) {file.write("  * ERROR: TIMER4 active!\n");}\r
108         if ( reg_val & 1<<15 ) {file.write("  * ERROR: TIMER3 active!\n");}\r
109         if ( reg_val & 1<<14 ) {file.write("  * ERROR: TIMER2 active!\n");}\r
110         if ( reg_val & 1<<13 ) {file.write("  * ERROR: TIMER7 active!\n");}\r
111         if ( reg_val & 1<<11 ) {file.write("  * ERROR: CAN active!\n");}\r
112         if ( reg_val & 1<<10 ) {file.write("  * ERROR: UART active!\n");}\r
113         if ( reg_val & 1<<8 ) {file.write("  * ERROR: L4LS active!\n");}\r
114         \r
115         // CM_PER: CM_PER_L3_CLKSTCTRL\r
116         reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L3_CLKSTCTRL", 0x44E0000C);               \r
117         if ( reg_val & 1<<7 ) {file.write("  * ERROR: MCASP active!\n");}\r
118         if ( reg_val & 1<<6 ) {file.write("  * ERROR: CPTS_RFT active!\n");}    \r
119         if ( reg_val & 1<<4 ) {file.write("  * ERROR: L3 active!\n");}\r
120         if ( reg_val & 1<<3 ) {file.write("  * ERROR: MMC active!\n");}\r
121         if ( reg_val & 1<<2 ) {file.write("  * ERROR: EMIF active!\n");}\r
122 } else {\r
123         file.write("  * ERROR:  Manually inspect PER domain.  Unexpected combo.\n");\r
124 }\r
125 \r
126 file.close();\r
127 print("Created file " + filename);\r
128 \r
129 /***************************************************************************************\r
130 Create CSV File that dumps out padconf data for use\r
131 in conjunction with the spreadsheet from:\r
132 http://processors.wiki.ti.com/index.php/Optimizing_AM335x_IO_Power_in_DeepSleep0\r
133 ****************************************************************************************/\r
134 \r
135 \r
136 \r
137 var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-padconf' + filename_date + '.csv';\r
138 file = new java.io.FileWriter(filename);\r
139 \r
140 var ds0_padconf_regs = [\r
141         0x44E10800,\r
142         0x44E10804,\r
143         0x44E10808,\r
144         0x44E1080c,\r
145         0x44E10810,\r
146         0x44E10814,\r
147         0x44E10818,\r
148         0x44E1081c,\r
149         0x44E10820,\r
150         0x44E10824,\r
151         0x44E10828,\r
152         0x44E1082c,\r
153         0x44E10830,\r
154         0x44E10834,\r
155         0x44E10838,\r
156         0x44E1083c,\r
157         0x44E10840,\r
158         0x44E10844,\r
159         0x44E10848,\r
160         0x44E1084c,\r
161         0x44E10850,\r
162         0x44E10854,\r
163         0x44E10858,\r
164         0x44E1085c,\r
165         0x44E10860,\r
166         0x44E10864,\r
167         0x44E10868,\r
168         0x44E1086c,\r
169         0x44E10870,\r
170         0x44E10874,\r
171         0x44E10878,\r
172         0x44E1087c,\r
173         0x44E10880,\r
174         0x44E10884,\r
175         0x44E10888,\r
176         0x44E1088c,\r
177         0x44E10890,\r
178         0x44E10894,\r
179         0x44E10898,\r
180         0x44E1089c,\r
181         0x44E108a0,\r
182         0x44E108a4,\r
183         0x44E108a8,\r
184         0x44E108ac,\r
185         0x44E108b0,\r
186         0x44E108b4,\r
187         0x44E108b8,\r
188         0x44E108bc,\r
189         0x44E108c0,\r
190         0x44E108c4,\r
191         0x44E108c8,\r
192         0x44E108cc,\r
193         0x44E108d0,\r
194         0x44E108d4,\r
195         0x44E108d8,\r
196         0x44E108dc,\r
197         0x44E108e0,\r
198         0x44E108e4,\r
199         0x44E108e8,\r
200         0x44E108ec,\r
201         0x44E108f0,\r
202         0x44E108f4,\r
203         0x44E108f8,\r
204         0x44E108fc,\r
205         0x44E10900,\r
206         0x44E10904,\r
207         0x44E10908,\r
208         0x44E1090c,\r
209         0x44E10910,\r
210         0x44E10914,\r
211         0x44E10918,\r
212         0x44E1091c,\r
213         0x44E10920,\r
214         0x44E10924,\r
215         0x44E10928,\r
216         0x44E1092c,\r
217         0x44E10930,\r
218         0x44E10934,\r
219         0x44E10938,\r
220         0x44E1093c,\r
221         0x44E10940,\r
222         0x44E10944,\r
223         0x44E10948,\r
224         0x44E1094c,\r
225         0x44E10950,\r
226         0x44E10954,\r
227         0x44E10958,\r
228         0x44E1095c,\r
229         0x44E10960,\r
230         0x44E10964,\r
231         0x44E10968,\r
232         0x44E1096c,\r
233         0x44E10970,\r
234         0x44E10974,\r
235         0x44E10978,\r
236         0x44E1097c,\r
237         0x44E10980,\r
238         0x44E10984,\r
239         0x44E10988,\r
240         0x44E1098c,\r
241         0x44E10990,\r
242         0x44E10994,\r
243         0x44E10998,\r
244         0x44E1099c,\r
245         0x44E109a0,\r
246         0x44E109a4,\r
247         0x44E109a8,\r
248         0x44E109ac,\r
249         0x44E109b0,\r
250         0x44E109b4,\r
251         0x44E109b8,\r
252         0x44E109bc,\r
253         0x44E109c0,\r
254         0x44E109c4,\r
255         0x44E109c8,\r
256         0x44E109d0,\r
257         0x44E109d4,\r
258         0x44E109d8,\r
259         0x44E109dc,\r
260         0x44E109e0,\r
261         0x44E109e4,\r
262         0x44E109e8,\r
263         0x44E109ec,\r
264         0x44E109f0,\r
265         0x44E109f8,\r
266         0x44E10a00,\r
267         0x44E109f4,\r
268         0x44E10a04,\r
269         0x44E10a08,\r
270         0x44E10a0c,\r
271         0x44E10a10,\r
272         0x44E10a14,\r
273         0x44E10a18,\r
274         0x44E10a1c,\r
275         0x44E10a20,\r
276         0x44E10a24,\r
277         0x44E10a28,\r
278         0x44E10a2c,\r
279         0x44E10a30,\r
280         0x44E10a34];\r
281 \r
282 // Column Headers for CSV\r
283 file.write("Address,dts offset,Raw Reg Val,Mux Mode,Pull,RxActive,Slew\r\n");\r
284 \r
285 // Fill out one line per loop iteration\r
286 for (i=0; i<ds0_padconf_regs.length; i++)\r
287 {\r
288         reg_val = getRegisterValue(debugSessionDAP, ds0_padconf_regs[i]);\r
289         file.write("0x" + d2h(ds0_padconf_regs[i])); // Address\r
290         file.write(",0x" + d2h(ds0_padconf_regs[i]-0x44e10800)); // dts offset\r
291         file.write(",0x" + d2h(reg_val)); // Raw Reg Val\r
292         file.write("," + (reg_val & 7) ); // Mux Mode\r
293 \r
294         // Pullup/Pulldown Decoding\r
295         if ( (reg_val & (1<<3)) == 0 )\r
296         {\r
297                 if( (reg_val & (1<<4)) == 0 )\r
298                         file.write(",pulldown");\r
299                 else\r
300                         file.write(",pullup");\r
301         }\r
302         else\r
303         {\r
304                 file.write(",no pull");\r
305         }\r
306 \r
307         // RxActive\r
308         if( (reg_val & (1<<5)) )\r
309                 file.write(",enabled");\r
310         else\r
311                 file.write(",disabled");\r
312 \r
313         // Slew \r
314         if( (reg_val & (1<<6)) )\r
315                 file.write(",slow");\r
316         else\r
317                 file.write(",fast");\r
318 \r
319         file.write("\r\n");  // CSV specifies CR/LF for line endings\r
320 \r
321 }\r
322 \r
323 file.close();\r
324 print("Created file " + filename);\r
325 \r
326 debugSessionDAP.target.disconnect();\r
327 \r