am335x-bbb-pru-startup.js initial commit
[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 = debugSessionDAP.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 // Build a filename that includes date/time\r
45 var today = new Date();\r
46 var year4digit = today.getFullYear();\r
47 var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
48 var day2digit = ("0" + today.getDate()).slice(-2);\r
49 var hour2digit = ("0" + today.getHours()).slice(-2);\r
50 var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
51 var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
52 var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
53 var userHomeFolder = System.getProperty("user.home");\r
54 var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-analysis' + filename_date + '.txt';\r
55 \r
56 debugSessionDAP = ds.openSession("*","CS_DAP_M3");\r
57 \r
58 try {\r
59         debugSessionDAP.target.connect();\r
60 } catch (ex) {\r
61         print("\n ERROR: Could not connect to DAP_M3.\n");\r
62 }\r
63 \r
64 file = new java.io.FileWriter(filename);\r
65 \r
66 \r
67 var reg_val;\r
68 \r
69 // PRM_MPU: PM_MPU_PWRSTST \r
70 reg_val = printRegisterValue(debugSessionDAP, "PRM_MPU: PM_MPU_PWRSTST", 0x44E00E04);\r
71 if ( reg_val == 0 ) {\r
72         file.write("  * Cortex A8 is OFF.\n");\r
73 } else {\r
74         file.write("  * ERROR: Cortex A8 is still on!\n");\r
75 }\r
76 \r
77 // PRM_GFX: PM_GFX_PWRSTST\r
78 reg_val = printRegisterValue(debugSessionDAP, "PRM_GFX: PM_GFX_PWRSTST", 0x44E01110);\r
79 if ( reg_val == 0 ) {\r
80         file.write("  * SGX530 is OFF.\n");\r
81 } else {\r
82         file.write("  * ERROR: SGX530 is still on!\n");\r
83 }\r
84 \r
85 // PRM_PER: PM_PER_PWRSTST\r
86 reg_val = printRegisterValue(debugSessionDAP, "PRM_PER: PM_PER_PWRSTST", 0x44E00C08);\r
87 if ( reg_val == 0x00200001 ) {\r
88         file.write(" * PER domain in retention (OCMC RAM retained).\n");\r
89 } else if ( reg_val&3 == 3) {\r
90         file.write("  * ERROR: PER domain still on!\n");\r
91         \r
92         // CM_PER: CM_PER_L4LS_CLKSTCTRL\r
93         reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L4LS_CLKSTCTRL", 0x44E00000);\r
94         if ( reg_val & 1<<28 ) {file.write("  * ERROR: TIMER6 active!\n");}\r
95         if ( reg_val & 1<<27 ) {file.write("  * ERROR: TIMER5 active!\n");}\r
96         if ( reg_val & 1<<25 ) {file.write("  * ERROR: SPI active!\n");}\r
97         if ( reg_val & 1<<24 ) {file.write("  * ERROR: I2C active!\n");}\r
98         if ( reg_val & 1<<21 ) {file.write("  * ERROR: GPIO3 active!\n");}\r
99         if ( reg_val & 1<<20 ) {file.write("  * ERROR: GPIO2 active!\n");}\r
100         if ( reg_val & 1<<19 ) {file.write("  * ERROR: GPIO1 active!\n");}\r
101         if ( reg_val & 1<<17 ) {file.write("  * ERROR: LCDC active!\n");}\r
102         if ( reg_val & 1<<16 ) {file.write("  * ERROR: TIMER4 active!\n");}\r
103         if ( reg_val & 1<<15 ) {file.write("  * ERROR: TIMER3 active!\n");}\r
104         if ( reg_val & 1<<14 ) {file.write("  * ERROR: TIMER2 active!\n");}\r
105         if ( reg_val & 1<<13 ) {file.write("  * ERROR: TIMER7 active!\n");}\r
106         if ( reg_val & 1<<11 ) {file.write("  * ERROR: CAN active!\n");}\r
107         if ( reg_val & 1<<10 ) {file.write("  * ERROR: UART active!\n");}\r
108         if ( reg_val & 1<<8 ) {file.write("  * ERROR: L4LS active!\n");}\r
109         \r
110         // CM_PER: CM_PER_L3_CLKSTCTRL\r
111         reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L3_CLKSTCTRL", 0x44E0000C);               \r
112         if ( reg_val & 1<<7 ) {file.write("  * ERROR: MCASP active!\n");}\r
113         if ( reg_val & 1<<6 ) {file.write("  * ERROR: CPTS_RFT active!\n");}    \r
114         if ( reg_val & 1<<4 ) {file.write("  * ERROR: L3 active!\n");}\r
115         if ( reg_val & 1<<3 ) {file.write("  * ERROR: MMC active!\n");}\r
116         if ( reg_val & 1<<2 ) {file.write("  * ERROR: EMIF active!\n");}\r
117 } else {\r
118         file.write("  * ERROR:  Manually inspect PER domain.  Unexpected combo.\n");\r
119 }\r
120 \r
121 file.close();\r
122 print("Created file " + filename);\r
123 debugSessionDAP.target.disconnect();\r
124 \r