1 /*
2 * Copyright (c) 2006-2014, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
34 function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}
36 var newline = "\n";
38 function printRegisterValue(ds, name, addr)
39 {
40 value = debugSessionDAP.memory.readWord(0,addr,false);
41 value_string = d2h(value);
42 file.write(name + " = 0x" + value_string + newline);
43 return value; // return the register value for interrogation
44 }
46 // Build a filename that includes date/time
47 var today = new Date();
48 var year4digit = today.getFullYear();
49 var month2digit = ("0" + (today.getMonth()+1)).slice(-2);
50 var day2digit = ("0" + today.getDate()).slice(-2);
51 var hour2digit = ("0" + today.getHours()).slice(-2);
52 var minutes2digit = ("0" + today.getMinutes()).slice(-2);
53 var seconds2digit = ("0" + today.getSeconds()).slice(-2);
54 var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit;
55 var userHomeFolder = System.getProperty("user.home");
56 var filename = userHomeFolder + '/Desktop/' + 'am335x-boot-analysis' + filename_date + '.txt';
58 file = new java.io.FileWriter(filename);
60 debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");
61 debugSessionDAP.target.connect();
63 var reg_val;
65 // CONTROL: device_id
66 reg_val = printRegisterValue(debugSessionDAP, "CONTROL: device_id", 0x44E10600);
67 if ( (reg_val & 0x0FFFFFFF) == 0xb94402e ) {file.write(" * AM335x family" + newline);}
68 if ( (reg_val & 0xF0000000) == (0 << 28) ) {file.write(" * Silicon Revision 1.0" + newline);}
69 if ( (reg_val & 0xF0000000) == (1 << 28) ) {file.write(" * Silicon Revision 2.0" + newline);}
70 if ( (reg_val & 0xF0000000) == (2 << 28) ) {file.write(" * Silicon Revision 2.1" + newline);}
72 // ROM: PRM_RSTST
73 file.write(newline);
74 reg_val = printRegisterValue(debugSessionDAP, "PRM_DEVICE: PRM_RSTST", 0x44E00F08);
75 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : GLOBAL_COLD_RST" + newline);}
76 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : GLOBAL_WARM_RST" + newline);}
77 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : WDT1_RST" + newline);}
78 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : EXTERNAL_WARM_RST" + newline);}
80 // CONTROL: control_status
81 file.write(newline);
82 reg_val = printRegisterValue(debugSessionDAP, "CONTROL: control_status", 0x44E10040);
83 boot_sequence = (reg_val & 0x1F);
84 if ( (reg_val & 3<<22 ) == 0<<22 ) {file.write(" * SYSBOOT[15:14] = 00b (19.2 MHz)" + newline);}
85 if ( (reg_val & 3<<22 ) == 1<<22 ) {file.write(" * SYSBOOT[15:14] = 01b (24 MHz)" + newline);}
86 if ( (reg_val & 3<<22 ) == 2<<22 ) {file.write(" * SYSBOOT[15:14] = 10b (25 MHz)" + newline);}
87 if ( (reg_val & 3<<22 ) == 3<<22 ) {file.write(" * SYSBOOT[15:14] = 11b (26 MHz)" + newline);}
88 if ( (reg_val & 3<<20 ) != 0<<20 ) {file.write(" * SYSBOOT[13:12] have been set improperly!" + newline);}
89 if ( (reg_val & 3<<18 ) == 0<<18 ) {file.write(" * SYSBOOT[11:10] = 00b No GPMC CS0 addr/data muxing" + newline);}
90 if ( (reg_val & 3<<18 ) == 1<<18 ) {file.write(" * SYSBOOT[11:10] = 01b GPMC CS0 addr/addr/data muxing" + newline);}
91 if ( (reg_val & 3<<18 ) == 2<<18 ) {file.write(" * SYSBOOT[11:10] = 10b GPMC CS0 addr/data muxing" + newline);}
92 if ( (reg_val & 3<<18 ) == 3<<18 ) {file.write(" * SYSBOOT[11:10] = 11b ILLEGAL VALUE!" + newline);}
93 if ( (reg_val & 1<<17 ) == 0<<17 ) {file.write(" * SYSBOOT[9] = 0 GPMC CS0 Ignore WAIT input" + newline);}
94 if ( (reg_val & 1<<17 ) == 1<<17 ) {file.write(" * SYSBOOT[9] = 1 GPMC CS0 Use WAIT input" + newline);}
95 if ( (reg_val & 1<<16 ) == 0<<16 ) {file.write(" * SYSBOOT[8] = 0 GPMC CS0 8-bit data bus" + newline);}
96 if ( (reg_val & 1<<16 ) == 1<<16 ) {file.write(" * SYSBOOT[8] = 1 GPMC CS0 16-bit data bus" + newline);}
97 if ( (reg_val & 7<<8 ) == 3<<8 ) {file.write(" * Device Type = General Purpose (GP)" + newline);}
98 else {file.write(" * Device Type is NOT GP" + newline);}
99 if ( (reg_val & 0xFF ) == 0x01 ) {file.write(" * SYSBOOT[8] = 1 GPMC CS0 16-bit data bus" + newline);}
100 if ( (reg_val & 3<<6 ) == 0<<6 ) {file.write(" * SYSBOOT[7:6] = 00b MII (EMAC boot modes only)" + newline);}
101 if ( (reg_val & 3<<6 ) == 1<<6 ) {file.write(" * SYSBOOT[7:6] = 01b RMII (EMAC boot modes only)" + newline);}
102 if ( (reg_val & 3<<6 ) == 2<<6 ) {file.write(" * SYSBOOT[7:6] = 10b ILLEGAL VALUE!" + newline);}
103 if ( (reg_val & 3<<6 ) == 3<<6 ) {file.write(" * SYSBOOT[7:6] = 11b RGMII no internal delay (EMAC boot modes only)" + newline);}
104 if ( (reg_val & 1<<5 ) == 0<<5 ) {file.write(" * SYSBOOT[5] = 0 CLKOUT1 disabled" + newline);}
105 if ( (reg_val & 1<<5 ) == 1<<5 ) {file.write(" * SYSBOOT[5] = 1 CLKOUT1 enabled" + newline);}
106 if (boot_sequence == 0x00) {file.write(" * RESERVED BOOT SEQUENCE!" + newline);}
107 if (boot_sequence == 0x01) {file.write(" * Boot Sequence : UART0 -> XIP w/WAIT (MUX2) -> MMC0 -> SPI0" + newline);}
108 if (boot_sequence == 0x02) {file.write(" * Boot Sequence : UART0 -> SPI0 -> NAND -> NANDI2C" + newline);}
109 if (boot_sequence == 0x03) {file.write(" * Boot Sequence : UART0 -> SPI0 -> XIP (MUX2) -> MMC0" + newline);}
110 if (boot_sequence == 0x04) {file.write(" * Boot Sequence : UART0 -> XIP w/WAIT (MUX1) -> MMC0 -> NAND" + newline);}
111 if (boot_sequence == 0x05) {file.write(" * Boot Sequence : UART0 -> XIP (MUX1) -> SPI0 -> NANDI2C" + newline);}
112 if (boot_sequence == 0x06) {file.write(" * Boot Sequence : EMAC1 -> SPI0 -> NAND -> NANDI2C" + newline);}
113 if (boot_sequence == 0x07) {file.write(" * Boot Sequence : EMAC1 -> MMC0 -> XIP w/WAIT (MUX2) -> NAND" + newline);}
114 if (boot_sequence == 0x08) {file.write(" * Boot Sequence : EMAC1 -> MMC0 -> XIP (MUX2) -> NANDI2C" + newline);}
115 if (boot_sequence == 0x09) {file.write(" * Boot Sequence : EMAC1 -> XIP w/WAIT (MUX1) -> NAND -> MMC0" + newline);}
116 if (boot_sequence == 0x0A) {file.write(" * Boot Sequence : EMAC1 -> XIP (MUX1) -> SPI0 -> NANDI2C" + newline);}
117 if (boot_sequence == 0x0B) {file.write(" * Boot Sequence : USB0 -> NAND -> SPI0 -> MMC0" + newline);}
118 if (boot_sequence == 0x0C) {file.write(" * Boot Sequence : USB0 -> NAND -> XIP (MUX2) -> NANDI2C" + newline);}
119 if (boot_sequence == 0x0D) {file.write(" * Boot Sequence : USB0 -> NAND -> XIP (MUX1) -> SPI0" + newline);}
120 if (boot_sequence == 0x0E) {file.write(" * RESERVED BOOT SEQUENCE!" + newline);}
121 if (boot_sequence == 0x0F) {file.write(" * Boot Sequence : UART0 -> EMAC1 -> Reserved -> Reserved" + newline);}
122 if (boot_sequence == 0x10) {file.write(" * Boot Sequence : XIP (MUX1) -> UART0 -> EMAC1 -> MMC0 " + newline);}
123 if (boot_sequence == 0x11) {file.write(" * Boot Sequence : XIP w/WAIT (MUX1) -> UART0 -> EMAC1 -> MMC0" + newline);}
124 if (boot_sequence == 0x12) {file.write(" * Boot Sequence : NAND -> NANDI2C -> USB0 -> UART0" + newline);}
125 if (boot_sequence == 0x13) {file.write(" * Boot Sequence : NAND -> NANDI2C -> MMC0 -> UART0" + newline);}
126 if (boot_sequence == 0x14) {file.write(" * Boot Sequence : NAND -> NANDI2C -> SPI0 -> EMAC1" + newline);}
127 if (boot_sequence == 0x15) {file.write(" * Boot Sequence : NANDI2C -> MMC0 -> EMAC1 -> UART0" + newline);}
128 if (boot_sequence == 0x16) {file.write(" * Boot Sequence : SPI0 -> MMC0 -> UART0 -> EMAC1" + newline);}
129 if (boot_sequence == 0x17) {file.write(" * Boot Sequence : MMC0 -> SPI0 -> UART0 -> USB0" + newline);}
130 if (boot_sequence == 0x18) {file.write(" * Boot Sequence : SPI0 -> MMC0 -> USB0 -> UART0" + newline);}
131 if (boot_sequence == 0x19) {file.write(" * Boot Sequence : SPI0 -> MMC0 -> EMAC1 -> UART0" + newline);}
132 if (boot_sequence == 0x1A) {file.write(" * Boot Sequence : XIP (MUX2) -> UART0 -> SPI0 -> MMC0" + newline);}
133 if (boot_sequence == 0x1B) {file.write(" * Boot Sequence : XIP w/WAIT (MUX2) -> UART0 -> SPI0 -> MMC0" + newline);}
134 if (boot_sequence == 0x1C) {file.write(" * Boot Sequence : MMC1 -> MMC0 -> UART0 -> USB0" + newline);}
135 if (boot_sequence == 0x1D) {file.write(" * RESERVED BOOT SEQUENCE!" + newline);}
136 if (boot_sequence == 0x1E) {file.write(" * RESERVED BOOT SEQUENCE!" + newline);}
137 if (boot_sequence == 0x1F) {file.write(" * Boot Sequence : Fast External Boot -> EMAC1 -> UART0 -> Reserved" + newline);}
139 // ROM: Tracing Vector 1
140 file.write(newline);
141 reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE40);
142 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : [General] Passed the public reset vector" + newline);}
143 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : [General] Entered main function" + newline);}
144 if (reg_val & 1<<2 ) {file.write(" * Bit 2 : [General] Running after the cold reset" + newline);}
145 if (reg_val & 1<<3 ) {file.write(" * Bit 3 : [Boot] Main booting routine entered" + newline);}
146 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : [Memory Boot] Memory booting started" + newline);}
147 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : [Peripheral Boot] Peripheral booting started" + newline);}
148 if (reg_val & 1<<6 ) {file.write(" * Bit 6 : [Boot] Booting loop reached last device" + newline);}
149 if (reg_val & 1<<7 ) {file.write(" * Bit 7 : [Boot] GP header found" + newline);}
150 if (reg_val & 1<<8 ) {file.write(" * Bit 8 : [Boot] Reserved" + newline);}
151 if (reg_val & 1<<9 ) {file.write(" * Bit 9 : [Boot] Reserved" + newline);}
152 if (reg_val & 1<<10 ) {file.write(" * Bit 10 : [Peripheral Boot] Reserved" + newline);}
153 if (reg_val & 1<<11 ) {file.write(" * Bit 11 : [Peripheral Boot] Reserved" + newline);}
154 if (reg_val & 1<<12 ) {file.write(" * Bit 12 : [Peripheral Boot] Device initialized" + newline);}
155 if (reg_val & 1<<13 ) {file.write(" * Bit 13 : [Peripheral Boot] ASIC ID sent" + newline);}
156 if (reg_val & 1<<14 ) {file.write(" * Bit 14 : [Peripheral Boot] Image received" + newline);}
157 if (reg_val & 1<<15 ) {file.write(" * Bit 15 : [Peripheral Boot] Peripheral booting failed" + newline);}
158 if (reg_val & 1<<16 ) {file.write(" * Bit 16 : [Peripheral Boot] Booting Message not received (timeout)" + newline);}
159 if (reg_val & 1<<17 ) {file.write(" * Bit 17 : [Peripheral Boot] Image size not received (timeout)" + newline);}
160 if (reg_val & 1<<18 ) {file.write(" * Bit 18 : [Peripheral Boot] Image not received (timeout)" + newline);}
161 if (reg_val & 1<<19 ) {file.write(" * Bit 19 : Reserved" + newline);}
162 if (reg_val & 1<<20 ) {file.write(" * Bit 20 : [Configuration Header] CHSETTINGS found" + newline);}
163 if (reg_val & 1<<21 ) {file.write(" * Bit 21 : [Configuration Header] CHSETTINGS executed" + newline);}
164 if (reg_val & 1<<22 ) {file.write(" * Bit 22 : [Configuration Header] CHRAM executed" + newline);}
165 if (reg_val & 1<<23 ) {file.write(" * Bit 23 : [Configuration Header] CHFLASH executed" + newline);}
166 if (reg_val & 1<<24 ) {file.write(" * Bit 24 : [Configuration Header] CHMMCSD clocks executed" + newline);}
167 if (reg_val & 1<<25 ) {file.write(" * Bit 25 : [Configuration Header] CHMMCSD bus width executed" + newline);}
168 if (reg_val & 1<<26 ) {file.write(" * Bit 26 : Reserved" + newline);}
169 if (reg_val & 1<<27 ) {file.write(" * Bit 27 : Reserved" + newline);}
170 if (reg_val & 1<<28 ) {file.write(" * Bit 28 : Reserved" + newline);}
171 if (reg_val & 1<<29 ) {file.write(" * Bit 29 : Reserved" + newline);}
172 if (reg_val & 1<<30 ) {file.write(" * Bit 30 : Reserved" + newline);}
173 if (reg_val & 1<<31 ) {file.write(" * Bit 31 : Reserved" + newline);}
175 // ROM: Tracing Vector 2
176 file.write(newline);
177 reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 2", 0x4030CE44);
178 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : [Companion chip] Reserved" + newline);}
179 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : [Companion chip] Reserved" + newline);}
180 if (reg_val & 1<<2 ) {file.write(" * Bit 2 : [Companion chip] Reserved" + newline);}
181 if (reg_val & 1<<3 ) {file.write(" * Bit 3 : [Companion chip] Reserved" + newline);}
182 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : [USB] USB connect" + newline);}
183 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : [USB] USB configured state" + newline);}
184 if (reg_val & 1<<6 ) {file.write(" * Bit 6 : [USB] USB VBUS valid" + newline);}
185 if (reg_val & 1<<7 ) {file.write(" * Bit 7 : [USB] USB session valid" + newline);}
186 if (reg_val & 1<<8 ) {file.write(" * Bit 8 : Reserved" + newline);}
187 if (reg_val & 1<<9 ) {file.write(" * Bit 9 : Reserved" + newline);}
188 if (reg_val & 1<<10 ) {file.write(" * Bit 10 : Reserved" + newline);}
189 if (reg_val & 1<<11 ) {file.write(" * Bit 11 : Reserved" + newline);}
190 if (reg_val & 1<<12 ) {file.write(" * Bit 12 : [Memory Boot] Memory booting trial 0" + newline);}
191 if (reg_val & 1<<13 ) {file.write(" * Bit 13 : [Memory Boot] Memory booting trial 1" + newline);}
192 if (reg_val & 1<<14 ) {file.write(" * Bit 14 : [Memory Boot] Memory booting trial 2" + newline);}
193 if (reg_val & 1<<15 ) {file.write(" * Bit 15 : [Memory Boot] Memory booting trial 3" + newline);}
194 if (reg_val & 1<<16 ) {file.write(" * Bit 16 : [Memory Boot] Execute GP image" + newline);}
195 if (reg_val & 1<<17 ) {file.write(" * Bit 17 : [Peripheral Boot] Start authentication of peripheral boot image" + newline);}
196 if (reg_val & 1<<18 ) {file.write(" * Bit 18 : [Memory & Peripheral Boot] Jumping to Initial SW" + newline);}
197 if (reg_val & 1<<19 ) {file.write(" * Bit 19 : [Memory & Peripheral Boot] Reserved" + newline);}
198 if (reg_val & 1<<20 ) {file.write(" * Bit 20 : [Memory & Peripheral Boot] Start image authentication" + newline);}
199 if (reg_val & 1<<21 ) {file.write(" * Bit 21 : [Memory & Peripheral Boot] Image authentication failed" + newline);}
200 if (reg_val & 1<<22 ) {file.write(" * Bit 22 : [Memory & Peripheral Boot] Analyzing SpeedUp" + newline);}
201 if (reg_val & 1<<23 ) {file.write(" * Bit 23 : [Memory & Peripheral Boot] SpeedUp failed" + newline);}
202 if (reg_val & 1<<24 ) {file.write(" * Bit 24 : [Memory & Peripheral Boot] Reserved" + newline);}
203 if (reg_val & 1<<25 ) {file.write(" * Bit 25 : [Memory & Peripheral Boot] Reserved" + newline);}
204 if (reg_val & 1<<26 ) {file.write(" * Bit 26 : [Memory & Peripheral Boot] Reserved" + newline);}
205 if (reg_val & 1<<27 ) {file.write(" * Bit 27 : [Memory & Peripheral Boot] Reserved" + newline);}
206 if (reg_val & 1<<28 ) {file.write(" * Bit 28 : [Memory & Peripheral Boot] Authentication procedure failed" + newline);}
207 if (reg_val & 1<<29 ) {file.write(" * Bit 29 : Reserved" + newline);}
208 if (reg_val & 1<<30 ) {file.write(" * Bit 30 : Reserved" + newline);}
209 if (reg_val & 1<<31 ) {file.write(" * Bit 31 : Reserved" + newline);}
212 // ROM: Tracing Vector 3
213 file.write(newline);
214 reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 3", 0x4030CE48);
215 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : [Memory Boot] Memory booting device NULL" + newline);}
216 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : [Memory Boot] Memory booting device XIP" + newline);}
217 if (reg_val & 1<<2 ) {file.write(" * Bit 2 : [Memory Boot] Memory booting device XIPWAIT" + newline);}
218 if (reg_val & 1<<3 ) {file.write(" * Bit 3 : [Memory Boot] Memory booting device NAND" + newline);}
219 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : [Memory Boot] Reserved" + newline);}
220 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : [Memory Boot] Memory booting device MMCSD0" + newline);}
221 if (reg_val & 1<<6 ) {file.write(" * Bit 6 : Reserved" + newline);}
222 if (reg_val & 1<<7 ) {file.write(" * Bit 7 : [Memory Boot] Memory booting device MMCSD1" + newline);}
223 if (reg_val & 1<<8 ) {file.write(" * Bit 8 : Reserved" + newline);}
224 if (reg_val & 1<<9 ) {file.write(" * Bit 9 : Reserved" + newline);}
225 if (reg_val & 1<<10 ) {file.write(" * Bit 10 : [Memory Boot] Reserved" + newline);}
226 if (reg_val & 1<<11 ) {file.write(" * Bit 11 : Reserved" + newline);}
227 if (reg_val & 1<<12 ) {file.write(" * Bit 12 : Memory booting device SPI" + newline);}
228 if (reg_val & 1<<13 ) {file.write(" * Bit 13 : Reserved" + newline);}
229 if (reg_val & 1<<14 ) {file.write(" * Bit 14 : Reserved" + newline);}
230 if (reg_val & 1<<15 ) {file.write(" * Bit 15 : Reserved" + newline);}
231 if (reg_val & 1<<16 ) {file.write(" * Bit 16 : Peripheral booting device UART0" + newline);}
232 if (reg_val & 1<<17 ) {file.write(" * Bit 17 : Reserved" + newline);}
233 if (reg_val & 1<<18 ) {file.write(" * Bit 18 : [Peripheral Boot] Reserved" + newline);}
234 if (reg_val & 1<<19 ) {file.write(" * Bit 19 : Reserved" + newline);}
235 if (reg_val & 1<<20 ) {file.write(" * Bit 20 : [Peripheral Boot] Peripheral booting device USB" + newline);}
236 if (reg_val & 1<<21 ) {file.write(" * Bit 21 : [Peripheral Boot] Reserved" + newline);}
237 if (reg_val & 1<<22 ) {file.write(" * Bit 22 : [Peripheral Boot] Peripheral booting device GPGMAC0" + newline);}
238 if (reg_val & 1<<23 ) {file.write(" * Bit 23 : Reserved" + newline);}
239 if (reg_val & 1<<24 ) {file.write(" * Bit 24 : Peripheral booting device NULL" + newline);}
240 if (reg_val & 1<<25 ) {file.write(" * Bit 25 : Reserved" + newline);}
241 if (reg_val & 1<<26 ) {file.write(" * Bit 26 : Reserved" + newline);}
242 if (reg_val & 1<<27 ) {file.write(" * Bit 27 : Reserved" + newline);}
243 if (reg_val & 1<<28 ) {file.write(" * Bit 28 : Reserved" + newline);}
244 if (reg_val & 1<<29 ) {file.write(" * Bit 29 : Reserved" + newline);}
245 if (reg_val & 1<<30 ) {file.write(" * Bit 30 : Reserved" + newline);}
246 if (reg_val & 1<<31 ) {file.write(" * Bit 31 : Reserved" + newline);}
248 // ROM: Copy of PRM_RSTST
249 file.write(newline);
250 reg_val = printRegisterValue(debugSessionDAP, "ROM: Current copy of PRM_RSTST", 0x4030CE4C);
251 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : GLOBAL_COLD_RST" + newline);}
252 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : GLOBAL_WARM_RST" + newline);}
253 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : WDT1_RST" + newline);}
254 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : EXTERNAL_WARM_RST" + newline);}
256 // ROM: Cold Reset Tracing Vector 1
257 file.write(newline);
258 reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE50);
259 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : [General] Passed the public reset vector" + newline);}
260 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : [General] Entered main function" + newline);}
261 if (reg_val & 1<<2 ) {file.write(" * Bit 2 : [General] Running after the cold reset" + newline);}
262 if (reg_val & 1<<3 ) {file.write(" * Bit 3 : [Boot] Main booting routine entered" + newline);}
263 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : [Memory Boot] Memory booting started" + newline);}
264 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : [Peripheral Boot] Peripheral booting started" + newline);}
265 if (reg_val & 1<<6 ) {file.write(" * Bit 6 : [Boot] Booting loop reached last device" + newline);}
266 if (reg_val & 1<<7 ) {file.write(" * Bit 7 : [Boot] GP header found" + newline);}
267 if (reg_val & 1<<8 ) {file.write(" * Bit 8 : [Boot] Reserved" + newline);}
268 if (reg_val & 1<<9 ) {file.write(" * Bit 9 : [Boot] Reserved" + newline);}
269 if (reg_val & 1<<10 ) {file.write(" * Bit 10 : [Peripheral Boot] Reserved" + newline);}
270 if (reg_val & 1<<11 ) {file.write(" * Bit 11 : [Peripheral Boot] Reserved" + newline);}
271 if (reg_val & 1<<12 ) {file.write(" * Bit 12 : [Peripheral Boot] Device initialized" + newline);}
272 if (reg_val & 1<<13 ) {file.write(" * Bit 13 : [Peripheral Boot] ASIC ID sent" + newline);}
273 if (reg_val & 1<<14 ) {file.write(" * Bit 14 : [Peripheral Boot] Image received" + newline);}
274 if (reg_val & 1<<15 ) {file.write(" * Bit 15 : [Peripheral Boot] Peripheral booting failed" + newline);}
275 if (reg_val & 1<<16 ) {file.write(" * Bit 16 : [Peripheral Boot] Booting Message not received (timeout)" + newline);}
276 if (reg_val & 1<<17 ) {file.write(" * Bit 17 : [Peripheral Boot] Image size not received (timeout)" + newline);}
277 if (reg_val & 1<<18 ) {file.write(" * Bit 18 : [Peripheral Boot] Image not received (timeout)" + newline);}
278 if (reg_val & 1<<19 ) {file.write(" * Bit 19 : Reserved" + newline);}
279 if (reg_val & 1<<20 ) {file.write(" * Bit 20 : [Configuration Header] CHSETTINGS found" + newline);}
280 if (reg_val & 1<<21 ) {file.write(" * Bit 21 : [Configuration Header] CHSETTINGS executed" + newline);}
281 if (reg_val & 1<<22 ) {file.write(" * Bit 22 : [Configuration Header] CHRAM executed" + newline);}
282 if (reg_val & 1<<23 ) {file.write(" * Bit 23 : [Configuration Header] CHFLASH executed" + newline);}
283 if (reg_val & 1<<24 ) {file.write(" * Bit 24 : [Configuration Header] CHMMCSD clocks executed" + newline);}
284 if (reg_val & 1<<25 ) {file.write(" * Bit 25 : [Configuration Header] CHMMCSD bus width executed" + newline);}
285 if (reg_val & 1<<26 ) {file.write(" * Bit 26 : Reserved" + newline);}
286 if (reg_val & 1<<27 ) {file.write(" * Bit 27 : Reserved" + newline);}
287 if (reg_val & 1<<28 ) {file.write(" * Bit 28 : Reserved" + newline);}
288 if (reg_val & 1<<29 ) {file.write(" * Bit 29 : Reserved" + newline);}
289 if (reg_val & 1<<30 ) {file.write(" * Bit 30 : Reserved" + newline);}
290 if (reg_val & 1<<31 ) {file.write(" * Bit 31 : Reserved" + newline);}
292 // ROM: Cold Reset Tracing Vector 2
293 file.write(newline);
294 reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 2", 0x4030CE54);
295 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : [Companion chip] Reserved" + newline);}
296 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : [Companion chip] Reserved" + newline);}
297 if (reg_val & 1<<2 ) {file.write(" * Bit 2 : [Companion chip] Reserved" + newline);}
298 if (reg_val & 1<<3 ) {file.write(" * Bit 3 : [Companion chip] Reserved" + newline);}
299 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : [USB] USB connect" + newline);}
300 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : [USB] USB configured state" + newline);}
301 if (reg_val & 1<<6 ) {file.write(" * Bit 6 : [USB] USB VBUS valid" + newline);}
302 if (reg_val & 1<<7 ) {file.write(" * Bit 7 : [USB] USB session valid" + newline);}
303 if (reg_val & 1<<8 ) {file.write(" * Bit 8 : Reserved" + newline);}
304 if (reg_val & 1<<9 ) {file.write(" * Bit 9 : Reserved" + newline);}
305 if (reg_val & 1<<10 ) {file.write(" * Bit 10 : Reserved" + newline);}
306 if (reg_val & 1<<11 ) {file.write(" * Bit 11 : Reserved" + newline);}
307 if (reg_val & 1<<12 ) {file.write(" * Bit 12 : [Memory Boot] Memory booting trial 0" + newline);}
308 if (reg_val & 1<<13 ) {file.write(" * Bit 13 : [Memory Boot] Memory booting trial 1" + newline);}
309 if (reg_val & 1<<14 ) {file.write(" * Bit 14 : [Memory Boot] Memory booting trial 2" + newline);}
310 if (reg_val & 1<<15 ) {file.write(" * Bit 15 : [Memory Boot] Memory booting trial 3" + newline);}
311 if (reg_val & 1<<16 ) {file.write(" * Bit 16 : [Memory Boot] Execute GP image" + newline);}
312 if (reg_val & 1<<17 ) {file.write(" * Bit 17 : [Peripheral Boot] Start authentication of peripheral boot image" + newline);}
313 if (reg_val & 1<<18 ) {file.write(" * Bit 18 : [Memory & Peripheral Boot] Jumping to Initial SW" + newline);}
314 if (reg_val & 1<<19 ) {file.write(" * Bit 19 : [Memory & Peripheral Boot] Reserved" + newline);}
315 if (reg_val & 1<<20 ) {file.write(" * Bit 20 : [Memory & Peripheral Boot] Start image authentication" + newline);}
316 if (reg_val & 1<<21 ) {file.write(" * Bit 21 : [Memory & Peripheral Boot] Image authentication failed" + newline);}
317 if (reg_val & 1<<22 ) {file.write(" * Bit 22 : [Memory & Peripheral Boot] Analyzing SpeedUp" + newline);}
318 if (reg_val & 1<<23 ) {file.write(" * Bit 23 : [Memory & Peripheral Boot] SpeedUp failed" + newline);}
319 if (reg_val & 1<<24 ) {file.write(" * Bit 24 : [Memory & Peripheral Boot] Reserved" + newline);}
320 if (reg_val & 1<<25 ) {file.write(" * Bit 25 : [Memory & Peripheral Boot] Reserved" + newline);}
321 if (reg_val & 1<<26 ) {file.write(" * Bit 26 : [Memory & Peripheral Boot] Reserved" + newline);}
322 if (reg_val & 1<<27 ) {file.write(" * Bit 27 : [Memory & Peripheral Boot] Reserved" + newline);}
323 if (reg_val & 1<<28 ) {file.write(" * Bit 28 : [Memory & Peripheral Boot] Authentication procedure failed" + newline);}
324 if (reg_val & 1<<29 ) {file.write(" * Bit 29 : Reserved" + newline);}
325 if (reg_val & 1<<30 ) {file.write(" * Bit 30 : Reserved" + newline);}
326 if (reg_val & 1<<31 ) {file.write(" * Bit 31 : Reserved" + newline);}
328 // ROM: Cold Reset Tracing Vector 3
329 file.write(newline);
330 reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 3", 0x4030CE58);
331 if (reg_val & 1<<0 ) {file.write(" * Bit 0 : [Memory Boot] Memory booting device NULL" + newline);}
332 if (reg_val & 1<<1 ) {file.write(" * Bit 1 : [Memory Boot] Memory booting device XIP" + newline);}
333 if (reg_val & 1<<2 ) {file.write(" * Bit 2 : [Memory Boot] Memory booting device XIPWAIT" + newline);}
334 if (reg_val & 1<<3 ) {file.write(" * Bit 3 : [Memory Boot] Memory booting device NAND" + newline);}
335 if (reg_val & 1<<4 ) {file.write(" * Bit 4 : [Memory Boot] Reserved" + newline);}
336 if (reg_val & 1<<5 ) {file.write(" * Bit 5 : [Memory Boot] Memory booting device MMCSD0" + newline);}
337 if (reg_val & 1<<6 ) {file.write(" * Bit 6 : Reserved" + newline);}
338 if (reg_val & 1<<7 ) {file.write(" * Bit 7 : [Memory Boot] Memory booting device MMCSD1" + newline);}
339 if (reg_val & 1<<8 ) {file.write(" * Bit 8 : Reserved" + newline);}
340 if (reg_val & 1<<9 ) {file.write(" * Bit 9 : Reserved" + newline);}
341 if (reg_val & 1<<10 ) {file.write(" * Bit 10 : [Memory Boot] Reserved" + newline);}
342 if (reg_val & 1<<11 ) {file.write(" * Bit 11 : Reserved" + newline);}
343 if (reg_val & 1<<12 ) {file.write(" * Bit 12 : Memory booting device SPI" + newline);}
344 if (reg_val & 1<<13 ) {file.write(" * Bit 13 : Reserved" + newline);}
345 if (reg_val & 1<<14 ) {file.write(" * Bit 14 : Reserved" + newline);}
346 if (reg_val & 1<<15 ) {file.write(" * Bit 15 : Reserved" + newline);}
347 if (reg_val & 1<<16 ) {file.write(" * Bit 16 : Peripheral booting device UART0" + newline);}
348 if (reg_val & 1<<17 ) {file.write(" * Bit 17 : Reserved" + newline);}
349 if (reg_val & 1<<18 ) {file.write(" * Bit 18 : [Peripheral Boot] Reserved" + newline);}
350 if (reg_val & 1<<19 ) {file.write(" * Bit 19 : Reserved" + newline);}
351 if (reg_val & 1<<20 ) {file.write(" * Bit 20 : [Peripheral Boot] Peripheral booting device USB" + newline);}
352 if (reg_val & 1<<21 ) {file.write(" * Bit 21 : [Peripheral Boot] Reserved" + newline);}
353 if (reg_val & 1<<22 ) {file.write(" * Bit 22 : [Peripheral Boot] Peripheral booting device GPGMAC0" + newline);}
354 if (reg_val & 1<<23 ) {file.write(" * Bit 23 : Reserved" + newline);}
355 if (reg_val & 1<<24 ) {file.write(" * Bit 24 : Peripheral booting device NULL" + newline);}
356 if (reg_val & 1<<25 ) {file.write(" * Bit 25 : Reserved" + newline);}
357 if (reg_val & 1<<26 ) {file.write(" * Bit 26 : Reserved" + newline);}
358 if (reg_val & 1<<27 ) {file.write(" * Bit 27 : Reserved" + newline);}
359 if (reg_val & 1<<28 ) {file.write(" * Bit 28 : Reserved" + newline);}
360 if (reg_val & 1<<29 ) {file.write(" * Bit 29 : Reserved" + newline);}
361 if (reg_val & 1<<30 ) {file.write(" * Bit 30 : Reserved" + newline);}
362 if (reg_val & 1<<31 ) {file.write(" * Bit 31 : Reserved" + newline);}
365 debugSessionDAP.target.disconnect();
368 debugSessionA8 = ds.openSession("*","CortxA8");
369 debugSessionA8.target.connect();
371 // Get value of ARM Program Counter
372 value = debugSessionA8.memory.readRegister("PC");
373 value_string = d2h(value);
374 file.write(newline + "Cortex A8 Program Counter = 0x" + value_string + newline);
376 file.write(newline);
377 file.write("ROM Exception Vectors" + newline);
378 file.write(" * 0x4030CE04 Undefined" + newline);
379 file.write(" * 0x4030CE08 SWI" + newline);
380 file.write(" * 0x4030CE0C Pre-fetch abort" + newline);
381 file.write(" * 0x4030CE10 Data abort" + newline);
382 file.write(" * 0x4030CE14 Unused" + newline);
383 file.write(" * 0x4030CE18 IRQ" + newline);
384 file.write(" * 0x4030CE1C FIQ" + newline);
386 file.write(newline);
387 file.write("ROM Dead Loops" + newline);
388 file.write(" * 0x00020080 Undefined exception default handler" + newline);
389 file.write(" * 0x00020084 SWI exception default handler" + newline);
390 file.write(" * 0x00020088 Pre-fetch abort exception default handler" + newline);
391 file.write(" * 0x0002008C Data exception default handler" + newline);
392 file.write(" * 0x00020090 Unused exception default handler" + newline);
393 file.write(" * 0x00020094 IRQ exception default handler" + newline);
394 file.write(" * 0x00020098 FIQ exception default handler" + newline);
395 file.write(" * 0x0002009C Validation test PASS" + newline);
396 file.write(" * 0x000200A0 Validation test FAIL" + newline);
397 file.write(" * 0x000200A4 Reserved" + newline);
398 file.write(" * 0x000200A8 Image not executed or returned" + newline);
399 file.write(" * 0x000200AC Reserved" + newline);
400 file.write(" * 0x000200B0 Reserved" + newline);
401 file.write(" * 0x000200B4 Reserved" + newline);
402 file.write(" * 0x000200B8 Reserved" + newline);
403 file.write(" * 0x000200BC Reserved" + newline);
405 debugSessionA8.target.disconnect();
406 file.close();