This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Ethernet boot for OpenMP projects

Other Parts Discussed in Thread: TMS320C6670

Hello everyone,

I'am working with OpenMP 2.x project on TMS320C6670. Seems I managed to overcome challenges to create, build and run the project with emulator. For correct DDR3 operation I initialize the memory with a GEL file.

Now I need to boot the device through the Ethernet. Before that I have created 2 stage boot loader. 1st stage initialize the DDR3 and then jumps to ROMBOOT_REENTRY_ADDRESS, so i can now boot with my application image.  But when I'am trying to use an OpenMP image of the project instead of non-OMP image m application boot successfully, but not working.

Do I need to use some additional tools like MAD or whatever to boot OpenMP applications?

Best Regards,

Pavlo!

  • Hi Pavlo,

    You mean, the Non-OMP application image booted successfully with 2 stage boot loader whereas the OMP application image does not boot successfully. Is my understanding correct?

    Do I need to use some additional tools like MAD or whatever to boot OpenMP applications?

    I do not think it is required to use additional tools to boot OpenMP applications.

    1. Are you working on custom board or EVM?
    2. Also please check IBL TFTP boot can help you to boot the application using OpenMP. Please refer below link,
    processors.wiki.ti.com/.../BIOS_MCSDK_2.0_User_Guide

    Thank you.
  • Hi Rajasekaran,

    Raja said:
    You mean, the Non-OMP application image booted successfully with 2 stage boot loader whereas the OMP application image does not boot successfully.

    Yes your understanding is correct. For OpenMP project I have to rearrange the project memory map. So before doing drawbacks, I really want to know maybe I just booting it in the wrong way. So I want to clarify one thing. When I launch my application with emulator I have access to all cores and I can specify In Debug options -> Auto Run option to wait untill all cores loaded, and only then execute. But when we are booting through Ethernet, DSP get's one image, how does it know what information needed to be loaded to each core? What is actually the exact booting procedure? I'am interested in exact OMP procedure.

    I'am working on the custom board. The IBL is not an option for my board, since the EEPROM is occupied by some other project files. 

    Best Regards,

    Pavlo!

  • Hi everyone,

    I want to give a little update of my progress. I looked to the booting procedures and there is a statement, that during Ethernet boot the image loading only to the core 0 and it's responsibility of the program to power up the other cores and download an image to them.

    But browsing the OpenMP initialization function source codes I didn't find anything related to this.

    So I have decided to repeat the exact actions of the emulator, since in this case the application working correctly. To do this I have used MAD utils, with the following actions:

    1) Build a project as usual to obtain .out file.

    2) Created a deployment config file:

    {
    	"deviceName" : "C6670",
    	
    	"partitions" : [
    		{
    			"name"			: "load-partition",
    			"vaddr"			: "0x9e000000",
    			"size"			: "0x2000000",
    			"loadPartition" : true 
    		}
    	],
    	
    	"applications" : [
    		{
    			"name"			 : "myapp",
    			"fileName"       : "../mad-loader/examples/app_1/build/my_app.out",
    			"allowedCores"   : [0,1,2,3]
    		}
    	],
    	
    	"appDeployment" : [
    		"myapp",
    		"myapp",
    		"myapp",
    		"myapp"
    	]
    }

    From that file you can see that I'am loading the same application to the all 4 cores, as in the case of emulator scenario.

    3) Created a maptool file:

    {
    	"deploymentCfgFile" : "./config-files/my_application.json",
    	"LoadImageName"     : "my_application.bin",
    	"prelinkExe"        : "prelink6x",
    	"ofdTool"           : "ofd6x",
    	"stripExe"          : "strip6x",
    	"malApp"            : "../mad-loader/bin/C6670/le/mal_app.exe",
    	"nmlLoader"         : "../mad-loader/bin/C6670/le/nml.exe"
    }

    So maptool.py working correctly, without any errors and successfully creates the image .bin file. I tried to modify paths for both 7.4.0 and 8.0.1 Code generation tools. Both working fine.

    But when I boot created image through Ethernet the DSP just hangs and not responding to the commands.

    Maybe I doing something wrong? As i understand from the MAD description the MAP tools creates an image in in ROMFS format and I think that is why it's no working when I'am sending it through the Ethernet to DSP. 

    So the main question then what is the procedure to boot multi-core application to the DSP using only Ethernet (Hence: power on the device -> catch BOOTP -> send image with an application -> application loaded to all cores)?

    Best Regards,

    Pavlo!

  • Hi everyone,

    It took some time for me to look for other methods how to boot an OpenMP application via Ethernet.

    In above mentioned  thread the guys discussing how to make other core begin the loaded code execution, but they never mention how actually load the code to the other cores L2 memory.

    What I know now is that when I 'am booting OpenMP application with emulator the .text section for core 0 resides in the DDR3 memory, since I put it there (it's initialized  with .GEL file). But then I'am loading the same application to the other cores, it deploys to the L2 memory of each core. It's fine for me, I just don't know how to recreate this with Ethernet booting.

    Is there any known way to load the application to the other cores memory via Ethernet? I'am facing this problem over a month now, so any tips will be much appreciated.

    Best Regards,

    Pavlo!