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.

ARM Boot magic address

Other Parts Discussed in Thread: TCI6630K2L

Hello,

I am working on an ARM application, and I would like to start the secondary ARM core. I use the TCI6630K2L platform, with two ARM Cortex A15.

In the datasheet and the ARM bootloader documentation, I do not found the boot magic address for the ARM core. It is ok for the DSP, but not for the ARM.

Do you have more information about this for the K2L processor?


Regards,

William

  • Hi,

    Welcome to the TI E2E forum. I hope you will find many good answers here and in the TI.com documents and in the TI Wiki Pages (for processor issues). Be sure to search those for helpful information and to browse for the questions others may have asked on similar topics (e2e.ti.com).

    Thanks.

  • Hi William,

    The ARM magic addresses are: 0x0c1ad000 for ARM0 and 0x0c1ad004 for ARM1.

    Let us know if you need more assistance.

    Regards,

    Mike

  • Thank you for your reply.

    I tried with this addresses, but my application seems not working, I have to investigate on it.
    Where did you find this addresses?

    Perhaps my method is not right. Currently, I set the boot magic address, set the IPCGR9 (with lock/unlock KICK) to 1, and I send a "sev" command.

    Regards,
    William
  • Hi William,

    You may have to power up the secondary core after filling in your magic address.  Try this:

    #define TETRIS_BASE                 0x01E80000
    #define TETRIS_PTCMD_CPU(X)         *(unsigned int*)(TETRIS_BASE + 0x400 + (X * 0xC))
    #define TETRIS_PDSTAT_CPU(X)         *(unsigned int*)(TETRIS_BASE + 0x404 + (X * 0xC))
    #define TETRIS_PDCTL_CPU(X)         *(unsigned int*)(TETRIS_BASE + 0x408 + (X * 0xC))
    
            //power on ARM Core(corenum)
            TETRIS_PDCTL_CPU(corenum)   = 0x00000000;
            TETRIS_PTCMD_CPU(corenum)   = 0x00000001;

    Regards,

    Mike

  • Now, the ARM1 core is activated and powered, I can acces to it through a debug session.

    But, the core does not start on the entry point, I think is in the RBL.

    See what I am doing in my code.

    #define ARM_BOOT_MAGIC_0        0x0c1ad000
    #define ARM_BOOT_MAGIC_1        0x0c1ad004
    #define ARM_IPC_0               0x02620260
    #define ARM_IPC_1               0x02620264
    
    /* Unlock KICK */
    
    *(volatile uint32_t *) ARM_BOOT_MAGIC_1 = entry_addr;
    
    /* Power Up */
    
    *(volatile uint32_t *) ARM_IPC_1 |= 1u;
    
    /* Lock KICK */

    Regards,

    William

  • Hi William,
    I think I gave you the wrong magic addresses. Try: 0x0c1d2500 and 0x0c1d2504.

    The ones I gave you are for a similar processor.

    Regards.
    Mike
  • Thank you, it is working!

    Just for information, the ARM 1 core does not need IPC to start at the boot magic address. Just after the power up, the core use directly the boot magic address, it does not wait for an interrupt.

    Regards,
    William