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.

EVMK2H: How to confgurate IPC 3.x MessageQ to support communicate both ARM <-> DSP and DSP <-> DSP?



Hi experts,

We are trying to use IPC on an EVMK2H board to communicate between ARM and DSPs
and also between DSPs.

I know there are examples seperately for these two cases. One is for ARM and DSP communication; the other is for DSP and DSP communication.

But IPC MessageQ configuration for these two cases are different. For example,

In case 1: ARM and DSP

MessageQ.SetupTransportProxy = VirtioSetup;

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

In case 2: DSP and DSP

MessageQ.SetupTransportProxy = TransportShmSetup;

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

If we want to use IPC MessageQ to do communicate both between ARM and DSP, also betweens DSPs. How to configurate MessageQ Transport? Thanks

 

Tony

  • Tony,

    There are some IPC_3.x documents and lab manuals mentioned here. This will be useful.

    http://processors.wiki.ti.com/images/6/69/IPC_Training_2_21.pdf

    http://processors.wiki.ti.com/images/a/a4/IPC_Lab_1_Hello.pdf
    http://processors.wiki.ti.com/images/5/5e/IPC_Lab_2_MessageQ.pdf
    http://processors.wiki.ti.com/images/1/19/IPC_Lab_3_Scalability.pdf

  • Hi pubesh,

    Thanks for your info.

    I have reviewed these documents, they doen't suitable for Keystone2. 

    For example, in IPC_Training_2_21.pdf, MessageQ module uses the below transport method for actual message delivery.

    •TransportShm – slowest, largest data footprint, most robust (default)
    •TransportShmCirc – medium, fixed length transport buffer
    •TransportShmNotify – fastest, may cause sender to busy wait

    But in fact, for EVMK2H, we use VirtioSetup for MessageQ transport between ARM and DSP.

    Another example in  IPC_Training_2_21.pdf, we must call Ipc_start() to use IPC.

    But in fact, there in NO Ipc_start() in image_processing demo codes.

    Is there other example to show how to do IPC MessageQ communication between ARM and DSP , and between DSP and DSP at  the time?

    Tony

     

  • Tony,

    The IPC in this context is MessageQ based IPC between ARM to DSP . This transport is based on rpmsg for communication between ARM and DSPs, and a proprietary shared memory protocol for communication between
    DSPs. MessageQ is a reliable control path for inter-processor communication. See reference to details at
    Control_path_IPC.

    The demo application uses a IPC benchmark application MessageQBench. Please see details at IPC_BenchMarking.

    http://processors.wiki.ti.com/index.php/IPC_BenchMarking

  • Tony,

    I hope, you have refered the MessageQBench and Image processing example? Is this helpful for your implementation like ARM to DSP and DSP to DSP communication using IPC. You can comeback if you need further discussion on this. Otherwise, try to close this thread. This discussion of thread can helpful for future readers, If you verified this thread.

  • Hi Pubesh,

    I build MessageQBench and test it.
    There is a dual_transports.c in the example, demonstrating transportRpmsg and transportShm coexistence. So I use dual_transports.xe66 to and MessageQBench to verify.
    But unfortunately, the example doesn't work. I am not sure what's wrong.

    #mpmcl reset dsp0
    #mpmcl load dsp0 dual_transports.xe66
    #mpmcl run dsp0
    #MessageQBench
    Using numLoops: 1000; payloadSize: 8, procId : 1
    Entered MessageQApp_execute
    Local MessageQId: 0x1
    Error in MessageQ_open [-6]
    Leaving MessageQApp_execute
    # cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
    3 Resource entries at 0x800000
    main: MultiProc id: 1
    registering rpmsg-proto service on 61 with HOST

    It looks like DSP doesn't create IPC messageQ. Why?

    Tony
  • Tony,

    What the status on you side, is there any update? I cann't setup to test this in my side. I will try to give technical suggestion based on your status now.

  • Hi Pubsh,

    There is still no progress now.

    I find the below descriptions from IPC_Users_Guide.pdf.  I need the example or test case to know how to implement it exactly.

    In a multi-processor system, MessageQ communicates with other processors via
    ti.sdo.ipc.interfaces.IMessageQTransport instances. There can be up to two IMessageQTransport
    instances for each processor to which communication is desired. One can be a normal-priority transport
    and the other for handling high-priority messages. This is done via the priority parameter in the transport
    create() function. If there is only one register to a remote processor (either normal or high), all messages
    go via that transport.

    BTW, you said that you cann't setup to test in your side. What's wrong? Maybe I can help.

     

    Tony

  • Tony,
    There is no test example code to refer you. To get the useful info for IPC3.x in the following wiki,
    http://processors.wiki.ti.com/index.php/IPC_3.x_FAQ
    http://processors.wiki.ti.com/index.php/IPC_3.x
    http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Developing_Transports#IPC