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.

How to implement a boot C66x procedure using EMIF16 and MAD utilities?

We are designing a custom board with the C6678 which will arrive any day now. I would really appreciate any kind of help & comments on the following.


We will use the EMIF16 boot method, and we will use the MAD utils to do the multicore deployment. Because there are no boot examples/demos on the EMIF16 boot, and because the Advantech EVM board does not support testing of EMIF16 boot, we will have to develop the boot procedures before we get a chance to test it. Eventually we will of course test it on our new custom designed board. It would be of excellent help if we could get any kind of help and-/or input (preferrably example code, of course) on how to do this. Our current strategy is as follows:

We use a 2nd level boot (I2C) that implements the PLL bugfix, then setting up the boot mode for EMIF16, returning to the ROM bootloader, which then according to specs will make a branch to the start of EMIF16 (0x7000.0000). At this location, we need to have placed a 3rd level boot loader. This has to be a kind of pre-loader (with its entry point at 0x7000.0000) that configures EMIF/DDR3 correctly and then copies the pre-built MAD image from EMIF16 memory into DDR3, and then finally calling the 4th level boot which is the MAL tool (with its entry point at 0x8000.1040), which eventually starts up each core (that will start the 5th level boot loader, i.e. the NML tool).

If we are right, this would be the (only sensible?) way to boot assuming that we need to choose EMIF16 boot mode and the MAD utilities for deployment. As a side note, the reason we need to execute the MAD blob from DDR3 and not from the EMIF16 is for performance.

Thus, what we have to implement ourselves is the 3rd level boot loader and some utility to create a special binary "blob" containing the 3rd level boot loader plus the pre-built regular MAD image/blob. This special blob will be loaded into EMIF16 memory from the host (outside our board) before the DSP is started.

/Marty

 

  • Marty,

    If the EMIF16 device is a NAND device on your board, you don't need to implement your 3rd level boot loader, the existing IBL does support initializing the PLL/DDR and loading an application image from the NAND in the I2C boot mode. The only modification you need to do is changing the IBL boot parameters to do NAND boot by default.

    If your EMIf16 device is not NAND, you may either change the IBL to hook up your storage device driver to the EMIF16 interface, or as you said to implement your 3rd level boot loader. This loader should be pretty simple, just initialize the DDR and copy the image. You may refer to the existing IBL code for your implementation.


    Best Regards,

    Hao.