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.

Linux-c6x: Not boot custom board

Hello all!

I have board, based on TMDSEVM6678LE Rev. 2A. I try to boot my board with value DEVSTAT = 0x0001080B but with no result; Boot mode is:

- Little Endian
- i2c master mode
- Boot from i2c EEPROM at i2c bus address 0x51.
- i2c speed ~20kHZ

I built IBL in this sequence:

1) source linux-c6x-project/setenv
2) projects/ibl/release.sh

After process will complete, I config IBL

3) projects/ibl/src/util/iblConfig/build/iblConfig.out input.txt

input.txt is:

file_name = ibl.bin
device = 6
offset = 0x500
ethBoot-doBootp = FALSE
ethBoot-bootFormat = ibl_BOOT_FORMAT_BBLOB
ethBoot-ipAddr = 192.168.0.197
ethBoot-serverIp = 192.168.0.121
ethBoot-gatewayIp = 192.168.0.1
ethBoot-netmask = 255.255.255.0
ethBoot-fileName = c6678-le.bin

cp ibl.bin i2crom_0x51_c6678_le.bin

4) After that I burn i2crom_0x51_c6678_le.bin via CCS to i2c EEPROM

eepromwriter_evm6678l.out eepromwriter_input.txt

eepromwriter_input.txt is:

file_name = i2crom_0x51_c6678_le.bin
bus_addr = 81
start_addr = 0
swap_data = 0

Burn complete successfully.

After power up my board on i2c lines: I2CCLK and I2CSDA i see signals. And they never not change their forms.

I suppose that my i2crom_0x51_c6678_le.bin is incorrect or I lost some operation during IBL config.

Please, tell me:

1) how I can properly prepare IBL boot image for i2c (if I rebuilt IBL for EVM it will boot fine). In case of my board IBL never call the main( ) from main/iblinit.c and the main( ) from main/iblmain.c.

2) I read all related documentation about booting process and look into ibl source code but don't clearly understand boot sequence. Can you explain me step by step how system bootint with ibl and what function's are calling.

If you need additional information I will provide it.

Thank you.


  • Update 1:

    Looking into eepromwriter_evm6678l.out source code, I see that this program don't read any data into memory from file pointed in eepromwriter_input.txt. After loading this file contents into memory via JTAG and run program I see my boot messages in console. IBL for EVM I programmed in linux via the program_evm.js but for custom board via CCS in Windows. I don't suppose that there are such differences in this two methods.

    Thank you for all.

  • Update 2:

    Please tell me, it is correct that I need define IBL_ENTER_ROM if I have non i2c boot mode? If IBL_ENTER_ROM is defined IBL hang in function iblEnterRom() in src/main/iblinit.c. Here minicom log:

    Start IBL init
    Start iblEnableEDC()...
    ...complete
    Start iblEnterRom()...

    If IBL_ENTER_ROM not defined IBL hang in function iblBootBtbl() in src/main/iblinit.c. Here minicom log:

    Start IBL init
    Start iblEnableEDC()...
    ...complete
    Start iblBootBtbl()...

    Please explain to me, how IBL pass control to main() in src/main/iblmain.c in case i2c boot? Or my IBL image not "full" and I forgot something?

    Thank you!

  • Hi, Viladimir,

    When you flashing the IBL, you didn't mention if the dip switch is set to no boot mode. It will need to be in no boot mode otherwise the flashing result is unpredictable. You can take a look at the User's Guide for details.

    Rex

  •   Hello, Rex!
      Thank you for your answer! In case of programming IBL into EVM, dip switches are set in no boot mode, as stated in User's Guide.  In case of programming IBL into custom board switches was set as I talked in the first post DEVSTAT = 0x0001080B. But processor is stoped, and I load IBL content from file into internal processor memory at address 0x0C000000. After burning eeprom-writer read data from i2c EEPROM and compare readed data and  say that no error occures. I suppose that IBL writing was completed correctly.
      In IBL init stage I add initialization UART and GPIO (after calling devicePllConfig() in main() from srs/main/iblinit.c) to write early messages in console and drive LEDs. After power up board I see several messages and my LEDs is in desired state.
      May be my additional code for init LEDs and UART (I change makefiles and *.inc files) lead IBL for hanging in iblEnterRom() or in iblBootBtbl()? For example size of IBL image is increased or decreased.
      Where I can get information about  the boot table processor?
      Which steps I need to do for getting properly IBL image file?
     
      Thank you!

  • Update 3:

    Hello Rex!

    As you mention about no boot mode for board, I set value on DEVSTAT = 0x0001 before programming, and then burn IBL image. In that case I have another IBL behavior after power up board, but the programming log is the same in any case.

    This is programming log:

    [C66xx_0] EEPROM Writer Utility Version 01.00.00.04

    Writing 53292 bytes from DSP memory address 0x0c000000 to EEPROM bus address 0x0051 starting from device address 0x0000 ...
    Reading 53292 bytes from EEPROM bus address 0x0051 to DSP memory address 0x0c010000 starting from device address 0x0000 ...
    Verifying data read ...
    EEPROM programming completed successfully

    This is IBL booting log:

    Start IBL init
    Start iblEnableEDC()...
    ...complete
    Start iblBootBtbl()...
    ...complete
    jump to the exit point, which will be the entry point for the full IBL

    IBL version: 1.0.0.17 <--- this is from src/main/iblmain.c main() function!!!

    Thank you for your advice!