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.

SK-AM64: TMDS64EVM - Two ICSS Dual-MAC compiler errors

Part Number: SK-AM64
Other Parts Discussed in Thread: SYSCONFIG

Using version 8.6.0.45 of the SDK for the AM64x, I defined two instances of the ICSS Ethernet device on the two PRUs.  I defined both as Dual MAC.  The SYSCONFIG version is 1.14.0.

SYSCONFIG showed no errors or problems.  When I try to build the project, I get compiler errors for the generated source files.

subdir_rules.mk:35: recipe for target 'syscfg/ti_enet_soc.o' failed
syscfg/ti_enet_soc.c:117:45: error: use of undeclared identifier 'ICSSG_HOST_POOL_0_TOTAL_SIZE'
static uint8_t gEnetSoc_icssg0HostPoolMem_0[ICSSG_HOST_POOL_0_TOTAL_SIZE]
                                            ^
syscfg/ti_enet_soc.c:161:36: error: use of undeclared identifier 'ICSSG_DUALMAC_PORT_1_HOST_POOL_SIZE'
            .hostBufferPoolSize  = ICSSG_DUALMAC_PORT_1_HOST_POOL_SIZE,
                                   ^
syscfg/ti_enet_soc.c:162:36: error: use of undeclared identifier 'ICSSG_DUALMAC_PORT_1_HOST_BUFFER_POOL_NUM_CFG'
            .hostBufferPoolNum   = ICSSG_DUALMAC_PORT_1_HOST_BUFFER_POOL_NUM_CFG,
                                   ^
3 errors generated.

This is the ".syscfg" file.

/**
 * 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_beta" --package "ALV" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM64x@08.06.00"
 * @versions {"tool":"1.14.0+2667"}
 */

/**
 * Import the modules used in this configuration.
 */
const eeprom     = scripting.addModule("/board/eeprom/eeprom", {}, false);
const eeprom1    = eeprom.addInstance();
const i2c        = scripting.addModule("/drivers/i2c/i2c", {}, false);
const i2c1       = i2c.addInstance();
const ipc        = scripting.addModule("/drivers/ipc/ipc");
const mmcsd      = scripting.addModule("/drivers/mmcsd/mmcsd", {}, false);
const mmcsd1     = mmcsd.addInstance();
const pruicss    = scripting.addModule("/drivers/pruicss/pruicss", {}, false);
const pruicss1   = pruicss.addInstance();
const pruicss2   = 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 mpu_armv78 = mpu_armv7.addInstance();
const mpu_armv79 = mpu_armv7.addInstance();
const enet_icss  = scripting.addModule("/networking/enet_icss/enet_icss", {}, false);
const enet_icss1 = enet_icss.addInstance();
const enet_icss2 = enet_icss.addInstance();

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

i2c1.$name               = "CONFIG_I2C1";
eeprom1.peripheralDriver = i2c1;
i2c1.I2C.$assign         = "I2C0";
i2c1.I2C.SCL.$assign     = "ball.A18";
i2c1.I2C.SDA.$assign     = "ball.B18";

ipc.r5fss0_1 = "notify";
ipc.r5fss1_0 = "NONE";
ipc.r5fss1_1 = "NONE";
ipc.m4fss0_0 = "NONE";
ipc.a53ss0_0 = "notify";

mmcsd1.$name        = "CONFIG_MMCSD0";
mmcsd1.cardType     = "SD";
mmcsd1.phyType      = "NO_PHY";
mmcsd1.MMC1.$assign = "MMC1";

debug_log.enableCssLog       = false;
debug_log.enableSharedMemLog = true;

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              = 21;

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;

mpu_armv78.$name      = "CONFIG_MPU_REGION7";
mpu_armv78.baseAddr   = 0x701C0000;
mpu_armv78.attributes = "NonCached";
mpu_armv78.size       = 17;

mpu_armv79.$name      = "CONFIG_MPU_REGION8";
mpu_armv79.baseAddr   = 0xF0000000;
mpu_armv79.size       = 28;
mpu_armv79.attributes = "NonCached";

enet_icss1.$name                          = "CONFIG_ENET_ICSS0";
enet_icss1.instance                       = "ICSSG0";
enet_icss1.mode                           = "DUAL MAC";
enet_icss1.txDmaChannel[0].$name          = "ENET_DMA_TX_CH0";
enet_icss1.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH0";
enet_icss1.rxDmaChannel[0].useDefaultFlow = true;

enet_icss1.icss                          = pruicss1;
pruicss1.$name                           = "CONFIG_PRU_ICSS0";
pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";

enet_icss2.$name                          = "CONFIG_ENET_ICSS1";
enet_icss2.mode                           = "DUAL MAC";
enet_icss2.dualMacPortSelected            = "ENET_MAC_PORT_2";
enet_icss2.txDmaChannel[0].$name          = "ENET_DMA_TX_CH1";
enet_icss2.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH1";
enet_icss2.rxDmaChannel[0].useDefaultFlow = true;

enet_icss2.icss                          = pruicss2;
pruicss2.$name                           = "CONFIG_PRU_ICSS1";
pruicss2.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO1";

const udma         = scripting.addModule("/drivers/udma/udma", {}, false);
const udma1        = udma.addInstance({}, false);
enet_icss2.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.
 */
mmcsd1.MMC1.CLK.$suggestSolution                            = "ball.L20";
mmcsd1.MMC1.CLKLB.$suggestSolution                          = "MMC1_CLKLB";
mmcsd1.MMC1.CMD.$suggestSolution                            = "ball.J19";
mmcsd1.MMC1.DAT0.$suggestSolution                           = "ball.K21";
mmcsd1.MMC1.DAT1.$suggestSolution                           = "ball.L21";
mmcsd1.MMC1.DAT2.$suggestSolution                           = "ball.K19";
mmcsd1.MMC1.DAT3.$suggestSolution                           = "ball.K18";
mmcsd1.MMC1.SDCD.$suggestSolution                           = "ball.D19";
enet_icss1.PRU_ICSSG0_MDIO.$suggestSolution                 = "PRU_ICSSG0_MDIO0";
enet_icss1.PRU_ICSSG0_MDIO.MDC.$suggestSolution             = "ball.P3";
enet_icss1.PRU_ICSSG0_MDIO.MDIO.$suggestSolution            = "ball.P2";
enet_icss1.PRU_ICSSG0_IEP.$suggestSolution                  = "PRU_ICSSG0_IEP0";
enet_icss1.PRU_ICSSG0_IEP.EDC_LATCH_IN0.$suggestSolution    = "ball.V1";
enet_icss1.PRU_ICSSG0_IEP.EDC_SYNC_OUT0.$suggestSolution    = "ball.W1";
enet_icss1.PRU_ICSSG0_MII_G_RT.$suggestSolution             = "PRU_ICSSG0_MII_G_RT";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_COL.$suggestSolution    = "ball.W6";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_CRS.$suggestSolution    = "ball.AA5";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXD0.$suggestSolution   = "ball.Y1";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXD1.$suggestSolution   = "ball.R4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXD2.$suggestSolution   = "ball.U2";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXD3.$suggestSolution   = "ball.V2";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXDV.$suggestSolution   = "ball.AA2";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXER.$suggestSolution   = "ball.R3";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_RXLINK.$suggestSolution = "ball.T2";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_TXD0.$suggestSolution   = "ball.Y3";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_TXD1.$suggestSolution   = "ball.AA3";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_TXD2.$suggestSolution   = "ball.R6";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_TXD3.$suggestSolution   = "ball.V4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII0_TXEN.$suggestSolution   = "ball.T5";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_COL.$suggestSolution    = "ball.Y5";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_CRS.$suggestSolution    = "ball.V6";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXD0.$suggestSolution   = "ball.Y2";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXD1.$suggestSolution   = "ball.W2";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXD2.$suggestSolution   = "ball.V3";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXD3.$suggestSolution   = "ball.T4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXDV.$suggestSolution   = "ball.W3";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXER.$suggestSolution   = "ball.P4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_RXLINK.$suggestSolution = "ball.R1";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_TXD0.$suggestSolution   = "ball.W4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_TXD1.$suggestSolution   = "ball.Y4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_TXD2.$suggestSolution   = "ball.T6";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_TXD3.$suggestSolution   = "ball.U6";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII1_TXEN.$suggestSolution   = "ball.U5";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII_MR0_CLK.$suggestSolution = "ball.T3";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII_MR1_CLK.$suggestSolution = "ball.R5";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII_MT0_CLK.$suggestSolution = "ball.U4";
enet_icss1.PRU_ICSSG0_MII_G_RT.MII_MT1_CLK.$suggestSolution = "ball.AA4";
enet_icss2.PRU_ICSSG1_MDIO.$suggestSolution                 = "PRU_ICSSG1_MDIO0";
enet_icss2.PRU_ICSSG1_MDIO.MDC.$suggestSolution             = "ball.Y6";
enet_icss2.PRU_ICSSG1_MDIO.MDIO.$suggestSolution            = "ball.AA6";
enet_icss2.PRU_ICSSG1_IEP.$suggestSolution                  = "PRU_ICSSG1_IEP0";
enet_icss2.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution    = "ball.V7";
enet_icss2.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution    = "ball.W7";
enet_icss2.PRU_ICSSG1_MII_G_RT.$suggestSolution             = "PRU_ICSSG1_MII_G_RT";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_COL.$suggestSolution    = "ball.U15";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_CRS.$suggestSolution    = "ball.U14";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXD0.$suggestSolution   = "ball.Y7";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXD1.$suggestSolution   = "ball.U8";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXD2.$suggestSolution   = "ball.W8";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXD3.$suggestSolution   = "ball.V8";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXDV.$suggestSolution   = "ball.Y8";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXER.$suggestSolution   = "ball.V13";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_RXLINK.$suggestSolution = "ball.W13";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_TXD0.$suggestSolution   = "ball.AA8";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_TXD1.$suggestSolution   = "ball.U9";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_TXD2.$suggestSolution   = "ball.W9";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_TXD3.$suggestSolution   = "ball.AA9";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII0_TXEN.$suggestSolution   = "ball.Y9";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_COL.$suggestSolution    = "ball.V14";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_CRS.$suggestSolution    = "ball.W14";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXD0.$suggestSolution   = "ball.W11";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXD1.$suggestSolution   = "ball.V11";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXD2.$suggestSolution   = "ball.AA12";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXD3.$suggestSolution   = "ball.Y12";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXDV.$suggestSolution   = "ball.W12";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXER.$suggestSolution   = "ball.AA13";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_RXLINK.$suggestSolution = "ball.U12";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_TXD0.$suggestSolution   = "ball.AA10";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_TXD1.$suggestSolution   = "ball.V10";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_TXD2.$suggestSolution   = "ball.U10";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_TXD3.$suggestSolution   = "ball.AA11";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII1_TXEN.$suggestSolution   = "ball.Y11";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII_MR0_CLK.$suggestSolution = "ball.AA7";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII_MR1_CLK.$suggestSolution = "ball.U11";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII_MT0_CLK.$suggestSolution = "ball.V9";
enet_icss2.PRU_ICSSG1_MII_G_RT.MII_MT1_CLK.$suggestSolution = "ball.Y10";

These are the sections of "ti_enet_soc.c" with errors.


Lines 116-122


/* --------------------------------- ICSS-G --------------------------------- */
static uint8_t gEnetSoc_icssg0HostPoolMem_0[ICSSG_HOST_POOL_0_TOTAL_SIZE]
        __attribute__ ((aligned (ICSSG_CACHELINE_ALIGNMENT)));
static uint8_t gEnetSoc_icssg0HostQueueMem_0[ICSSG_HOST_QUEUE_TOTAL_SIZE]
        __attribute__ ((aligned (ICSSG_CACHELINE_ALIGNMENT)));
static uint8_t gEnetSoc_icssg0ScratchMem_0[ICSSG_SCRATCH_BUFFER_SIZE]
        __attribute__ ((aligned (ICSSG_CACHELINE_ALIGNMENT)));

Lines 152-173

static Icssg_FwPoolMem gEnetSoc_Icssg0_0_FwPoolMem[] =
{
    [0] =
    {
            .portBufferPoolMem   = NULL,
            .portBufferPoolSize  = 0U,
            .portBufferPoolNum   = 0U,

            .hostBufferPoolMem   = gEnetSoc_icssg0HostPoolMem_0,
            .hostBufferPoolSize  = ICSSG_DUALMAC_PORT_1_HOST_POOL_SIZE,
            .hostBufferPoolNum   = ICSSG_DUALMAC_PORT_1_HOST_BUFFER_POOL_NUM_CFG,

            .hostEgressQueueMem  = gEnetSoc_icssg0HostQueueMem_0,
            .hostEgressQueueSize = ICSSG_DUALMAC_HOST_QUEUE_SIZE,
            .hostEgressPreQueueMem  = NULL,
            .hostEgressPreQueueSize = ICSSG_PRE_QUEUE_TOTAL_SIZE,
            .hostEgressQueueNum  = ICSSG_DUALMAC_HOST_EGRESS_QUEUE_NUM,

            .scratchBufferMem    = gEnetSoc_icssg0ScratchMem_0,
            .scratchBufferSize   = ICSSG_SCRATCH_BUFFER_SIZE,
    },
};

This is the information in "ti_enet_config.h".

Lines 42-117

/* ENET Pheriphel instance indexes. Name of ENET PHERIPHERAL can be changed in example syscfg */
/* Application should use the defines below when opening a ENET Driver */
#define CONFIG_ENET_ICSS0       (0U)
#define CONFIG_ENET_ICSS1       (1U)
#define ENET_SYSCFG_MAX_ENET_INSTANCES           (2U)

#define ENET_SYSCFG_ICSSG0_ENABLED               (1U)
#define ENET_SYSCFG_ICSSG1_ENABLED               (0U)
#define ENET_SYSCFG_NUM_PERIPHERAL               (2U)
#define ENET_SYSCFG_TOTAL_NUM_TX_PKT             (32U)
#define ENET_SYSCFG_TOTAL_NUM_RX_PKT             (64U)
#define ENET_SYSCFG_PKT_POOL_ENABLE              (1U)
#define ENET_SYSCFG_PKT_INFO_ONLY_ENABLE         (0U)
#define ENET_SYSCFG_MAC_PORT_2_QOS_LEVEL         (8U)
#define ENET_SYSCFG_SWITCH_QOS_LEVEL             (8U)
#define ENET_SYSCFG_PREMPTION_ENABLE             (0U)
#define ENET_SYSCFG_ENABLE_GIGABIT               (1U)
#define ENET_SYSCFG_DUAL_MAC                     (1U)
#define ENET_SYSCFG_DUALMAC_PORT1_ENABLED        (1U)
#define ENET_SYSCFG_DUALMAC_PORT2_ENABLED        (1U)
#define ENET_SYSCFG_MAX_MAC_PORTS                (2U)
#define ENET_SYSCFG_ENABLE_EXTPHY                (0U)
#define ENET_SYSCFG_RX_FLOWS_NUM                 (2U)
#define ENET_SYSCFG_RX_CHANNELS_NUM              (1U + 0U)
#define ENET_SYSCFG_TX_CHANNELS_NUM              (2U)
#define ENET_SYSCFG_RING_MON_NUM                 (3U) /*Not appicable for LCDMA devices*/
#define ENET_SYSCFG_ENABLE_MDIO_MANUALMODE       (0U)


/*! \brief Number of external mac ports. */
#define ENET_SYSCFG_NUM_EXT_MAC_PORTS       (2U)

/*! \brief Number of host buffer pools required for Dual-MAC. */
#define ICSSG_DUALMAC_PORT_2_HOST_BUFFER_POOL_NUM_CFG        (ENET_SYSCFG_MAC_PORT_2_QOS_LEVEL)
#define ICSSG_SWITCH_HOST_BUFFER_POOL_NUM_CFG         ((ENET_SYSCFG_NUM_EXT_MAC_PORTS + 1) * ENET_SYSCFG_SWITCH_QOS_LEVEL)

/* TX DMA Channel indexes. Name of TX DMA channel can be changed in example syscfg */
/* Application should use the define below when opening a Tx DMA channel */
#define CONFIG_ENET_ICSS0_TX_CH_START    (0U)
#define ENET_DMA_TX_CH0                  (0U)
#define CONFIG_ENET_ICSS0_TX_CH_COUNT    (1U)
#define CONFIG_ENET_ICSS1_TX_CH_START    (1U)
#define ENET_DMA_TX_CH1                  (1U)
#define CONFIG_ENET_ICSS1_TX_CH_COUNT    (1U)

/* RX DMA Channel indexes. Name of RX DMA channel can be changed in example syscfg */
/* Application should use the define below when opening a Rx DMA channel */
#define CONFIG_ENET_ICSS0_RX_CH_START    (0U)
#define ENET_DMA_RX_CH0                  (0U)
#define CONFIG_ENET_ICSS0_RX_CH_COUNT    (1U)
#define CONFIG_ENET_ICSS1_RX_CH_START    (1U)
#define ENET_DMA_RX_CH1                  (1U)
#define CONFIG_ENET_ICSS1_RX_CH_COUNT    (1U)

/* TX DMA max num packets allocated to the DMA channel */
/* Application should use the define below when opening a Tx DMA channel */
#define ENET_DMA_TX_CH0_NUM_PKTS          (16U)
#define ENET_DMA_TX_CH1_NUM_PKTS          (16U)

/* RX DMA DMA max num packets allocated to the DMA channel  */
/* Application should use the define below when opening a Rx DMA channel */
#define ENET_DMA_RX_CH0_NUM_PKTS          (32U)
#define ENET_DMA_RX_CH1_NUM_PKTS          (32U)


/* NETIF indexes. Name of NETIF can be changed in example syscfg */
/* Application should use the define below when opening a NETIF */
#define ENET_SYSCFG_NETIF_COUNT                    (0U)
#define ENET_SYSCFG_DEFAULT_NETIF_IDX              ()
/*
 * Packet sizes for different pools. LARGE_POOL is largest packet size pool with MEDIUM_POOL
 * second largest and SMALL_POOL smallest
 */
#define ENET_MEM_LARGE_POOL_PKT_SIZE        ENET_UTILS_ALIGN(1536U, ENET_UTILS_CACHELINE_SIZE)
#define ENET_MEM_MEDIUM_POOL_PKT_SIZE       ENET_UTILS_ALIGN(512U, ENET_UTILS_CACHELINE_SIZE)
#define ENET_MEM_SMALL_POOL_PKT_SIZE        ENET_UTILS_ALIGN(128U, ENET_UTILS_CACHELINE_SIZE)

  • I believe that I found a valid configuration that supports 3 Gigabit Ethernet ports.  I do not get compiler errors.

    The configuration defines ICSS0 as a switch with only one MAC address and one TX/RX DMA channel in use.  It defines ICSS1 as a Dual MAC configuration with two MAC addresses and two transmit DMA channels.

    Can someone confirm that this configuration is valid (file appears below).

    /**
     * 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_beta" --package "ALV" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM64x@08.06.00"
     * @versions {"tool":"1.14.0+2667"}
     */

    /**
     * Import the modules used in this configuration.
     */
    const eeprom     = scripting.addModule("/board/eeprom/eeprom", {}, false);
    const eeprom1    = eeprom.addInstance();
    const i2c        = scripting.addModule("/drivers/i2c/i2c", {}, false);
    const i2c1       = i2c.addInstance();
    const ipc        = scripting.addModule("/drivers/ipc/ipc");
    const mmcsd      = scripting.addModule("/drivers/mmcsd/mmcsd", {}, false);
    const mmcsd1     = mmcsd.addInstance();
    const pruicss    = scripting.addModule("/drivers/pruicss/pruicss", {}, false);
    const pruicss1   = pruicss.addInstance();
    const pruicss2   = 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 mpu_armv78 = mpu_armv7.addInstance();
    const mpu_armv79 = mpu_armv7.addInstance();
    const enet_icss  = scripting.addModule("/networking/enet_icss/enet_icss", {}, false);
    const enet_icss1 = enet_icss.addInstance();
    const enet_icss2 = enet_icss.addInstance();
    const enet_icss3 = enet_icss.addInstance();

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

    i2c1.$name               = "CONFIG_I2C1";
    eeprom1.peripheralDriver = i2c1;
    i2c1.I2C.$assign         = "I2C0";
    i2c1.I2C.SCL.$assign     = "ball.A18";
    i2c1.I2C.SDA.$assign     = "ball.B18";

    ipc.r5fss0_1 = "notify";
    ipc.r5fss1_0 = "NONE";
    ipc.r5fss1_1 = "NONE";
    ipc.m4fss0_0 = "NONE";
    ipc.a53ss0_0 = "notify";

    mmcsd1.$name        = "CONFIG_MMCSD0";
    mmcsd1.cardType     = "SD";
    mmcsd1.phyType      = "NO_PHY";
    mmcsd1.MMC1.$assign = "MMC1";

    debug_log.enableCssLog       = false;
    debug_log.enableSharedMemLog = true;

    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              = 21;

    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;

    mpu_armv78.$name      = "CONFIG_MPU_REGION7";
    mpu_armv78.baseAddr   = 0x701C0000;
    mpu_armv78.attributes = "NonCached";
    mpu_armv78.size       = 17;

    mpu_armv79.$name      = "CONFIG_MPU_REGION8";
    mpu_armv79.baseAddr   = 0xF0000000;
    mpu_armv79.size       = 28;
    mpu_armv79.attributes = "NonCached";

    enet_icss1.$name                          = "CONFIG_ENET_ICSS0";
    enet_icss1.instance                       = "ICSSG0";
    enet_icss1.phyToMacInterfaceMode          = "RGMII";
    enet_icss1.mdioMdcEnable                  = false;
    enet_icss1.txDmaChannel[0].$name          = "ENET_DMA_TX_CH0";
    enet_icss1.rxDmaChannel.create(2);
    enet_icss1.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH0";
    enet_icss1.rxDmaChannel[0].useDefaultFlow = true;
    enet_icss1.rxDmaChannel[1].$name          = "ENET_DMA_RX_CH3";
    enet_icss1.rxDmaChannel[1].chIdx          = 1;
    enet_icss1.rxDmaChannel[1].PacketsCount   = 0;
    enet_icss1.rxDmaChannel[1].macAddrCount   = 0;

    pruicss1.$name                           = "CONFIG_PRU_ICSS0";
    enet_icss1.icss                          = pruicss1;
    pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";

    enet_icss2.$name                          = "CONFIG_ENET_ICSS1";
    enet_icss2.mode                           = "DUAL MAC";
    enet_icss2.phyToMacInterfaceMode          = "RGMII";
    enet_icss2.mdioMdcEnable                  = false;
    enet_icss2.txDmaChannel[0].$name          = "ENET_DMA_TX_CH1";
    enet_icss2.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH1";
    enet_icss2.rxDmaChannel[0].useDefaultFlow = true;

    enet_icss3.$name                          = "CONFIG_ENET_ICSS2";
    enet_icss3.mode                           = "DUAL MAC";
    enet_icss3.dualMacPortSelected            = "ENET_MAC_PORT_2";
    enet_icss3.phyToMacInterfaceMode          = "RGMII";
    enet_icss3.mdioMdcEnable                  = false;
    enet_icss3.txDmaChannel[0].$name          = "ENET_DMA_TX_CH2";
    enet_icss3.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH2";
    enet_icss3.rxDmaChannel[0].useDefaultFlow = true;
    enet_icss3.PRU_ICSSG1_RGMII2.$assign      = "PRU_ICSSG1_RGMII2";

    pruicss2.$name                           = "CONFIG_PRU_ICSS1";
    enet_icss3.icss                          = pruicss2;
    enet_icss2.icss                          = pruicss2;
    pruicss2.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO1";

    const udma         = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1        = udma.addInstance({}, false);
    enet_icss3.udmaDrv = udma1;
    enet_icss2.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.
     */
    mmcsd1.MMC1.CLK.$suggestSolution                     = "ball.L20";
    mmcsd1.MMC1.CLKLB.$suggestSolution                   = "MMC1_CLKLB";
    mmcsd1.MMC1.CMD.$suggestSolution                     = "ball.J19";
    mmcsd1.MMC1.DAT0.$suggestSolution                    = "ball.K21";
    mmcsd1.MMC1.DAT1.$suggestSolution                    = "ball.L21";
    mmcsd1.MMC1.DAT2.$suggestSolution                    = "ball.K19";
    mmcsd1.MMC1.DAT3.$suggestSolution                    = "ball.K18";
    mmcsd1.MMC1.SDCD.$suggestSolution                    = "ball.D19";
    enet_icss1.PRU_ICSSG0_RGMII1.$suggestSolution        = "PRU_ICSSG0_RGMII2";
    enet_icss1.PRU_ICSSG0_RGMII1.RD0.$suggestSolution    = "ball.Y2";
    enet_icss1.PRU_ICSSG0_RGMII1.RD1.$suggestSolution    = "ball.W2";
    enet_icss1.PRU_ICSSG0_RGMII1.RD2.$suggestSolution    = "ball.V3";
    enet_icss1.PRU_ICSSG0_RGMII1.RD3.$suggestSolution    = "ball.T4";
    enet_icss1.PRU_ICSSG0_RGMII1.RXC.$suggestSolution    = "ball.R5";
    enet_icss1.PRU_ICSSG0_RGMII1.RX_CTL.$suggestSolution = "ball.W3";
    enet_icss1.PRU_ICSSG0_RGMII1.TD0.$suggestSolution    = "ball.W4";
    enet_icss1.PRU_ICSSG0_RGMII1.TD1.$suggestSolution    = "ball.Y4";
    enet_icss1.PRU_ICSSG0_RGMII1.TD2.$suggestSolution    = "ball.T6";
    enet_icss1.PRU_ICSSG0_RGMII1.TD3.$suggestSolution    = "ball.U6";
    enet_icss1.PRU_ICSSG0_RGMII1.TXC.$suggestSolution    = "ball.AA4";
    enet_icss1.PRU_ICSSG0_RGMII1.TX_CTL.$suggestSolution = "ball.U5";
    enet_icss1.PRU_ICSSG0_RGMII2.$suggestSolution        = "PRU_ICSSG0_RGMII1";
    enet_icss1.PRU_ICSSG0_RGMII2.RD0.$suggestSolution    = "ball.Y1";
    enet_icss1.PRU_ICSSG0_RGMII2.RD1.$suggestSolution    = "ball.R4";
    enet_icss1.PRU_ICSSG0_RGMII2.RD2.$suggestSolution    = "ball.U2";
    enet_icss1.PRU_ICSSG0_RGMII2.RD3.$suggestSolution    = "ball.V2";
    enet_icss1.PRU_ICSSG0_RGMII2.RXC.$suggestSolution    = "ball.T3";
    enet_icss1.PRU_ICSSG0_RGMII2.RX_CTL.$suggestSolution = "ball.AA2";
    enet_icss1.PRU_ICSSG0_RGMII2.TD0.$suggestSolution    = "ball.Y3";
    enet_icss1.PRU_ICSSG0_RGMII2.TD1.$suggestSolution    = "ball.AA3";
    enet_icss1.PRU_ICSSG0_RGMII2.TD2.$suggestSolution    = "ball.R6";
    enet_icss1.PRU_ICSSG0_RGMII2.TD3.$suggestSolution    = "ball.V4";
    enet_icss1.PRU_ICSSG0_RGMII2.TXC.$suggestSolution    = "ball.U4";
    enet_icss1.PRU_ICSSG0_RGMII2.TX_CTL.$suggestSolution = "ball.T5";
    enet_icss2.PRU_ICSSG1_RGMII1.$suggestSolution        = "PRU_ICSSG1_RGMII1";
    enet_icss2.PRU_ICSSG1_RGMII1.RD0.$suggestSolution    = "ball.Y7";
    enet_icss2.PRU_ICSSG1_RGMII1.RD1.$suggestSolution    = "ball.U8";
    enet_icss2.PRU_ICSSG1_RGMII1.RD2.$suggestSolution    = "ball.W8";
    enet_icss2.PRU_ICSSG1_RGMII1.RD3.$suggestSolution    = "ball.V8";
    enet_icss2.PRU_ICSSG1_RGMII1.RXC.$suggestSolution    = "ball.AA7";
    enet_icss2.PRU_ICSSG1_RGMII1.RX_CTL.$suggestSolution = "ball.Y8";
    enet_icss2.PRU_ICSSG1_RGMII1.TD0.$suggestSolution    = "ball.AA8";
    enet_icss2.PRU_ICSSG1_RGMII1.TD1.$suggestSolution    = "ball.U9";
    enet_icss2.PRU_ICSSG1_RGMII1.TD2.$suggestSolution    = "ball.W9";
    enet_icss2.PRU_ICSSG1_RGMII1.TD3.$suggestSolution    = "ball.AA9";
    enet_icss2.PRU_ICSSG1_RGMII1.TXC.$suggestSolution    = "ball.V9";
    enet_icss2.PRU_ICSSG1_RGMII1.TX_CTL.$suggestSolution = "ball.Y9";
    enet_icss3.PRU_ICSSG1_RGMII2.RD0.$suggestSolution    = "ball.W11";
    enet_icss3.PRU_ICSSG1_RGMII2.RD1.$suggestSolution    = "ball.V11";
    enet_icss3.PRU_ICSSG1_RGMII2.RD2.$suggestSolution    = "ball.AA12";
    enet_icss3.PRU_ICSSG1_RGMII2.RD3.$suggestSolution    = "ball.Y12";
    enet_icss3.PRU_ICSSG1_RGMII2.RXC.$suggestSolution    = "ball.U11";
    enet_icss3.PRU_ICSSG1_RGMII2.RX_CTL.$suggestSolution = "ball.W12";
    enet_icss3.PRU_ICSSG1_RGMII2.TD0.$suggestSolution    = "ball.AA10";
    enet_icss3.PRU_ICSSG1_RGMII2.TD1.$suggestSolution    = "ball.V10";
    enet_icss3.PRU_ICSSG1_RGMII2.TD2.$suggestSolution    = "ball.U10";
    enet_icss3.PRU_ICSSG1_RGMII2.TD3.$suggestSolution    = "ball.AA11";
    enet_icss3.PRU_ICSSG1_RGMII2.TXC.$suggestSolution    = "ball.Y10";
    enet_icss3.PRU_ICSSG1_RGMII2.TX_CTL.$suggestSolution = "ball.Y11";

  • Hi Erik,

    Thanks for your query.

    Logs Seems to be correct.

    But, It will be better if you could share sysconfig file for review.

    Best Regards

    Ashwani

  • The system configuration for three Gigabit Ethernet ports is at the end of this post.

    I was not able to get three ports to work in the same SYSCONFIG.  I noticed at least three issues.

    The generated code counts MAC port 1 twice, and reports the number of MAC ports on those devices as 2 instead of 1.  MAC port 2 only appears on one of the devices, and it is correctly counted once.  You can see that problem in the source files generated by SYSCONFIG.

    In the generated "ti_enet_config.h" file, the symbol "ENET_SYSCFG_ICSSG1_ENABLED" is set to 0 and it should be set to 1.  That causes problems in the linker script which looks at that symbol.  It may cause problems in other code.

    The example linker script does not correctly define sections for the buffer pools.  That only causes a problem if you are placing the normal ".bss" section in DDR memory.  The buffer pools are placed in the normal ".bss" section and they should be placed in the ".icss_mem" section.  This is especially important because the buffer pools for three Ethernet ports will not fit in the available MSRAM and the location of the ".icss_mem" section must be changed.

    There are other issues that look like they may be problems.  For example, the symbols "ENET_SYSCFG_DUALMAC_PORT1_ENABLED" and "ENET_SYSCFG_DUALMAC_PORT2_ENABLED" are shared by both icss devices.  There really should be a separate set of symbols for each icss device.  The configuration of the two icss devices might not be identical.

    I was not able to get three Ethernet ports to work if they are defined in the same 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_beta" --package "ALV" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM64x@08.06.00"
     * @versions {"tool":"1.14.0+2667"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const eeprom     = scripting.addModule("/board/eeprom/eeprom", {}, false);
    const eeprom1    = eeprom.addInstance();
    const i2c        = scripting.addModule("/drivers/i2c/i2c", {}, false);
    const i2c1       = i2c.addInstance();
    const ipc        = scripting.addModule("/drivers/ipc/ipc");
    const mmcsd      = scripting.addModule("/drivers/mmcsd/mmcsd", {}, false);
    const mmcsd1     = mmcsd.addInstance();
    const pruicss    = scripting.addModule("/drivers/pruicss/pruicss", {}, false);
    const pruicss1   = pruicss.addInstance();
    const pruicss2   = 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 mpu_armv78 = mpu_armv7.addInstance();
    const mpu_armv79 = mpu_armv7.addInstance();
    const enet_icss  = scripting.addModule("/networking/enet_icss/enet_icss", {}, false);
    const enet_icss1 = enet_icss.addInstance();
    const enet_icss2 = enet_icss.addInstance();
    const enet_icss3 = enet_icss.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    eeprom1.$name = "CONFIG_EEPROM0";
    
    i2c1.$name               = "CONFIG_I2C1";
    eeprom1.peripheralDriver = i2c1;
    i2c1.I2C.$assign         = "I2C0";
    i2c1.I2C.SCL.$assign     = "ball.A18";
    i2c1.I2C.SDA.$assign     = "ball.B18";
    
    ipc.r5fss0_1 = "notify";
    ipc.r5fss1_0 = "NONE";
    ipc.r5fss1_1 = "NONE";
    ipc.m4fss0_0 = "NONE";
    ipc.a53ss0_0 = "notify";
    
    mmcsd1.$name        = "CONFIG_MMCSD0";
    mmcsd1.cardType     = "SD";
    mmcsd1.phyType      = "NO_PHY";
    mmcsd1.MMC1.$assign = "MMC1";
    
    debug_log.enableCssLog       = false;
    debug_log.enableSharedMemLog = true;
    
    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              = 21;
    
    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;
    
    mpu_armv78.$name      = "CONFIG_MPU_REGION7";
    mpu_armv78.baseAddr   = 0x701C0000;
    mpu_armv78.attributes = "NonCached";
    mpu_armv78.size       = 17;
    
    mpu_armv79.$name      = "CONFIG_MPU_REGION8";
    mpu_armv79.baseAddr   = 0xF0000000;
    mpu_armv79.size       = 28;
    mpu_armv79.attributes = "NonCached";
    
    enet_icss1.$name                          = "CONFIG_ENET_ICSS0";
    enet_icss1.instance                       = "ICSSG0";
    enet_icss1.phyToMacInterfaceMode          = "RGMII";
    enet_icss1.mdioMdcEnable                  = false;
    enet_icss1.mode                           = "DUAL MAC";
    enet_icss1.txDmaChannel[0].$name          = "ENET_DMA_TX_CH0";
    enet_icss1.rxDmaChannel.create(2);
    enet_icss1.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH0";
    enet_icss1.rxDmaChannel[0].useDefaultFlow = true;
    enet_icss1.rxDmaChannel[1].$name          = "ENET_DMA_RX_CH3";
    enet_icss1.rxDmaChannel[1].chIdx          = 1;
    enet_icss1.rxDmaChannel[1].PacketsCount   = 0;
    enet_icss1.rxDmaChannel[1].macAddrCount   = 0;
    
    pruicss1.$name                           = "CONFIG_PRU_ICSS0";
    enet_icss1.icss                          = pruicss1;
    pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";
    
    enet_icss2.$name                          = "CONFIG_ENET_ICSS1";
    enet_icss2.mode                           = "DUAL MAC";
    enet_icss2.phyToMacInterfaceMode          = "RGMII";
    enet_icss2.mdioMode                       = "MDIO_MODE_MANUAL";
    enet_icss2.txDmaChannel[0].$name          = "ENET_DMA_TX_CH1";
    enet_icss2.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH1";
    enet_icss2.rxDmaChannel[0].useDefaultFlow = true;
    
    enet_icss3.$name                          = "CONFIG_ENET_ICSS2";
    enet_icss3.mode                           = "DUAL MAC";
    enet_icss3.dualMacPortSelected            = "ENET_MAC_PORT_2";
    enet_icss3.phyToMacInterfaceMode          = "RGMII";
    enet_icss3.mdioMdcEnable                  = false;
    enet_icss3.txDmaChannel[0].$name          = "ENET_DMA_TX_CH2";
    enet_icss3.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH2";
    enet_icss3.rxDmaChannel[0].useDefaultFlow = true;
    enet_icss3.PRU_ICSSG1_RGMII2.$assign      = "PRU_ICSSG1_RGMII2";
    
    pruicss2.$name                           = "CONFIG_PRU_ICSS1";
    enet_icss3.icss                          = pruicss2;
    enet_icss2.icss                          = pruicss2;
    pruicss2.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO1";
    pruicss2.intcMapping.create(2);
    pruicss2.intcMapping[0].$name            = "CONFIG_ICSS1_INTC_MAPPING0";
    pruicss2.intcMapping[0].event            = "41";
    pruicss2.intcMapping[1].$name            = "CONFIG_ICSS1_INTC_MAPPING1";
    pruicss2.intcMapping[1].event            = "53";
    
    const udma         = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1        = udma.addInstance({}, false);
    enet_icss3.udmaDrv = udma1;
    enet_icss2.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.
     */
    mmcsd1.MMC1.CLK.$suggestSolution                         = "ball.L20";
    mmcsd1.MMC1.CLKLB.$suggestSolution                       = "MMC1_CLKLB";
    mmcsd1.MMC1.CMD.$suggestSolution                         = "ball.J19";
    mmcsd1.MMC1.DAT0.$suggestSolution                        = "ball.K21";
    mmcsd1.MMC1.DAT1.$suggestSolution                        = "ball.L21";
    mmcsd1.MMC1.DAT2.$suggestSolution                        = "ball.K19";
    mmcsd1.MMC1.DAT3.$suggestSolution                        = "ball.K18";
    mmcsd1.MMC1.SDCD.$suggestSolution                        = "ball.D19";
    enet_icss1.PRU_ICSSG0_RGMII1.$suggestSolution            = "PRU_ICSSG0_RGMII1";
    enet_icss1.PRU_ICSSG0_RGMII1.RD0.$suggestSolution        = "ball.Y1";
    enet_icss1.PRU_ICSSG0_RGMII1.RD1.$suggestSolution        = "ball.R4";
    enet_icss1.PRU_ICSSG0_RGMII1.RD2.$suggestSolution        = "ball.U2";
    enet_icss1.PRU_ICSSG0_RGMII1.RD3.$suggestSolution        = "ball.V2";
    enet_icss1.PRU_ICSSG0_RGMII1.RXC.$suggestSolution        = "ball.T3";
    enet_icss1.PRU_ICSSG0_RGMII1.RX_CTL.$suggestSolution     = "ball.AA2";
    enet_icss1.PRU_ICSSG0_RGMII1.TD0.$suggestSolution        = "ball.Y3";
    enet_icss1.PRU_ICSSG0_RGMII1.TD1.$suggestSolution        = "ball.AA3";
    enet_icss1.PRU_ICSSG0_RGMII1.TD2.$suggestSolution        = "ball.R6";
    enet_icss1.PRU_ICSSG0_RGMII1.TD3.$suggestSolution        = "ball.V4";
    enet_icss1.PRU_ICSSG0_RGMII1.TXC.$suggestSolution        = "ball.U4";
    enet_icss1.PRU_ICSSG0_RGMII1.TX_CTL.$suggestSolution     = "ball.T5";
    enet_icss2.PRU_ICSSG1_RGMII1.$suggestSolution            = "PRU_ICSSG1_RGMII1";
    enet_icss2.PRU_ICSSG1_RGMII1.RD0.$suggestSolution        = "ball.Y7";
    enet_icss2.PRU_ICSSG1_RGMII1.RD1.$suggestSolution        = "ball.U8";
    enet_icss2.PRU_ICSSG1_RGMII1.RD2.$suggestSolution        = "ball.W8";
    enet_icss2.PRU_ICSSG1_RGMII1.RD3.$suggestSolution        = "ball.V8";
    enet_icss2.PRU_ICSSG1_RGMII1.RXC.$suggestSolution        = "ball.AA7";
    enet_icss2.PRU_ICSSG1_RGMII1.RX_CTL.$suggestSolution     = "ball.Y8";
    enet_icss2.PRU_ICSSG1_RGMII1.TD0.$suggestSolution        = "ball.AA8";
    enet_icss2.PRU_ICSSG1_RGMII1.TD1.$suggestSolution        = "ball.U9";
    enet_icss2.PRU_ICSSG1_RGMII1.TD2.$suggestSolution        = "ball.W9";
    enet_icss2.PRU_ICSSG1_RGMII1.TD3.$suggestSolution        = "ball.AA9";
    enet_icss2.PRU_ICSSG1_RGMII1.TXC.$suggestSolution        = "ball.V9";
    enet_icss2.PRU_ICSSG1_RGMII1.TX_CTL.$suggestSolution     = "ball.Y9";
    enet_icss2.PRU_ICSSG1_MDIO.$suggestSolution              = "PRU_ICSSG1_MDIO0";
    enet_icss2.PRU_ICSSG1_MDIO.MDC.$suggestSolution          = "ball.Y6";
    enet_icss2.PRU_ICSSG1_MDIO.MDIO.$suggestSolution         = "ball.AA6";
    enet_icss2.PRU_ICSSG1_IEP.$suggestSolution               = "PRU_ICSSG1_IEP0";
    enet_icss2.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution = "ball.V7";
    enet_icss2.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution = "ball.W7";
    enet_icss3.PRU_ICSSG1_RGMII2.RD0.$suggestSolution        = "ball.W11";
    enet_icss3.PRU_ICSSG1_RGMII2.RD1.$suggestSolution        = "ball.V11";
    enet_icss3.PRU_ICSSG1_RGMII2.RD2.$suggestSolution        = "ball.AA12";
    enet_icss3.PRU_ICSSG1_RGMII2.RD3.$suggestSolution        = "ball.Y12";
    enet_icss3.PRU_ICSSG1_RGMII2.RXC.$suggestSolution        = "ball.U11";
    enet_icss3.PRU_ICSSG1_RGMII2.RX_CTL.$suggestSolution     = "ball.W12";
    enet_icss3.PRU_ICSSG1_RGMII2.TD0.$suggestSolution        = "ball.AA10";
    enet_icss3.PRU_ICSSG1_RGMII2.TD1.$suggestSolution        = "ball.V10";
    enet_icss3.PRU_ICSSG1_RGMII2.TD2.$suggestSolution        = "ball.U10";
    enet_icss3.PRU_ICSSG1_RGMII2.TD3.$suggestSolution        = "ball.AA11";
    enet_icss3.PRU_ICSSG1_RGMII2.TXC.$suggestSolution        = "ball.Y10";
    enet_icss3.PRU_ICSSG1_RGMII2.TX_CTL.$suggestSolution     = "ball.Y11";

  • Hi Ashwani,

    I have got same setup; two instances of the ICSS Ethernet,  defined both as Dual MAC, same sdk version and same compiler version.


    Icssg-1 worked as dual-mac in AM64-EVM board. After i changed the ICSSG from 1 to 0 in sysconfig for my custom board i get this same compile error.

    subdir_rules.mk:35: recipe for target 'syscfg/ti_enet_soc.o' failed
    syscfg/ti_enet_soc.c:117:45: error: use of undeclared identifier 'ICSSG_HOST_POOL_0_TOTAL_SIZE'
    static uint8_t gEnetSoc_icssg0HostPoolMem_0[ICSSG_HOST_POOL_0_TOTAL_SIZE]
                                                ^
    syscfg/ti_enet_soc.c:161:36: error: use of undeclared identifier 'ICSSG_DUALMAC_PORT_1_HOST_POOL_SIZE'
                .hostBufferPoolSize  = ICSSG_DUALMAC_PORT_1_HOST_POOL_SIZE,
                                       ^
    syscfg/ti_enet_soc.c:162:36: error: use of undeclared identifier 'ICSSG_DUALMAC_PORT_1_HOST_BUFFER_POOL_NUM_CFG'
                .hostBufferPoolNum   = ICSSG_DUALMAC_PORT_1_HOST_BUFFER_POOL_NUM_CFG,

     After i added necessary defines in these files ( enet_soc_cfg_am64x_am243x.c.xdt , enet_syscfg.h.xdt ) could compiled without any error.

    But only icssg-0 port-1 worked well, port-2 linked up but does not transfer any data. What could be problem?

    Best Regards

    Berlam

  • Hi Erik, 

    The configuration for the ICSSG instance for the first module of ICSS peripheral is configured as ICSSG0 in the attached configuration instead of ICSSG1. That is the reason you are seeing the macro "ENET_SYSCFG_ICSSG1_ENABLED" being set as 0 instead of 1. This is also the reason for the errors you have encountered at the start of this thread. Kindly set it to ICSSG1 to resolve this issue.

    Following further, on am64x-EVM, even though there are 3 physical ports exposed, all three ports cannot be configured as ICSS ports. One of the three ports is dedicated to CPSW, one port is dedicated to ICSS, and one other port is a shared port. With the above attempted configuration, it tries to set the Port_0 of ICSSG (which is the dedicated ICSS port) once in switch mode in first module, and again as mac mode in second module. So, configuring all 3 ports as ICSS ports is not supported.

    You can find more details regarding port configuration in the documentation. Please refer to the ICSSG switch example documentation for ease of use.


    I hope I have clarified your query.

    Best regards,
    Teja.

  • This resolved my issue of the compiler errors for two ports.  I will mark this as resolved.  However, I have a separate thread dealing with a three port configuration, which should be left open.  Thanks for all the replies.