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.

TDA4VM: IPC communication between A72 and C7x

Part Number: TDA4VM

Tool/software:

Hi TI Team,

We created a wrapper code for ipc send and rcv in A72 and C7x.

While testing the wrapper between A72 and C7x cores, we observe a scenario where we are sharing image data from A72 to C7x and in C7x we do some processing and sending back just an acknowledgement (flag - true/false)

we are testing for 50 frames

we observe that out of 50 frames, randomly ~for 10frames we are seeing huge spike in profiling figures when we call ipc send from c7x to ipc rcv in a72 (around 1.3ms) in general it takes ~45us

we are not sure what might be the problem

task which does processing and send ack via our wrapper api in C7x is set to priority 31

in A72, linux application is set to scheduler policy as FIFO with priority 99

any pointers will be helpful

 

Regards 

Gowtham

  • Hello Gowtham,

    We created a wrapper code for ipc send and rcv in A72 and C7x.

    While testing the wrapper between A72 and C7x cores, we observe a scenario where we are sharing image data from A72 to C7x and in C7x we do some processing and sending back just an acknowledgement (flag - true/false)

    we are testing for 50 frames

    we observe that out of 50 frames, randomly ~for 10frames we are seeing huge spike in profiling figures when we call ipc send from c7x to ipc rcv in a72 (around 1.3ms) in general it takes ~45us

    Is this size less than 496 bytes ? Could you explain more about the wrapper ?

    Regards

    Tarun Mukesh

  • Hi,

    Yes, the total size is less that 496 bytes(1 frame size is less than that)

    We are creating a common wrapper for ipc (ti_rpmsg_char and ipc lld )

    IPC_init() -> will call rpmsg_char_init() and rpmsg_char_open() to open channel

    IPC_send() ->  will send the data from a72 using the same channel to C71x.

    IPC_recv() -> will wait for ack from c7x.

    in C71x side

    RTOS_init() -> will create a rcv thread and a handle(rcvhandle) to recv data using RPMessage_create()

    RTOS_RECV() -> will recv using RPMessage_recv() with the same handle(rcvhandle) that is created in RTOS_init()

    do some processing 

    Generate a flag and send back (flag - true/false).

    RTOS_SEND() -> will use the same handle(rcvhandle) and send back the data to A72

    we are passing 50 frames from A72 one after another,

    For some 30 frames per frame average, we are getting 600micro_sec(A72 send -> C71 recv -> process data -> c71 send ) + 50 micro_secs(C71 send to A72 recv).

    For some 20 frames per frame average, we are getting 600micro_sec(A72 send -> C71 recv -> process data -> c71 send ) + 1.3 milli secs(C71 send to A72 recv).

    we kept the priority as mentioned.

    Only these threads are running in both the cores, can you help us on this?

  • Hello,

    You can see IPC performance number in URL

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

    I am not why you are getting each time different numbers.

    Even if you run rpmsg_char_simple between A72 and C7x, it is printing on console the ping pong time.

    Regards

    Tarun Mukesh