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.

Compiler: TI v8.1.2

Other Parts Discussed in Thread: OMAP-L138

Tool/software: TI C/C++ Compiler

Hello,

We are working on an LCDK-OMAPl138 platform with ARM920 and C6000 cores. 

We build images for both ARM and DSP. The  Firmware running on ARM gets a DSP binary image that we created using AISGen.

Following the description in "OMAP-L138 C6000 DSP+ARM Processor Technical Reference Manual"  - "13.2 DSP Wake Up" we load this image

to 0xc3000000 and issue the gel file procedure Wake_DSP() which is listed at the bottom of my question. 

The entrypoint location is at 0xC3000000: Below is the message frm the map file:

ENTRY POINT SYMBOL: "_c_int00"  address: c3000000

Howwever, the DSP is not automatically connected, so we can't use it this way- though the wake up succeeded.

While trying to use CCV to download the elf image and connect - it works fine. But this is not what we need.

The memory contents of 0xC3000000 created while using CCV to upload the elf file look quite different that the image created by AISgen.

Questions:

1-Is AISgen the right tool to create a binary for C6000?  What is wrong with the image creation? (And yes, I used the DSP creation option)

2-Is there any HW procedure I missed? (please refer to the Wake_DSP()  code?

3-Where can I see how CCV translates the out file?

Thank you all,

Please let me know if you need more information on this.

/*PSC0_LPSC_enableCore(1, LPSC_DSP)*/

PSC0_LPSC_enableCore(unsigned int PD, unsigned int LPSC_num) {
unsigned int j;

if( (*(unsigned int*)(PSC0_MDSTAT+4 * LPSC_num) & 0x11F) != 0x103 ) {
HOST1CFG = 0xc3000000;
*(unsigned int*) (PSC0_MDCTL+4*LPSC_num) = (*(unsigned int*) (PSC0_MDCTL+4*LPSC_num) & 0xFFFFFEE0) | 0x0103;
PSC0_PTCMD = 0x1<<PD;
j = 0;
/*Wait for power state transition to finish*/
while( (PSC0_PTSTAT & (0x1<<PD) ) !=0) {
if( j++ > PSC_TIMEOUT ) {
GEL_TextOut("\tPSC0 Enable Core Transition Timeout on Domain %d, LPSC %d\n","Output",1,1,1,PD,LPSC_num);
break;
}
}

j = 0;
while( (*(unsigned int*)(PSC0_MDSTAT+4 * LPSC_num) & 0x11F) !=0x103) {
if( j++ > PSC_TIMEOUT ) {
GEL_TextOut("\tPSC0 Enable Core Verify Timeout on Domain %d, LPSC %d\n","Output",1,1,1,PD,LPSC_num);
break;
}
}
}
}

  • Hi Yoav,

    I've forwarded this to the software experts. Their feedback should be posted here.

    BR
    Tsvetolin Shulev
  • Yoav,

    Can you provide some clarification on your usecase. Does the ARM boot up using an AIS image which then gets an DSP firmware binary which needs to be loaded and started on the DSP?

    If that is the case then you may want to look at the Bootloader that we provide in the starterware package. This uses a dual stage boot process where in a secondary bootloader image is loaded on the ARM that then reads a ARM application binary and a DSP application binary formatted in out2rprc format and then loads and runs the code on respective cores. you can integrate the read and the load fucntion from the bootloader into your ARM application so that you can read the DSP binary and run it in similar manner.
    HEre is the documentation of how the Starterware bootloader functions:
    processors.wiki.ti.com/.../OMAPL138_StarterWare_Booting_And_Flashing

    Please review this and let us know if this mechanism will work for your usecase.

    Regards,
    Rahul
  • Hi Rahul,

    Thank you for your quick response.

    You are absolutely right. We have an ARM binary image that was created using AISgen and it runs immediately at system power up.

    This binary works great. It then loads the DSP AIS binary payload to the RAM, and issues the DSP _wakeup procedure.

    Digging into the DSP AIS binary image - I figured out that this code can't run as a standalone binary since it has the AIS magic number in offset 0, and then some AIS commands.

    So, your answer provides me with the necessary hint, to what I missed in the process.

    I will look into the starterware boot loader code once I arrive at the office. If I understand you correctly, it parses the image and loads its fragments into the appropriate memory locations.

    If this is the case - then everything is clear.

    I'll let you know once (and if) we make it work.

    Again, thank you.

    Yoav