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.

AM6442: SysConfig ENET and custom linker scripts

Part Number: AM6442
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

Hello again

I've been struggling with linker errors when trying to build a multicore project , using ENET (ICSS) and IPC across multiple R5 cores and the M4 core.

I've been through the various enet and ipc examples (v10.x MCU+ SDK) and tried to bring together a syscfg for each core but without success. However, I've just discovered that the enet examples use a custom linker.cmd instead of the memory configurator within SysConfig. They contain the following blocks

    UNION:
    {
        .icssfw: palign(128)
        .icss_mem: type = NOLOAD {
#if (ENET_SYSCFG_ICSSG0_ENABLED == 1)
    #if(ENET_SYSCFG_DUAL_MAC == 1)
        #if(ENET_SYSCFG_DUALMAC_PORT1_ENABLED == 1)
            *(*gEnetSoc_icssg0HostPoolMem_0)
            *(*gEnetSoc_icssg0HostQueueMem_0)
            *(*gEnetSoc_icssg0ScratchMem_0)
            #if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
                *(*gEnetSoc_icssg0HostPreQueueMem_0)
            #endif
        #else
            *(*gEnetSoc_icssg0HostPoolMem_1)
            *(*gEnetSoc_icssg0HostQueueMem_1)
            *(*gEnetSoc_icssg0ScratchMem_1)
            #if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
                    *(*gEnetSoc_icssg0HostPreQueueMem_1)
            #endif
        #endif
    #endif
#endif
#if (ENET_SYSCFG_ICSSG1_ENABLED == 1)
    #if(ENET_SYSCFG_DUAL_MAC == 1)
        #if(ENET_SYSCFG_DUALMAC_PORT1_ENABLED == 1)
                *(*gEnetSoc_icssg1HostPoolMem_0)
                *(*gEnetSoc_icssg1HostQueueMem_0)
                *(*gEnetSoc_icssg1ScratchMem_0)
            #if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
                *(*gEnetSoc_icssg1HostPreQueueMem_0)
            #endif
        #else
                *(*gEnetSoc_icssg1HostPoolMem_1)
                *(*gEnetSoc_icssg1HostQueueMem_1)
                *(*gEnetSoc_icssg1ScratchMem_1)
            #if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
                *(*gEnetSoc_icssg1HostPreQueueMem_1)
            #endif
        #endif
    #endif
#endif
#if (ENET_SYSCFG_ICSSG0_ENABLED == 1)
    #if(ENET_SYSCFG_DUAL_MAC == 0)
        *(*gEnetSoc_icssg0PortPoolMem_0)
        *(*gEnetSoc_icssg0PortPoolMem_1)
        *(*gEnetSoc_icssg0HostPoolMem_0)
        *(*gEnetSoc_icssg0HostPoolMem_1)
        *(*gEnetSoc_icssg0HostQueueMem_0)
        *(*gEnetSoc_icssg0HostQueueMem_1)
        *(*gEnetSoc_icssg0ScratchMem_0)
        *(*gEnetSoc_icssg0ScratchMem_1)
        #if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
            *(*gEnetSoc_icssg0HostPreQueueMem_0)
            *(*gEnetSoc_icssg0HostPreQueueMem_1)
        #endif
    #endif
#endif
#if (ENET_SYSCFG_ICSSG1_ENABLED == 1)
    #if(ENET_SYSCFG_DUAL_MAC == 0)
        *(*gEnetSoc_icssg1PortPoolMem_0)
        *(*gEnetSoc_icssg1PortPoolMem_1)
        *(*gEnetSoc_icssg1HostPoolMem_0)
        *(*gEnetSoc_icssg1HostPoolMem_1)
        *(*gEnetSoc_icssg1HostQueueMem_0)
        *(*gEnetSoc_icssg1HostQueueMem_1)
        *(*gEnetSoc_icssg1ScratchMem_0)
        *(*gEnetSoc_icssg1ScratchMem_1)
        #if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
            *(*gEnetSoc_icssg1HostPreQueueMem_0)
            *(*gEnetSoc_icssg1HostPreQueueMem_1)
        #endif
    #endif
#endif
        }
    } > MSRAM

    .enet_dma_mem {
        *(*ENET_DMA_DESC_MEMPOOL)
        *(*ENET_DMA_RING_MEMPOOL)
#if (ENET_SYSCFG_PKT_POOL_ENABLE == 1)
        *(*ENET_DMA_PKT_MEMPOOL)
#endif
    } (NOLOAD) > MSRAM

Could someone confirm if the custom linker.cmd is the correct / only way of doing this when you use the ENET peripheral and basically SysConfig isn't capable of generating the correct linker.cmd script automatically. This seems to be a major oversight in the functionality of SysConfig. When is this going to be fixed or are we going to continue to have to write our own linker.cmd files ?

Thanks