TCM, AXIF CRAM

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

TCM, AXIF CRAM

950 Views
HiddenSquid
Contributor III

Hello,

I have some question about different RAM sections.

My setup:
S32E288-975EVB
S32 Design Studio 3.6.4
S32 Debug Probe

I have created an S32E288 project, where I have marked that I would like to use multiple cores and set my boot core as the M33. It then created multiple sub-projects for me, one for each core, with a total of 5 (M33, R52_0_0, R52_0_1, R52_1_0, R52_1_1), since I'm running them all in lockstep mode. I am able to generate and flash my boot core binaries as a BLOB to flash and run my boot code non-volatile. 

I am now trying to bring up all the other cores for non-volatile use and I think I have managed to turn the cores on, but I am missing the runnable code from RAM.

I can see from the linker file, that there are multiple memory section like TCM-A, -B, -C, AXIM CRAM sections, AXIF CRAM section and so on:

* Target device: This linker is demo and it is using for device S32Z2xx and S32E2xx only
* Target core: core 0 cluster 0 (RTU0)
* Linker support for application running on RTU0 core0 only. It need to align with MPU default setup in core.c as well.
* Memory setting: Local ram of RTU0 (CRAM and DRAM)
*/

/*
* GCC Linker Command File:
* 0x30000000    0x3000FFFF  65536    ; RTU0_R52_0_TCM_A
* 0x30100000    0x30103FFF  16384    ; RTU0_R52_0_TCM_B
* 0x30200000    0x30203FFF  16384    ; RTU0_R52_0_TCM_C
* 0x31780000    0x317BFFFF  262144   ; RTU0_DRAM_0 (Fast Data 0)
* 0x317C0000    0x317FFFFF  262144   ; RTU0_DRAM_1 (Fast Data 1)
* 0x31800000    0x3187FFFF  524288   ; RTU0_DRAM_2 (Fast Data 2)
* 0x32100000    0x321FFFFF  1048575  ; RTU0_CRAM_0 (Code ram 0)
* 0x32200000    0x322FFFFF  1048575  ; RTU0_CRAM_1 (Code ram 1)
* 0x32300000    0x323FFFFF  1048575  ; RTU0_CRAM_2 (Code ram 2)
* 0x32400000    0x324FFFFF  1048575  ; RTU0_CRAM_3 (Code ram 3)
* 0x32500000    0x325FFFFF  1048575  ; RTU0_CRAM_4 (Code ram 4)
* 0x32600000    0x326FFFFF  1048575  ; RTU0_CRAM_5 (Code ram 5)
* 0x32700000    0x327FFFFF  1048575  ; RTU0_CRAM_6 (Code ram 6)
* 0x79900000    0x799FFFFF  1048575  ; RTU0_CRAM_0_AXIF (Code ram 0 AXIF)
* 0x79A00000    0x79AFFFFF  1048575  ; RTU0_CRAM_1_AXIF (Code ram 1 AXIF)
* 0x79B00000    0x79BFFFFF  1048575  ; RTU0_CRAM_2_AXIF (Code ram 2 AXIF)
* 0x79C00000    0x79CFFFFF  1048575  ; RTU0_CRAM_3_AXIF (Code ram 3 AXIF)
* 0x79D00000    0x79DFFFFF  1048575  ; RTU0_CRAM_4_AXIF (Code ram 4 AXIF)
* 0x79E00000    0x79EFFFFF  1048575  ; RTU0_CRAM_5_AXIF (Code ram 5 AXIF)
* 0x79F00000    0x79FFFFFF  1048575  ; RTU0_CRAM_6_AXIF (Code ram 6 AXIF)
* 0x4E400000    0x4E400FFF  4096     ; AE_SRAM
*/
HEAP_SIZE  = DEFINED(__heap_size__)  ? __heap_size__  : 0x00001000;

ENTRY(Reset_Handler)

MEMORY
{
    int_sram_no_cacheable_smu_m33   : ORIGIN = 0x250C0000, LENGTH = 0x0003C000    /* 240KB, needs to include int_results  */

    /*RTU0 ram section */
    int_atcm_c0_0               : ORIGIN = 0x30000000, LENGTH = 0x00010000    /* 64K */
    int_btcm_c0_0               : ORIGIN = 0x30100000, LENGTH = 0x00004000    /* 16K */
    int_ctcm_c0_0               : ORIGIN = 0x30200000, LENGTH = 0x00004000    /* 16K */

    int_atcm_c0_1               : ORIGIN = 0x30400000, LENGTH = 0x00010000    /* 64K */
    int_btcm_c0_1               : ORIGIN = 0x30500000, LENGTH = 0x00004000    /* 16K */
    int_ctcm_c0_1               : ORIGIN = 0x30600000, LENGTH = 0x00004000    /* 16K */

    int_atcm_c0_2               : ORIGIN = 0x30800000, LENGTH = 0x00010000    /* 64K */
    int_btcm_c0_2               : ORIGIN = 0x30900000, LENGTH = 0x00004000    /* 16K */
    int_ctcm_c0_2               : ORIGIN = 0x30A00000, LENGTH = 0x00004000    /* 16K */

    int_atcm_c0_3               : ORIGIN = 0x30C00000, LENGTH = 0x00010000    /* 64K */
    int_btcm_c0_3               : ORIGIN = 0x30D00000, LENGTH = 0x00004000    /* 16K */
    int_ctcm_c0_3               : ORIGIN = 0x30E00000, LENGTH = 0x00004000    /* 16K */

    int_sram_dram_c0_0          : ORIGIN = 0x31780000, LENGTH = 0x00020000    /* 128KB DRAM0 */
    int_sram_dram_c0_1          : ORIGIN = 0x317A0000, LENGTH = 0x00020000    /* 128KB DRAM0 */
    int_sram_dram_c0_2          : ORIGIN = 0x317C0000, LENGTH = 0x00020000    /* 128KB DRAM1 */
    int_sram_dram_c0_3          : ORIGIN = 0x317E0000, LENGTH = 0x00020000    /* 128KB DRAM1 */

    int_sram_no_cacheable_c0_0  : ORIGIN = 0x31800000, LENGTH = 0x00010000    /* 64KB DRAM2, needs to include int_results  */
    int_sram_no_cacheable_c0_1  : ORIGIN = 0x31810000, LENGTH = 0x00010000    /* 64KB DRAM2, needs to include int_results  */
    int_sram_no_cacheable_c0_2  : ORIGIN = 0x31820000, LENGTH = 0x00010000    /* 64KB DRAM2, needs to include int_results  */
    int_sram_no_cacheable_c0_3  : ORIGIN = 0x31830000, LENGTH = 0x00010000    /* 64KB DRAM2, needs to include int_results  */

    int_sram_rtu0_shareable     : ORIGIN = 0x31840000, LENGTH = 0x00040000    /* 256KB DRAM2 */

    /* For code section there are 2 interface: AXI-M: Global port-bus which can use for loading image, access from inside/outside sub-system AXI-F: Read-only port-bus, faster interface for code access. For this demo we're using AXI-M to load image and AXI-F for code execution. */
    int_sram_c0_0               : ORIGIN = 0x32100000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_0                : ORIGIN = 0x322C0000, LENGTH = 0x00000000    /* End of core 0_0 */
    int_sram_c0_0_axif          : ORIGIN = 0x79900000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_0_axif           : ORIGIN = 0x79AC0000, LENGTH = 0x00000000    /* End of core 0_0 */

    int_sram_c0_1               : ORIGIN = 0x322C0000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_1                : ORIGIN = 0x32480000, LENGTH = 0x00000000    /* End of core 0_1 */
    int_sram_c0_1_axif          : ORIGIN = 0x79AC0000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_1_axif           : ORIGIN = 0x79C80000, LENGTH = 0x00000000    /* End of core 0_1 */

    int_sram_c0_2               : ORIGIN = 0x32480000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_2                : ORIGIN = 0x32640000, LENGTH = 0x00000000    /* End of core 0_2 */
    int_sram_c0_2_axif          : ORIGIN = 0x79C80000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_2_axif           : ORIGIN = 0x79E40000, LENGTH = 0x00000000    /* End of core 0_2 */

    int_sram_c0_3               : ORIGIN = 0x32640000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_3                : ORIGIN = 0x32800000, LENGTH = 0x00000000    /* End of core 0_3 */
    int_sram_c0_3_axif          : ORIGIN = 0x79E40000, LENGTH = 0x001C0000    /* ~1.8MB */
    ram_end_c0_3_axif           : ORIGIN = 0x7A000000, LENGTH = 0x00000000    /* End of core 0_3 */

I understand that Tightly Coupled Memory is a part of RAM and it is even highly recommended to run code from TCM as it only takes one cycle to retrieve data from it. 

Therefore:

  1. What is the difference between TCM-A, -B and -C and what are the usecases for each?
  2. Why wouldn't I or why doesn't the demo use TCM to run code?
    • Can the SMU core even write TCM?

Additionally I can see from my M33 project Project_Settings -> Startup_Code -> system.c, that turning on the used cores is actually implemented through SystemInit() with:

Sys_StartSecondaryCores()
/*================================================================================================*/
/**
* @brief Sys_StartSecondaryCores
* @details Function used to start the secondary cores
*/
/*================================================================================================*/
static void Sys_StartSecondaryCores(void)
{
    /* Turn on partitions */
    Sys_PartitionsTurnOn();
    /* Configure Split-lock RTU0 if M33 core is boot core */
#if (defined(CORE_M33_0) && \
     (defined(START_CR52_0_0) || defined(START_CR52_0_1) || defined(START_CR52_0_2) || defined(START_CR52_0_3)) \
    )
    #ifndef RTU0_R52_LOCKSTEP_MODE
        IP_RTU0__GPR->CFG_CORE |= RTU_GPR_CFG_CORE_SPLT_LCK_MASK;
    #endif
#endif
    /* Configure Split-lock RTU1 */
#if (defined(START_CR52_1_0) || defined(START_CR52_1_1) || defined(START_CR52_1_2) || defined(START_CR52_1_3))
    #ifndef RTU1_R52_LOCKSTEP_MODE
        IP_RTU1__GPR->CFG_CORE |= RTU_GPR_CFG_CORE_SPLT_LCK_MASK;
    #endif
#endif
    /* Release secondary cores to exit reset */
#ifdef START_CR52_0_0
    extern const uint32 __CORE_R52_0_0_START_ADDRESS;

    IP_MC_ME->PRTN1_CORE0_ADDR = (uint32)&__CORE_R52_0_0_START_ADDRESS;
    IP_MC_ME->PRTN1_CORE0_PCONF = 1;
    IP_MC_ME->PRTN1_CORE0_PUPD = 1;
    IP_MC_ME->CTL_KEY = 0x5AF0;
    IP_MC_ME->CTL_KEY = 0xA50F;
    while (!(IP_MC_ME->PRTN1_CORE0_STAT & MC_ME_PRTN1_CORE0_STAT_CCS_MASK)) {};
    IP_MC_RGM->PRST_0[1].PRST_0 &= ~MC_RGM_PRST_0_PERIPH_65_RST_MASK;
    while(IP_MC_RGM->PSTAT_0[1].PSTAT_0 & MC_RGM_PRST_0_PERIPH_65_RST_MASK);
#endif /*START_CR52_0_0*/
...

 and Sys_PartitionsTurnOn()

/**
* @brief Sys_PartitionsTurnOn
* @details Function used to turn on partitions
*/
/*================================================================================================*/
#if (defined(START_CR52_0_0) || defined(START_CR52_0_1) || defined(START_CR52_0_2) || defined(START_CR52_0_3) || \
     defined(START_CR52_1_0) || defined(START_CR52_1_1) || defined(START_CR52_1_2) || defined(START_CR52_1_3) || defined(START_CM33_0) \
    )
static void Sys_PartitionsTurnOn(void)
{
    /* Turn on RTU0 partition if M33 core is boot core */
#if (defined(CORE_M33_0) && \
     (defined(START_CR52_0_0) || defined(START_CR52_0_1) || defined(START_CR52_0_2) || defined(START_CR52_0_3)) \
    )
    /* Enable partition clock */
    IP_MC_ME->PRTN1_PCONF |= MC_ME_PRTN1_PCONF_PCE_MASK;
    IP_MC_ME->PRTN1_PUPD |= MC_ME_PRTN1_PUPD_PCUD_MASK;
    IP_MC_ME->CTL_KEY = 0x5AF0;
    IP_MC_ME->CTL_KEY = 0xA50F;
    while (!(IP_MC_ME->PRTN1_STAT & MC_ME_PRTN1_STAT_PCS_MASK));
    /* Release partition to exit reset */
    IP_MC_RGM->PRST_0[1].PRST_0 &= ~MC_RGM_PRST_0_PERIPH_64_RST_MASK;
    /* Disable OSS  */
    IP_MC_ME->PRTN1_PCONF &= ~MC_ME_PRTN1_PCONF_OSSE_MASK;
    IP_MC_ME->PRTN1_PUPD |= MC_ME_PRTN1_PUPD_OSSUD_MASK;
    IP_MC_ME->CTL_KEY = 0x5AF0;
    IP_MC_ME->CTL_KEY = 0xA50F;
    while(IP_MC_RGM->PSTAT_0[1].PSTAT_0 & MC_RGM_PRST_0_PERIPH_64_RST_MASK);
    while(IP_MC_ME->PRTN1_STAT & MC_ME_PRTN1_STAT_OSSS_MASK);
    /* Deactivate RTU0 fencing logic and enable SRAM interface */
    IP_GPR3->RTU0FDC = 0U;
    IP_RDC_0->RD1_CTRL_REG |= RDC_RD1_CTRL_REG_RD1_CTRL_UNLOCK_MASK;
    IP_RDC_0->RD1_CTRL_REG &= ~RDC_RD1_CTRL_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_MASK;
    while(IP_RDC_0->RD1_STAT_REG & RDC_RD1_STAT_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_STAT_MASK);
#endif
    /* Turn on RTU1 partition */
#if (defined(START_CR52_1_0) || defined(START_CR52_1_1) || defined(START_CR52_1_2) || defined(START_CR52_1_3))
    /* Enable partition clock */
    IP_MC_ME->PRTN2_PCONF |= MC_ME_PRTN2_PCONF_PCE_MASK;
    IP_MC_ME->PRTN2_PUPD |= MC_ME_PRTN2_PUPD_PCUD_MASK;
    IP_MC_ME->CTL_KEY = 0x5AF0;
    IP_MC_ME->CTL_KEY = 0xA50F;
    while (!(IP_MC_ME->PRTN2_STAT & MC_ME_PRTN2_STAT_PCS_MASK));
    /* Release partition to exit reset */
    IP_MC_RGM->PRST_0[2].PRST_0 &= ~MC_RGM_PRST_0_PERIPH_128_RST_MASK;
    /* Disable OSS  */
    IP_MC_ME->PRTN2_PCONF &= ~MC_ME_PRTN2_PCONF_OSSE_MASK;
    IP_MC_ME->PRTN2_PUPD |= MC_ME_PRTN2_PUPD_OSSUD_MASK;
    IP_MC_ME->CTL_KEY = 0x5AF0;
    IP_MC_ME->CTL_KEY = 0xA50F;
    while(IP_MC_RGM->PSTAT_0[2].PSTAT_0 & MC_RGM_PRST_0_PERIPH_128_RST_MASK);
    while(IP_MC_ME->PRTN2_STAT & MC_ME_PRTN2_STAT_OSSS_MASK);
    /* Deactivate RTU1 fencing logic and enable SRAM interface */
    IP_GPR3->RTU1FDC = 0U;
    IP_RDC_1->RD1_CTRL_REG |= RDC_RD1_CTRL_REG_RD1_CTRL_UNLOCK_MASK;
    IP_RDC_1->RD1_CTRL_REG &= ~RDC_RD1_CTRL_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_MASK;
    while(IP_RDC_1->RD1_STAT_REG & RDC_RD1_STAT_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_STAT_MASK);
    /* Configure REMAP for NICs */
    IP_RTU1__RTUM_NIC_D->REMAP = 0x02U;
    IP_RTU1__RTUF_NIC_D->REMAP = 0x02U;
    IP_RTU1__RTUP_NIC_B->REMAP = 0x02U;
    IP_RTU1__RTUE_NIC_D->REMAP = 0x02U;
#endif
}

 

But I can't find where the all the START_CR... defines are defined for actually turning the cores on. Is that some boot magic by the S32 Design Studio?

When the memory map marks "Slave Addressed by Each of the Masters" with colour codes for SMU, RTU0 Master, RTU1 Master:image.png

Does it mean that only the marked colour Master can access this part of memory? So for example, when R0-CPU0_ATCM is grey at 0x3000_0000, does that mean, that when SMU tries to read/write 0x3000_0000, an error is generated or what happens or what exactly does it mean? 

0 Kudos
Reply
3 Replies

795 Views
Joey_z
NXP Employee
NXP Employee

Hi,HiddenSquid

1.What is the difference between TCM-A, -B and -C and what are the usecases for each?
>>>You can refer to the attachment file for more the information of TCM-A, -B and -C. it is included in the RM.

2.Why wouldn't I or why doesn't the demo use TCM to run code?
>>>You can find the TCM be used to the R52 core, please following the Linker file picture in the attachment.

3.Can the SMU core even write TCM?
>>>For a Cortex-M33 core to access the address space of any TCM of an RTU Cortex-R52 core, you must initially perform additional configuration to ensure the correct operation of the accesses.

Hope this information can help you, I will continue check your other question.

BR

Joey

0 Kudos
Reply

609 Views
HiddenSquid
Contributor III

Hey @Joey_z 

Thank you for the reply! I have a couple follow up questions and actually also some answers I have found for my self.

  1. Are there any architectural/hardware restrictions for using TCM A, B and C for other than their intended purposes?
  2. If the TCM is mostly used, then why would I ever use CRAM or DRAM sections of the RTU0/1?
  3. So the only configurations, to access TCM from SMU, that need to be performed are the following?
    1. Disable caching on the appropriate R core
    2. Disable gathering on the appropriate R core
  4. >>>Regarding the magic defines:
    • They are mostly defined at two spots:
      • Project properties -> C/C+ build -> Settings -> Tool Settings -> Standard S32DS Assembler -> Preprocessor ->Defined Symbols
      • Project properties -> C/C+ build -> Settings -> Tool Settings -> Standard S32DS C Compiler -> Preprocessor -> Defined Symbols
    • I have not yet confirmed whether they are only applied during debugging or for every build, but it would make sense they are defined for every build.

Thanks for all the help!

0 Kudos
Reply

827 Views
Joey_z
NXP Employee
NXP Employee

Hi,HiddenSquid

I have received your questions and will help you to check it.

BR

Joey

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2329936%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ETCM%2C%20AXIF%20CRAM%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2329936%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3EI%20have%20some%20question%20about%20different%20RAM%20sections.%3C%2FP%3E%3CP%3EMy%20setup%3A%3CBR%20%2F%3ES32E288-975EVB%3CBR%20%2F%3ES32%20Design%20Studio%203.6.4%3CBR%20%2F%3ES32%20Debug%20Probe%3C%2FP%3E%3CP%3EI%20have%20created%20an%20S32E288%20project%2C%20where%20I%20have%20marked%20that%20I%20would%20like%20to%20use%20multiple%20cores%20and%20set%20my%20boot%20core%20as%20the%20M33.%20It%20then%20created%20multiple%20sub-projects%20for%20me%2C%20one%20for%20each%20core%2C%20with%20a%20total%20of%205%20(M33%2C%20R52_0_0%2C%20R52_0_1%2C%20R52_1_0%2C%20R52_1_1)%2C%20since%20I'm%20running%20them%20all%20in%20lockstep%20mode.%20I%20am%20able%20to%20generate%20and%20flash%20my%20boot%20core%20binaries%20as%20a%20BLOB%20to%20flash%20and%20run%20my%20boot%20code%20non-volatile.%26nbsp%3B%3C%2FP%3E%3CP%3EI%20am%20now%20trying%20to%20bring%20up%20all%20the%20other%20cores%20for%20non-volatile%20use%20and%20I%20think%20I%20have%20managed%20to%20turn%20the%20cores%20on%2C%20but%20I%20am%20missing%20the%20runnable%20code%20from%20RAM.%3C%2FP%3E%3CP%3EI%20can%20see%20from%20the%20linker%20file%2C%20that%20there%20are%20multiple%20memory%20section%20like%20TCM-A%2C%20-B%2C%20-C%2C%20AXIM%20CRAM%20sections%2C%20AXIF%20CRAM%20section%20and%20so%20on%3A%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E*%20Target%20device%3A%20This%20linker%20is%20demo%20and%20it%20is%20using%20for%20device%20S32Z2xx%20and%20S32E2xx%20only%0A*%20Target%20core%3A%20core%200%20cluster%200%20(RTU0)%0A*%20Linker%20support%20for%20application%20running%20on%20RTU0%20core0%20only.%20It%20need%20to%20align%20with%20MPU%20default%20setup%20in%20core.c%20as%20well.%0A*%20Memory%20setting%3A%20Local%20ram%20of%20RTU0%20(CRAM%20and%20DRAM)%0A*%2F%0A%0A%2F*%0A*%20GCC%20Linker%20Command%20File%3A%0A*%200x30000000%20%20%20%200x3000FFFF%20%2065536%20%20%20%20%3B%20RTU0_R52_0_TCM_A%0A*%200x30100000%20%20%20%200x30103FFF%20%2016384%20%20%20%20%3B%20RTU0_R52_0_TCM_B%0A*%200x30200000%20%20%20%200x30203FFF%20%2016384%20%20%20%20%3B%20RTU0_R52_0_TCM_C%0A*%200x31780000%20%20%20%200x317BFFFF%20%20262144%20%20%20%3B%20RTU0_DRAM_0%20(Fast%20Data%200)%0A*%200x317C0000%20%20%20%200x317FFFFF%20%20262144%20%20%20%3B%20RTU0_DRAM_1%20(Fast%20Data%201)%0A*%200x31800000%20%20%20%200x3187FFFF%20%20524288%20%20%20%3B%20RTU0_DRAM_2%20(Fast%20Data%202)%0A*%200x32100000%20%20%20%200x321FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_0%20(Code%20ram%200)%0A*%200x32200000%20%20%20%200x322FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_1%20(Code%20ram%201)%0A*%200x32300000%20%20%20%200x323FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_2%20(Code%20ram%202)%0A*%200x32400000%20%20%20%200x324FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_3%20(Code%20ram%203)%0A*%200x32500000%20%20%20%200x325FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_4%20(Code%20ram%204)%0A*%200x32600000%20%20%20%200x326FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_5%20(Code%20ram%205)%0A*%200x32700000%20%20%20%200x327FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_6%20(Code%20ram%206)%0A*%200x79900000%20%20%20%200x799FFFFF%20%201048575%20%20%3B%20RTU0_CRAM_0_AXIF%20(Code%20ram%200%20AXIF)%0A*%200x79A00000%20%20%20%200x79AFFFFF%20%201048575%20%20%3B%20RTU0_CRAM_1_AXIF%20(Code%20ram%201%20AXIF)%0A*%200x79B00000%20%20%20%200x79BFFFFF%20%201048575%20%20%3B%20RTU0_CRAM_2_AXIF%20(Code%20ram%202%20AXIF)%0A*%200x79C00000%20%20%20%200x79CFFFFF%20%201048575%20%20%3B%20RTU0_CRAM_3_AXIF%20(Code%20ram%203%20AXIF)%0A*%200x79D00000%20%20%20%200x79DFFFFF%20%201048575%20%20%3B%20RTU0_CRAM_4_AXIF%20(Code%20ram%204%20AXIF)%0A*%200x79E00000%20%20%20%200x79EFFFFF%20%201048575%20%20%3B%20RTU0_CRAM_5_AXIF%20(Code%20ram%205%20AXIF)%0A*%200x79F00000%20%20%20%200x79FFFFFF%20%201048575%20%20%3B%20RTU0_CRAM_6_AXIF%20(Code%20ram%206%20AXIF)%0A*%200x4E400000%20%20%20%200x4E400FFF%20%204096%20%20%20%20%20%3B%20AE_SRAM%0A*%2F%0AHEAP_SIZE%20%20%3D%20DEFINED(__heap_size__)%20%20%3F%20__heap_size__%20%20%3A%200x00001000%3B%0A%0AENTRY(Reset_Handler)%0A%0AMEMORY%0A%7B%0A%20%20%20%20int_sram_no_cacheable_smu_m33%20%20%20%3A%20ORIGIN%20%3D%200x250C0000%2C%20LENGTH%20%3D%200x0003C000%20%20%20%20%2F*%20240KB%2C%20needs%20to%20include%20int_results%20%20*%2F%0A%0A%20%20%20%20%2F*RTU0%20ram%20section%20*%2F%0A%20%20%20%20int_atcm_c0_0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30000000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064K%20*%2F%0A%20%20%20%20int_btcm_c0_0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30100000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%20%20%20%20int_ctcm_c0_0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30200000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%0A%20%20%20%20int_atcm_c0_1%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30400000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064K%20*%2F%0A%20%20%20%20int_btcm_c0_1%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30500000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%20%20%20%20int_ctcm_c0_1%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30600000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%0A%20%20%20%20int_atcm_c0_2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30800000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064K%20*%2F%0A%20%20%20%20int_btcm_c0_2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30900000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%20%20%20%20int_ctcm_c0_2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30A00000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%0A%20%20%20%20int_atcm_c0_3%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30C00000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064K%20*%2F%0A%20%20%20%20int_btcm_c0_3%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30D00000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%20%20%20%20int_ctcm_c0_3%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x30E00000%2C%20LENGTH%20%3D%200x00004000%20%20%20%20%2F*%2016K%20*%2F%0A%0A%20%20%20%20int_sram_dram_c0_0%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x31780000%2C%20LENGTH%20%3D%200x00020000%20%20%20%20%2F*%20128KB%20DRAM0%20*%2F%0A%20%20%20%20int_sram_dram_c0_1%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x317A0000%2C%20LENGTH%20%3D%200x00020000%20%20%20%20%2F*%20128KB%20DRAM0%20*%2F%0A%20%20%20%20int_sram_dram_c0_2%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x317C0000%2C%20LENGTH%20%3D%200x00020000%20%20%20%20%2F*%20128KB%20DRAM1%20*%2F%0A%20%20%20%20int_sram_dram_c0_3%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x317E0000%2C%20LENGTH%20%3D%200x00020000%20%20%20%20%2F*%20128KB%20DRAM1%20*%2F%0A%0A%20%20%20%20int_sram_no_cacheable_c0_0%20%20%3A%20ORIGIN%20%3D%200x31800000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064KB%20DRAM2%2C%20needs%20to%20include%20int_results%20%20*%2F%0A%20%20%20%20int_sram_no_cacheable_c0_1%20%20%3A%20ORIGIN%20%3D%200x31810000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064KB%20DRAM2%2C%20needs%20to%20include%20int_results%20%20*%2F%0A%20%20%20%20int_sram_no_cacheable_c0_2%20%20%3A%20ORIGIN%20%3D%200x31820000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064KB%20DRAM2%2C%20needs%20to%20include%20int_results%20%20*%2F%0A%20%20%20%20int_sram_no_cacheable_c0_3%20%20%3A%20ORIGIN%20%3D%200x31830000%2C%20LENGTH%20%3D%200x00010000%20%20%20%20%2F*%2064KB%20DRAM2%2C%20needs%20to%20include%20int_results%20%20*%2F%0A%0A%20%20%20%20int_sram_rtu0_shareable%20%20%20%20%20%3A%20ORIGIN%20%3D%200x31840000%2C%20LENGTH%20%3D%200x00040000%20%20%20%20%2F*%20256KB%20DRAM2%20*%2F%0A%0A%20%20%20%20%2F*%20For%20code%20section%20there%20are%202%20interface%3A%20AXI-M%3A%20Global%20port-bus%20which%20can%20use%20for%20loading%20image%2C%20access%20from%20inside%2Foutside%20sub-system%20AXI-F%3A%20Read-only%20port-bus%2C%20faster%20interface%20for%20code%20access.%20For%20this%20demo%20we're%20using%20AXI-M%20to%20load%20image%20and%20AXI-F%20for%20code%20execution.%20*%2F%0A%20%20%20%20int_sram_c0_0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x32100000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x322C0000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_0%20*%2F%0A%20%20%20%20int_sram_c0_0_axif%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79900000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_0_axif%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79AC0000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_0%20*%2F%0A%0A%20%20%20%20int_sram_c0_1%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x322C0000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_1%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x32480000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_1%20*%2F%0A%20%20%20%20int_sram_c0_1_axif%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79AC0000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_1_axif%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79C80000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_1%20*%2F%0A%0A%20%20%20%20int_sram_c0_2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x32480000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x32640000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_2%20*%2F%0A%20%20%20%20int_sram_c0_2_axif%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79C80000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_2_axif%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79E40000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_2%20*%2F%0A%0A%20%20%20%20int_sram_c0_3%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x32640000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_3%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x32800000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_3%20*%2F%0A%20%20%20%20int_sram_c0_3_axif%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x79E40000%2C%20LENGTH%20%3D%200x001C0000%20%20%20%20%2F*%20~1.8MB%20*%2F%0A%20%20%20%20ram_end_c0_3_axif%20%20%20%20%20%20%20%20%20%20%20%3A%20ORIGIN%20%3D%200x7A000000%2C%20LENGTH%20%3D%200x00000000%20%20%20%20%2F*%20End%20of%20core%200_3%20*%2F%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EI%20understand%20that%20Tightly%20Coupled%20Memory%20is%20a%20part%20of%20RAM%20and%20it%20is%20even%20highly%20recommended%20to%20run%20code%20from%20TCM%20as%20it%20only%20takes%20one%20cycle%20to%20retrieve%20data%20from%20it.%26nbsp%3B%3C%2FP%3E%3CP%3E%3CSTRONG%3ETherefore%3A%3C%2FSTRONG%3E%3C%2FP%3E%3COL%3E%3CLI%3EWhat%20is%20the%20difference%20between%20TCM-A%2C%20-B%20and%20-C%20and%20what%20are%20the%20usecases%20for%20each%3F%3C%2FLI%3E%3CLI%3EWhy%20wouldn't%20I%20or%20why%20doesn't%20the%20demo%20use%20TCM%20to%20run%20code%3F%3CUL%3E%3CLI%3ECan%20the%20SMU%20core%20even%20write%20TCM%3F%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3EAdditionally%20I%20can%20see%20from%20my%20M33%20project%20Project_Settings%20-%26gt%3B%20Startup_Code%20-%26gt%3B%20system.c%2C%20that%20turning%20on%20the%20used%20cores%20is%20actually%20implemented%20through%26nbsp%3B%3CSPAN%3ESystemInit()%20with%3A%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CSTRONG%3ESys_StartSecondaryCores()%3C%2FSTRONG%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%2F*%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D*%2F%0A%2F**%0A*%20%40brief%20Sys_StartSecondaryCores%0A*%20%40details%20Function%20used%20to%20start%20the%20secondary%20cores%0A*%2F%0A%2F*%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D*%2F%0Astatic%20void%20Sys_StartSecondaryCores(void)%0A%7B%0A%20%20%20%20%2F*%20Turn%20on%20partitions%20*%2F%0A%20%20%20%20Sys_PartitionsTurnOn()%3B%0A%20%20%20%20%2F*%20Configure%20Split-lock%20RTU0%20if%20M33%20core%20is%20boot%20core%20*%2F%0A%23if%20(defined(CORE_M33_0)%20%26amp%3B%26amp%3B%20%5C%0A%20%20%20%20%20(defined(START_CR52_0_0)%20%7C%7C%20defined(START_CR52_0_1)%20%7C%7C%20defined(START_CR52_0_2)%20%7C%7C%20defined(START_CR52_0_3))%20%5C%0A%20%20%20%20)%0A%20%20%20%20%23ifndef%20RTU0_R52_LOCKSTEP_MODE%0A%20%20%20%20%20%20%20%20IP_RTU0__GPR-%26gt%3BCFG_CORE%20%7C%3D%20RTU_GPR_CFG_CORE_SPLT_LCK_MASK%3B%0A%20%20%20%20%23endif%0A%23endif%0A%20%20%20%20%2F*%20Configure%20Split-lock%20RTU1%20*%2F%0A%23if%20(defined(START_CR52_1_0)%20%7C%7C%20defined(START_CR52_1_1)%20%7C%7C%20defined(START_CR52_1_2)%20%7C%7C%20defined(START_CR52_1_3))%0A%20%20%20%20%23ifndef%20RTU1_R52_LOCKSTEP_MODE%0A%20%20%20%20%20%20%20%20IP_RTU1__GPR-%26gt%3BCFG_CORE%20%7C%3D%20RTU_GPR_CFG_CORE_SPLT_LCK_MASK%3B%0A%20%20%20%20%23endif%0A%23endif%0A%20%20%20%20%2F*%20Release%20secondary%20cores%20to%20exit%20reset%20*%2F%0A%23ifdef%20START_CR52_0_0%0A%20%20%20%20extern%20const%20uint32%20__CORE_R52_0_0_START_ADDRESS%3B%0A%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_CORE0_ADDR%20%3D%20(uint32)%26amp%3B__CORE_R52_0_0_START_ADDRESS%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_CORE0_PCONF%20%3D%201%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_CORE0_PUPD%20%3D%201%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200x5AF0%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200xA50F%3B%0A%20%20%20%20while%20(!(IP_MC_ME-%26gt%3BPRTN1_CORE0_STAT%20%26amp%3B%20MC_ME_PRTN1_CORE0_STAT_CCS_MASK))%20%7B%7D%3B%0A%20%20%20%20IP_MC_RGM-%26gt%3BPRST_0%5B1%5D.PRST_0%20%26amp%3B%3D%20~MC_RGM_PRST_0_PERIPH_65_RST_MASK%3B%0A%20%20%20%20while(IP_MC_RGM-%26gt%3BPSTAT_0%5B1%5D.PSTAT_0%20%26amp%3B%20MC_RGM_PRST_0_PERIPH_65_RST_MASK)%3B%0A%23endif%20%2F*START_CR52_0_0*%2F%0A...%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3Band%26nbsp%3B%3CSTRONG%3E%3CSPAN%3ESys_PartitionsTurnOn()%3C%2FSPAN%3E%3C%2FSTRONG%3E%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%2F**%0A*%20%40brief%20Sys_PartitionsTurnOn%0A*%20%40details%20Function%20used%20to%20turn%20on%20partitions%0A*%2F%0A%2F*%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D*%2F%0A%23if%20(defined(START_CR52_0_0)%20%7C%7C%20defined(START_CR52_0_1)%20%7C%7C%20defined(START_CR52_0_2)%20%7C%7C%20defined(START_CR52_0_3)%20%7C%7C%20%5C%0A%20%20%20%20%20defined(START_CR52_1_0)%20%7C%7C%20defined(START_CR52_1_1)%20%7C%7C%20defined(START_CR52_1_2)%20%7C%7C%20defined(START_CR52_1_3)%20%7C%7C%20defined(START_CM33_0)%20%5C%0A%20%20%20%20)%0Astatic%20void%20Sys_PartitionsTurnOn(void)%0A%7B%0A%20%20%20%20%2F*%20Turn%20on%20RTU0%20partition%20if%20M33%20core%20is%20boot%20core%20*%2F%0A%23if%20(defined(CORE_M33_0)%20%26amp%3B%26amp%3B%20%5C%0A%20%20%20%20%20(defined(START_CR52_0_0)%20%7C%7C%20defined(START_CR52_0_1)%20%7C%7C%20defined(START_CR52_0_2)%20%7C%7C%20defined(START_CR52_0_3))%20%5C%0A%20%20%20%20)%0A%20%20%20%20%2F*%20Enable%20partition%20clock%20*%2F%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_PCONF%20%7C%3D%20MC_ME_PRTN1_PCONF_PCE_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_PUPD%20%7C%3D%20MC_ME_PRTN1_PUPD_PCUD_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200x5AF0%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200xA50F%3B%0A%20%20%20%20while%20(!(IP_MC_ME-%26gt%3BPRTN1_STAT%20%26amp%3B%20MC_ME_PRTN1_STAT_PCS_MASK))%3B%0A%20%20%20%20%2F*%20Release%20partition%20to%20exit%20reset%20*%2F%0A%20%20%20%20IP_MC_RGM-%26gt%3BPRST_0%5B1%5D.PRST_0%20%26amp%3B%3D%20~MC_RGM_PRST_0_PERIPH_64_RST_MASK%3B%0A%20%20%20%20%2F*%20Disable%20OSS%20%20*%2F%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_PCONF%20%26amp%3B%3D%20~MC_ME_PRTN1_PCONF_OSSE_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN1_PUPD%20%7C%3D%20MC_ME_PRTN1_PUPD_OSSUD_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200x5AF0%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200xA50F%3B%0A%20%20%20%20while(IP_MC_RGM-%26gt%3BPSTAT_0%5B1%5D.PSTAT_0%20%26amp%3B%20MC_RGM_PRST_0_PERIPH_64_RST_MASK)%3B%0A%20%20%20%20while(IP_MC_ME-%26gt%3BPRTN1_STAT%20%26amp%3B%20MC_ME_PRTN1_STAT_OSSS_MASK)%3B%0A%20%20%20%20%2F*%20Deactivate%20RTU0%20fencing%20logic%20and%20enable%20SRAM%20interface%20*%2F%0A%20%20%20%20IP_GPR3-%26gt%3BRTU0FDC%20%3D%200U%3B%0A%20%20%20%20IP_RDC_0-%26gt%3BRD1_CTRL_REG%20%7C%3D%20RDC_RD1_CTRL_REG_RD1_CTRL_UNLOCK_MASK%3B%0A%20%20%20%20IP_RDC_0-%26gt%3BRD1_CTRL_REG%20%26amp%3B%3D%20~RDC_RD1_CTRL_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_MASK%3B%0A%20%20%20%20while(IP_RDC_0-%26gt%3BRD1_STAT_REG%20%26amp%3B%20RDC_RD1_STAT_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_STAT_MASK)%3B%0A%23endif%0A%20%20%20%20%2F*%20Turn%20on%20RTU1%20partition%20*%2F%0A%23if%20(defined(START_CR52_1_0)%20%7C%7C%20defined(START_CR52_1_1)%20%7C%7C%20defined(START_CR52_1_2)%20%7C%7C%20defined(START_CR52_1_3))%0A%20%20%20%20%2F*%20Enable%20partition%20clock%20*%2F%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN2_PCONF%20%7C%3D%20MC_ME_PRTN2_PCONF_PCE_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN2_PUPD%20%7C%3D%20MC_ME_PRTN2_PUPD_PCUD_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200x5AF0%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200xA50F%3B%0A%20%20%20%20while%20(!(IP_MC_ME-%26gt%3BPRTN2_STAT%20%26amp%3B%20MC_ME_PRTN2_STAT_PCS_MASK))%3B%0A%20%20%20%20%2F*%20Release%20partition%20to%20exit%20reset%20*%2F%0A%20%20%20%20IP_MC_RGM-%26gt%3BPRST_0%5B2%5D.PRST_0%20%26amp%3B%3D%20~MC_RGM_PRST_0_PERIPH_128_RST_MASK%3B%0A%20%20%20%20%2F*%20Disable%20OSS%20%20*%2F%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN2_PCONF%20%26amp%3B%3D%20~MC_ME_PRTN2_PCONF_OSSE_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BPRTN2_PUPD%20%7C%3D%20MC_ME_PRTN2_PUPD_OSSUD_MASK%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200x5AF0%3B%0A%20%20%20%20IP_MC_ME-%26gt%3BCTL_KEY%20%3D%200xA50F%3B%0A%20%20%20%20while(IP_MC_RGM-%26gt%3BPSTAT_0%5B2%5D.PSTAT_0%20%26amp%3B%20MC_RGM_PRST_0_PERIPH_128_RST_MASK)%3B%0A%20%20%20%20while(IP_MC_ME-%26gt%3BPRTN2_STAT%20%26amp%3B%20MC_ME_PRTN2_STAT_OSSS_MASK)%3B%0A%20%20%20%20%2F*%20Deactivate%20RTU1%20fencing%20logic%20and%20enable%20SRAM%20interface%20*%2F%0A%20%20%20%20IP_GPR3-%26gt%3BRTU1FDC%20%3D%200U%3B%0A%20%20%20%20IP_RDC_1-%26gt%3BRD1_CTRL_REG%20%7C%3D%20RDC_RD1_CTRL_REG_RD1_CTRL_UNLOCK_MASK%3B%0A%20%20%20%20IP_RDC_1-%26gt%3BRD1_CTRL_REG%20%26amp%3B%3D%20~RDC_RD1_CTRL_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_MASK%3B%0A%20%20%20%20while(IP_RDC_1-%26gt%3BRD1_STAT_REG%20%26amp%3B%20RDC_RD1_STAT_REG_RD1_INTERCONNECT_INTERFACE_DISABLE_STAT_MASK)%3B%0A%20%20%20%20%2F*%20Configure%20REMAP%20for%20NICs%20*%2F%0A%20%20%20%20IP_RTU1__RTUM_NIC_D-%26gt%3BREMAP%20%3D%200x02U%3B%0A%20%20%20%20IP_RTU1__RTUF_NIC_D-%26gt%3BREMAP%20%3D%200x02U%3B%0A%20%20%20%20IP_RTU1__RTUP_NIC_B-%26gt%3BREMAP%20%3D%200x02U%3B%0A%20%20%20%20IP_RTU1__RTUE_NIC_D-%26gt%3BREMAP%20%3D%200x02U%3B%0A%23endif%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CP%3EBut%20I%20can't%20find%20where%20the%20all%20the%20START_CR...%20defines%20are%20defined%20for%20actually%20turning%20the%20cores%20on.%20%3CSTRONG%3EIs%20that%20some%20boot%20magic%20by%20the%20S32%20Design%20Studio%3F%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3EWhen%20the%20memory%20map%20marks%20%22Slave%20Addressed%20by%20Each%20of%20the%20Masters%22%20with%20colour%20codes%20for%20SMU%2C%20RTU0%20Master%2C%20RTU1%20Master%3A%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22image.png%22%20style%3D%22width%3A%20673px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22image.png%22%20style%3D%22width%3A%20673px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22image.png%22%20style%3D%22width%3A%20673px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22image.png%22%20style%3D%22width%3A%20673px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22image.png%22%20style%3D%22width%3A%20673px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F378840i741A3FA9D3D42820%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22image.png%22%20alt%3D%22image.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3EDoes%20it%20mean%20that%20only%20the%20marked%20colour%20Master%20can%20access%20this%20part%20of%20memory%3F%20So%20for%20example%2C%20when%20R0-CPU0_ATCM%20is%20grey%20at%200x3000_0000%2C%20does%20that%20mean%2C%20that%20when%20SMU%20tries%20to%20read%2Fwrite%200x3000_0000%2C%20an%20error%20is%20generated%20or%20what%20happens%20or%20what%20exactly%20does%20it%20mean%3F%26nbsp%3B%3C%2FSTRONG%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2333747%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20TCM%2C%20AXIF%20CRAM%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2333747%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%2C%3CSPAN%3EHiddenSquid%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSTRONG%3E1.What%20is%20the%20difference%20between%20TCM-A%2C%20-B%20and%20-C%20and%20what%20are%20the%20usecases%20for%20each%3F%3C%2FSTRONG%3E%3CBR%20%2F%3E%26gt%3B%26gt%3B%26gt%3BYou%20can%20refer%20to%20the%20attachment%20file%20for%20more%20the%20information%20of%20TCM-A%2C%20-B%20and%20-C.%20it%20is%20included%20in%20the%20RM.%3C%2FP%3E%0A%3CP%3E%3CSTRONG%3E2.Why%20wouldn't%20I%20or%20why%20doesn't%20the%20demo%20use%20TCM%20to%20run%20code%3F%3C%2FSTRONG%3E%3CBR%20%2F%3E%26gt%3B%26gt%3B%26gt%3BYou%20can%20find%20the%20TCM%20be%20used%20to%20the%20R52%20core%2C%20please%20following%20the%20Linker%20file%20picture%20in%20the%20attachment.%3C%2FP%3E%0A%3CP%3E%3CSTRONG%3E3.Can%20the%20SMU%20core%20even%20write%20TCM%3F%3C%2FSTRONG%3E%3CBR%20%2F%3E%26gt%3B%26gt%3B%26gt%3BFor%20a%20Cortex-M33%20core%20to%20access%20the%20address%20space%20of%20any%20TCM%20of%20an%20RTU%20Cortex-R52%20core%2C%20you%20must%20initially%20perform%20additional%20configuration%20to%20ensure%20the%20correct%20operation%20of%20the%20accesses.%3C%2FP%3E%0A%3CP%3EHope%20this%20information%20can%20help%20you%2C%20I%20will%20continue%20check%20your%20other%20question.%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3EJoey%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2333189%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20TCM%2C%20AXIF%20CRAM%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2333189%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%EF%BC%8C%3CSPAN%3EHiddenSquid%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3EI%20have%20received%20your%20questions%20and%20will%20help%20you%20to%20check%20it.%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3EJoey%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2339910%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20TCM%2C%20AXIF%20CRAM%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2339910%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHey%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F236188%22%20target%3D%22_blank%22%3E%40Joey_z%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThank%20you%20for%20the%20reply!%20I%20have%20a%20couple%20follow%20up%20questions%20and%20actually%20also%20some%20answers%20I%20have%20found%20for%20my%20self.%3C%2FP%3E%3COL%3E%3CLI%3EAre%20there%20any%20architectural%2Fhardware%20restrictions%20for%20using%20TCM%20A%2C%20B%20and%20C%20for%20other%20than%20their%20intended%20purposes%3F%3C%2FLI%3E%3CLI%3EIf%20the%20TCM%20is%20mostly%20used%2C%20then%20why%20would%20I%20ever%20use%20CRAM%20or%20DRAM%20sections%20of%20the%20RTU0%2F1%3F%3C%2FLI%3E%3CLI%3ESo%20the%20only%20configurations%2C%20to%20access%20TCM%20from%20SMU%2C%20that%20need%20to%20be%20performed%20are%20the%20following%3F%3COL%3E%3CLI%3EDisable%20caching%20on%20the%20appropriate%20R%20core%3C%2FLI%3E%3CLI%3EDisable%20gathering%20on%20the%20appropriate%20R%20core%3C%2FLI%3E%3C%2FOL%3E%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%26gt%3B%26gt%3B%26gt%3BRegarding%20the%20magic%20defines%3A%3C%2FSTRONG%3E%3CUL%3E%3CLI%3EThey%20are%20mostly%20defined%20at%20two%20spots%3A%3CUL%3E%3CLI%3EProject%20properties%20-%26gt%3B%20C%2FC%2B%20build%20-%26gt%3B%20Settings%20-%26gt%3B%20Tool%20Settings%20-%26gt%3B%20Standard%20S32DS%20Assembler%20-%26gt%3B%20Preprocessor%20-%26gt%3BDefined%20Symbols%3C%2FLI%3E%3CLI%3EProject%20properties%20-%26gt%3B%20C%2FC%2B%20build%20-%26gt%3B%20Settings%20-%26gt%3B%20Tool%20Settings%20-%26gt%3B%20Standard%20S32DS%20C%20Compiler%20-%26gt%3B%20Preprocessor%20-%26gt%3B%20Defined%20Symbols%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3CLI%3EI%20have%20not%20yet%20confirmed%20whether%20they%20are%20only%20applied%20during%20debugging%20or%20for%20every%20build%2C%20but%20it%20would%20make%20sense%20they%20are%20defined%20for%20every%20build.%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3EThanks%20for%20all%20the%20help!%3C%2FP%3E%3C%2FLINGO-BODY%3E