1 // factory_defaults dss script
2 // Import the DSS packages into our namespace to save on typing
3 importPackage(Packages.com.ti.debug.engine.scripting);
4 importPackage(Packages.com.ti.ccstudio.scripting.environment);
5 importPackage(Packages.java.lang);
6 importPackage(Packages.java.io);
7 importPackage(Packages.java.util);
9 // Create our scripting environment object - which is the main entry point into
10 // any script and the factory for creating other Scriptable ervers and Sessions
11 var script = ScriptingEnvironment.instance()
13 var debugScriptEnv = ScriptingEnvironment.instance();
14 // program_evm environment.
15 testEnv = {};
17 // Get the Debug Server and start a Debug Session
18 var debugServer = script.getServer("DebugServer.1");
20 //***************Functions define***************************
23 function isFile(path)
24 {
25 try
26 {
27 file = new java.io.FileReader(path);
28 }
29 catch (ex)
30 {
31 return false;
32 }
34 return true;
36 }
39 //****************Get New Time Stamp***********************
40 function localTime()
41 {
42 // get time stamp
43 var currentTime = new Date();
44 var year = currentTime.getFullYear();
45 var month = currentTime.getMonth() + 1;
46 month = month + "";
47 if (month.length == 1)
48 {
49 month = "0" + month;
50 }
51 var day = currentTime.getDate();
52 var hour = currentTime.getHours();
53 var minute = currentTime.getMinutes();
54 minute = minute + "";
55 if (minute.length == 1)
56 {
57 minute = "0" + minute;
58 }
59 var second = currentTime.getSeconds();
60 second = second + "";
61 if (second.length == 1)
62 {
63 second = "0" + second;
64 }
66 return (year+"_"+month+"_"+day+"_"+hour+minute+second);
67 }
69 /**
70 * Get error code from the given exception.
71 * @param {exception} The exception from which to get the error code.
72 */
73 function getErrorCode(exception)
74 {
75 var ex2 = exception.javaException;
76 if (ex2 instanceof Packages.com.ti.ccstudio.scripting.environment.ScriptingException) {
77 return ex2.getErrorID();
78 }
79 return 0;
80 }
81 function fileCopy(source,destination)
82 {
83 inputFile = new File(source);
84 outputFile = new File(destination);
85 infile = new java.io.FileReader(inputFile);
86 out = new java.io.FileWriter(outputFile);
87 var c;
89 while ((c = infile.read()) != -1)
90 out.write(c);
92 infile.close();
93 out.close();
94 }
96 function pausecomp(millis)
97 {
98 var date = new Date();
99 var curDate = null;
100 do { curDate = new Date(); }
101 while(curDate-date < millis)
102 {
103 //print("Waiting "+millis+"ms...\r\n")
104 }
105 }
107 //*******************************************
108 // Declarations and Inititalizations
109 var nandwriter_dir = java.lang.System.getProperty("user.dir");
110 var dss_script_dir = java.lang.System.getenv("DSS_SCRIPT_DIR");
111 var host_os = "";
112 var script_logs = nandwriter_dir+"/logs/";
113 var script_configs = nandwriter_dir+"/configs/";
114 var script_binaries = nandwriter_dir+"/binaries/";
115 var targetConfig = "";
116 var writeAll = false;
117 var big_endian = false;
118 var targetFlag = "unknown";
119 var targetConfig = "unknown";
120 var emul560 = false;
121 var xds200 = false;
122 testEnv.cioFile = null;
124 if (java.lang.System.getProperty("os.name").match(/Linux/i))
125 {
126 host_os = "-linuxhost";
127 }
129 // Parse the arguments
130 if (arguments.length > 0 && arguments.length < 3)
131 {
132 // parse the board spec
133 var board_spec = arguments[0].toLowerCase();
134 board_spec = board_spec.replace(/^tmd(x|s)/, "");
135 board_spec = board_spec.replace(/^evmc/, "evm");
137 // find endian, user wants
138 if (board_spec.match(/-be$/))
139 {
140 big_endian = true;
141 board_spec = board_spec.replace(/-be$/, "");
142 }
143 else
144 board_spec = board_spec.replace(/-le$/, "");
146 // find onboard emulation option for this board
147 if (board_spec.match(/lx?e$/))
148 {
149 emul560 = true;
150 board_spec = board_spec.replace(/e$/, "");
151 }
153 if (board_spec.match(/ls$/))
154 {
155 xds200 = true;
156 board_spec = board_spec.replace(/ls$/, "l");
157 }
159 var emulation_spec = emul560 ? "XDS560 mezzanine" : "onboard XDS100";
161 emulation_spec = xds200 ? "XDS200 emulator" : "onboard XDS100";
163 // for now, use the same software for lx and l variants
164 board_spec = board_spec.replace(/lx$/, "l");
166 // for now, treat evm6618l as an alias for evm6670l
167 board_spec = board_spec.replace(/evm6618/, "evm6670");
169 targetFlag = board_spec;
171 endian_spec = (big_endian ? "-be" : "");
173 board_binaries = script_binaries + targetFlag + endian_spec + "/";
174 targetConfig = java.lang.System.getenv("PROGRAM_EVM_TARGET_CONFIG_FILE");
175 if (!targetConfig)
176 targetConfig = script_configs + targetFlag + "/" + targetFlag + (emul560 ? "e" : "") + (xds200 ? "s" : "") + host_os + ".ccxml";
178 print("board: " + targetFlag);
179 print("endian: " + (big_endian ? "Big" : "Little"));
180 print("emulation: " + emulation_spec);
181 print("binaries: " + board_binaries);
182 print("ccxml: " + targetConfig);
184 var dir = new File(board_binaries);
185 if (!dir.exists())
186 {
187 print("board binaries directory not found");
188 java.lang.System.exit(2);
189 }
191 if(arguments[1])
192 var writerImages = arguments[1];
193 else
194 writeAll = true;
195 }
196 else
197 {
198 print("Syntax error in command line");
199 print("Syntax: program_evm.js [tmdx|tmds]evm[c](<device>)l[x][e][-le|-be] [images_to_write]")
201 print(" tmdx: TMDX type EVM")
202 print(" tmds: TMDS type EVM")
203 print(" c: Not used, for backward compatibility")
204 print(" <device> is the board name e.g 6472,6678 etc")
205 print(" l: Low cost EVM")
206 print(" x: EVM supports encryption")
207 print(" e: EVM uses 560 Mezzanine Emulator daughter card")
208 print(" le: Little Endian")
209 print(" be: Big Endian")
211 print(" example: TMDXEVM6678L-le")
212 print(" [images_to_write] OPTIONAL is a list of the images to be written")
213 print(" example: eeprom50,nor")
214 print(" If not specified all (eeprom50,eeprom51,nand,nor) will be written")
215 java.lang.System.exit(0);
216 }
218 var i2cwriterbinary = board_binaries + "eepromwriter_" + targetFlag + ".out";
219 var nandwriterbinary = board_binaries + "nandwriter_" + targetFlag + ".out";
220 var norwriterbinary = board_binaries + "norwriter_" + targetFlag + ".out";
221 var eepromwriter_input51 = board_binaries + "eepromwriter_input51.txt";
222 var eepromwriter_input50 = board_binaries + "eepromwriter_input50.txt";
223 var eepromwriter_input = board_binaries + "eepromwriter_input.txt";
224 var eeprom50 = board_binaries + "eeprom50.bin";
225 var eeprom51 = board_binaries + "eeprom51.bin";
226 var nand = board_binaries + "nand.bin";
227 var nor = board_binaries + "nor.bin";
229 // Note: nAddress is the load address for using eepromwriter.
230 // nandNorAddress is the address used for nandwriter and norwriter.
231 switch (targetFlag)
232 {
233 case "evm6457l":
234 cpu_id = "C64XP_1";
235 var nAddress = 0x800000;
236 var nandNorAddress = nAddress;
237 var iblByteSwap = false;
238 break;
239 case "evm6474l":
240 cpu_id = "C64XP_0";
241 var nAddress = 0x800000;
242 var nandNorAddress = nAddress;
243 var iblByteSwap = false;
244 break;
245 case "evm6455":
246 cpu_id = "C64XP_0";
247 var nAddress = 0x800000;
248 var nandNorAddress = nAddress;
249 var iblByteSwap = false;
250 break;
251 case "evm6474":
252 cpu_id = "C64XP_1A";
253 var nAddress = 0x800000;
254 var nandNorAddress = nAddress;
255 var iblByteSwap = false;
256 break;
257 case "evm6472l":
258 cpu_id = "C64XP_A";
259 var nAddress = 0x800000;
260 var nandNorAddress = nAddress;
261 var iblByteSwap = false;
262 break;
263 case "evm6670l":
264 cpu_id = "C66xx_0";
265 var nAddress = 0x0C000000;
266 var nandNorAddress = 0x80000000;
267 var iblByteSwap = false;
268 break;
269 case "evm6678l":
270 cpu_id = "C66xx_0";
271 var nAddress = 0x0C000000;
272 var nandNorAddress = 0x80000000;
273 var iblByteSwap = false;
274 break;
275 case "evm6657l":
276 cpu_id = "C66xx_0";
277 var nAddress = 0x0C000000;
278 var nandNorAddress = 0x80000000;
279 var iblByteSwap = false;
280 break;
281 default:
282 script.traceWrite("Could not file cpu id for target " + targetFlag + "\n");
285 }
287 start = localTime();
288 testEnv.cioFile = script_logs+targetFlag+"_"+start+"-cio"+".txt";
289 // Create a log file in the current directory to log script execution
290 script.traceBegin(script_logs+targetFlag+"_"+start+"-trace"+".txt")
292 // Configure target
293 debugServer.setConfig(targetConfig);
294 pausecomp(1000);
295 debugSession = debugServer.openSession("*",cpu_id);
297 if (testEnv.cioFile != null)
298 debugSession.beginCIOLogging(testEnv.cioFile);
299 pausecomp(1000);
300 debugSession.target.connect();
301 pausecomp(1000);
302 debugSession.target.reset();
303 pausecomp(1000);
305 //POST
306 if(writeAll || writerImages.match(/eeprom50/))
307 {
308 //Write EEPROM
309 start = localTime();
310 script.traceWrite("Start writing eeprom50");
311 script.traceWrite("Writer:" + i2cwriterbinary + "\r\n");
312 script.traceWrite("Image:" + eeprom50 + "\r\n");
313 if (isFile(i2cwriterbinary) && isFile(eeprom50))
314 {
315 fileCopy(eepromwriter_input50,eepromwriter_input);
316 debugSession.memory.loadProgram(i2cwriterbinary);
317 var nPage = 0x0;
318 // var nAddress = 0x80000000;
319 var sFilename = eeprom50 ;
320 var nTypeSize = 32;
321 var bByteSwap = false;
322 try
323 {
324 debugSession.memory.loadRaw(nPage, nAddress, sFilename, nTypeSize, bByteSwap);
325 }
326 catch (ex)
327 {
328 errCode = getErrorCode(ex);
329 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
330 " to target memory!");
331 }
332 debugSession.target.run()
333 end = localTime();
334 }
335 else
336 {
337 script.traceWrite("Required EEPROM50 files do not exist in " + board_binaries + "\n");
339 }
340 }
342 //IBL
343 if(writeAll || writerImages.match(/eeprom51/))
344 {
345 start = localTime();
346 script.traceWrite("Start writing eeprom51");
347 script.traceWrite("Writer:" + i2cwriterbinary + "\r\n");
348 script.traceWrite("Image:" + eeprom51 + "\r\n");
350 if (isFile(i2cwriterbinary) && isFile(eeprom51))
351 {
352 fileCopy(eepromwriter_input51,eepromwriter_input);
353 debugSession.memory.loadProgram(i2cwriterbinary);
354 var nPage = 0x0;
355 // var nAddress = 0x80000000;
356 var sFilename = eeprom51;
357 var nTypeSize = 32;
358 var bByteSwap = iblByteSwap;
359 try
360 {
361 debugSession.memory.loadRaw(nPage, nAddress, sFilename, nTypeSize, bByteSwap);
362 }
363 catch (ex)
364 {
365 errCode = getErrorCode(ex);
366 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
367 " to target memory!");
368 }
370 debugSession.target.run()
371 end = localTime();
372 }
373 else
374 {
375 script.traceWrite("Required EEPROM51 files do not exist in " + board_binaries + "\n");
377 }
378 }
381 //NAND
382 if(writeAll || writerImages.match(/nand/))
383 {
384 if (writerImages.match(/format/))
385 {
386 /* No action is taken for NAND since it is format*/
387 }
388 else
389 {
390 start_nand = localTime();
391 script.traceWrite("Writer:" + nandwriterbinary + "\r\n");
392 script.traceWrite("NAND:" + nand + "\r\n");
393 if (isFile(nand) && isFile(nandwriterbinary))
394 {
395 debugSession.memory.loadProgram(nandwriterbinary);
396 var nPage = 0x0;
397 // var nAddress = 0x80000000;
398 var sFilename = nand;
399 var nTypeSize = 32;
400 var bByteSwap = false;
402 try
403 {
404 script.traceWrite("Start loading nand.bin");
405 debugSession.memory.loadRaw(nPage, nandNorAddress, sFilename, nTypeSize, bByteSwap);
407 }
408 catch (ex)
409 {
410 errCode = getErrorCode(ex);
411 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
412 " to target memory!");
413 }
414 script.traceWrite("Start programming NAND");
415 debugSession.target.run()
416 script.traceWrite("End programming NAND");
417 end_nand = localTime();
418 }
419 else
420 {
421 script.traceWrite("Required NAND files does not exist in " + board_binaries + "\n");
423 }
424 }
425 }
427 //FORMAT the flash
428 if (writerImages.match(/format/))
429 {
430 //NAND Erase all
431 if (writerImages.match(/nand/))
432 {
433 start_nand = localTime();
434 script.traceWrite("Writer:" + nandwriterbinary + "\r\n");
435 if (isFile(nandwriterbinary))
436 {
437 debugSession.memory.loadProgram(nandwriterbinary);
438 var nPage = 0x0;
439 var nValue = 0x12345678;
441 try
442 {
443 script.traceWrite("Formatting NAND device ... Initiated");
444 // Get the address of that symbol
445 var flag_address = debugSession.symbol.getAddress("nand_erase_flag")
446 debugSession.memory.writeWord(nPage, flag_address, nValue);
447 }
448 catch (ex)
449 {
450 errCode = getErrorCode(ex);
451 script.traceWrite("Error code #" + errCode + ", could not set the nandwriter for erasing all nand blocks! ");
452 }
453 debugSession.target.run()
454 script.traceWrite("Formatting NAND device ...Completed");
455 end_nand = localTime();
456 }
457 else
458 {
459 script.traceWrite("Required NAND binary does not exist in " + board_binaries + "\n");
461 }
462 }
463 else
464 {
465 /* No action is taken */
466 script.traceWrite("FLASH FORMAT - No Action is taken, please provide the supported format command string, e.g., format-nand");
467 }
469 if (testEnv.cioFile != null)
470 {
471 // Stop CIO logging.
472 debugSession.endCIOLogging();
473 }
475 debugSession.terminate();
476 debugServer.stop()
478 // Stop logging and exit.
479 script.traceEnd();
480 java.lang.System.exit(0);
482 }
484 //NOR
485 if(writeAll || writerImages.match(/nor/))
486 {
487 start_nor = localTime();
488 script.traceWrite("Writer:" + norwriterbinary + "\r\n");
489 script.traceWrite("NOR:" + nor + "\r\n");
492 if (isFile(nor) && isFile(norwriterbinary))
493 {
495 debugSession.memory.loadProgram(norwriterbinary);
496 var nPage = 0x0;
497 // var nAddress = 0x80000000;
498 var sFilename = nor ;
499 var nTypeSize = 32;
500 var bByteSwap = false;
501 try
502 {
503 script.traceWrite("Start loading nor.bin");
504 debugSession.memory.loadRaw(nPage, nandNorAddress, sFilename, nTypeSize, bByteSwap);
506 }
507 catch (ex)
508 {
509 errCode = getErrorCode(ex);
510 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
511 " to target memory!");
512 }
513 script.traceWrite("Start programming NOR");
514 script.traceWrite(localTime());
515 debugSession.target.run()
516 script.traceWrite("End programming NOR");
517 end_nor = localTime();
518 }
519 else
520 {
521 script.traceWrite("Required NOR files does not exist in " + board_binaries + "\n");
523 }
525 }
527 if (testEnv.cioFile != null)
528 {
529 // Stop CIO logging.
530 debugSession.endCIOLogging();
531 }
533 debugSession.terminate();
534 debugServer.stop()
536 // Stop logging and exit.
537 script.traceEnd();
538 java.lang.System.exit(0);