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.

AM2634: EnetAppUtils_isDescCached() == false : failed !!!

Part Number: AM2634

Hi Team,

I am trying to configure Ethernet as UDP server in Core_r5fss0_0. After adding app_cpswconfighandler.c file. It is throwing below error on serial terminal log

Core 0- All tests have passed!!

============================

CPSW LWIP IGMP UDP SERVER

============================

EnetAppUtils_reduceCoreMacAllocation: Reduced Mac Address Allocation for CoreId:
0 From 4 To 2

Assertion @ Line: 204 in C:/ti/mcu_plus_sdk_am263x_09_02_00_55/examples/networki
ng/lwip/enet_cpsw_udp_igmp/app_cpswconfighandler.c: EnetAppUtils_isDescCached()
== false : failed !!!

Please let me know if anything has to be changed. 

UDP server code runs successfully when I try to run seperately However, whenever I try to configure Core 0 to run UDP functionality it throws this.

Appreciate for your support!

  • Requesting for support on this!

  • Hi Ajit,

    I was Out of office yesterday so could not respond.

    When you run the out-of-box UDP IGMP Server example from the 09.02 SDK on the AM263x, it runs on Core-0. What exactly do you infer by 

    However, whenever I try to configure Core 0 to run UDP functionality it throws this.

    I am not able to replicate the error. The error is being caused in the CPSW Init configuration function. Have you changed any memory settings in the example related to DMA?

    Can you please share the steps you followed to run the example?

    Sharing my output below:

    Regards,
    Shaunak

  • No Problem!

    Hi Shaunak,

    Hi Shaunak,

    Initially, I have imported "enet_cpsw_udp_igmp_am263x-cc_r5fss0-0_freertos_ti-arm-clang" project from resource explorer and it worked fine.

    But now as per the requirement, I have to configure same settings from syscfg file from above example project into empty project.

    So, I have imported "empty_am263x-cc_system_freertos" system project from resource explorer. It comes with code for each core as shown below.




    Out of these cores, I want to use core 0 to establish UDP communication with PC as shown below. So, I was trying to change syscfg file to udp_igmp example project file.

    I have changed all the settings and added required libraries in settings.

    Now, when I call int32_t EnetApp_driverOpen(Enet_Type enetType, uint32_t instId) routine. It internally calls void EnetApp_updateCpswInitCfg(Enet_Type enetType, uint32_t instId, Cpsw_Cfg *cpswCfg) thats when I thows error.

    Please let me know if anything I am missing to do.

    My final requirement is to configure UDP server in core 0 and SPI on core 1
  • Hi Ajit,

    A few questions.

    1. Did you copy all the changes from the UDP_IGMP_SERVER example? Especially the MPU memory region changes and the memory configurator changes? I still feel we are missing something related to memory which is giving that false assert. The assert is because the CPDMA memory descriptor needs to be in . Can you compare the example.sycfg (as text) of the empty example project core-0 and the udp igmp server example? Im sure you will find some differences. In the MPU ARMv7 region, make sure the OCRAM is non-cached, because CPDMA descriptors need to be in non-cached memory

    2. 

    My final requirement is to configure UDP server in core 0 and SPI on core 1

    This should be possible. I think just configuring the syscfg correctly will get half the job done.

    Regards,

    Shaunak

  • Thanks!

    I have found below potential differences when compared both SysCfg file of UDP_IGMP Server example and Empty project Core 0.

    Left side -> UDP_IGMP Server example SysCfg file.

    Right side -> Empty project Core 0 SysCfg file

     

    It shows I do not have memory allocation for NDK Packet Memory CPPI_DESC and NDK Packet Memory DMA_PKT_MEMPOOL

    section8.$name                       = "NDK Packet Memory CPPI_DESC";

    section8.type                        = "NOLOAD";

    section8.group                       = false;

    section8.load_memory                 = "CPPI_DESC";

    section8.output_section.create(1);

    section8.output_section[0].$name     = ".bss:ENET_CPPI_DESC";

    section8.output_section[0].alignment = 128;

     

    section9.$name                       = "NDK Packet Memory DMA_PKT_MEMPOOL";

    section9.type                        = "NOLOAD";

    section9.group                       = false;

    section9.load_memory                 = "OCRAM";

    section9.output_section.create(1);

    section9.output_section[0].$name     = ".bss:ENET_DMA_PKT_MEMPOOL";

     

     

    Do I need to map these to any specific memory regions?

    Please let me know if you find any other difference.

    Empty project core 0 SysCfg file is given 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 "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@09.02.00"
    * @versions {"tool":"1.20.0+3587"}
    */

    /**
    * 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 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 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 section12 = section.addInstance();
    const enet_cpsw = scripting.addModule("/networking/enet_cpsw/enet_cpsw", {}, false);
    const enet_cpsw1 = enet_cpsw.addInstance();

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

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

    i2c2.$name = "CONFIG_I2C1";
    i2c2.I2C.$assign = "I2C2";
    i2c2.I2C.SCL.$assign = "UART0_RTSn";
    i2c2.I2C.SDA.$assign = "UART0_CTSn";
    i2c2.I2C_child.$name = "drivers_i2c_v1_i2c_v1_template1";

    debug_log.enableUartLog = true;
    debug_log.enableSharedMemLog = true;
    debug_log.enableSharedMemLogReader = true;
    debug_log.uartLog.$name = "CONFIG_UART0";
    debug_log.uartLog.UART.$assign = "UART0";
    debug_log.uartLog.UART.RXD.$assign = "UART0_RXD";
    debug_log.uartLog.UART.TXD.$assign = "UART0_TXD";
    debug_log.uartLog.child.$name = "drivers_uart_v2_uart_v2_template0";

    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 = 0x80000;
    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.size = 14;
    mpu_armv75.baseAddr = 0x50D00000;
    mpu_armv75.allowExecute = false;
    mpu_armv75.attributes = "NonCached";

    mpu_armv76.$name = "CONFIG_MPU_REGION5";
    mpu_armv76.size = 14;
    mpu_armv76.allowExecute = false;
    mpu_armv76.attributes = "NonCached";
    mpu_armv76.baseAddr = 0x72000000;

    default_linker1.$name = "memory_configurator_default_linker0";

    general1.$name = "CONFIG_GENERAL0";
    general1.linker.$name = "TIARMCLANG0";

    region1.$name = "MEMORY_REGION_CONFIGURATION0";
    region1.memory_region.create(11);
    region1.memory_region[0].type = "TCMA";
    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";
    region1.memory_region[1].$name = "R5F_TCMA";
    region1.memory_region[1].size = 0x7FC0;
    region1.memory_region[2].type = "TCMB";
    region1.memory_region[2].size = 0x8000;
    region1.memory_region[2].$name = "R5F_TCMB";
    region1.memory_region[3].$name = "SBL";
    region1.memory_region[3].auto = false;
    region1.memory_region[3].size = 0x40000;
    region1.memory_region[4].$name = "OCRAM";
    region1.memory_region[4].auto = false;
    region1.memory_region[4].manualStartAddress = 0x70040000;
    region1.memory_region[4].size = 0x80000;
    region1.memory_region[5].type = "FLASH";
    region1.memory_region[5].auto = false;
    region1.memory_region[5].size = 0x80000;
    region1.memory_region[5].$name = "FLASH";
    region1.memory_region[6].$name = "USER_SHM_MEM";
    region1.memory_region[6].auto = false;
    region1.memory_region[6].manualStartAddress = 0x701D0000;
    region1.memory_region[6].size = 0x4000;
    region1.memory_region[6].isShared = true;
    region1.memory_region[6].shared_cores = ["r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[7].$name = "LOG_SHM_MEM";
    region1.memory_region[7].auto = false;
    region1.memory_region[7].manualStartAddress = 0x701D4000;
    region1.memory_region[7].size = 0x4000;
    region1.memory_region[7].isShared = true;
    region1.memory_region[7].shared_cores = ["r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[8].type = "CUSTOM";
    region1.memory_region[8].$name = "RTOS_NORTOS_IPC_SHM_MEM";
    region1.memory_region[8].auto = false;
    region1.memory_region[8].manualStartAddress = 0x72000000;
    region1.memory_region[8].size = 0x3E80;
    region1.memory_region[8].isShared = true;
    region1.memory_region[8].shared_cores = ["r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[9].type = "CUSTOM";
    region1.memory_region[9].$name = "MAILBOX_HSM";
    region1.memory_region[9].auto = false;
    region1.memory_region[9].manualStartAddress = 0x44000000;
    region1.memory_region[9].size = 0x3CE;
    region1.memory_region[9].isShared = true;
    region1.memory_region[9].shared_cores = ["r5fss0-1","r5fss1-0","r5fss1-1"];
    region1.memory_region[10].type = "CUSTOM";
    region1.memory_region[10].$name = "MAILBOX_R5F";
    region1.memory_region[10].auto = false;
    region1.memory_region[10].manualStartAddress = 0x44000400;
    region1.memory_region[10].size = 0x3CE;
    region1.memory_region[10].isShared = true;
    region1.memory_region[10].shared_cores = ["r5fss0-1","r5fss1-0","r5fss1-1"];

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

    section2.load_memory = "OCRAM";
    section2.$name = "Text Segments";
    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.load_memory = "OCRAM";
    section3.$name = "Code and Read-Only Data";
    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.load_memory = "OCRAM";
    section4.$name = "Data Segment";
    section4.output_section.create(1);
    section4.output_section[0].$name = ".data";
    section4.output_section[0].palignment = true;

    section5.load_memory = "OCRAM";
    section5.$name = "Memory Segments";
    section5.output_section.create(3);
    section5.output_section[0].$name = ".bss";
    section5.output_section[0].output_sections_start = "__BSS_START";
    section5.output_section[0].output_sections_end = "__BSS_END";
    section5.output_section[0].palignment = true;
    section5.output_section[1].$name = ".sysmem";
    section5.output_section[1].palignment = true;
    section5.output_section[2].$name = ".stack";
    section5.output_section[2].palignment = true;

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

    section7.load_memory = "OCRAM";
    section7.$name = "Initialization and Exception Handling";
    section7.output_section.create(3);
    section7.output_section[0].$name = ".ARM.exidx";
    section7.output_section[0].palignment = true;
    section7.output_section[1].$name = ".init_array";
    section7.output_section[1].palignment = true;
    section7.output_section[2].$name = ".fini_array";
    section7.output_section[2].palignment = true;

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

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

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

    section11.load_memory = "MAILBOX_HSM";
    section11.type = "NOLOAD";
    section11.$name = "SIPC HSM Queue Memory";
    section11.group = false;
    section11.output_section.create(1);
    section11.output_section[0].$name = ".bss.sipc_hsm_queue_mem";
    section11.output_section[0].alignment = 0;

    section12.load_memory = "MAILBOX_R5F";
    section12.$name = "SIPC R5F Queue Memory";
    section12.group = false;
    section12.type = "NOLOAD";
    section12.output_section.create(1);
    section12.output_section[0].$name = ".bss.sipc_r5f_queue_mem";
    section12.output_section[0].alignment = 0;

    enet_cpsw1.$name = "CONFIG_ENET_CPSW0";
    enet_cpsw1.LargePoolPktCount = 32;
    enet_cpsw1.PktInfoOnlyEnable = true;
    enet_cpsw1.hostportRxCsumOffloadEn = false;
    enet_cpsw1.txDmaChannel[0].$name = "ENET_DMA_TX_CH0";
    enet_cpsw1.rxDmaChannel[0].$name = "ENET_DMA_RX_CH0";
    enet_cpsw1.rxDmaChannel[0].macAddrCount = 2;
    enet_cpsw1.pinmux[0].$name = "ENET_CPSW_PINMUX0";
    enet_cpsw1.pinmux[0].MDIO.$assign = "MDIO";
    enet_cpsw1.pinmux[0].MDIO.MDIO_MDIO.$assign = "MDIO_MDIO";
    enet_cpsw1.pinmux[0].MDIO.MDIO_MDC.$assign = "MDIO_MDC";
    enet_cpsw1.pinmux[0].RGMII1.$assign = "RGMII1";
    enet_cpsw1.pinmux[0].RGMII2.$assign = "RGMII2";
    enet_cpsw1.netifInstance.create(1);
    enet_cpsw1.netifInstance[0].$name = "NETIF_INST_ID0";

    /**
    * 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.
    */
    enet_cpsw1.pinmux[0].RGMII1.RD0.$suggestSolution = "RGMII1_RD0";
    enet_cpsw1.pinmux[0].RGMII1.RD1.$suggestSolution = "RGMII1_RD1";
    enet_cpsw1.pinmux[0].RGMII1.RD2.$suggestSolution = "RGMII1_RD2";
    enet_cpsw1.pinmux[0].RGMII1.RD3.$suggestSolution = "RGMII1_RD3";
    enet_cpsw1.pinmux[0].RGMII1.RX_CTL.$suggestSolution = "RGMII1_RX_CTL";
    enet_cpsw1.pinmux[0].RGMII1.RXC.$suggestSolution = "RGMII1_RXC";
    enet_cpsw1.pinmux[0].RGMII1.TD0.$suggestSolution = "RGMII1_TD0";
    enet_cpsw1.pinmux[0].RGMII1.TD1.$suggestSolution = "RGMII1_TD1";
    enet_cpsw1.pinmux[0].RGMII1.TD2.$suggestSolution = "RGMII1_TD2";
    enet_cpsw1.pinmux[0].RGMII1.TD3.$suggestSolution = "RGMII1_TD3";
    enet_cpsw1.pinmux[0].RGMII1.TX_CTL.$suggestSolution = "RGMII1_TX_CTL";
    enet_cpsw1.pinmux[0].RGMII1.TXC.$suggestSolution = "RGMII1_TXC";
    enet_cpsw1.pinmux[0].RGMII2.RD0.$suggestSolution = "PR0_PRU0_GPIO0";
    enet_cpsw1.pinmux[0].RGMII2.RD1.$suggestSolution = "PR0_PRU0_GPIO1";
    enet_cpsw1.pinmux[0].RGMII2.RD2.$suggestSolution = "PR0_PRU0_GPIO2";
    enet_cpsw1.pinmux[0].RGMII2.RD3.$suggestSolution = "PR0_PRU0_GPIO3";
    enet_cpsw1.pinmux[0].RGMII2.RX_CTL.$suggestSolution = "PR0_PRU0_GPIO4";
    enet_cpsw1.pinmux[0].RGMII2.RXC.$suggestSolution = "PR0_PRU0_GPIO6";
    enet_cpsw1.pinmux[0].RGMII2.TD0.$suggestSolution = "PR0_PRU0_GPIO11";
    enet_cpsw1.pinmux[0].RGMII2.TD1.$suggestSolution = "PR0_PRU0_GPIO12";
    enet_cpsw1.pinmux[0].RGMII2.TD2.$suggestSolution = "PR0_PRU0_GPIO13";
    enet_cpsw1.pinmux[0].RGMII2.TD3.$suggestSolution = "PR0_PRU0_GPIO14";
    enet_cpsw1.pinmux[0].RGMII2.TX_CTL.$suggestSolution = "PR0_PRU0_GPIO15";
    enet_cpsw1.pinmux[0].RGMII2.TXC.$suggestSolution = "PR0_PRU0_GPIO16";

  • Hi Ajit,

    Yes, as expected, the issue seems to be with the CPDMA descriptor memory.

    One quick workaround you can try is, take the example.syscfg from the UDP IGMP Server standalone example and paste it in your empty project core-0 example.

    Then atleast we can be sure the UDP server can work. Over this then add any changed you need in core-0 project, else in core-1 project configure SPI.

    Regards,
    Shaunak

  • Thanks Shaunak!

    I have adjusted the memory allocation and it has resolved the issue.

    Now to I am trying to send data from Core 0 to Core 1. Can you please tell me if there are any examples or internet links that I can refer to get started.?

    I need to understand meaning APIs used in IPC communication.

  • Hi Ajit,

    I have adjusted the memory allocation and it has resolved the issue.

    Glad to hear that.

    Now to I am trying to send data from Core 0 to Core 1. Can you please tell me if there are any examples or internet links that I can refer to get started.?

    You can use IPC (Inter process communiaction) or have a shared memory and have mechanisms like spinlock.

    You can refer the following SDK examples: examples/drivers/ipc/* . All the examples in this folder show the IPC working in different ways.

    Example links:

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/EXAMPLES_DRIVERS_IPC_NOTIFY_ECHO.html

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/EXAMPLES_DRIVERS_IPC_RPMESSAGE_ECHO.html

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/EXAMPLES_DRIVERS_IPC_SAFEIPC_ECHO.html

    software-dl.ti.com/.../EXAMPLES_DRIVERS_IPC_SPINLOCK_SHAREDMEM.html

    API guide for IPC: 

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/DRIVERS_IPC_NOTIFY_PAGE.html

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/DRIVERS_IPC_RPMESSAGE_PAGE.html

    Regards,

    Shaunak