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.

RBL memory boot on EVMK2H

Other Parts Discussed in Thread: TCI6638K2K

Hi experts,

 

My setup:

Board: EVMK2H

MCSDK: MCSDK_bios_3_01_04_07

 

    Seriously, there are some reasons to our leader decides using DSP only boot. First, we have some legacy code of DSP. Second, the important cause is that the rest share memory of our EVMK2H are not enough to implement Arm+Linux Boot.Third,6638K2K can support DSP only Boot according the document, SPRS836D— TCI6638K2K 8.1.2 Boot Modes Supported.

    We want to implement DSP only boot using flash memory. You can tell me if we can only use RBL to implement DSP flash boot or do we need to use the IBL? Do the NOR flash and the NAND flash all achieve our need?

 

Thanks!

 

Regards,

Brian

  • Dear Brian,
    You can boot the board directly from NAND, NOR,(memory boot) SPI, UART (peripheral boot) using RBL.
    No need to use IBL for Keystone2 devices(K2H).
    Please do check the below TI wiki page.
    processors.wiki.ti.com/.../KeystoneII_Boot_Examples
  • Hi experts,

     

    My setup:

    Board: EVMK2H Rev 40.

    MCSDK: MCSDK_bios_3_01_04_07

     

    Seriously, there are some reasons to our leader decides using DSP only boot. First,we have some legacy code of DSP. Second, the important cause is that the rest share memory of our EVMK2H are not enough to implement Arm+Linux Boot.Third,6638K2K can support DSP only Boot according the document, SPRS836D— TCI6638K2K 8.1.2 Boot Modes Supported.

     

    I refer to the following article with IPCGR way for waking up core1 to run , but it doesn’t work.

     

    Article:

    1. https://e2e.ti.com/support/dsp/c6000_multicore_dsps/f/639/p/316134/1100284#1100284
    2. https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/290429/1014109#1014109

     

    My testing result:

     

    // The values of three reg. in memory all don’t change. 

              *(Uint32 *)(0x02620038)=0x83e70b13; //kick0

              *(Uint32 *)(0x0262003C)=0x95a4f1e0; //kick1

              *(Uint32 *)(0x02620240)=0x00000001; //IPCGR

     

    //  The value of the IPCGR reg. in memory changes to 0x95a4f1e0 .

        *(volatile Uint32 *)(0x02620038)=0x00000001;

        *(volatile Uint32 *)(0x0262003C)=0x83e70b13;

        *(volatile Uint32 *)(0x02620240)=0x95a4f1e0;

     

    //  The values of three reg. in memory all don’t change. 

        *(volatile Uint32 *)(0x02620038)=0x00000001;

              *(volatile Uint32 *)(0x0262003C)=0x83e70b13;

        *(volatile Uint32 *)(0x02620240)=0x00000001;

    // The IPCGR reg. is still failed.

     

    1.

    What happened ! How can I modify?

     

    2.

    What does the DSP_BOOT_ADDR0 means?

    What does the Boot Magic address means?

     

    Magic Address: The address where the core goes after the boot

    process begins (from idle, after it gets an interrupt)

    – The last 4 bytes of L2; For C6678, it is 0x0087 FFFC (local)

     

    Why the Boot Magic address is only one?

     

     

    Thanks!

     

    Regards,

    Brian

  • Brian,

    Thank you for the post. We will get back to you as soon as possible.
  • Brian,

    Here is an example for how to create a boot image for DSP boot master that you can use as reference.  This example was created for SPI flash, but the boot image without the byteswap operation can also be used for NAND.

    4846.DSP_SPI_boot_example.zip

    MCSDK and Processor SDK do not support this usecase, they only provide flashing utilities to write to the NAND.

    Regards,

    Rahul

  • Brian,

    Please refer to my response and example on the e2e thread here:

    e2e.ti.com/.../1945745

    THe code in testsmall.c has all the required IPCGR setting to wake up slave cores. Please review the code and let us know if you have any questions regarding the same.

    Regards,
    Rahul
  • Thank you!
    Does RBL DSP Nor flash boot or RBL DSP Nand flash boot on EVMK2H can support multi-core boot or multi Stage boot ?
  • Yes, all boot modes can support multi-core boot and multi-stage boot. The example that I have provided boots on core0 and then wakes up all slave cores. It is a single stage boot examples but you can reenter boot using _romtBootReentry address on DSP side which is 0x20b00008.

    For ARM boot re-entry address, refer:
    processors.wiki.ti.com/.../KeystoneII_Boot_Examples

    Regards,
    Rahul
  • Hi Rahul,


    The testsmall.c is for ARM core & DSP core .

    I use IPCGR only for DSP core.

    What things in the example code should I notice ?

  • Hi Rahul,

    To boot this example, where should Boot modes switch be switched to ?

    Any of spirom.swap.dat & spirom.bin can be loaded by RBL in EVMK2H?

    After it has a successful boot, what happens?

    How can I confirm the example boots successfully?

    Thank you.

  • The K2H EVM hardware has been configured to support only ARM as the boot master. In order to set DSP as the boot master, you will need to use the BMC UART console and configure the DSP SPI boot mode as follows:

    >bootmode #8 0 <BootMode >
    >bootmode #8
    >reboot

    Compute Bootmode using description of Bootmode[15:0] in DEVSTAT register. After the device successfully boots, you will see the ARM and the DSP core execute code in MSMC /DDR (look at the program counter (PC))

    Regards,
    Rahul
  •  Hi Rahul and experts,

    There are some questions about 4846.DSP_SPI_boot_example.zip below:

    Q1:

    hawking_arm.rmd

    ROMS

    {

           ROM1 : origin = 0x0c010800  length = 0x0800 romwidth = 32 memwidth = 32

                     files = {  testsmall_arm.b }

    }

         1. Why the origin value is 0x0c010800 in “ROM1 : origin” ?

          2.  Is the origin value from testsmall_arm.map?

     

    Q2:

    1. To boot this example, where should Boot modes switch be switched to ?
    2. Any of spirom.swap.dat & spirom.bin can be loaded by RBL in EVMK2H?

     

    Q3:

    1. Does the ARM core support .btbl format?
    2. Could you tell me a generation process and used tools of the testsmall.btbl.ccs (such as .out—[hex6x]--> btbl)  ?

     

    Q4:

    1. What meanings are these terms in spirom.map?
    2. Could you offer me any reference document?

     

    Q5:

    Can the romtMonitorFunction function use DSP core to wake up the other cores?

    Best Regards, 
    Brian

     

  • Brian Li said:

    Q1:

    hawking_arm.rmd

    ROMS

    {

           ROM1 : origin = 0x0c010800  length = 0x0800 romwidth = 32 memwidth = 32

                     files = {  testsmall_arm.b }

    }

         1. Why the origin value is 0x0c010800 in “ROM1 : origin” ?

          2.  Is the origin value from testsmall_arm.map?

    Yes, the hexarm utility in the TI ARM compiler is used to create a contiguous binary image and the origin specifies the first memory location from which the utility should scan for memory sections. you can pick the origin from the map file by looking at the first memory section that has been used in the ARM binary. 

    In the map file even if you have IPCGR and IPCAR sections in the map file before the ARM_ENTRY, those sections are unused and hence can be ignore. for more details on creating  the .rmd file, refer to the TI ARM compiler documentation available under ccsv6\tools\compiler\ti-cgt-arm_xx_xx\docs

    Brian Li said:

    Q2:

    1. To boot this example, where should Boot modes switch be switched to ?
    2. Any of spirom.swap.dat & spirom.bin can be loaded by RBL in EVMK2H?

     

    the boot mode on the EVM is typically set using the boot switches but the boot switches currently support only 16 different ARM boot modes. The rest of the boot modes can be configured through the BMC UART console. I have provided instructions regarding this in your other e2e post from this morning. You will need to use the NOR writer provided in the Processor SDK to flash the image as described here:

    Brian Li said:

    Q3:

    1. Does the ARM core support .btbl format?
    2. Could you tell me a generation process and used tools of the testsmall.btbl.ccs (such as .out—[hex6x]--> btbl)  ?

    No, ARM supports general purpose header format and not boot table format.  The process for generating the DSP binary can be seen from the makefile in that example.

    hex6x -a -boot -bootorg 0x400 -romwidth 32 -memwidth 32 $< -o btbl.b
    b2ccs btbl.b testsmall.btbl.ccs
    
    ccsi2cblock 0x80 -infile testsmall.btbl.ccs -outfile testsmall.btbl.i2c.ccs
    
    romparse -nTables 1 -noPci spirom.map
    cp -f i2crom.ccs spirom.dat
    byteswapccs spirom.dat spirom.swap.dat
    ccs2bin spirom.swap.dat spirom.bin
    
    

    Brian Li said:

    Q4:

    1. What meanings are these terms in spirom.map?
    2. Could you offer me any reference document?

    spirom.map contains the boot parameter table that gets appended to the boot table. the ROM code reads the boot parameter table to configure the clocks and to setup the device.

    Unfortunately, most users on the K2H devices are using ARM boot as the master so we have documentation and examples mostly supporting that usecase. For DSP boot, we only have DSP Bootloader USer guide that only explains the functioning of the bootloader and the example that I provided provides the necessary utilities.

    Brian Li said:

    Q5:

    Can the romtMonitorFunction function use DSP core to wake up the other cores?

    romtMonitorFunction is only required for ARM to wakeup other cores, the DSP can access BOOTCFG registers without requiring boot monitor function. Refer to testsmall.c in the example

    regards,

    Rahul

  • Hi Rahul,

    After 4846.DSP_SPI_boot_example has booted successfully , what is its result?
    How can I confirm the example boots successfully?
    For example, any of global variables changing it value following the code let me check whether is the boot successful?
    any other way?

    Thank you!