/* * Copyright (c) 2021, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Description: Load executables to various CPUs on the SOC Usage: 1. Modify "sdkPath" (search for EDIT THIS) to point to the absolute path of the SDK. - On windows make sure to use '/' or '\\' as path separator 2. Launch AM64x_GP_EVM target connection in CCS, however DO NOT connect to any CPUs. 3. From CCS Scripting console do (CCS Tool Bar > View > Scripting Console) js:> loadJSFile "/tools/ccs_load/am64x/load.js" 4. After successful execution you should see a log like below js:> loadJSFile "C:/ti/mcu_plus_sdk/tools/ccs_load/am64x/load.js" Connecting, halting, reseting ... [r5fss0-0] Loading ... C:/ti/mcu_plus_sdk/examples/drivers/ipc/ipc_rpmsg_echo/am64x-evm/r5fss0-0_freertos/ti-arm-clang/ipc_rpmsg_echo.debug.out [r5fss0-1] Loading ... C:/ti/mcu_plus_sdk/examples/drivers/ipc/ipc_rpmsg_echo/am64x-evm/r5fss0-1_nortos/ti-arm-clang/ipc_rpmsg_echo.debug.out [r5fss1-0] Loading ... C:/ti/mcu_plus_sdk/examples/drivers/ipc/ipc_rpmsg_echo/am64x-evm/r5fss1-0_nortos/ti-arm-clang/ipc_rpmsg_echo.debug.out [r5fss1-1] Loading ... C:/ti/mcu_plus_sdk/examples/drivers/ipc/ipc_rpmsg_echo/am64x-evm/r5fss1-1_nortos/ti-arm-clang/ipc_rpmsg_echo.debug.out [m4fss0-0] Skipping load, C:/ti/mcu_plus_sdk/examples/drivers/ipc/ipc_rpmsg_echo/am64x-evm/m4fss0-0_nortos/ti-arm-clang/ipc_rpmsg_echo.debug.out file NOT FOUND ... [r5fss0-1] Running ... [r5fss1-0] Running ... [r5fss1-1] Running ... [r5fss0-0] Running ... All DONE !!! 5. If any of the logs in step 4 show "fail" or "error" messages then check your EVM, CCS, SDK setup, Executables path and try again. 6. To reload without power cycles, repeat step 4 onwards. */ // !!! EDIT THIS !!! Edit all of below based on the example you want to run runAfterLoad = true; // Указать путь к текущей папке var script_path = "/home/algin/workspace_v11/sitara_depot/utils/ddr_init/ccs_files"; print("script_path = " + script_path); // !!! EDIT THIS !!! Comment lines below for CPUs that are not needed to be loaded, change 'os' based on the 'os' combo that you have var elf_file = {}; elf_file["r5fss0-0"] = script_path + "/am64xevm_ddr_init.release.out"; print("[load_ddr_init]: elf_file = " + elf_file["r5fss0-0"]); function connectHaltResetCpu(cpu) { dsCPU[cpu].target.connect(); dsCPU[cpu].target.halt(); dsCPU[cpu].target.reset(); } function runCpu(cpu) { if(cpu && File(elf_file[cpu]).isFile() ) { if(runAfterLoad) { print("[" + cpu + "] Running ... "); dsCPU[cpu].target.runAsynch(); } } } function loadCpu(cpu) { if(cpu && File(elf_file[cpu]).isFile() ) { print("[" + cpu + "] Loading ... " + elf_file[cpu] ); dsCPU[cpu].memory.loadProgram(elf_file[cpu]); } else { print("[" + cpu + "] Skipping load, " + elf_file[cpu] + " file NOT FOUND ... " ); } } function doEverything() { /* Set timeout of in units of msecs */ script.setScriptTimeout(10 * 1000); // Open a debug session dsCPU["r5fss0-0"] = debugServer.openSession( ".*MAIN_Cortex_R5_0_0" ); print("Connecting, halting, reseting ..."); connectHaltResetCpu("r5fss0-0"); loadCpu("r5fss0-0"); runCpu("r5fss0-0"); print("[load_ddr_init]: Waiting 1 sec while ddr_init works..."); Thread.sleep(1000); print("[load_ddr_init]: Reseting the CPU..."); dsCPU["r5fss0-0"].target.reset(); print("[load_ddr_init]: All DONE !!!"); } // Import the DSS packages into our namespace to save on typing importPackage(Packages.com.ti.debug.engine.scripting) importPackage(Packages.com.ti.ccstudio.scripting.environment) importPackage(Packages.java.lang) importPackage(java.io); importPackage(java.lang); var dsCPU = {}; var ds; var debugServer; var script; // Check to see if running from within CCSv4 Scripting Console var withinCCS = (ds !== undefined); // !!! EDIT THIS !!! Add absolute path to the CCXML file here. fileCcxml = script_path + "/am64x_xds560v2.ccxml"; // Create scripting environment and get debug server if running standalone if (!withinCCS) { // Import the DSS packages into our namespace to save on typing importPackage(Packages.com.ti.debug.engine.scripting); importPackage(Packages.com.ti.ccstudio.scripting.environment); importPackage(Packages.java.lang); // Create our scripting environment object - which is the main entry point into any script and // the factory for creating other Scriptable ervers and Sessions script = ScriptingEnvironment.instance(); // Get the Debug Server and start a Debug Session debugServer = script.getServer("DebugServer.1"); // Check if the CCXML file exists. if(!File(fileCcxml).isFile()) { print("[ERROR] File "+fileCcxml+" not found !!!"); print("Seems like the script is not run from within CCS. Please edit the load_dmsc_hsfs.js script to add a path to your CCXML configuration file in this case.") } else { debugServer.setConfig(fileCcxml); doEverything(); } } else // otherwise leverage existing scripting environment and debug server { debugServer = ds; script = env; doEverything(); }