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.

C6455 slave SRIO boot.

Since I'm using the rapidio communicating between dsp and fpga.I want to use the slave SRIO BOOT on the dsp.Is it possible?

When we use flash boot or I2c boot,we need to convert the *.out file to the image that is needed to load to the rom.And if I use Srio boot mode.What should I do with the .out file?

If you know something about it,thank you very much for answering my questions.

  • Is there anyone can tell me something about it?I'm very anxious about it.

    Which format of image that will be burn to the dsp is right for srio boot?

  • Yes it is possible.  Please see the bootloader user's guide http://www.ti.com/lit/ug/spruec6g/spruec6g.pdf for more details.  Essentially, what happens is that an external device pushes the DSP image via directIO packets (ex. NWRITE), then after that is complete, the external device sends a Doorbell message to interrupt the DSP and start execution of the code.

    As far as format goes, this requires raw memory writes.  We use a .h file format in our boot test package.  Essentially, you take your .out --> hex6x --> .btbl --> bttbl2Hfile --> .h file.  Please see the below link, it is for the C6474, but the utilities are all there and it will be the same process.

     

    http://processors.wiki.ti.com/images/d/d8/Boot_test_package.zip

     

    Regards,

    Travis

     

  • Thanks for your help.It helps me a lot.But I have some questions that I'm not sure.

    1.At the beginning of the srio boot,I don't have to do anything about the slave dsp.Am I right?

    2.The document says the host send a doorbell interrupt and the cpu then begins executing at the base of L2.In the dsp c6455.We can send doorbell interrupt with information 0-f,20-2f,40-4f,60-6f.Which correspond to the DOORBELL_ICSR0--4.In order to interrupt the slave dsp to execute at the base of L2,which doorbell info is right?

    3.In the document of C6455 BOOT UG,it says the device ID = 2 + BOOTMODE[2]:CFGGP[2:0].I configure the BOOTMODE[2]=1,CFGGP[2:0]=000.So my device ID of the slave dsp is 0x0a?

    4.I'm very puzzled about that my fpga can't access the L2 memory of the dsp.Even when I connect the dsp with CCS and debug it.Since the rapid IO between the dsp and fpga is working on.And there is no problem about the doorbell interrupt,the direct IO.And my fpga can access the ddr2 of the dsp.I just don't know that,why my fpga can't access the L2 memory!

    Looking forward to your answer.

  • wish_best said:
    1.At the beginning of the srio boot,I don't have to do anything about the slave dsp.Am I right?

    Correct.  Just need to make sure the port_ok of the link partner is ok before you start sending packets.

    wish_best said:
    2.The document says the host send a doorbell interrupt and the cpu then begins executing at the base of L2.In the dsp c6455.We can send doorbell interrupt with information 0-f,20-2f,40-4f,60-6f.Which correspond to the DOORBELL_ICSR0--4.In order to interrupt the slave dsp to execute at the base of L2,which doorbell info is right?

    For C6455, the Doorbell Interrupt packet from host (to complete bootload) should have doorbell info field set to 0x0000, which sets Doorbell register 0, bit 0.  This is routed to INTDST4, which is routed to the cpu.

    wish_best said:
    3.In the document of C6455 BOOT UG,it says the device ID = 2 + BOOTMODE[2]:CFGGP[2:0].I configure the BOOTMODE[2]=1,CFGGP[2:0]=000.So my device ID of the slave dsp is 0x0a?

    Yes.  You might want to just use BOOTMODE[2]:CFGGP[2:0] = 0b1111, and the default deviceID would then be 0xffff then until you get it working.

    wish_best said:
    4.I'm very puzzled about that my fpga can't access the L2 memory of the dsp.Even when I connect the dsp with CCS and debug it.Since the rapid IO between the dsp and fpga is working on.And there is no problem about the doorbell interrupt,the direct IO.And my fpga can access the ddr2 of the dsp.I just don't know that,why my fpga can't access the L2 memory!

    If you are accessing DDR via SRIO, there should be no issue with accessing L2.  There must be something wrong with the address in the packet.  You could try using a Nwrite_r and see if you get an error message from the DSP back to the FPGA.  Can you verify the address of the packet?  Some of the FPGA IP solutions have TX address translation that can cause issues.

    Regards,

    Travis

  • Hi tscheck:

    Thanks very much!I have writen the code into the L2 memory of the dsp successfully.

    But after I send a doorbell into the dsp.It seems that the dsp doesn't run.And I just send the doorbell with info 0x0000.I'm thinking that how can it turn to the entry point  _c_init00.Can you tell me something about it?The doorbell info that i should send is not 0x0000 in the C6455?Or there is something I have ignored in other steps?

    Using the tool you tell me,I find that it just choose some init sections.And if i choose all of the sections that is in the .map file which is used.The dsp will run successfully?

  • Great, one step closer.  You are right the DSP doesn't know _c_init00, when it gets the interrupt, it executes from base of L2.  Here is a good thread that explains how to deal with _c_init00.   Check it out.   I don't think you missed anything else.

     

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

    Regards,

    Travis

  • Hi tscheck:

    I'm sorry that I've gone out for sevaral days.And I just come back today.Thanks for your help.

  • I'm very glad that the srio boot is successful.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!

  • I don't think you've given me enough info to help on this one.  So booting the LED.out program works, but when you change the .out file to your program, it doesn't work?  Or just the Doorbell doesn't work because you don't have a way to send it from the attached device?  If the Doorbell (with info field  0x0000) is correctly received, it will set bit 0 of offset 0x0200 register.  Are you connected with the emulator to see if this bit is set?

    If you can't send a Doorbell message for some reason, you should be able to send an NWRITE packet with payload of 0x00000001 to register offset 0x0200 to set the interrupt that way.

    Regards,

    Travis