updated program evm and nand writer for getting the nand format support
[keystone-rtos/mcsdk-tools.git] / program_evm / program_evm.js
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         }
65     
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   }
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))
126         host_os = "-linuxhost";
129 // Parse the arguments
130 if (arguments.length > 0 && arguments.length < 3)
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");
136     
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$/, "");
145         
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     }
152       
153         if (board_spec.match(/ls$/))
154     {
155         xds200 = true;
156         board_spec = board_spec.replace(/ls$/, "l");
157     }
158         
159         var emulation_spec = emul560 ? "XDS560 mezzanine" : "onboard XDS100";
160         
161         emulation_spec = xds200 ? "XDS200 emulator" : "onboard XDS100";
162         
163     // for now, use the same software for lx and l variants
164     board_spec = board_spec.replace(/lx$/, "l");
165     
166     // for now, treat evm6618l as an alias for evm6670l
167     board_spec = board_spec.replace(/evm6618/, "evm6670");
168         
169     targetFlag = board_spec;
170     
171     endian_spec = (big_endian ? "-be" : "");
172     
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);
183     
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     }
190     
191     if(arguments[1])
192         var writerImages = arguments[1];
193     else
194         writeAll = true;   
196 else
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]")
200   
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);
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)
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");
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/))
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");
338          
339         }
342 //IBL 
343 if(writeAll || writerImages.match(/eeprom51/))
345         start = localTime();
346         script.traceWrite("Start writing eeprom51");
347         script.traceWrite("Writer:" + i2cwriterbinary + "\r\n");
348         script.traceWrite("Image:" + eeprom51 + "\r\n");
349         
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");
376          
377         }
381 //NAND
382 if(writeAll || writerImages.match(/nand/))
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;
401     
402                 try
403                 {   
404                         script.traceWrite("Start loading nand.bin");
405                         debugSession.memory.loadRaw(nPage, nandNorAddress, sFilename, nTypeSize, bByteSwap);
406     
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");
422          
423         }
424      }
427 //FORMAT the flash
428 if (writerImages.match(/format/))
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;
440     
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");
460          
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     }
474     
475     debugSession.terminate();
476     debugServer.stop()
477     
478     // Stop logging and exit.
479     script.traceEnd();
480     java.lang.System.exit(0);
481         
484 //NOR
485 if(writeAll || writerImages.match(/nor/))
487         start_nor = localTime();
488         script.traceWrite("Writer:" + norwriterbinary + "\r\n");
489         script.traceWrite("NOR:" + nor + "\r\n");
491         
492         if (isFile(nor) && isFile(norwriterbinary)) 
493         {
494         
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");
522          
523         }
527 if (testEnv.cioFile != null)
529         // Stop CIO logging.
530         debugSession.endCIOLogging();
533 debugSession.terminate();
534 debugServer.stop()
536 // Stop logging and exit.
537 script.traceEnd();
538 java.lang.System.exit(0);