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.

[IPC][SYS/BIOS]Questions about IPC on TDA4

Hi all,

I have the following questions about IPC  on SYS/BIOS:

  1. What are the meanings of these macros: A72_LINUX_OS_IPC_ATTACH and A72_LINUX_OS in examples?
  2. Could RPMessage_announce be called before RPMessage_getRemoteEndPt?
  3. I use SD Boot Mode to boot Linux on A72, then lauch J721E_EVM.ccxml. I can connect C66xx_0, but fail to connect C66xx_1.

Could anyone help us?

  • Hi Lance,

    #1 What are the meanings of these macros: A72_LINUX_OS_IPC_ATTACH and A72_LINUX_OS in examples?

    This macro is used if A72 is running Linux or not.  If A72 is running Linux, then VRing buffer is used from resource table.

    #2 Could RPMessage_announce be called before RPMessage_getRemoteEndPt?

    Yes.  RPMessage_announce should be called after RPMessage_init() function. This will let other cores know that current core is alive.

    Then we should call  RPMessage_getRemoteEndPt - this is blocking call, and will block until the desired core is alive.

    #3 I use SD Boot Mode to boot Linux on A72, then lauch J721E_EVM.ccxml. I can connect C66xx_0, but fail to connect C66xx_1.

    You should be able to connect both C66x. Can you connect C66x_1 in no-boot mode after running the lunch.js ccs script from sciclient?

  • Hi Santosh,

    #1 When A72_LINUX_OS_IPC_ATTACH is defined, we must call Ipc_isRemoteReady to wait for A72 ready and then init the VRing?

    #2 I called RPMessage_announce on C66_0, and then called RPMessage_getRemoteEndPt in C66_1 to get the endpoint of C66_0, I failed and the thread was blocked there. But if I called RPMessage_getRemoteEndPt in C66_1 first and then called RPMessage_announce on C66_0, C66_1 will get the endpoint of C66_0 successfully. So I thought RPMessage_announce will send an event to the waiting target, if the target is not waiting, the event will discard?

    #3 I can connect both C66x_0 and C66x_1 in no-boot mode. But I can not connect C66x_1 in SD Boot Mode.

  • Hi Lance,

    #1, Yes, that is correct sequence. VRing init is done internally inside the ipc/lld library. From the application side, you just need to have resource-table populated correctly. ipc/lld library picks the Vring buffer address from resource-table. It is done inside VirtIo_init() function. Please refer to echo_test example. 

    #2

    On both cores, C66x1, C66x2, you should do RPMessage_announce function call first, then do RPMessage_getRemoteEndPt. with other coreId. Both of the cores should get unblocked.

    #3

    Is this custom bootloader you wrote or you are using stock bootloader from release ?  do you have /lib/firmware/j7-c66_1-fw in root filesystem?

  • #3

    yes, I have /lib/firmware/j7-c66_1-fw in root filesystem. When I try to connect C66xx_1, CCS says:

    I can run vision_app_tidl_avp2, so I think both C66xx are alive.

  • Lance,

    Can you interrupt the boot sequence, and at boot prompt print the environment variable.

    Can you check if you have something like this?

    rproc_fw_binaries=3 /lib/firmware/j7-main-r5f0_1-fw 4 /lib/firmware/j7-main-r5f1_0-fw 6 /lib/firmware/j7-c66_0-fw 7 /lib/firmware/j7-c66_1-fw 8 /lib/firmware/j7-c71_0-fw

    Also, can you check the boot log if it is booting ok all cores?