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.

TMDS64EVM: enet_icssg_tcpserver example seems to be broken with MCU+ SDK v08.06.00.45

Part Number: TMDS64EVM
Other Parts Discussed in Thread: DP83869, SYSCONFIG

I've been trying to isolate an issue running the enet_icssg_tcpserver example in the MCU+ SDK and I think it's broken in release v08.06.00.45.

Here is the output

==========================
ICSSG LWIP TCP ECHO SERVER
==========================
Enabling clocks!
Enabling clocks!
Mdio_open: MDIO Manual_Mode enabled
EnetPhy_bindDriver: PHY 15: OUI:080028 Model:0f Ver:01 <-> 'dp83869' : OK
PHY 3 is alive
PHY 15 is alive
Mdio_open: MDIO Manual_Mode enabled
EnetPhy_bindDriver: PHY 3: OUI:080028 Model:0f Ver:01 <-> 'dp83869' : OK
PHY 3 is alive
PHY 15 is alive
Starting lwIP, local interface IP is dhcp-enabled
[LWIPIF_LWIP] NETIF INIT SUCCESS
Host MAC address-0 : 34:08:e1:80:b7:b3
[LWIPIF_LWIP] Enet has been started successfully
[0]Enet IF UP Event. Local interface IP:0.0.0.0
[LWIPIF_LWIP] NETIF INIT SUCCESS
EnetQueue_enq: NULL enq to the queue
Assertion @ Line: 111 in /nightlybuilds/mcupsdk_internal/jenkins/mcu_plus_sdk_am64x_08_06_00_45/source/networking/enet/core/src/core/enet_queue.c: node != NULL
                                                                               Icssg_handleLinkUp: icssg1-1: Port 1: Link up: 1-Gbps Full-Duplex
Icssg_handleLinkUp: icssg1-2: Port 2: Link up: 1-Gbps Full-Duplex

It does not subsequently handle the IF UP event thus doesn't assign an IP address so the example does not work as designed. Is this a known issue ? Is there a workaround ?

I have currently reverted to the 08.06.00.43 SDK (which does seem to work) but woud like to use the latest release.

Thanks,

Jon

  • Hi Jon,

    I will try reproducing this issue at my end.

    Thanks and Regards,

    Rimika

  • Hi,

    Any update ?

    Thanks,

    Jon

  • Hi Jon,

    It seems this is not a driver issue but configuration issue.

    The user needs to set the packet pool config to required settings i.e. value to sum of all rx packets combined on bases of packets allocated in DMA config.

    You need to enable the option "Only Enable Packet Info Allocation" before configuring Packet Pool config.

    Default configuration should look like this: 

    Thanks and Regards,

    Rimika

  • Hi Jon,

    It seems this is not a driver issue but configuration issue.

    The user needs to set the packet pool config to required settings i.e. value to sum of all rx packets combined on bases of packets allocated in DMA config.

    You need to enable the option "Only Enable Packet Info Allocation" before configuring Packet Pool config.

    Default configuration should look like this: 

    Thanks and Regards,

    Rimika

  • Hi Rimika,

    Thank you. I've checked sysconfig and can confirm although the settings for CONFIG_ENET_ICSS0 were as shown above, those for CONFIG_ENET_ICSS1 were incorrect. I've ticked 'only enable packet info allocation' as suggested and then changed 'large pool packet count' from 48 to 32. I can confirm the TCP server now works wth the modified MCU+ SDK 08.06.00.45.

    The file to fix is located at C:\ti\mcu_plus_sdk_am64x_08_06_00_45\examples\networking\lwip\enet_icssg_tcpserver\am64x-evm\r5fss0-0_freertos\example.syscfg . I have included the updated content below.

    Can you raise an internal problem report for this issue and confirm it will be fixed in the next release of the SDK ?

    Many thanks,

    Jon

    /**
     * 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 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();
    const enet_icss2 = 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 = "ball.A7";
    
    i2c1.$name               = "CONFIG_I2C0";
    eeprom1.peripheralDriver = i2c1;
    i2c1.I2C.$assign         = "I2C0";
    i2c1.I2C.SCL.$assign     = "ball.A18";
    i2c1.I2C.SDA.$assign     = "ball.B18";
    
    i2c2.$name           = "CONFIG_I2C1";
    i2c2.I2C.$assign     = "I2C1";
    i2c2.I2C.SCL.$assign = "ball.C18";
    i2c2.I2C.SDA.$assign = "ball.B19";
    
    debug_log.enableUartLog = true;
    debug_log.enableCssLog  = false;
    debug_log.uartLog.$name = "CONFIG_UART0";
    
    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.mode                           = "DUAL MAC";
    enet_icss1.LargePoolPktCount              = 32;
    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.netifInstance.create(1);
    enet_icss1.netifInstance[0].$name         = "NETIF_INST_ID0";
    enet_icss1.PRU_ICSSG1_RGMII1.$assign      = "PRU_ICSSG1_RGMII1";
    
    enet_icss2.$name                          = "CONFIG_ENET_ICSS1";
    enet_icss2.mode                           = "DUAL MAC";
    enet_icss2.phyToMacInterfaceMode          = "RGMII";
    enet_icss2.mdioMdcEnable                  = false;
    enet_icss2.dualMacPortSelected            = "ENET_MAC_PORT_2";
    enet_icss2.PktInfoOnlyEnable              = true;
    enet_icss2.LargePoolPktCount              = 32;
    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.netifInstance.create(1);
    enet_icss2.netifInstance[0].$name         = "NETIF_INST_ID1";
    
    enet_icss2.icss                          = pruicss1;
    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_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.
     */
    debug_log.uartLog.UART.$suggestSolution                  = "USART0";
    debug_log.uartLog.UART.RXD.$suggestSolution              = "ball.D15";
    debug_log.uartLog.UART.TXD.$suggestSolution              = "ball.C16";
    enet_icss1.PRU_ICSSG1_MDIO.$suggestSolution              = "PRU_ICSSG1_MDIO0";
    enet_icss1.PRU_ICSSG1_MDIO.MDC.$suggestSolution          = "ball.Y6";
    enet_icss1.PRU_ICSSG1_MDIO.MDIO.$suggestSolution         = "ball.AA6";
    enet_icss1.PRU_ICSSG1_IEP.$suggestSolution               = "PRU_ICSSG1_IEP0";
    enet_icss1.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution = "ball.V7";
    enet_icss1.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution = "ball.W7";
    enet_icss1.PRU_ICSSG1_RGMII1.RD0.$suggestSolution        = "ball.Y7";
    enet_icss1.PRU_ICSSG1_RGMII1.RD1.$suggestSolution        = "ball.U8";
    enet_icss1.PRU_ICSSG1_RGMII1.RD2.$suggestSolution        = "ball.W8";
    enet_icss1.PRU_ICSSG1_RGMII1.RD3.$suggestSolution        = "ball.V8";
    enet_icss1.PRU_ICSSG1_RGMII1.RXC.$suggestSolution        = "ball.AA7";
    enet_icss1.PRU_ICSSG1_RGMII1.RX_CTL.$suggestSolution     = "ball.Y8";
    enet_icss1.PRU_ICSSG1_RGMII1.TD0.$suggestSolution        = "ball.AA8";
    enet_icss1.PRU_ICSSG1_RGMII1.TD1.$suggestSolution        = "ball.U9";
    enet_icss1.PRU_ICSSG1_RGMII1.TD2.$suggestSolution        = "ball.W9";
    enet_icss1.PRU_ICSSG1_RGMII1.TD3.$suggestSolution        = "ball.AA9";
    enet_icss1.PRU_ICSSG1_RGMII1.TXC.$suggestSolution        = "ball.V9";
    enet_icss1.PRU_ICSSG1_RGMII1.TX_CTL.$suggestSolution     = "ball.Y9";
    enet_icss2.PRU_ICSSG1_RGMII2.$suggestSolution            = "PRU_ICSSG1_RGMII2";
    enet_icss2.PRU_ICSSG1_RGMII2.RD0.$suggestSolution        = "ball.W11";
    enet_icss2.PRU_ICSSG1_RGMII2.RD1.$suggestSolution        = "ball.V11";
    enet_icss2.PRU_ICSSG1_RGMII2.RD2.$suggestSolution        = "ball.AA12";
    enet_icss2.PRU_ICSSG1_RGMII2.RD3.$suggestSolution        = "ball.Y12";
    enet_icss2.PRU_ICSSG1_RGMII2.RXC.$suggestSolution        = "ball.U11";
    enet_icss2.PRU_ICSSG1_RGMII2.RX_CTL.$suggestSolution     = "ball.W12";
    enet_icss2.PRU_ICSSG1_RGMII2.TD0.$suggestSolution        = "ball.AA10";
    enet_icss2.PRU_ICSSG1_RGMII2.TD1.$suggestSolution        = "ball.V10";
    enet_icss2.PRU_ICSSG1_RGMII2.TD2.$suggestSolution        = "ball.U10";
    enet_icss2.PRU_ICSSG1_RGMII2.TD3.$suggestSolution        = "ball.AA11";
    enet_icss2.PRU_ICSSG1_RGMII2.TXC.$suggestSolution        = "ball.Y10";
    enet_icss2.PRU_ICSSG1_RGMII2.TX_CTL.$suggestSolution     = "ball.Y11";
    

  • Hi Jon,

    Thanks for your input, I will report the issue to be fixed in the upcoming release.

    Thanks and Regards,

    Rimika

  • This will be a part of upcoming release SDK 9.0

    Thanks and Regards,

    Rimika

  • Hi Rimika,

    When is SDK 9.0 scheduled for release? I'm using 08.06 at the moment.

    Many thanks,

    Jon

  • Hi Jon,

    I'll update you as soon as get any updates.

    Thanks and Regards,

    Rimika