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.

evm6474 bootloader procedure

hello,

i am trying to create a bootloader for  the evm6474 mezzanine. The scenario i want to implement is as follows:

* a core in DSP0 execute the bootloader stored in the DSP rom (the only non volatile memory on the board)

* DSP0 send the code to DSP1 via SRIO

* A core in DSP1 is taken out of RESET and begin executing the code sent by DSP1

I read SRIO bootloader user's guide but i'm pretty confused. Cuz i don't know what exactly i have to develop and what i have to use.

can you tell me what i have to do? or give me some pointers to documents or wikis?

sorry if my question is so basic, i'm a bootloader novice.

regards.

  • A SRIO boot example can be found at:

     

    http://processors.wiki.ti.com/index.php/C6474

    click on the Boot Test Package link.

    Regards,

    Travis

  • thanks for your reply,

    i have successfuly run the SRIO boot example.

    i tried to replace the program executed after boot with a LED blinking program.

    I took led.out and converted it to   LED.h via the tools hex6x and bttbl2hfile. After that i included LED.h in the "Boot_From_Another TCI6488" project and rebuild it. But after running it, i don't see any flashing leds.

    i dont know what could be the problem !!

    any help?

    regards

  • Great.  I'm glad the example worked for you.  If the flow is working with the example code, then it has to be something minor that is stopping the LED program from running.  A couple ideas:

    1) Is LED.out properly working without using any gel file?  If you tested this program by loading via CCS, make sure a gel file is not required for it to run on your board.

    2) I'm assuming you changed the .rmd file and .bat file appropriately to use LED.out and LED.h accordingly.  But did you also edit the HostCode.c file appropriately?  Maybe it is easier to just rename the LED.out to Dspcode.out and use the exact same flow and files you did with the example.  This would make sure that you didn't miss a certain reference.

    Hope that helps.

    Regards,

    Travis

  • thanx tscheck,

    finally the led example worked. I'll present the procedure so other people can benefit from it.

    I renamed Led.out to DspCode.out and i used the same flow as the example. But that alone didn't solve the problem.

    in fact when the program is transfered via SRIO, the distant DSP did not execute the program since it didn't know it's entry c_int00.

    the LED program was written in assembly so i had some difficulties to put c_int00 in an explicit section, finally i added to the LED project a *.s file with the following code:

    .sect    ".text:_boot_entry"
        .ref _c_int00
    _boot_entry:
        MVKL    _c_int00, A0
        MVKH    _c_int00, A0
        BNOP    A0, 5

    and i added to the cmd file the following (the SECTIONS section):

    .text:_boot_entry > L2_LOCAL_A      knowing that   L2_LOCAL_A:  o = 0x10800000   l = 0x00020

    and now it works like a charm.

    thanx again Travis.

     

  • hello again,

    i'm exposed now to another problem.

    i tried to put the c_int00 section into DDR memory, but the program no longer works with the SRIO bootloader.

    if i want to boot via SRIO a program that i want to put into DDR memory, do i have to create another EMIF bootloader or what i can do ?

    regards

  • Mohammed,

    The DDR is not configured by default.  Essentially you will have to use an I2C secondary boot to first configure the DDR, then re-enter the SRIO bootmode in the ROM.  I don't have code for this, but here is another thread which did the same thing using EMAC as the bootmode.  Take a look at it.

    http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/439/p/98197/358356.aspx#358356

     

    Regards,

    Travis

  • hello again,

    i tried recently to make  DSP boot from SRIO with a SYS/BIOS program. I transform the .out to .h like i did with non bios programs.

    but the program does not run at all. I checked where the c_int00 entry is placed, and i found it in 0x00800000 (L2 base address).

    i placed c_int00 in the base of L2 like described in " http://processors.wiki.ti.com/index.php/Accessing_c_int00 ".

    I also tried substituting in the DspCode.h generated with hex6x the local adresses by global adresses, but that did nothing

    Is there any additionnal steps i must follow to make DSP boot with SYS/BIOS program through SRIO? or what could be the problem?

    regards

     

  • I'm guessing it is still related to the local versus global addressing.  SRIO has it's own master DMA to move things to memory.  As such, you need to specify the global addresses when loading the program via SRIO.  SRIO can't write to 0x00800000 for example.  Can you check the boot table you are sending, or SRIO packet addresses that are being used to make sure this is being addressed?

     

    Regards,

    Travis

  • thank you Travis,

    sorry for the laaaaaaaaate response, i was very busy lately.

    finally i got a SYS/BIOS program working in a SRIO bootloader. As we guessed, it was a local vs global issue.

    In the ".h" file generated with "hex6x", every section has a header indicating it's size and the address where this section will be copied in the distant DSP.

    I managed to substitute manually every one of these addresses with the global equivalent (since SYS/BIOS programs generate local addresses), i substituted also the global header at the beginning indicating the branch address with it's global equivalent.

    After these changes, the program run without problems.

    thank you again Travis,

    regards.

     

  • Hello,

    I've met some problems about srio boot.I hope you can tell me something about it.

    I'm successful in srio boot and the led is blinking.

    But when I change the .out file which I use the rapidIO to send data in the project.There is a problem.The doorbell interrupt doesn't work.The led is blinking.The ddr and pll are configured as i dit in the project.But it can't send doorbell or receive doorbell.And I can't find DOORBELL_ICCR and DOORBELL_ICSR register in the register windows.

    I'm sure that the doorbell can work well when i debug it in no boot mode.

    Looking forward to your answer!