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: ENET ICSSG: failed to removed eeprom from exaple and insert auto MAC from fuses

Part Number: AM6442
Other Parts Discussed in Thread: SYSCONFIG

Hello,

old problem that was described with the CPSW ethernet is now appearing to be also in the ICSSG Ethernet port:

When removing the eeprom, the example is not building, errors beeing:

```

1. gmake: *** [syscfg/ti_board_config.o] Error 1
2. gmake: Target 'all' not remade because of errors.
3. recipe for target 'syscfg/ti_board_config.o' failed
4. use of undeclared identifier 'CONFIG_EEPROM0'
5. use of undeclared identifier 'CONFIG_EEPROM0'
6. use of undeclared identifier 'gEepromHandle'; did you mean 'gUartHandle'?
7. use of undeclared identifier 'gEepromHandle'; did you mean 'gUartHandle'?

1. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang
2. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang
3. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang/Debug/subdir_rules.mk
4. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang
5. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang
6. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang
7. /enet_lwip_icssg_am64x-evm_r5fss0-0_freertos_ti-arm-clang

```

Following syscfg:

/**
 * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
 * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
 * @cliArgs --device "AM64x" --package "ALV" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM64x@09.02.00"
 * @versions {"tool":"1.20.0+3587"}
 */

/**
 * Import the modules used in this configuration.
 */
const gpio       = scripting.addModule("/drivers/gpio/gpio", {}, false);
const gpio1      = gpio.addInstance();
const i2c        = scripting.addModule("/drivers/i2c/i2c", {}, false);
const i2c1       = i2c.addInstance();
const i2c2       = i2c.addInstance();
const pruicss    = scripting.addModule("/drivers/pruicss/pruicss", {}, false);
const pruicss1   = pruicss.addInstance();
const debug_log  = scripting.addModule("/kernel/dpl/debug_log");
const mpu_armv7  = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
const mpu_armv71 = mpu_armv7.addInstance();
const mpu_armv72 = mpu_armv7.addInstance();
const mpu_armv73 = mpu_armv7.addInstance();
const mpu_armv74 = mpu_armv7.addInstance();
const mpu_armv75 = mpu_armv7.addInstance();
const mpu_armv76 = mpu_armv7.addInstance();
const mpu_armv77 = mpu_armv7.addInstance();
const enet_icss  = scripting.addModule("/networking/enet_icss/enet_icss", {}, false);
const enet_icss1 = enet_icss.addInstance();

/**
 * Write custom configuration values to the imported modules.
 */
gpio1.$name                    = "CONFIG_GPIO0";
gpio1.pinDir                   = "OUTPUT";
gpio1.useMcuDomainPeripherals  = true;
gpio1.MCU_GPIO.$assign         = "MCU_GPIO0";
gpio1.MCU_GPIO.gpioPin.$assign = "MCU_SPI1_CS0";

i2c1.$name           = "CONFIG_I2C0";
i2c1.I2C.$assign     = "I2C0";
i2c1.I2C.SCL.$assign = "I2C0_SCL";
i2c1.I2C.SDA.$assign = "I2C0_SDA";
i2c1.I2C_child.$name = "drivers_i2c_v0_i2c_v0_template1";

i2c2.$name           = "CONFIG_I2C1";
i2c2.I2C.$assign     = "I2C1";
i2c2.I2C.SCL.$assign = "I2C1_SCL";
i2c2.I2C.SDA.$assign = "I2C1_SDA";
i2c2.I2C_child.$name = "drivers_i2c_v0_i2c_v0_template2";

debug_log.enableUartLog = true;
debug_log.enableCssLog  = false;
debug_log.uartLog.$name = "CONFIG_UART0";

const uart_v0_template  = scripting.addModule("/drivers/uart/v0/uart_v0_template", {}, false);
const uart_v0_template1 = uart_v0_template.addInstance({}, false);
uart_v0_template1.$name = "drivers_uart_v0_uart_v0_template0";
debug_log.uartLog.child = uart_v0_template1;

mpu_armv71.$name             = "CONFIG_MPU_REGION0";
mpu_armv71.size              = 31;
mpu_armv71.attributes        = "Device";
mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD";
mpu_armv71.allowExecute      = false;

mpu_armv72.$name             = "CONFIG_MPU_REGION1";
mpu_armv72.size              = 15;
mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD";

mpu_armv73.$name             = "CONFIG_MPU_REGION2";
mpu_armv73.baseAddr          = 0x41010000;
mpu_armv73.size              = 15;
mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD";

mpu_armv74.$name             = "CONFIG_MPU_REGION3";
mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD";
mpu_armv74.baseAddr          = 0x70000000;
mpu_armv74.size              = 23;

mpu_armv75.$name             = "CONFIG_MPU_REGION4";
mpu_armv75.accessPermissions = "Supervisor RD+WR, User RD";
mpu_armv75.baseAddr          = 0x80000000;
mpu_armv75.size              = 31;

mpu_armv76.$name             = "CONFIG_MPU_REGION5";
mpu_armv76.accessPermissions = "Supervisor RD+WR, User RD";
mpu_armv76.baseAddr          = 0xA5000000;
mpu_armv76.size              = 23;
mpu_armv76.attributes        = "NonCached";

mpu_armv77.$name    = "CONFIG_MPU_REGION6";
mpu_armv77.size     = 27;
mpu_armv77.baseAddr = 0x60000000;

enet_icss1.$name                        = "CONFIG_ENET_ICSS0";
enet_icss1.phyToMacInterfaceMode        = "RGMII";
enet_icss1.mdioMode                     = "MDIO_MODE_MANUAL";
enet_icss1.PktInfoOnlyEnable            = true;
enet_icss1.LargePoolPktCount            = 32;
enet_icss1.QoS                          = 3;
enet_icss1.macAddrConfig                = "Manual Entry";
enet_icss1.txDmaChannel[0].$name        = "ENET_DMA_TX_CH0";
enet_icss1.rxDmaChannel[0].$name        = "ENET_DMA_RX_CH0";
enet_icss1.rxDmaChannel[0].PacketsCount = 16;
enet_icss1.rxDmaChannel[1].$name        = "ENET_DMA_RX_CH1";
enet_icss1.rxDmaChannel[1].PacketsCount = 16;
enet_icss1.rxDmaChannel[1].chIdx        = 1;
enet_icss1.rxDmaChannel[1].macAddrCount = 0;
enet_icss1.netifInstance.create(1);
enet_icss1.netifInstance[0].$name       = "NETIF_INST_ID0";
enet_icss1.netifInstance[0].rxDmaChNum  = ["0","1"];
enet_icss1.PRU_ICSSG1_RGMII1.$assign    = "PRU_ICSSG1_RGMII1";

enet_icss1.icss                          = pruicss1;
pruicss1.$name                           = "CONFIG_PRU_ICSS1";
pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";
pruicss1.intcMapping.create(2);
pruicss1.intcMapping[0].$name            = "CONFIG_ICSS1_INTC_MAPPING0";
pruicss1.intcMapping[0].event            = "41";
pruicss1.intcMapping[0].channel          = "7";
pruicss1.intcMapping[0].host             = "8";
pruicss1.intcMapping[1].$name            = "CONFIG_ICSS1_INTC_MAPPING1";
pruicss1.intcMapping[1].channel          = "7";
pruicss1.intcMapping[1].host             = "8";
pruicss1.intcMapping[1].event            = "53";

const udma         = scripting.addModule("/drivers/udma/udma", {}, false);
const udma1        = udma.addInstance({}, false);
enet_icss1.udmaDrv = udma1;

/**
 * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
 * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
 * re-solve from scratch.
 */
debug_log.uartLog.UART.$suggestSolution                  = "USART0";
debug_log.uartLog.UART.RXD.$suggestSolution              = "UART0_RXD";
debug_log.uartLog.UART.TXD.$suggestSolution              = "UART0_TXD";
enet_icss1.PRU_ICSSG1_MDIO.$suggestSolution              = "PRU_ICSSG1_MDIO0";
enet_icss1.PRU_ICSSG1_MDIO.MDC.$suggestSolution          = "PRG1_MDIO0_MDC";
enet_icss1.PRU_ICSSG1_MDIO.MDIO.$suggestSolution         = "PRG1_MDIO0_MDIO";
enet_icss1.PRU_ICSSG1_IEP.$suggestSolution               = "PRU_ICSSG1_IEP0";
enet_icss1.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution = "PRG1_PRU0_GPO18";
enet_icss1.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution = "PRG1_PRU0_GPO19";
enet_icss1.PRU_ICSSG1_RGMII1.RD0.$suggestSolution        = "PRG1_PRU0_GPO0";
enet_icss1.PRU_ICSSG1_RGMII1.RD1.$suggestSolution        = "PRG1_PRU0_GPO1";
enet_icss1.PRU_ICSSG1_RGMII1.RD2.$suggestSolution        = "PRG1_PRU0_GPO2";
enet_icss1.PRU_ICSSG1_RGMII1.RD3.$suggestSolution        = "PRG1_PRU0_GPO3";
enet_icss1.PRU_ICSSG1_RGMII1.RXC.$suggestSolution        = "PRG1_PRU0_GPO6";
enet_icss1.PRU_ICSSG1_RGMII1.RX_CTL.$suggestSolution     = "PRG1_PRU0_GPO4";
enet_icss1.PRU_ICSSG1_RGMII1.TD0.$suggestSolution        = "PRG1_PRU0_GPO11";
enet_icss1.PRU_ICSSG1_RGMII1.TD1.$suggestSolution        = "PRG1_PRU0_GPO12";
enet_icss1.PRU_ICSSG1_RGMII1.TD2.$suggestSolution        = "PRG1_PRU0_GPO13";
enet_icss1.PRU_ICSSG1_RGMII1.TD3.$suggestSolution        = "PRG1_PRU0_GPO14";
enet_icss1.PRU_ICSSG1_RGMII1.TXC.$suggestSolution        = "PRG1_PRU0_GPO16";
enet_icss1.PRU_ICSSG1_RGMII1.TX_CTL.$suggestSolution     = "PRG1_PRU0_GPO15";
enet_icss1.PRU_ICSSG1_RGMII2.$suggestSolution            = "PRU_ICSSG1_RGMII2";
enet_icss1.PRU_ICSSG1_RGMII2.RD0.$suggestSolution        = "PRG1_PRU1_GPO0";
enet_icss1.PRU_ICSSG1_RGMII2.RD1.$suggestSolution        = "PRG1_PRU1_GPO1";
enet_icss1.PRU_ICSSG1_RGMII2.RD2.$suggestSolution        = "PRG1_PRU1_GPO2";
enet_icss1.PRU_ICSSG1_RGMII2.RD3.$suggestSolution        = "PRG1_PRU1_GPO3";
enet_icss1.PRU_ICSSG1_RGMII2.RXC.$suggestSolution        = "PRG1_PRU1_GPO6";
enet_icss1.PRU_ICSSG1_RGMII2.RX_CTL.$suggestSolution     = "PRG1_PRU1_GPO4";
enet_icss1.PRU_ICSSG1_RGMII2.TD0.$suggestSolution        = "PRG1_PRU1_GPO11";
enet_icss1.PRU_ICSSG1_RGMII2.TD1.$suggestSolution        = "PRG1_PRU1_GPO12";
enet_icss1.PRU_ICSSG1_RGMII2.TD2.$suggestSolution        = "PRG1_PRU1_GPO13";
enet_icss1.PRU_ICSSG1_RGMII2.TD3.$suggestSolution        = "PRG1_PRU1_GPO14";
enet_icss1.PRU_ICSSG1_RGMII2.TXC.$suggestSolution        = "PRG1_PRU1_GPO16";
enet_icss1.PRU_ICSSG1_RGMII2.TX_CTL.$suggestSolution     = "PRG1_PRU1_GPO15";

Am I doing something wrong or is it not possible to remove the eeprom with ICSSG?

Thank you!

Isaac

  • Hi Isaac,

    Thanks for connecting with TI.

    I will check on this and get back to you.

    Regards

    Ashwani

  • Hi Ashwani,

    there appeared another problem... I could resolve the first one by making my custom board and edditing the getMACAddress function...

    second problem is, wehn trying to build an application using CPSW and ICSS the example won't build, because sysconfig seems only to generate a duplicated form of the code and apend to the generated sources:

    ```

    conflicting types for 'EnetApp_openRxDma'
    gmake: *** [syscfg/ti_board_config.o] Error 1
    gmake: *** [syscfg/ti_enet_config.o] Error 1
    gmake: *** [syscfg/ti_enet_lwipif.o] Error 1
    gmake: *** [syscfg/ti_enet_open_close.o] Error 1
    gmake: *** [syscfg/ti_enet_soc.o] Error 1
    gmake: *** [test.o] Error 1
    gmake: Target 'all' not remade because of errors.
    invalid operands to binary expression ('struct Enet_Obj_s' and 'void *')
    invalid suffix 'x' on integer constant
    recipe for target 'syscfg/ti_board_config.o' failed
    recipe for target 'syscfg/ti_enet_config.o' failed
    recipe for target 'syscfg/ti_enet_lwipif.o' failed
    recipe for target 'syscfg/ti_enet_open_close.o' failed
    recipe for target 'syscfg/ti_enet_soc.o' failed
    recipe for target 'test.o' failed
    redefinition of 'EnetApp_acquireHandleInfo'
    redefinition of 'EnetApp_getEnetInstInfo'
    redefinition of 'EnetApp_getEnetInstMacInfo'
    redefinition of 'EnetApp_MacAddrElem_s'
    redefinition of 'EnetApp_MacAddrPool_s'
    redefinition of 'EnetApp_timerCb'
    redefinition of 'EnetAppDmaSysCfg_Obj_s'
    redefinition of 'EnetAppInstInfo_s'
    redefinition of 'EnetAppRxDmaCfg_Info_s'
    redefinition of 'EnetAppRxDmaSysCfg_Obj_s'
    redefinition of 'EnetAppSysCfg_Obj_s'
    redefinition of 'EnetAppTxDmaCfg_Info_s'
    redefinition of 'EnetAppTxDmaSysCfg_Obj_s'
    redefinition of 'EnetBoard_findPortCfg'
    redefinition of 'EnetBoard_getMacAddrList'
    redefinition of 'EnetBoard_getPhyCfg'
    redefinition of 'EnetBoard_getPortCfg'
    redefinition of 'EnetBoard_setEnetControl'
    redefinition of 'EnetBoard_setupPorts'
    redefinition of 'EnetMem_getCfg'
    redefinition of 'EnetSoc_deinit'
    redefinition of 'EnetSoc_getClkFreq'
    redefinition of 'EnetSoc_getCoreId'
    redefinition of 'EnetSoc_getDmaHandle'
    redefinition of 'EnetSoc_getEFusedMacAddrs'
    redefinition of 'EnetSoc_getEnetHandle'
    redefinition of 'EnetSoc_getEnetHandleByIdx'
    redefinition of 'EnetSoc_getEnetNum'
    redefinition of 'EnetSoc_getIntrTriggerType'
    redefinition of 'EnetSoc_getMacPortCaps'
    redefinition of 'EnetSoc_getMacPortMax'
    redefinition of 'EnetSoc_getMacPortMii'
    redefinition of 'EnetSoc_init'
    redefinition of 'EnetSoc_isIpSupported'
    redefinition of 'EnetSoc_isValidEnetType'
    redefinition of 'EnetSoc_mapPort2QsgmiiId'
    redefinition of 'EnetSoc_validateQsgmiiCfg'
    redefinition of 'EnetUdmaMem_getCfg'
    redefinition of 'gAppPktInfoContainerMem_LargePool' with a different type: 'EnetMem_AppPktInfoMem[64]' (aka 'struct EnetMem_EthPktMem_s[64]') vs 'EnetMem_AppPktInfoMem[32]' (aka 'struct EnetMem_EthPktMem_s[32]')
    redefinition of 'gAppPktInfoMem_LargePool' with a different type: 'EnetDma_Pkt[64]' (aka 'struct EnetUdma_PktInfo_s[64]') vs 'EnetDma_Pkt[32]' (aka 'struct EnetUdma_PktInfo_s[32]')
    redefinition of 'gEnetCpbBoard_am64x_evm_EthPort'
    redefinition of 'gEnetCpbBoard_dp83869PhyCfg'
    redefinition of 'gEnetMacAddrPool'
    redefinition of 'gEnetPhyDrvs'
    redefinition of 'gEnetPhyDrvTbl'
    redefinition of 'gEnetSoc_dmaObjMemInfo'
    redefinition of 'gEnetSoc_perObj'
    redefinition of 'gEnetUdmaRxFlowObjMem' with a different type: 'EnetUdma_RxFlowObjMem[1]' (aka 'struct EnetUdma_RxFlowObjMem_s[1]') vs 'EnetUdma_RxFlowObjMem[2]' (aka 'struct EnetUdma_RxFlowObjMem_s[2]')
    redefinition of 'gEthMemCfg'
    redefinition of 'gEthPktMem_LargePool' with a different type: 'uint8_t[64][1536]' (aka 'unsigned char[64][1536]') vs 'uint8_t[32][1536]' (aka 'unsigned char[32][1536]')
    redefinition of 'gEthUdmaCfg'
    redefinition of 'LwipifEnetApp_PollTaskInfo_s'
    redefinition of 'LwipifEnetApp_RxTaskInfo_s'
    redefinition of 'LwipifEnetApp_TxTaskInfo_s'
    redefinition of 'NetifName_e'
    redefinition of 'NetifName_e'
    redefinition of 'Rx_CustomPbuf_s'
    redefinition of enumerator 'NetifName_CPSW_SWITCH'
    redefinition of enumerator 'NetifName_CPSW_SWITCH'
    redefinition of enumerator 'NetifName_NUM_NETIFS'
    redefinition of enumerator 'NetifName_NUM_NETIFS'
    static declaration of 'EnetApp_phyStateHandler' follows non-static declaration
    static declaration of 'EnetApp_phyStateHandler' follows non-static declaration
    typedef redefinition with different types ('enum (unnamed enum at C:/Projekte/TQ_Ti/ccs1205/enet_lwip_cpsw_am64x-evm_r5fss0-0_freertos_ti-arm-clang/Debug/syscfg/ti_enet_lwipif.h:123:14)' vs 'enum NetifName_e')
    typedef redefinition with different types ('enum (unnamed enum at C:/Projekte/TQ_Ti/ccs1205/enet_lwip_cpsw_am64x-evm_r5fss0-0_freertos_ti-arm-clang/Debug/syscfg/ti_enet_lwipif.h:60:14)' vs 'enum NetifName_e')
    typedef redefinition with different types ('enum (unnamed enum at C:/Projekte/TQ_Ti/ccs1205/enet_lwip_cpsw_am64x-evm_r5fss0-0_freertos_ti-arm-clang/Debug/syscfg\ti_enet_lwipif.h:123:14)' vs 'enum NetifName_e')
    typedef redefinition with different types ('struct (unnamed struct at C:/Projekte/TQ_Ti/ccs1205/enet_lwip_cpsw_am64x-evm_r5fss0-0_freertos_ti-arm-clang/Debug/syscfg/ti_enet_open_close.h:122:16)' vs 'struct EnetAppInstInfo_s')
    typedef redefinition with different types ('struct (unnamed struct at C:/ti/mcu_plus_sdk_am64x_09_01_00_41/source/networking/enet/core/lwipif/inc\custom_pbuf.h:47:16)' vs 'struct Rx_CustomPbuf_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_config.c:819:16)' vs 'struct EnetApp_MacAddrElem_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_config.c:832:16)' vs 'struct EnetApp_MacAddrPool_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_lwipif.c:911:16)' vs 'struct LwipifEnetApp_RxTaskInfo_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_lwipif.c:926:16)' vs 'struct LwipifEnetApp_TxTaskInfo_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_open_close.c:1687:16)' vs 'struct EnetAppTxDmaSysCfg_Obj_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_open_close.c:1706:16)' vs 'struct EnetAppRxDmaSysCfg_Obj_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_open_close.c:1721:16)' vs 'struct EnetAppRxDmaCfg_Info_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_open_close.c:1756:16)' vs 'struct EnetAppTxDmaCfg_Info_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_open_close.c:1862:16)' vs 'struct EnetAppDmaSysCfg_Obj_s')
    typedef redefinition with different types ('struct (unnamed struct at syscfg/ti_enet_open_close.c:1868:16)' vs 'struct EnetAppSysCfg_Obj_s')

    ```

    My sysconfig: 

    ```

    /**
    * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
    * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
    * @cliArgs --device "AM64x" --package "ALV" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM64x@09.01.00"
    * @versions {"tool":"1.18.0+3266"}
    */

    /**
    * Import the modules used in this configuration.
    */
    const eeprom = scripting.addModule("/board/eeprom/eeprom", {}, false);
    const eeprom1 = eeprom.addInstance();
    const gpio = scripting.addModule("/drivers/gpio/gpio", {}, false);
    const gpio1 = gpio.addInstance();
    const i2c = scripting.addModule("/drivers/i2c/i2c", {}, false);
    const i2c1 = i2c.addInstance();
    const i2c2 = i2c.addInstance();
    const debug_log = scripting.addModule("/kernel/dpl/debug_log");
    const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
    const mpu_armv71 = mpu_armv7.addInstance();
    const mpu_armv72 = mpu_armv7.addInstance();
    const mpu_armv73 = mpu_armv7.addInstance();
    const mpu_armv74 = mpu_armv7.addInstance();
    const mpu_armv75 = mpu_armv7.addInstance();
    const mpu_armv76 = mpu_armv7.addInstance();
    const mpu_armv77 = mpu_armv7.addInstance();
    const default_linker = scripting.addModule("/memory_configurator/default_linker", {}, false);
    const default_linker1 = default_linker.addInstance();
    const general = scripting.addModule("/memory_configurator/general", {}, false);
    const general1 = general.addInstance();
    const region = scripting.addModule("/memory_configurator/region", {}, false);
    const region1 = region.addInstance();
    const section = scripting.addModule("/memory_configurator/section", {}, false);
    const section1 = section.addInstance();
    const section2 = section.addInstance();
    const section3 = section.addInstance();
    const section4 = section.addInstance();
    const section5 = section.addInstance();
    const section6 = section.addInstance();
    const section7 = section.addInstance();
    const section8 = section.addInstance();
    const section9 = section.addInstance();
    const section10 = section.addInstance();
    const section11 = section.addInstance();
    const enet_cpsw = scripting.addModule("/networking/enet_cpsw/enet_cpsw", {}, false);
    const enet_cpsw1 = enet_cpsw.addInstance();
    const enet_icss = scripting.addModule("/networking/enet_icss/enet_icss", {}, false);
    const enet_icss1 = enet_icss.addInstance();

    /**
    * Write custom configuration values to the imported modules.
    */
    eeprom1.$name = "CONFIG_EEPROM0";

    gpio1.$name = "CONFIG_GPIO0";
    gpio1.pinDir = "OUTPUT";
    gpio1.useMcuDomainPeripherals = true;
    gpio1.MCU_GPIO.$assign = "MCU_GPIO0";
    gpio1.MCU_GPIO.gpioPin.$assign = "MCU_SPI1_CS0";

    i2c1.$name = "CONFIG_I2C0";
    eeprom1.peripheralDriver = i2c1;
    i2c1.I2C.$assign = "I2C0";
    i2c1.I2C.SCL.$assign = "I2C0_SCL";
    i2c1.I2C.SDA.$assign = "I2C0_SDA";

    i2c2.$name = "CONFIG_I2C1";
    i2c2.I2C.$assign = "I2C1";
    i2c2.I2C.SCL.$assign = "I2C1_SCL";
    i2c2.I2C.SDA.$assign = "I2C1_SDA";

    debug_log.enableUartLog = true;
    debug_log.enableCssLog = false;
    debug_log.uartLog.$name = "CONFIG_UART0";

    const uart_v0_template = scripting.addModule("/drivers/uart/v0/uart_v0_template", {}, false);
    const uart_v0_template1 = uart_v0_template.addInstance({}, false);
    uart_v0_template1.$name = "drivers_uart_v0_uart_v0_template0";
    debug_log.uartLog.child = uart_v0_template1;

    mpu_armv71.$name = "CONFIG_MPU_REGION0";
    mpu_armv71.size = 31;
    mpu_armv71.attributes = "Device";
    mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv71.allowExecute = false;

    mpu_armv72.$name = "CONFIG_MPU_REGION1";
    mpu_armv72.size = 15;
    mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD";

    mpu_armv73.$name = "CONFIG_MPU_REGION2";
    mpu_armv73.baseAddr = 0x41010000;
    mpu_armv73.size = 15;
    mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD";

    mpu_armv74.$name = "CONFIG_MPU_REGION3";
    mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv74.baseAddr = 0x70000000;
    mpu_armv74.size = 23;

    mpu_armv75.$name = "CONFIG_MPU_REGION4";
    mpu_armv75.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv75.baseAddr = 0x80000000;
    mpu_armv75.size = 31;

    mpu_armv76.$name = "CONFIG_MPU_REGION5";
    mpu_armv76.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv76.baseAddr = 0xA5000000;
    mpu_armv76.size = 23;
    mpu_armv76.attributes = "NonCached";

    mpu_armv77.$name = "CONFIG_MPU_REGION6";
    mpu_armv77.size = 27;
    mpu_armv77.baseAddr = 0x60000000;

    default_linker1.$name = "memory_configurator_default_linker0";

    general1.$name = "CONFIG_GENERAL0";
    general1.additional_data = "#include \"ti_enet_config.h\"";
    general1.stack_size = 8192;
    general1.heap_size = 34000;
    general1.linker.$name = "TIARMCLANG0";

    region1.$name = "MEMORY_REGION_CONFIGURATION0";
    region1.memory_region.create(9);
    region1.memory_region[0].type = "TCMA_R5F";
    region1.memory_region[0].$name = "R5F_VECS";
    region1.memory_region[0].size = 0x40;
    region1.memory_region[0].auto = false;
    region1.memory_region[1].type = "TCMA_R5F";
    region1.memory_region[1].$name = "R5F_TCMA";
    region1.memory_region[1].size = 0x7FC0;
    region1.memory_region[2].type = "TCMB_R5F";
    region1.memory_region[2].$name = "R5F_TCMB0";
    region1.memory_region[2].size = 0x8000;
    region1.memory_region[3].$name = "MSRAM";
    region1.memory_region[3].auto = false;
    region1.memory_region[3].manualStartAddress = 0x70080000;
    region1.memory_region[3].size = 0x2F00;
    region1.memory_region[4].type = "FLASH";
    region1.memory_region[4].$name = "FLASH";
    region1.memory_region[4].auto = false;
    region1.memory_region[4].manualStartAddress = 0x60200000;
    region1.memory_region[4].size = 0x100000;
    region1.memory_region[5].$name = "USER_SHM_MEM";
    region1.memory_region[5].auto = false;
    region1.memory_region[5].manualStartAddress = 0x701D0000;
    region1.memory_region[5].isShared = true;
    region1.memory_region[5].shared_cores = ["a53ss0-0","a53ss0-1","m4fss0-0","r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[5].size = 0x4000;
    region1.memory_region[6].auto = false;
    region1.memory_region[6].$name = "LOG_SHM_MEM";
    region1.memory_region[6].isShared = true;
    region1.memory_region[6].shared_cores = ["a53ss0-0","a53ss0-1","m4fss0-0","r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[6].manualStartAddress = 0x701D4000;
    region1.memory_region[6].size = 0x4000;
    region1.memory_region[7].auto = false;
    region1.memory_region[7].$name = "RTOS_NORTOS_IPC_SHM_MEM";
    region1.memory_region[7].isShared = true;
    region1.memory_region[7].shared_cores = ["a53ss0-0","a53ss0-1","m4fss0-0","r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[7].manualStartAddress = 0x701D8000;
    region1.memory_region[7].size = 0x8000;
    region1.memory_region[8].type = "DDR_ALL";
    region1.memory_region[8].auto = false;
    region1.memory_region[8].$name = "DDR";
    region1.memory_region[8].size = 0x1F0000;

    section1.$name = "Vector Table";
    section1.load_memory = "R5F_VECS";
    section1.group = false;
    section1.output_section.create(1);
    section1.output_section[0].$name = ".vectors";
    section1.output_section[0].palignment = true;

    section2.$name = "Text Segments";
    section2.load_memory = "MSRAM";
    section2.output_section.create(5);
    section2.output_section[0].$name = ".text.hwi";
    section2.output_section[0].palignment = true;
    section2.output_section[1].$name = ".text.cache";
    section2.output_section[1].palignment = true;
    section2.output_section[2].$name = ".text.mpu";
    section2.output_section[2].palignment = true;
    section2.output_section[3].$name = ".text.boot";
    section2.output_section[3].palignment = true;
    section2.output_section[4].$name = ".text:abort";
    section2.output_section[4].palignment = true;

    section3.$name = "Code and Read-Only Data";
    section3.load_memory = "DDR";
    section3.output_section.create(2);
    section3.output_section[0].$name = ".text";
    section3.output_section[0].palignment = true;
    section3.output_section[1].$name = ".rodata";
    section3.output_section[1].palignment = true;

    section4.$name = "Data Segment";
    section4.load_memory = "DDR";
    section4.output_section.create(1);
    section4.output_section[0].$name = ".data";
    section4.output_section[0].palignment = true;

    section5.$name = "Memory Segments";
    section5.load_memory = "DDR";
    section5.output_section.create(2);
    section5.output_section[0].$name = ".sysmem";
    section5.output_section[0].palignment = true;
    section5.output_section[1].$name = ".stack";
    section5.output_section[1].palignment = true;

    section6.$name = "CONFIG_SECTION2";
    section6.load_memory = "DDR";
    section6.output_section.create(1);
    section6.output_section[0].$name = ".bss";
    section6.output_section[0].palignment = true;
    section6.output_section[0].output_sections_start = "__BSS_START";
    section6.output_section[0].output_sections_end = "__BSS_END";

    section7.$name = "Stack Segments";
    section7.load_memory = "DDR";
    section7.output_section.create(5);
    section7.output_section[0].$name = ".irqstack";
    section7.output_section[0].output_sections_start = "__IRQ_STACK_START";
    section7.output_section[0].output_sections_end = "__IRQ_STACK_END";
    section7.output_section[0].input_section.create(1);
    section7.output_section[0].input_section[0].$name = ". = . + __IRQ_STACK_SIZE;";
    section7.output_section[1].$name = ".fiqstack";
    section7.output_section[1].output_sections_start = "__FIQ_STACK_START";
    section7.output_section[1].output_sections_end = "__FIQ_STACK_END";
    section7.output_section[1].input_section.create(1);
    section7.output_section[1].input_section[0].$name = ". = . + __FIQ_STACK_SIZE;";
    section7.output_section[2].$name = ".svcstack";
    section7.output_section[2].output_sections_start = "__SVC_STACK_START";
    section7.output_section[2].output_sections_end = "__SVC_STACK_END";
    section7.output_section[2].input_section.create(1);
    section7.output_section[2].input_section[0].$name = ". = . + __SVC_STACK_SIZE;";
    section7.output_section[3].$name = ".abortstack";
    section7.output_section[3].output_sections_start = "__ABORT_STACK_START";
    section7.output_section[3].output_sections_end = "__ABORT_STACK_END";
    section7.output_section[3].input_section.create(1);
    section7.output_section[3].input_section[0].$name = ". = . + __ABORT_STACK_SIZE;";
    section7.output_section[4].$name = ".undefinedstack";
    section7.output_section[4].output_sections_start = "__UNDEFINED_STACK_START";
    section7.output_section[4].output_sections_end = "__UNDEFINED_STACK_END";
    section7.output_section[4].input_section.create(1);
    section7.output_section[4].input_section[0].$name = ". = . + __UNDEFINED_STACK_SIZE;";

    section8.$name = "User Shared Memory";
    section8.type = "NOLOAD";
    section8.load_memory = "USER_SHM_MEM";
    section8.group = false;
    section8.output_section.create(1);
    section8.output_section[0].$name = ".bss.user_shared_mem";
    section8.output_section[0].alignment = 0;

    section9.$name = "Log Shared Memory";
    section9.load_memory = "LOG_SHM_MEM";
    section9.type = "NOLOAD";
    section9.group = false;
    section9.output_section.create(1);
    section9.output_section[0].$name = ".bss.log_shared_mem";
    section9.output_section[0].alignment = 0;

    section10.$name = "IPC Shared Memory";
    section10.type = "NOLOAD";
    section10.load_memory = "RTOS_NORTOS_IPC_SHM_MEM";
    section10.group = false;
    section10.output_section.create(1);
    section10.output_section[0].$name = ".bss.ipc_vring_mem";
    section10.output_section[0].alignment = 0;

    section11.type = "NOLOAD";
    section11.group = false;
    section11.$name = "CONFIG_SECTION1";
    section11.load_memory = "MSRAM";
    section11.output_section.create(3);
    section11.output_section[0].$name = ".bss:ENET_DMA_OBJ_MEM";
    section11.output_section[0].alignment = 128;
    section11.output_section[1].$name = ".bss:ENET_DMA_PKT_INFO_MEMPOOL";
    section11.output_section[1].alignment = 128;
    section11.output_section[2].$name = ".bss:ENET_ICSSG_OCMC_MEM";
    section11.output_section[2].alignment = 128;

    enet_cpsw1.$name = "CONFIG_ENET_CPSW0";
    enet_cpsw1.PktInfoOnlyEnable = true;
    enet_cpsw1.LargePoolPktCount = 32;
    enet_cpsw1.mdioMode = "MDIO_MODE_MANUAL";
    enet_cpsw1.macOnlyEn_macPort1 = true;
    enet_cpsw1.macOnlyEn_macPort2 = true;
    enet_cpsw1.macOnlyEn_hostPort = true;
    enet_cpsw1.DisableMacPort2 = true;
    enet_cpsw1.macAddrConfig = "Manual Entry";
    enet_cpsw1.macAddrList = "70:ff:76:1d:ec:f2,70:ff:76:1d:ec:e3, 70:ff:76:1d:ec:e4";
    enet_cpsw1.txDmaChannel[0].$name = "ENET_DMA_TX_CH0";
    enet_cpsw1.rxDmaChannel[0].$name = "ENET_DMA_RX_CH0";
    enet_cpsw1.pinmux[0].$name = "ENET_CPSW_PINMUX0";
    enet_cpsw1.pinmux[0].enableRgmii2 = false;
    enet_cpsw1.pinmux[0].MDIO.$assign = "MDIO0";
    enet_cpsw1.pinmux[0].MDIO.MDC.$assign = "PRG0_PRU1_GPO19";
    enet_cpsw1.pinmux[0].MDIO.MDIO.$assign = "PRG0_PRU1_GPO18";
    enet_cpsw1.pinmux[0].RGMII.$assign = "CPSW";
    enet_cpsw1.netifInstance.create(1);
    enet_cpsw1.netifInstance[0].$name = "NETIF_INST_ID0";

    enet_icss1.$name = "CONFIG_ENET_ICSS0";
    enet_icss1.phyToMacInterfaceMode = "RGMII";
    enet_icss1.mode = "DUAL MAC";
    enet_icss1.LargePoolPktCount = 64;
    enet_icss1.mdioMode = "MDIO_MODE_MANUAL";
    enet_icss1.macAddrConfig = "Manual Entry";
    enet_icss1.macAddrList = "70:ff:76:1d:ec:f2,70:ff:76:1d:ec:e3, 70:ff:76:1d:ec:e4";
    enet_icss1.QoS = 3;
    enet_icss1.addMacAddrCnt = 1;
    enet_icss1.txDmaChannel[0].$name = "ENET_DMA_TX_CH2";
    enet_icss1.netifInstance.create(1);
    enet_icss1.netifInstance[0].$name = "NETIF_INST_ID1";
    enet_icss1.rxDmaChannel[0].$name = "ENET_DMA_RX_CH2";
    enet_icss1.PRU_ICSSG1_RGMII1.$assign = "PRU_ICSSG1_RGMII1";

    const pruicss = scripting.addModule("/drivers/pruicss/pruicss", {}, false);
    const pruicss1 = pruicss.addInstance({}, false);
    pruicss1.$name = "CONFIG_PRU_ICSS0";
    enet_icss1.icss = pruicss1;
    pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";

    const udma = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1 = udma.addInstance({}, false);
    enet_cpsw1.udmaDrv = udma1;
    enet_icss1.udmaDrv = udma1;

    /**
    * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
    * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to
    * re-solve from scratch.
    */
    debug_log.uartLog.UART.$suggestSolution = "USART0";
    debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD";
    debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_RD0.$suggestSolution = "PRG0_PRU1_GPO7";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_RD1.$suggestSolution = "PRG0_PRU1_GPO9";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_RD2.$suggestSolution = "PRG0_PRU1_GPO10";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_RD3.$suggestSolution = "PRG0_PRU1_GPO17";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_RX_CTL.$suggestSolution = "PRG0_PRU0_GPO9";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_RXC.$suggestSolution = "PRG0_PRU0_GPO10";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_TD0.$suggestSolution = "PRG1_PRU1_GPO7";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_TD1.$suggestSolution = "PRG1_PRU1_GPO9";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_TD2.$suggestSolution = "PRG1_PRU1_GPO10";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_TD3.$suggestSolution = "PRG1_PRU1_GPO17";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_TX_CTL.$suggestSolution = "PRG1_PRU0_GPO9";
    enet_cpsw1.pinmux[0].RGMII.RGMII1_TXC.$suggestSolution = "PRG1_PRU0_GPO10";
    enet_icss1.PRU_ICSSG1_MDIO.$suggestSolution = "PRU_ICSSG1_MDIO0";
    enet_icss1.PRU_ICSSG1_MDIO.MDC.$suggestSolution = "PRG1_MDIO0_MDC";
    enet_icss1.PRU_ICSSG1_MDIO.MDIO.$suggestSolution = "PRG1_MDIO0_MDIO";
    enet_icss1.PRU_ICSSG1_IEP.$suggestSolution = "PRU_ICSSG1_IEP0";
    enet_icss1.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution = "PRG1_PRU0_GPO18";
    enet_icss1.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution = "PRG1_PRU0_GPO19";
    enet_icss1.PRU_ICSSG1_RGMII1.RD0.$suggestSolution = "PRG1_PRU0_GPO0";
    enet_icss1.PRU_ICSSG1_RGMII1.RD1.$suggestSolution = "PRG1_PRU0_GPO1";
    enet_icss1.PRU_ICSSG1_RGMII1.RD2.$suggestSolution = "PRG1_PRU0_GPO2";
    enet_icss1.PRU_ICSSG1_RGMII1.RD3.$suggestSolution = "PRG1_PRU0_GPO3";
    enet_icss1.PRU_ICSSG1_RGMII1.RXC.$suggestSolution = "PRG1_PRU0_GPO6";
    enet_icss1.PRU_ICSSG1_RGMII1.RX_CTL.$suggestSolution = "PRG1_PRU0_GPO4";
    enet_icss1.PRU_ICSSG1_RGMII1.TD0.$suggestSolution = "PRG1_PRU0_GPO11";
    enet_icss1.PRU_ICSSG1_RGMII1.TD1.$suggestSolution = "PRG1_PRU0_GPO12";
    enet_icss1.PRU_ICSSG1_RGMII1.TD2.$suggestSolution = "PRG1_PRU0_GPO13";
    enet_icss1.PRU_ICSSG1_RGMII1.TD3.$suggestSolution = "PRG1_PRU0_GPO14";
    enet_icss1.PRU_ICSSG1_RGMII1.TXC.$suggestSolution = "PRG1_PRU0_GPO16";
    enet_icss1.PRU_ICSSG1_RGMII1.TX_CTL.$suggestSolution = "PRG1_PRU0_GPO15";

    ```

    Regards,

    Isaac

  • Hi Issac,

    Thanks for update.

    Look slike you are working on custom board. Hopefully you are refrring the documentation

    AM243x MCU+ SDK: Ethernet PHY Integration Guide

    Custom Board Support section of  AM243x MCU+ SDK: Enet Migration Guide

    Can you try your test on SDK Version: 09.02.00.50?

    Regards

    Ashwani

  • I tried with the evm board. The issue is not part of the SDK but of the sysconfig. When configuring ICSS and CPSW in one project, the syscfg throws out flawed source files containing duplications and therefore not compilable. Please try it yourself. If you are able to build, please send me the project

    Thx!

  • Hi 

    I am on travel this week. So please expect some delay in response.

    But, I am not clear how to reproduce the issue on my setup.

    Can you help me with the steps with SDK 9.2 on AM243x-HSFS-EVM ?

    After that only I will be able to discuss and get back to you.

    Regards

    Ashwani

  • I did following:

    I took an alread existing example from CPSW.

    Then I tried inserting the ICSS port to the syscfg.

    (ignore please the last edit, the other thing was what I also tried, but didn't work)...

    I'm using the 9.1 SDK, with syscfg 1.18.

    However using the 9.2 and syscgf 1.20 I had the same problems.

    Regards,

    isaac

  • I did following:

    I took an alread existing example from CPSW.

    Then I tried inserting the ICSS port to the syscfg.

    Maybe it is important to know, that I was also trying to instanciate a netif intance on both.

    (ignore please the last edit, the other thing was what I also tried, but didn't work)...

    I'm using the 9.1 SDK, with syscfg 1.18.

    However using the 9.2 and syscgf 1.20 I had the same problems.

    Regards,

    isaac

  • Hi Dominic,

    yes it is the same issue, and no I'm getting the same results that were descripted in those threads, specially in this made by you:

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1189980/am6421-using-cpsw-and-icssg-ethernet-together-on-mcu-sdk-08-05-enet-driver/4510742?tisearch=e2e-sitesearch&keymatch=cpsw%25252525252520icssg%25252525252520dominic#4510742

    It doesn't seem that TI could get hands on the problem untill now.

    Anyways I tried a work around adding a second project and making my application a multicore application, as I only need the ICSS port working for testing purposes of our board. But then it is again a pain to just connect two indenpent projects together via a sytem project...

    Thanks!

  • Thanks Dominic, Issac,

    To clarify,

    Currently we support  "Running each of CPSW and ICSSG on separate core".

    Below requirement is currently not in plan.

    • ICSSG and CPSW peripheral accessed in same application, using same driver APIs but different instance.
      • Tracking for 10.x [MCUREQ-1500]

    Regards

    Ashwani