ccs lauch script : Reset MCU 11 to ensure tcm config take effect
[processor-sdk/pdk.git] / packages / ti / drv / sciclient / tools / ccsLoadDmsc / j7200 / launch.js
1 /*
2  * Copyright (c) 2018-2019, 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  */
33 //
34 //File Name: launch_j7200.js
35 //Description:
36 //   Launch the DMSC firmware and board configuration from R5F.
37 //
38 //Usage:
39 //
40 //From CCS Scripting console
41 //  1. loadJSFile "C:\\ti\\launch_j7200.js"
42 //
43 //Note:
44 //  1. Search for "edit this" to look at changes that need to be edited
45 //     for your usage.
46 //
49 //<!!!!!! EDIT THIS !!!!!>
50 // Set this to 1 to allow loading the GEL files directly from the ccxml file.
51 disableGelLoad = 0;
52 // Set to 1 to use the firmware with Firewalls.
53 if (disableGelLoad == 0)
54 {
55     //Path to GEL files
56     gelFilePath = "k3-avv-repo/framework/gels/K3J7";
57 }
58 //PDK path. Edit this
59 pdkPath = "/ti/j7presi/workarea/pdk";
61 //path to board config elf
62 pathSciclient = pdkPath+"/packages/ti/drv/sciclient/tools/ccsLoadDmsc/j7200/"
63 ccs_init_elf_file = pathSciclient+"sciclient_ccs_init_mcu1_0_release.xer5f";
64 loadSciserverFlag = 1;
65 sciserver_elf_file = pathSciclient+"sciserver_testapp_mcu1_0_release.xer5f";
67 //path to sysfw bin
68 sysfw_bin = pdkPath+"/packages/ti/drv/sciclient/soc/sysfw/binaries/ti-fs-firmware-j7200-gp.bin"
70 //<!!!!!! EDIT THIS !!!!!>
72 // Import the DSS packages into our namespace to save on typing
73 importPackage(Packages.com.ti.debug.engine.scripting)
74 importPackage(Packages.com.ti.ccstudio.scripting.environment)
75 importPackage(Packages.java.lang);
76 importPackage(Packages.java.io);
78 function updateScriptVars()
79 {
80     //Open a debug session
81     dsMCU1_0 = debugServer.openSession( ".*MCU_Cortex_R5_0" );
82     dsMCU1_1 = debugServer.openSession( ".*MCU_Cortex_R5_1" );
83     dsDMSC_0 = debugServer.openSession( ".*DMSC_Cortex_M3_0" );
84 }
86 function printVars()
87 {
88     updateScriptVars();
89 }
91 function connectTargets()
92 {
93     /* Set timeout of 20 seconds */
94     script.setScriptTimeout(200000);
95     updateScriptVars();
96     sysResetVar=dsDMSC_0.target.getResetType(1);
97     sysResetVar.issueReset();
98     print("Connecting to DMSC_Cortex_M3_0!");
99     // Connect targets
100     dsDMSC_0.target.connect();
101     print("Fill R5F ATCM memory...");
102     dsDMSC_0.memory.fill(0x61000000, 0, 0x8000, 0);
103     print("Writing While(1) for R5F")
104     dsDMSC_0.memory.writeWord(0, 0x61000000, 0xE59FF004); /* ldr        pc, [pc, #4] */
105     dsDMSC_0.memory.writeWord(0, 0x61000004, 0x38);       /* Address 0x38 */
106     dsDMSC_0.memory.writeWord(0, 0x61000038, 0xEAFFFFFE) /* b          #0x38 */
107     print("Loading DMSC Firmware ... " + sysfw_bin);
108     // Load the DMSC firmware
109     dsDMSC_0.memory.loadRaw(0, 0x40000, sysfw_bin, 32, false);
110     print("DMSC Firmware Load Done...");
111     // Set Stack pointer and Program Counter
112     stackPointer = dsDMSC_0.memory.readWord(0, 0x40000);
113     progCounter = dsDMSC_0.memory.readWord(0, 0x40004);
114     dsDMSC_0.memory.writeRegister("SP", stackPointer);
115     dsDMSC_0.memory.writeRegister("PC", progCounter);
116     print( "DMSC Firmware run starting now...");
117     // Run the DMSC firmware
118     dsDMSC_0.target.runAsynch();
119     print("Connecting to MCU Cortex_R5_0!");
121     // Connect the MCU R5F
122     dsMCU1_0.target.connect();
123     // This is done to support other boot modes. OSPI is the most stable.
124     // MMC is not always stable.
125     bootMode = dsMCU1_0.memory.readWord(0, 0x43000030) & 0xF8;
126     print (" WKUP Boot Mode is " + bootMode);
127     mainBootMode = dsMCU1_0.memory.readWord(0, 0x100030) & 0xFF;
128     print (" Main Boot Mode is " + mainBootMode);
129     if ((bootMode != 0x38) || (mainBootMode != 0x11))
130     {
131         print("Disable MCU Timer for ROM clean up");
132         dsMCU1_0.memory.writeWord(0, 0x40400010, 0x1); /* Write reset to MCU Timer 0. Left running by ROM */
133         dsMCU1_0.memory.writeWord(0, 0x40F80430, 0xFFFFFFFF); /* Clear Pending Interrupts */
134         dsMCU1_0.memory.writeWord(0, 0x40F80018, 0x0); /* Clear Pending Interrupts */
135         // Reset the R5F to be in clean state.
136         dsMCU1_0.target.reset();
137         // Load the board configuration init file.
138         dsMCU1_0.expression.evaluate('GEL_Load("'+ ccs_init_elf_file +'")');
139         // Run Asynchronously
140         dsMCU1_0.target.runAsynch();
141         print ("Running Async");
142         // Halt the R5F and re-run.
143         dsMCU1_0.target.halt();
144     }
145     // Reset the MCU R5F Core 1, to ensure the ATCM/BTCM config takes effect
146     print("Connecting to MCU R5 1 0");
147     dsMCU1_1.target.connect();
148     print("Reset MCU R5 10, to ensure TCMs configurations take effect");
149     dsMCU1_1.target.reset();
151     // Reset the R5F to be in clean state.
152     dsMCU1_0.target.reset();
153     print("Running the board configuration initialization from R5!");
154     // Load the board configuration init file.
155     dsMCU1_0.memory.loadProgram(ccs_init_elf_file);
156     // Halt the R5F and re-run.
157     dsMCU1_0.target.halt();
158     // Run Synchronously for the executable to finish
159     dsMCU1_0.target.run();
160     dsMCU1_0.target.halt();
161     dsMCU1_0.target.reset();
164     dsMCU1_0.target.restart();
165     /* Run the DDR Configuration */
166     print("J7200 Running the DDR configuration... Wait till it completes!");
167     dsDMSC_0.target.halt();
168     dsDMSC_0.expression.evaluate("J7ES_LPDDR4_Config_Late()");
169     dsDMSC_0.target.runAsynch();
172 function disconnectTargets()
174     updateScriptVars();
175     // Reset the R5F to be in clean state.
176     dsMCU1_0.target.reset();
177     dsMCU1_1.target.disconnect();
179     // Disconnect targets
180     dsDMSC_0.target.disconnect();
183 function sampleDDRCheck ()
185     print("Running DDR Memory Checks....");
186     dsMCU1_0.memory.fill (0x80000000, 0, 1024, 0xA5A5A5A5);
187     ar = dsMCU1_0.memory.readWord(0, 0x80000000, 1024);
188     fail = 0 
189     for (i = 0; i < ar.length; i++) {
190             x = ar[i]; 
191             if (x != 0xA5A5A5A5)
192             {   
193                 fail = 1;
194             }
195         } 
196     if (fail == 1)
197     {   
198         print ("0x80000000: DDR memory sample check failed !!");
199     }
200     dsMCU1_0.memory.fill (0x81000000, 0, 1024, 0x5A5A5A5A);
201     ar = dsMCU1_0.memory.readWord(0, 0x81000000, 1024);
202     fail = 0 
203     for (i = 0; i < ar.length; i++) {
204             x = ar[i]; 
205             if (x != 0x5a5a5a5a)
206             {   
207                 fail = 1;
208             }
209         } 
210     if (fail == 1)
211     {   
212         print ("0x81000000: DDR memory sample check failed !!");
213     }
217 function loadSciserver()
219     updateScriptVars();
220     print("######################################################################################");
221     print("Loading Sciserver Application on MCU1_0. This will service RM/PM messages");
222     print("If you do not want this to be loaded update the launch script to make loadSciserverFlag = 0");
223     print("If you want to load and run other cores, please run the MCU1_0 core after Sciserver is loaded. ");
224     print("######################################################################################");
225     dsMCU1_0.expression.evaluate('GEL_Load("'+ sciserver_elf_file +'")');
228 function doEverything()
230     printVars();
231     connectTargets();
232     disconnectTargets();
233     sampleDDRCheck ();
234     if (loadSciserverFlag == 1)
235     {
236         loadSciserver();
237     }
238     print("Happy Debugging!!");
241 var ds;
242 var debugServer;
243 var script;
245 // Check to see if running from within CCSv4 Scripting Console
246 var withinCCS = (ds !== undefined);
248 // Create scripting environment and get debug server if running standalone
249 if (!withinCCS)
251     // Import the DSS packages into our namespace to save on typing
252     importPackage(Packages.com.ti.debug.engine.scripting);
253     importPackage(Packages.com.ti.ccstudio.scripting.environment);
254     importPackage(Packages.java.lang);
256     // Create our scripting environment object - which is the main entry point into any script and
257     // the factory for creating other Scriptable ervers and Sessions
258     script = ScriptingEnvironment.instance();
260     // Get the Debug Server and start a Debug Session
261     debugServer = script.getServer("DebugServer.1");
263 else // otherwise leverage existing scripting environment and debug server
265     debugServer = ds;
266     script = env;
269 doEverything();