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.

Cannot invoke RPE_create API in DVRRDK

Hi,

    I am now coding the DSP xDM algorithm for C674x Core in DM8168.  The DVRRDK4.0 is being used.  By using the RPE framework, I managed to integrate my xDM algorithm and invoke it on ARM side.  By reading the AAC codec functions in DVRRDK carefully, I tried to make a standalone project for my xDM algorithm test by rewrite some makefiles.  In other words,  I don't want to modify the demos for achieving my goal by rebuilding the whole DVRRDK.

    I have used the RPE in EZSDK before.  This RPE packages contains some RPE examples which seems to be effective and handy.  However, such examples are absent in the DVRRDK.  So, I made my own RPE example project.

    Now, I could successfully compile and build the project.  And yet when I try to call "Rpe_create()", the EVM8168 hangs and some error logs are posted to the serial terminal (These logs display on the serial terminal ONLY):

[module] vpss probe done.
[module] ti81xxfb probe done.
HDMI W1 rev 2.0
HDMI CEC Spec version 1.2
I2C No Ack

HDMI failed to read E-EDID
Unable to handle kernel paging request at virtual address d0cd3fdc
pgd = cb744000
[d0cd3fdc] *pgd=8bc0c011, *pte=00000000, *ppte=00000000
Internal error: Oops: 7 [#1]
last sysfs file: /sys/bus/platform/drivers/TI81XX_HDMI/uevent
Modules linked in: ti81xxhdmi ti81xxfb vpss osa_kermod syslink
CPU: 0    Not tainted  (2.6.37 #1)
PC is at SharedRegion_getSRPtr+0x5c/0xf0 [syslink]
LR is at SharedRegion_getSRPtr+0x34/0xf0 [syslink]
pc : [<bf0242ec>]    lr : [<bf0242c4>]    psr: 20000013
sp : cbfb5e78  ip : 00000000  fp : cbfb5e94
r10: becdbb4c  r9 : cbfb4000  r8 : 00000000
r7 : 00000233  r6 : becdbb4c  r5 : 0000ffff  r4 : d5b1f000
r3 : bf07e150  r2 : 0023ffdc  r1 : d0a94000  r0 : d0cd3fdc
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5387d  Table: 8b744019  DAC: 00000015
Process Naro_RPE.xv5T (pid: 563, stack limit = 0xcbfb42e8)
Stack: (0xcbfb5e78 to 0xcbfb6000)
5e60:                                                       0000ffff bf01b99c
5e80: d5b1f000 cbf18100 cbfb5efc cbfb5e98 bf04cfc0 bf02429c c018f35a becdbb4c
5ea0: 40080000 00000084 4021a3fc 0005d430 becdbb6c 402fd000 c008f468 c01bc880
5ec0: cbfb5f04 cbfb5ed0 c03a3db8 c008f464 c00f6970 c008f7b4 cc544400 00000004
5ee0: becdbb4c 00000004 00000000 00000000 cbfb5f74 cbfb5f00 c00d8fd8 bf04ce48
5f00: c0041298 c03a3c5c 00000000 00000000 cbd55000 0000000f cbdfe288 00000002
5f20: cc535000 00000000 cbfb4000 00000000 cbfb5f6c cbfb5f40 c00cb92c c00f676c
5f40: 00000000 cbdfe280 0000000f 00000000 cbf18100 becdbb4c c018f35a 00000004
5f60: 00000000 cbfb4000 cbfb5fa4 cbfb5f78 c00d90a4 c00d8b14 00000001 00000001
5f80: 00000003 000657b0 402fd000 00008d84 00000036 c004b568 00000000 cbfb5fa8
5fa0: c004b3c0 c00d9058 000657b0 402fd000 00000004 c018f35a becdbb4c 00000004
5fc0: 000657b0 402fd000 00008d84 00000036 00000000 00000000 4008a000 becdbb34
5fe0: 00000000 becdbb18 00043d90 402941cc 20000010 00000004 00000000 00000000
Backtrace:
[<bf024290>] (SharedRegion_getSRPtr+0x0/0xf0 [syslink]) from [<bf04cfc0>] (MessageQDrv_ioctl+0x184/0x848 [sys                                                                                                  link])
 r5:cbf18100 r4:d5b1f000
[<bf04ce3c>] (MessageQDrv_ioctl+0x0/0x848 [syslink]) from [<c00d8fd8>] (do_vfs_ioctl+0x4d0/0x544)
[<c00d8b08>] (do_vfs_ioctl+0x0/0x544) from [<c00d90a4>] (sys_ioctl+0x58/0x7c)
 r9:cbfb4000 r8:00000000 r7:00000004 r6:c018f35a r5:becdbb4c
r4:cbf18100
[<c00d904c>] (sys_ioctl+0x0/0x7c) from [<c004b3c0>] (ret_fast_syscall+0x0/0x30)
 r8:c004b568 r7:00000036 r6:00008d84 r5:402fd000 r4:000657b0
Code: e3a02024 e5931008 e0020592 e0810002 (e7912002)
---[ end trace a161af9780c55daf ]---

I tried my best to trace this error and finally find that the system hangs at the "Message_alloc()" function in rpe_client.c.  The function seems to be declared and implemented in "MessageQ.c" in the syslink package.  However, there are two identical MessageQ.c in syslink package, one for "knl" and another for "usr".  I added some "printf()" lines in both of them and hoped to get some more information, but I failed -- no more output.

    It is very likely that the program never gets into the "Message_alloc()" and loses its way.  Yet, I don't know what to do.

    Could you give me a hand or some tips that related to this issue?

Naroah

Nov/21/2013

  • Pls check the following:

    1.Are you doing Syslink_setup in your application

    2. If you are using DVR RDK do you have build define DSP_RPE_AUDIO_ENABLE enabled ?

    3. Put print in system_ipc_msgq_register_rpe_msgq_heap in file system_ipc_msgq.c and confirm MessageQ_registerHeap for RPE was successfule and RPE is using the same heapID as what is registered.

    4. If you are using DVR RDK ensure System_init() completed successfully before invoking any RPE functions

  • Hi Badri,

        Thank you for your reply.  I find them informative.  And I have these tips checked:

        1. Yes, I do use the SysLink_Setup() in a function named "System_procInit()".

        2.  I am using DVRRDK now, and the AAC audio codec demos run perfectly with the RPE framework.  However, I want to make a standalone RPE project and evaluate the validity and the performance of my xDM algorithm in such an ARM--RPE--DSP(xDM) scenario.

       3.  Now, I realize that I didn't build the "syslink" and update "syslink.ko" in the NFS of EVM8168.  By redoing these procedure, I finally find the system hangs when "MessageQDrv_ioctl()" was invoked.

      4.  Sorry for my ignorance, I don't know where the System_init() is and what it is for.  Isn't it enough to run scripts like "init.sh" and "load.sh"?


       I would like to try to build my RPE example project again.

       I am sincerely looking forward to your reply.


    Naroah

    Nov/21/2013


  • Hi Badri,

         I have double checked my program and made a comparation with the demo in DVRRDK.  It seems that an calling for System_init() is necessary before you try to create the RPE.  And yet I also find it is very hard to make a standalone project for testing the RPE from scratch because of the fussy dependencies.  Therefore, I try to modified the demo directly and cut off some uncessary parts in DVRRDK demo.

         However, the performance of my algorithm in DVRRDK RPEis not as good as that in EZSDK.  I would like to post another thread for this issue.

         Thank you for your generous help.  I have your reply verified.

    Naroah

    Nov/22/2013