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.

alternative IBL process for 6678

TI experts-

We have created a separate and independent IBL CCS project.  We removed iblinit.c (keeping some functions, and setting boot table options inside main().  It was a tedious and time-consuming effort, but it builds with no errors / warnings, and creates a standard .out file and .map file.  We have tested the .out file to boot an OS and it works. 

The purpose of this process is to:

  -allow boot into a user command-line, from which IBL boot
   mode is a user-controlled option (other options include
   low-level hardware functional tests required in our project)

  -eliminate need for boot-table and i2cconfig.gel file
   steps, v1.0 silicon PLL work-arounds, FPGA dependencies,
   and other complexities of the default IBL process

To allow automated and/or user-controlled usage, here are the steps I'm using:

1) Create a .bin file from the .out file, using modified rom_parse and supporting files.  There are no errors or warnings and the  resulting .bin file is 53 kByte.

2) Write the .bin file to I2C EEPROM address 0x51 (using eepromwriter).

3) After power-on boot of our command-line program from I2C EEPROM address 0x50, enter a 'boot os' command to cause our program to read from I2C 0x51 and store to 0x00800000 (L2 mem starting address of code and data, according to our IBL .map file).

4) Branch to the entry-point specified in our IBL .map file.

Does this sound ok?  One thing I noticed is after creating the .bin file there is an ibl_i2crom.map.pp file with contents (excerpted):

section {

  param_index      = 0
  boot_mode        = 40
  sw_pll_prediv    = 1
  sw_pll_mult      = 16
  sw_pll_postdiv   = 2
  options          = 1
  core_freq_mhz    = 625
  i2c_clk_freq_khz = 200
  dev_addr_ext     = 0x51
}

I assume this info applies only in the case where I2C contents would be read by the onchip bootloader, not the method we're using.  Is that correct?  Is there any other "gotcha" to be aware of?  Thanks.

Jeff Brower
Signalogic

PS. A reference thread for background on this question is http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/362997/1281244.aspx#1281244 

  • Hi Jeff,

    Thanks for the detailed description of your implementation. The steps you have described seem fine to me. 

    The replacement boot parameter table that you see is ibl_i2crom.map.pp is the boot parameter table that will replace the I2C boot paramater table when the device boots for the first time from I2C and will not be read when you reenter the IBL.

    Regards,

    Rahul

  • Rahul-

    Thanks.  Here is an update.

    1) The above process works, with one exception...

    2) Modifying post_romparse for IBL didn't work -- the resulting .bin file seems fine but will not operate correctly.  The fix was to load the .out create by our IBL CCS project into mem at 0x00800000, and write 64 kByte of memory starting there to a .bin file.  From that point, the process is consistent, including use of eepromwriter.

    The end result works perfectly and is straightforward to debug using CCS.  I might suggest that TI have a CCS project for IBL, rather than the MinGW-MAD utilities method that seem hard to use and have resulted in numerous  posts on the forum (although I understand the rationale, supporting a wide range of devices and boot modes).

    For anyone interested in creating a CCS project for IBL, you can e-mail me offline and I'll give the list of files we had to include (36), include paths (build options), .cmd file, and some other notes.  I can't give the sources because we've modfied them for our custom C66x hardware.

    -Jeff

  • Hi Jeff,

    Thank you so much for your update. Please help us to close this thread.

    Thank you.